From 761883a622a103d28c67442fd2e7e2b72aa6ccce Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Sat, 25 Oct 2025 19:05:52 +0200 Subject: [PATCH 01/87] add nbstripout pre-commit rule --- .pre-commit-config.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f331c47..8a753d5 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -65,3 +65,9 @@ repos: # rev: v2.2.5 # hooks: # - id: codespell + +- repo: https://github.com/kynan/nbstripout + rev: 0.8.1 + hooks: + - id: nbstripout + args: [--extra-keys=metadata.kernelspec metadata.language_info] From f01c4951860642933a63d8458708cee6557b8f09 Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Sat, 25 Oct 2025 22:34:01 +0200 Subject: [PATCH 02/87] Add ChainableArray class, 28 new mapping functions and numpy ufunc registration --- LICENSE.txt | 2 +- pyproject.toml | 7 + src/pyamapping/__init__.py | 78 ++- src/pyamapping/mappings.py | 1052 +++++++++++++++++++++++++++++++++++- 4 files changed, 1114 insertions(+), 25 deletions(-) diff --git a/LICENSE.txt b/LICENSE.txt index a1a87e4..f31a526 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2023 Dennis Reinsch +Copyright (c) 2023-2025 Thomas Hermann and Dennis Reinsch Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/pyproject.toml b/pyproject.toml index 89a5bed..19cf8da 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,3 +7,10 @@ build-backend = "setuptools.build_meta" # For smarter version schemes and other configuration options, # check out https://github.com/pypa/setuptools_scm version_scheme = "no-guess-dev" + +[tool.ruff] +line-length = 88 +lint.select = ["D"] + +[tool.ruff.lint.pydocstyle] +convention = "numpy" diff --git a/src/pyamapping/__init__.py b/src/pyamapping/__init__.py index 0ae280d..e696760 100644 --- a/src/pyamapping/__init__.py +++ b/src/pyamapping/__init__.py @@ -16,32 +16,96 @@ del version, PackageNotFoundError -from pyamapping.mappings import ( +from pyamapping.mappings import ( # some synonyms; the class and helper functions + ChainableArray, amp_to_db, ampdb, + bilin, + chain, clip, cps_to_midi, + cps_to_octave, cpsmidi, + curvelin, db_to_amp, dbamp, + distort, + ecdf, + ecdf_to_lin, + fermi, + fold, + gain, hz_to_mel, + interp, + interp_spline, + lcurve, + lin_to_ecdf, + lincurve, + linexp, linlin, + linlog, + linpoly, + linspace, mel_to_hz, midi_to_cps, + midi_to_ratio, midicps, + norm_peak, + norm_rms, + normalize, + octave_to_cps, + ratio_to_midi, + register_chain_fn, + remove_dc, + scurve, + softclip, + wrap, ) __all__ = [ "amp_to_db", - "ampdb", + "bilin", "clip", "cps_to_midi", - "cpsmidi", + "cps_to_octave", + "curvelin", "db_to_amp", - "dbamp", - "hz_to_mel", + "distort", + "ecdf_to_lin", + "ecdf", + "fermi", + "fold", + "gain", + "interp_spline", + "interp", + "lcurve", + "lin_to_ecdf", + "lincurve", + "linexp", "linlin", - "mel_to_hz", + "linlog", + "linpoly", + "linspace", "midi_to_cps", + "midi_to_ratio", + "norm_peak", + "norm_rms", + "normalize", + "octave_to_cps", + "ratio_to_midi", + "remove_dc", + "scurve", + "softclip", + "wrap", + "mel_to_hz", + "hz_to_mel", + # some synonyms + "ampdb", + "cpsmidi", + "dbamp", "midicps", -] + # class and helper functions + "ChainableArray", + "chain", + "register_chain_fn", +] # type: ignore diff --git a/src/pyamapping/mappings.py b/src/pyamapping/mappings.py index 4b665f1..d78575f 100644 --- a/src/pyamapping/mappings.py +++ b/src/pyamapping/mappings.py @@ -1,18 +1,22 @@ -"""Collection of audio related mapping functions""" -from typing import Optional, Union +"""Collection of audio related mapping functions.""" + +from typing import Any, Callable, List, Optional, TypeVar, Union import numpy as np +from numpy.typing import ArrayLike + +NDArrayType = TypeVar("NDArrayType", bound=np.ndarray) def linlin( - value: Union[float, np.ndarray], + value: Union[float, ArrayLike], x1: float, x2: float, y1: float, y2: float, clip: Optional[str] = None, ) -> Union[float, np.ndarray]: - """Map value linearly so that [x1, x2] is mapped to [y1, y2] + """Map value linearly so that [x1, x2] is mapped to [y1, y2]. linlin is implemented in analogy to the SC3 linlin, yet this function extrapolates by default. @@ -21,7 +25,7 @@ def linlin( Parameters ---------- - value : float or np.ndarray + value : float or np.ndarray (ArrayLike) value(s) to be mapped x1 : float source value 1 @@ -54,16 +58,382 @@ def linlin( return np.minimum(np.maximum(z, y1), y2) +def linexp( + value: Union[float, ArrayLike], + x1: float, + x2: float, + y1: float, + y2: float, + clip: Optional[str] = None, +) -> Union[float, np.ndarray]: + """Map value exponentially so that [x1, x2] is mapped to [y1, y2]. + + linexp is implemented in analogy to the SC3 linexp, yet this + function extrapolates by default. + A frequently used invocation is with x1 < x2, i.e. thinking + of them as a range [x1,x2] + + Parameters + ---------- + value : float or np.ndarray (ArrayLike) + value(s) to be mapped + x1 : float + source value 1 + x2 : float + source value 2 + y1 : float + destination value to be reached for value == x1 + y2 : float + destination value to be reached for value == x2 + clip: None or string + None extrapolates, "min" or "max" clip at floor resp. ceiling + of the destination range, any other value defaults to "minmax", + i.e. it clips on both sides. + + Returns + ------- + float or np.ndarray + the mapping result + """ + z = np.exp((value - x1) / (x2 - x1) * (np.log(y2) - np.log(y1)) + np.log(y1)) + if clip is None: + return z + if y1 > y2: + x1, x2, y1, y2 = x2, x1, y2, y1 + if clip == "max": + return np.minimum(z, y2) + elif clip == "min": + return np.maximum(z, y1) + else: # imply clip to be "minmax" + return np.minimum(np.maximum(z, y1), y2) + + +def linlog( + value: Union[float, ArrayLike], + x1: float, + x2: float, + y1: float, + y2: float, + clip: Optional[str] = None, +) -> Union[float, np.ndarray]: + """Map value logarithmically so that [x1, x2] is mapped to [y1, y2]. + + linlog is implemented in analogy to the SC3 linlog, yet this + function extrapolates by default. + A frequently used invocation is with x1 < x2, i.e. thinking + of them as a range [x1,x2] + + Parameters + ---------- + value : float or np.ndarray (ArrayLike) + value(s) to be mapped + x1 : float + source value 1 + x2 : float + source value 2 + y1 : float + destination value to be reached for value == x1 + y2 : float + destination value to be reached for value == x2 + clip: None or string + None extrapolates, "min" or "max" clip at floor resp. ceiling + of the destination range, any other value defaults to "minmax", + i.e. it clips on both sides. + + Returns + ------- + float or np.ndarray + the mapping result + """ + z = np.log((value - x1) / (x2 - x1) * (np.exp(y2) - np.exp(y1)) + np.exp(y1)) + if clip is None: + return z + if y1 > y2: + x1, x2, y1, y2 = x2, x1, y2, y1 + if clip == "max": + return np.minimum(z, y2) + elif clip == "min": + return np.maximum(z, y1) + else: # imply clip to be "minmax" + return np.minimum(np.maximum(z, y1), y2) + + +def lincurve( + x: Union[float, ArrayLike], + x1: float, + x2: float, + y1: float = -1.0, + y2: float = 1.0, + curve: float = -2.0, + clip: Optional[str] = None, +) -> Union[float, np.ndarray]: + """Map value exponentially so that [x1, x2] is mapped to [y1, y2]. + + lincurve is implemented in analogy to the SC3 lincurve, yet this + function extrapolates by default. + A frequently used invocation is with x1 < x2, + i.e. thinking of them as a range [x1, x2] + x1 is mapped to y1. Use y2 < y1 for polarity inversion, i.e. curve = -curve + returns y1 + (y2 - y1) / + (1.0 - exp(curve)) * (1 - exp(curve) ** ((x - x1) / (x2 - x1))) + yoffset + yrange * (this goes from 0 =(1-grow**0) to (1-grow**1) + + Parameters + ---------- + value : float or np.ndarray (ArrayLike) + value(s) to be mapped + x1 : float + source value 1 + x2 : float + source value 2 + y1 : float + destination value to be reached for value == x1 + y2 : float + destination value to be reached for value == x2 + curve : float + specification of the curvature. TBA + clip: None or string + None extrapolates, "min" or "max" clip at floor resp. ceiling + of the destination range, any other value defaults to "minmax", + i.e. it clips on both sides. + + Returns + ------- + float or np.ndarray + the mapping result + """ + if abs(curve) < 0.001: + z = (x - x1) / (x2 - x1) * (y2 - y1) + y1 + else: + grow = np.exp(curve) + a = (y2 - y1) / (1.0 - grow) + b = y1 + a + z = b - a * grow ** ((x - x1) / (x2 - x1)) + + if y1 > y2: + y1, y2 = y2, y1 + if clip: + if clip == "max": + z = np.minimum(z, y2) + elif clip == "min": + z = np.maximum(z, y1) + else: # imply clip to be "minmax" + z = np.minimum(np.maximum(z, y1), y2) + return z + + +def curvelin( + x: Union[float, ArrayLike], + x1: float, + x2: float, + y1: float = -1.0, + y2: float = 1.0, + curve: float = -2.0, + clip: Optional[str] = None, +) -> Union[float, np.ndarray]: + """Map (assumedly exponentially curved) x from [x1, x2] linearly to [y1, y2]. + + This is done by applying a curve parameter as in sc3. the input range can include 0, + different from explin a clipping is performed according to the clip argument. + + curvelin is implemented in analogy to the SC3 curvelin, yet extrapolates by default. + A frequently used invocation is with x1 y2: + y1, y2 = y2, y1 + if clip: + if clip == "max": + z = np.minimum(z, y2) + elif clip == "min": + z = np.maximum(z, y1) + else: # imply clip to be "minmax" + z = np.minimum(np.maximum(z, y1), y2) + return z + + +def linpoly( + x: Union[float, ArrayLike], + xmax: float = 1.0, + y1: float = -1.0, + y2: float = 1.0, + curve: float = 2.0, + clip: Optional[str] = None, +) -> Union[float, np.ndarray]: + """Map x between [-xmax, xmax] to [y1, y2] using a polynomial mapping. + + The mapping is y1 + (y2 - y1) * (1 + (x/xmax)**order) / 2 + where order = 1 + curve if curve>0 else (1 - 1 / (1 + curve)) + + + Parameters + ---------- + x (Union[float, np.typing.ArrayLike]): values to be mapped + xmax (float): source scale, defaults to 1.0 + y1 (float, optional): target range low value, Defaults to -1.0. + y2 (float, optional): target ragne 2nd value. Defaults to 1.0. + curve (float, optional): defaults to 2 + if curve > 0: polynomial order is curve + 1 + if curve < 0: polynomial order is 1 - 1/curve + clip (Optional[str], optional): clip flags (min / max / minmax). + Defaults to None. + + Returns + ------- + Union[float, np.ndarray]: mapping result for x + """ + order = 1 + curve if curve >= 0 else (1 / (1 - curve)) + z = y1 + (y2 - y1) * (1 + np.sign(x) * (np.abs(x) / xmax) ** order) / 2 + if clip is None: + return z + if y1 > y2: + y1, y2 = y2, y1 + if clip == "max": + return np.minimum(z, y2) + elif clip == "min": + return np.maximum(z, y1) + else: # imply clip to be "minmax" + return np.minimum(np.maximum(z, y1), y2) + + +def interp_spline( + x: Union[float, ArrayLike], + xc: Union[List[float], np.ndarray], + yc: Union[List[float], np.ndarray] = [-1, 0, 1], + k=1, + **kwarg, +) -> Union[float, np.ndarray]: + """Apply scipy.interpolate.interp_spline interpolation. + + applicable for piecewise linear mappings, with extrapolation. + interp_spline is slower than numpy.interp() for smaller data sets (e.g. <5000) + however, it allows extrapolation. + + Parameters + ---------- + x : float or np.ndarray (ArrayLike) + value(s) to be mapped + xc : Union[List[float], np.ndarray] + x coordinates of line segment function, must be sorted + yc : Union[List[float], np.ndarray] + y coordinates of line segment function, requires len(yc)==len(xc) + k : interpolation order (see interp_spline, defaults to 1 = linear) + + Returns + ------- + float or np.ndarray + the mapping result, extrapolating beyond bounds + + """ + from scipy.interpolate import make_interp_spline + + spl = make_interp_spline(xc, yc, k=k) # k=1: linear + return spl(x) if isinstance(x, ChainableArray) else chain(spl(x)) + + +def interp( + x: Union[float, ArrayLike], + xc: Union[List[float], np.ndarray], + yc: Union[List[float], np.ndarray] = [-1, 0, 1], + **kwarg, +) -> Union[float, np.ndarray]: + """Apply numpy.interp interpolation. + + applicable for piecewise linear mappings, with extrapolation + interp is faster than interp_spline() for small x (e.g. <5000), + but it clips by default. + + Parameters + ---------- + x : float or np.ndarray (ArrayLike) + value(s) to be mapped + xc : Union[List[float], np.ndarray] + x coordinates of line segment function, must be sorted + yc : Union[List[float], np.ndarray] + y coordinates of line segment function, requires len(yc)==len(xc) + + Returns + ------- + float or np.ndarray + the mapping result, clipping beyond bounds + + """ + return np.interp(x, xc, yc, **kwarg) + + +def bilin( + x: Union[float, ArrayLike], + xcenter: float, + xmin: float, + xmax: float, + ycenter: float = 0, + ymin: float = -1, + ymax: float = 1, +) -> Union[float, np.ndarray]: + """Bilin compatibility function. implements sc3 bilin function. + + This maps x in 2 linear segments as given by coordinates. + + Parameter: + --------- + x (Union[float, np.typing.ArrayLike]): _description_ + xcenter (float): _description_ + xmin (float): _description_ + xmax (float): _description_ + ycenter (float): _description_ + ymin (float): _description_ + ymax (float): _description_ + + Returns + ------- + Union[float, np.ndarray], + the mapping result + """ + return interp_spline(x, [xmin, xcenter, xmax], [ymin, ycenter, ymax]) + + def clip( - value: Union[float, np.ndarray], + value: Union[float, ArrayLike], minimum: float = -float("inf"), maximum: float = float("inf"), ) -> Union[float, np.ndarray]: - """Clips a value to a certain range + """Clips a value to a certain range. Parameters ---------- - value : float or np.ndarray + value : float or np.ndarray (ArrayLike) Value(s) to clip minimum : float, optional Minimum output value, by default -float("inf") @@ -75,7 +445,7 @@ def clip( float clipped value """ - if type(value) == np.ndarray: + if isinstance(value, np.ndarray): return np.maximum(np.minimum(value, maximum), minimum) else: # ToDo: check if better performance than above numpy code - if not: delete if value < minimum: @@ -86,7 +456,7 @@ def clip( def midi_to_cps(midi_note: float) -> float: - """Convert MIDI note to cycles per second + """Convert MIDI note to cycles per second. Parameters ---------- @@ -105,7 +475,7 @@ def midi_to_cps(midi_note: float) -> float: def cps_to_midi(cps: float) -> float: - """Convert cycles per second to MIDI note + """Convert cycles per second to MIDI note. Parameters ---------- @@ -123,16 +493,96 @@ def cps_to_midi(cps: float) -> float: cpsmidi = cps_to_midi +def midi_to_ratio(midi_note: float) -> float: + """Convert MIDI difference to ratio. + + Parameters + ---------- + m : float + MIDI note + + Returns + ------- + float + corresponding ratio + """ + return 2 ** (midi_note / 12.0) + + +midiratio = midi_to_ratio + + +def ratio_to_midi(ratio: float) -> float: + """Convert ratio to MIDI difference. + + Parameters + ---------- + ratio : float + ratio (e.g. of frequencies) + + Returns + ------- + float + corresponding MIDI difference + """ + return 12 * np.log2(ratio) + + +ratiomidi = ratio_to_midi + + +def cps_to_octave(cps: float) -> float: + """Convert cycles per second into decimal octaves. + + reference Middle C (i.e. MIDI 60, C_4, 261.626 Hz) yields 4 (octaves). + + Parameters + ---------- + cps : float + cycles per second + + Returns + ------- + float + octaves relative to Middle C (MIDI 60 C_4, 261.626 HZ) + """ + return np.log2(cps / 440) + 4.75 + + +cpsoct = cps_to_octave + + +def octave_to_cps(octave: float) -> float: + """Convert octaves to cps. + + reference 4.75 yields 440 Hz, i.e. 4 -> freq of Middle C (C4) + + Parameters + ---------- + octave : float + octave + + Returns + ------- + float + cycles per second + """ + return 440 * 2 ** (octave - 4.75) + + +octcps = octave_to_cps + + def hz_to_mel(hz): - """Convert a value in Hertz to Mels + """Convert a value in Hertz to Mels. Parameters ---------- hz : number of array value in Hz, can be an array - Returns: - -------- + Returns + ------- _ : number of array value in Mels, same type as the input. """ @@ -140,15 +590,15 @@ def hz_to_mel(hz): def mel_to_hz(mel): - """Convert a value in Hertz to Mels + """Convert a value in Hertz to Mels. Parameters ---------- hz : number of array value in Hz, can be an array - Returns: - -------- + Returns + ------- _ : number of array value in Mels, same type as the input. """ @@ -191,3 +641,571 @@ def amp_to_db(amp: float) -> float: ampdb = amp_to_db + + +def distort( + x: Union[float, ArrayLike], threshold: float = 1.0 +) -> Union[float, np.ndarray]: + """Apply value distortion x/(threshold + |x|). + + Parameters + ---------- + x (Union[float, np.typing.ArrayLike]): input value or array + threshold (float, optional): defaults to 1.0. + + Returns + ------- + Union[float, np.ndarray]: distorted value / array + """ + return x / (threshold + np.abs(x)) + + +def softclip( + x: Union[float, ArrayLike], threshold: float = 1.0 +) -> Union[float, np.ndarray]: + """Apply softclip distortion to x. + + This yields a perfectly linear region within [-0.5, 0.5], + outside values computed by (|x| - 0.25) / x + + Parameters + ---------- + x (Union[float, np.typing.ArrayLike]): input value or array + threshold (float, optional): defaults to 1.0. + + Returns + ------- + Union[float, np.ndarray]: softclip distorted value / array + """ + condition = np.abs(x) > 0.5 + return (np.abs(x) - 0.25) / x * condition + (1 - condition) * x + # return (np.abs(x) - 0.25)/x if np.abs(x)<0.5 else x + + +def scurve( + x: Union[float, ArrayLike], threshold: float = 1.0 +) -> Union[float, np.ndarray]: + """Map value onto an S-curve bound to [0,1]. + + Implements v * v * (3-(2*v)) mit v = x.clip(0,1) + + Parameters + ---------- + x (Union[float, np.typing.ArrayLike]): input value or array + threshold (float, optional): defaults to 1.0. + + Returns + ------- + Union[float, np.ndarray]: scurve distorted value / array + """ + v = clip(x, 0, 1) + return v**2 * (3 - 2 * v) + + +def lcurve( + x: Union[float, ArrayLike], m: float = 0.0, n: float = 1.0, tau: float = 1.0 +) -> Union[float, np.ndarray]: + """Map value or array onto an L-curve. + + Implements (1 + m * exp(-x/tau) + 1) / (1 + n * exp(-x/tau)) + - equal to fermi function with default parameters + - note that different to the sc3 implementation, tau is inside + the exp function (unclear tau placement in sc3...) + + Parameters + ---------- + x (Union[float, np.typing.ArrayLike]): input value or array + m (float, optional): numerator factor defaults to 0.0. + n (float, optional): denumerator factor defaults to 1.0. + tau (float, optional): scale constant, defaults to 1.0. + + Returns + ------- + Union[float, np.ndarray]: lcurve distorted value / array + """ + return (1 + m * np.exp(-x / tau)) / (1 + n * np.exp(-x / tau)) + + +def fermi( + x: Union[float, ArrayLike], tau: float = 1.0, mu: float = 0.0 +) -> Union[float, np.ndarray]: + """Apply fermi function to value or array. + + Implements 1 / (1 + exp(-x/tau)) + + Parameters + ---------- + x (Union[float, np.typing.ArrayLike]): input value or array + tau (float, optional): scale constant, defaults to 1.0. + + Returns + ------- + Union[float, np.ndarray]: fermi distorted value / array + """ + return 1.0 / (1 + np.exp(-(x - mu) / tau)) + + +def normalize( + x: Union[float, ArrayLike], y1: float = -1.0, y2: float = 1.0 +) -> Union[float, np.ndarray]: + """Normalize array to target range [y1, y2]. + + Linear mapping [min(x), max(x)] to [y1, y2]. Use y1 > y2 to change polarity. + + Parameters + ---------- + x (Union[float, np.typing.ArrayLike]): input value or array + y1 (float, optional): mapping target for min(x). Defaults to -1.0. + y2 (float, optional): mapping target for max(x). Defaults to 1.0. + + Returns + ------- + Union[float, np.ndarray]: normalized / scaled array + """ + x1, x2 = np.amin(x), np.amax(x) + return (x - x1) / (x2 - x1) * (y2 - y1) + y1 + + +def wrap( + x: Union[float, ArrayLike], y1: float = -1.0, y2: float = 1.0 +) -> Union[float, np.ndarray]: + """Wrap array around target range [y1, y2]. + + This implements the mapping y1 + x % (y2 - y1). + The order of y1, y2 is irrelevant. + + Parameters + ---------- + x (Union[float, np.typing.ArrayLike]): input value or array + y1 (float, optional): 1st wrap bound. Defaults to -1.0. + y2 (float, optional): 2nd wrap bound. Defaults to 1.0. + + Returns + ------- + Union[float, np.ndarray]: wraped array + """ + return y1 + x % (y2 - y1) + + +def fold( + x: Union[float, ArrayLike], y1: float = -1.0, y2: float = 1.0 +) -> Union[float, np.ndarray]: + """Fold array around target range [y1, y2]. + + This implements (np.abs((x - y2) % (2 * L) - L) + y1), + ordering bounds so that y1 < y2. + + Parameters + ---------- + x (Union[float, np.typing.ArrayLike]): input value or array + y1 (float, optional): 1st fold bound. Defaults to -1.0. + y2 (float, optional): 2nd fold bound. Defaults to 1.0. + + Returns + ------- + Union[float, np.ndarray]: folded array + """ + if y2 < y1: + y1, y2 = y2, y1 + L = y2 - y1 + return np.abs((x - y2) % (2 * L) - L) + y1 + + +def remove_dc( + x: Union[float, ArrayLike], +) -> Union[float, np.ndarray]: + """Remove DC bias. + + Parameters + ---------- + x (Union[float, np.typing.ArrayLike]): input value or array + + Returns + ------- + Union[float, np.ndarray]: normalized / scaled array + """ + return x - np.mean(x) + + +def norm_peak(x: Union[float, ArrayLike], peak=1.0): + """Normalize array so that max(abs(x)) = peak. + + Parameters + ---------- + x (Union[float, np.typing.ArrayLike]): input value or array + peak (float): target peak + + Returns + ------- + Union[float, np.ndarray]: normalized (scaled) array + """ + peak_of_x = np.max(np.abs(x)) + return (x / peak_of_x) * peak if peak_of_x != 0 else x + + +def norm_rms(x: Union[float, ArrayLike], rms=1.0): + """Normalize array so that its RMS value equals `rms`. + + Parameters + ---------- + x (Union[float, np.typing.ArrayLike]): input value or array + rms (float): target rms of array + + Returns + ------- + Union[float, np.ndarray]: rms normalized (scaled) array + """ + rms_of_x = np.sqrt(np.mean(x**2)) + return (x / rms_of_x) * rms if rms_of_x != 0 else x + + +def gain( + x: Union[float, ArrayLike], db: Optional[float] = None, amp: Optional[float] = None +): + """Apply gain, either as dB (SPL) or scalar factor amp. + + No operation done if neither argument is given, it applies both if both are given. + + Parameters + ---------- + x (Union[float, np.typing.ArrayLike]): input value or array + db (None or float): dB SPL = gain 10**(db/20), e.g. -6 dB ~ factor 0.5 + amp (None or float): gain factor + + Returns + ------- + Union[float, np.ndarray]: scaled (amplified / attenuated) array + """ + if db: + sig = x * dbamp(db) + else: + sig = x.copy() + if amp: + sig *= amp + return sig + + +def linspace( + x: Union[float, int, ArrayLike], x1: float, x2: float, endpoint: bool = True +) -> np.ndarray: + """Create np.linspace from x1 to x2 in int(x) resp len(x) steps. + + Parameters + ---------- + x (Union[float, int, ArrayLike]): length or array of which only shape is used + x1 (float): target interval one side + x2 (float): target interval other side + endpoint (bool): forwarded to np.linspace + + Returns + ------- + Union[float, np.ndarray]: array of length len(x) + (resp. int(x) if x is float) of numbers between x1 and x2 + """ + if isinstance(x, np.ndarray): + return np.linspace(x1, x2, x.shape[0], endpoint=endpoint) + else: + return np.linspace(x1, x2, int(abs(x)), endpoint=endpoint) + + +def lin_to_ecdf( + x: Union[float, ArrayLike], ref_data: np.ndarray, sorted: bool = False +) -> Union[float, np.ndarray]: + """Map data using empiric cumulative distribution function as mapping. + + This meann feature values are mapped to quantiles. + if sorted==True: ref_data is regarded as sorted, speeding repeated invocations. + + Parameters + ---------- + x (Union[float, np.typing.ArrayLike]): value or array to map + ref_data (np.ndarray): reference data used to create ecdf. + sorted (bool): whether ref_data is sorted. + Defaults to False, i.e. by default data will be sorted. + + Returns + ------- + np.ndarray: resulting mapped data + """ + if sorted: + return interp( + x, ref_data, np.arange(1, len(ref_data) + 1) / float(len(ref_data)) + ) + else: + return interp(x, *ecdf(ref_data)) + + +def ecdf_to_lin( + x: Union[float, ArrayLike], ref_data: np.ndarray, sorted: bool = False +) -> Union[float, np.ndarray]: + """Map data using inverse empiric cumulative distribution function. + + This means that quantiles are mapped back to estimated feature values. + - if ref_data is omitted, x is used instead + - if sorted==True: ref_data is regarded as sorted, speeding repeated invocations + + Parameters + ---------- + x (Union[float, np.typing.ArrayLike]): value or array to map + ref_data (np.ndarray): reference data used to create ecdf. + sorted (bool): whether ref_data is sorted. + Defaults to False, i.e. data will be sorted. + + Returns + ------- + np.ndarray: resulting mapped data + """ + if sorted: + return interp( + x, np.arange(1, len(ref_data) + 1) / float(len(ref_data)), ref_data + ) + else: + xc, yc = ecdf(ref_data) + return interp(x, yc, xc) + + +# create subclass of numpy.ndarray + + +class ChainableArray(np.ndarray): + """subclass for simpler numpy mapping by chaining syntax.""" + + def __new__(cls, input_array, *args, **kwargs): + """Create new instance.""" + obj = np.asarray(input_array).view(cls) + return obj + + def __array_finalize__(self, obj): + """Finalize array.""" + if obj is None: + return + + def to_array(self): + """Convert self to np.ndarray.""" + return np.array(self) + + def to_asig(self, sr=44100): + """Convert self to pya.Asig.""" + from pya import Asig + + return Asig(self, sr=sr) + + def plot(self, *args, **kwargs): + """Plot self via matplotlib.""" + import matplotlib.pyplot as plt + + sr = kwargs.pop("sr", None) + if sr: + xs = np.arange(0, self.shape[0]) / sr + plt.plot(xs, self, *args, **kwargs) + plt.xlabel("time [s]") + else: + xs = kwargs.pop("xs", None) + if xs is not None: + plt.plot(xs, self, *args, **kwargs) + else: + plt.plot(self, *args, **kwargs) + + return self + + def mapvec( + self: NDArrayType, fn: Callable[..., Any], *args: Any, **kwargs: Any + ) -> NDArrayType: + """Map fn on self by using np.vectorize(). + + Parameters + ---------- + self (NDArrayType): array to map + fn (Callable[..., Any]): function to call on each element + + Returns + ------- + NDArrayType: mapping result as ChainableArray + """ + return np.vectorize(fn)(self, *args, **kwargs) + + def map( + self: NDArrayType, fn: Callable[..., Any], *args: Any, **kwargs: Any + ) -> NDArrayType: + """Apply function fn directly to self; on fail suggest to use mapvec(). + + Parameters + ---------- + self (np.ndarray): array used as input of fn + fn (Callable[..., Any]): mapping function + args and kwargs are passed on to fn + + Raises + ------ + TypeError: if fn fails to operate on np.ndarray as first argument. + mapvec() is then proposed as alternative. + + Returns + ------- + ChainableArray: the mapping result as ChainableArray + """ + try: + return chain(fn(self, *args, **kwargs)) + except (TypeError, ValueError, AttributeError) as e: + raise TypeError( + f"Function {fn.__name__} does not support NumPy arrays directly. " + "Use .mapvec() instead for np.vectorize elementwise mapping." + ) from e + + def __getattr__(self, name: str) -> Callable: + """Dynamically handle method calls.""" + if name.startswith("dynamic_"): + return lambda *args: f"Called {name} with {args}" + raise AttributeError( + f"'{self.__class__.__name__}' object has no attribute '{name}'" + ) + + +def ecdf( + x: np.ndarray, selection: slice = slice(None, None, None) +) -> tuple[np.ndarray, np.ndarray]: + """Empirical cumulative distribution function. + + Usable for handcrafted mapping functions such as with using ChainableArray.interp() + + Example 1: (compute once - use many) + >>> myecdf = ecdf(data); chain(otherdata).interp(*ecdf) + + Example 2: (compute and map in one go) + >>> chain(otherdata).interp(*ecdf(data)) + + Example 3: (use a sparser (more smooth) ecdf mapping) + >>> chain(otherdata).interp(*ecdf(data, np.s_[::5])) + + Parameters + ---------- + x (np.ndarray): array + selection (slice): slice applied to x and y coordinates of the resulting tuple + + Returns + ------- + tuple[np.ndarray, np.ndarray]: sorted array of x and y coordinates of the ecdf + """ + xs = np.sort(x) + ys = np.arange(1, len(xs) + 1) / float(len(xs)) + return xs[selection], ys[selection] + + +def register_numpy_ufunc(fn: np.ufunc, name: Union[None, str] = None) -> None: + """Register numpy ufunc with one or two ndarray arguments.""" + nin = fn.nin + if nin == 1: + + def method1(self, *args, **kwargs): + return ChainableArray(fn(self, *args, **kwargs)) + + method = method1 + + elif nin == 2: + + def method2(self, other, *args, **kwargs): + return ChainableArray(fn(self, other, *args, **kwargs)) + + method = method2 + + else: + print("warning: np.ufunc fn has nin not in [1,2]") + + def default_method(x): + return None + + method = default_method + + method.__name__ = fn.__name__ if not name else name + method.__doc__ = ( + f"{method.__name__} implements numpy.{method.__name__}" + + f"function for ChainableArray. See help(np.{fn.__name__})" + ) + + setattr(ChainableArray, method.__name__, method) + + +def register_chain_fn(fn: Callable, name: Union[None, str] = None) -> None: + """Register function fn for chaining, optionally under given name.""" + + def method(self, *args, **kwargs): + return ChainableArray(fn(self, *args, **kwargs)) + + method.__name__ = fn.__name__ if not name else name + method.__doc__ = ( + f"{method.__name__} implements the {method.__name__}" + + "operation for ChainableArray. Argument: np.ndarray" + ) + + setattr(ChainableArray, method.__name__, method) + + +def _list_numpy_ufuncs(): + """Return all numpy ufuncs with 1 or 2 ndarray arguments.""" + ufunc_list = [] + for attr_name in dir(np): # all attributes in numpy + attr = getattr(np, attr_name) + if isinstance(attr, np.ufunc): + if attr.nin <= 2: + ufunc_list.append(attr) + else: + print(attr, attr.nin) + return ufunc_list + + +# create class methods for numpy functions and pyamapping functions +for fn in _list_numpy_ufuncs(): # numpy_mapping_functions: + name = "abs" if fn.__name__ == "absolute" else None + register_numpy_ufunc(fn, name) + +# register some non-ufunc which nontheless should workd +register_chain_fn(np.angle, "angle") +ChainableArray.magnitude = ChainableArray.abs + +pyamapping_functions = [ + amp_to_db, + bilin, + clip, + cps_to_midi, + cps_to_octave, + curvelin, + db_to_amp, + distort, + ecdf_to_lin, + ecdf, + fermi, + fold, + gain, + hz_to_mel, + interp_spline, + interp, + lcurve, + lin_to_ecdf, + lincurve, + linexp, + linlin, + linlog, + linpoly, + linspace, + mel_to_hz, + midi_to_cps, + midi_to_ratio, + norm_peak, + norm_rms, + normalize, + octave_to_cps, + ratio_to_midi, + remove_dc, + scurve, + softclip, + wrap, +] + +for fn in pyamapping_functions: + register_chain_fn(fn, name) + + +def chain(input_array: ArrayLike) -> ChainableArray: + """Turn np.ndarray into ChainableArray.""" + # ToDo: check difference to input_array.view(ChainableArray) + return ChainableArray(input_array) From 956153330ea15c2e33e0c19f6fde8993acc0722e Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Sat, 25 Oct 2025 22:46:08 +0200 Subject: [PATCH 03/87] add pyamapping example notebook --- notebooks/pyamapping-examples.ipynb | 246 ++++++++++++++++++++++++++++ 1 file changed, 246 insertions(+) create mode 100644 notebooks/pyamapping-examples.ipynb diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb new file mode 100644 index 0000000..3119c72 --- /dev/null +++ b/notebooks/pyamapping-examples.ipynb @@ -0,0 +1,246 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "0", + "metadata": {}, + "source": [ + "# pyamapping - mapping functions for audio computing (and beyond)\n", + "\n", + "by Thomas Hermann and Dennis Reinsch, 2023++\n", + "\n", + "## Introduction \n", + "\n", + "### Background / History\n", + "\n", + "- pyamapping bundles frequently used mapping functions for audio computing\n", + "- the earliest functions were reimplementations of ampdb, dbamp, midicps, cpsmidi, linlin, coded in analogy to SuperCollider3 functions to be used within the sc3nb package. (coded by TH)\n", + "- later, when I started pya, the same functions were needed, yet importing sc3nb would have caused unwanted dependencies, so we created pyamapping as a very lean package that both sc3nb and pya depend on (created by DR)\n", + "- now in 2025 pyamapping grows strongly (additions by TH) \n", + " - firstly by adding many mapping functions available in sc3 which were beforehand not copied\n", + " - secondly, by introducing ChainableArray, a class that wraps numpy.ndarrays, allowing to daisy chain operations on numpy arrays, similar to how we offer it for pya.\n", + "- This notebook introduces the available mapping functions with examples.\n", + "\n", + "### Overview\n", + "\n", + "**pyamapping** offers a set of mapping functions often used \n", + "\n", + "- in the context of sound and computer music \n", + "- in the context of auditory display and sonification (e.g. parameter mapping sonifications)\n", + "- ...\n", + "\n", + "A source of inspiration is librosa and Supercollider3. This package reimplements them and adds mappings used in the interactive sonification stack (cf. ), including the following packages that all make use of pyamapping:\n", + "\n", + "- **sc3nb** - sc3 interface for Python and Jupyter notebooks\n", + "- **pya** - the python Audio Coding Package\n", + "- **mesonic** - a middleware for sonification and auditory display \n", + "- **sonecules** - a high-level class library for sonification and auditory display\n", + "\n", + "**Chainable numpy arrays**\n", + "\n", + "Method chaining offers concise syntax and proved helpful in pya.\n", + "Numpy offers method chaining only for few functions.\n", + "This package extends method chaining \n", + "\n", + "- by inheriting the class `ChainableArray` from `numpy.ndarray`\n", + "- by adding wrappers to enable a method chain syntax for most `ufuncs`\n", + "- by providing a general `map()` method for direct vectorized mapping\n", + "- by providing helper functions to vectorize Python functions into methods\n", + "\n", + "Furthermore it offers some convenience functions, e.g.\n", + "\n", + "- to plot arrays (optionally as signal with given sample rate)\n", + "\n", + "We hope that pyamapping will help to write signal transformations and manipulations in a more concise, compact and readible manner." + ] + }, + { + "cell_type": "markdown", + "id": "1", + "metadata": {}, + "source": [ + "**Imports and Headers**\n", + "\n", + "- as pyamapping is a long name, importing as `pam` is a suggested abbreviation \n", + "- matplotlib and pprint imports are merely for showing example output" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import matplotlib as mpl\n", + "import matplotlib.pyplot as plt\n", + "from pprint import pprint\n", + "import pyamapping as pam\n", + "\n", + "mpl.rcParams['figure.figsize'] = (9,2.5)" + ] + }, + { + "cell_type": "markdown", + "id": "3", + "metadata": {}, + "source": [ + "## Available pyamapping functions - Overview\n", + "\n", + "- in import of pyamapping, wrappers are automatically created for numpy ufuncs.\n", + " - later versions may have them created verbatim to enable code completion\n", + "- the following code simply lists those numpy functions plus special dedicated/ new pyamapping functions that do not have their origin in numpy" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4", + "metadata": {}, + "outputs": [], + "source": [ + "from pyamapping.mappings import _list_numpy_ufuncs, pyamapping_functions\n", + "\n", + "# print (i) a compact list of all unary and binary numpy functions \n", + "# and (ii) all pyamapping functions\n", + "u_lists = [[], []]\n", + "\n", + "for ufunc in _list_numpy_ufuncs():\n", + " u_lists[ufunc.nin - 1].append(ufunc.__name__)\n", + "\n", + "# compact list numpy functions\n", + "for i, li in enumerate(u_lists):\n", + " print(f\"\\n=== numpy functions with {i+1} argument ===\")\n", + " pprint(li, compact=True, width=80)\n", + "\n", + "# compact list of pyamapping functions\n", + "li = [el.__name__ for el in pyamapping_functions]\n", + "print(f\"\\n=== pyamapping functions: ===\")\n", + "pprint(li, compact=True, width=80)" + ] + }, + { + "cell_type": "markdown", + "id": "5", + "metadata": {}, + "source": [ + "## pyamapping - Demonstration and Examples" + ] + }, + { + "cell_type": "markdown", + "id": "6", + "metadata": {}, + "source": [ + "### ChainableArray - Basics" + ] + }, + { + "cell_type": "markdown", + "id": "7", + "metadata": {}, + "source": [ + "Any numpy array can be turned into a chainable array by using the `ChainableArray` class defined in `pyamapping`.\n", + "- the chain() function provides a shortcut, making this construction shorter.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8", + "metadata": {}, + "outputs": [], + "source": [ + "from pyamapping import ChainableArray, chain\n", + "\n", + "# some data\n", + "data = np.random.random(100)\n", + "\n", + "# create ChainableArray\n", + "dch = ChainableArray(data)\n", + "\n", + "# the same can be obtained shorter by\n", + "dch = chain(data)" + ] + }, + { + "cell_type": "markdown", + "id": "9", + "metadata": {}, + "source": [ + "ChainableArray offer the following methods:\n", + "\n", + "- `to_array` - back to numpy ndarray\n", + "- `to_asig` - convert into pya.Asig\n", + "- `plot` - plot signal(s) as time series\n", + "- `mapvec` - map function on self by using numpy.vectorize\n", + "- `map` - apply function directly to the array itself\n", + "\n", + "Here is a quick demonstration:\n", + "\n", + "- let us\n", + " - map $x \\to (5x)^2 + 0.1$, \n", + " - plot as signal assuming sampling rate 100 Hz, \n", + " - convert into decibel, \n", + " - turn that into an audio signal (i.e. pya.Asig) \n", + " - and plot it in the same figure created above.\n", + " - finally transform the ChainableArray back to a regular numpy.ndarray.\n", + "\n", + "Using pyamapping, the code is both shorter and more concise than the above description:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "10", + "metadata": {}, + "outputs": [], + "source": [ + "dch2 = dch.map(lambda x: (5*x)**2+0.1).plot(sr=100, color=\"r\").mapvec(pam.amp_to_db)\n", + "a1 = dch2.to_asig(sr=100).plot(color=\"c\", lw=0.8)\n", + "\n", + "# conversion back to numpy array is rarely needed but if...\n", + "dd = dch2.to_array()\n", + "type(dd)" + ] + }, + { + "cell_type": "markdown", + "id": "11", + "metadata": {}, + "source": [ + "ChainableArray is a recent addition to pyamapping, yet introduced here as it makes demonstrations of mapping functions extremely readable..." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "12", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "isonpy13", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.13.2" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From e3f866c50ea8b29144cfb92d87afa22f4f0f262c Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Mon, 27 Oct 2025 17:28:53 +0100 Subject: [PATCH 04/87] add linlin() examples --- notebooks/pyamapping-examples.ipynb | 98 +++++++++++++++++++++++------ 1 file changed, 78 insertions(+), 20 deletions(-) diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index 3119c72..a6e3c72 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -77,6 +77,7 @@ "import matplotlib.pyplot as plt\n", "from pprint import pprint\n", "import pyamapping as pam\n", + "from pyamapping import chain\n", "\n", "mpl.rcParams['figure.figsize'] = (9,2.5)" ] @@ -213,34 +214,91 @@ "ChainableArray is a recent addition to pyamapping, yet introduced here as it makes demonstrations of mapping functions extremely readable..." ] }, + { + "cell_type": "markdown", + "id": "12", + "metadata": {}, + "source": [ + "## Tour of Mapping Functions: Functions from SuperCollider3 and librosa" + ] + }, + { + "cell_type": "markdown", + "id": "13", + "metadata": {}, + "source": [ + "### `linlin`\n", + "\n", + "- linlin is implemented in analogy to the SC3 linlin\n", + "- `linlin(v, x1, x2, y1, y2)` maps values v (scalar or arraylike) affine linearly so that [x1, x2] is mapped to [y1, y2].\n", + "- note that this linlin function extrapolates by default\n", + "- clipping can be controlled via the clip argument (values None (default), \"min\", \"max\", or anything else for \"minmax\")\n", + "- A frequently used invocation is with `x1 < x2`, i.e. thinking of them as a range $[x_1, x_2]$" + ] + }, { "cell_type": "code", "execution_count": null, - "id": "12", + "id": "14", + "metadata": {}, + "outputs": [], + "source": [ + "pam.linlin(7, 0, 10, 100, 300)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "15", + "metadata": {}, + "outputs": [], + "source": [ + "pam.linlin(7, 0, 5, 100, 300, \"max\") # clip result to maximum input range" + ] + }, + { + "cell_type": "markdown", + "id": "16", + "metadata": {}, + "source": [ + "- ChainableArray.linlin uses self as input v.\n", + "- Here are some mapping examples and plots" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "17", + "metadata": {}, + "outputs": [], + "source": [ + "vch = chain(np.linspace(0, 1, 100)) # turn data into ChainableArray\n", + "vch.plot(\"k-\", label=\"input data\") # plot input data\n", + "vch.linlin(0, 1, 1, 3).plot(\"r-\", label=\"linlin\")\n", + "vch.linlin(0.2, 0.7, -2, 2, \"minmix\").plot(\"g-\", label=\"linlin with clip\")\n", + "plt.legend(); plt.grid()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "18", "metadata": {}, "outputs": [], + "source": [ + "# plot mapping function (output vs input)\n", + "plt.figure(figsize=(3,1.5)); plt.grid()\n", + "plt.plot(vch, vch.linlin(0.25, 0.75, -1, 1, \"minmax\"));" + ] + }, + { + "cell_type": "markdown", + "id": "19", + "metadata": {}, "source": [] } ], - "metadata": { - "kernelspec": { - "display_name": "isonpy13", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.13.2" - } - }, + "metadata": {}, "nbformat": 4, "nbformat_minor": 5 } From dae8f724462850fbf8d2c30df14a3c97bee0f01f Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Mon, 27 Oct 2025 20:21:30 +0100 Subject: [PATCH 05/87] improve linlin example --- notebooks/pyamapping-examples.ipynb | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index a6e3c72..d4013ff 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -219,7 +219,9 @@ "id": "12", "metadata": {}, "source": [ - "## Tour of Mapping Functions: Functions from SuperCollider3 and librosa" + "## Tour of Mapping Functions: Functions from SuperCollider3 and librosa\n", + "\n", + "For the following functions, we use `xs` to refer to the input array and `ys` for the outputs." ] }, { @@ -230,10 +232,11 @@ "### `linlin`\n", "\n", "- linlin is implemented in analogy to the SC3 linlin\n", - "- `linlin(v, x1, x2, y1, y2)` maps values v (scalar or arraylike) affine linearly so that [x1, x2] is mapped to [y1, y2].\n", + "- `linlin(v, x1, x2, y1, y2)` maps values v (scalar or arraylike) affine linearly so that [x1, x2] is mapped to [y1, y2]:\n", + " $$ z = y_1 + \\frac{v - x_1}{x_2 - x_1} \\cdot (y_2 - y_1) $$\n", "- note that this linlin function extrapolates by default\n", "- clipping can be controlled via the clip argument (values None (default), \"min\", \"max\", or anything else for \"minmax\")\n", - "- A frequently used invocation is with `x1 < x2`, i.e. thinking of them as a range $[x_1, x_2]$" + "- A frequently used invocation is with $x_1 < x_2$, i.e. thinking of them as a range $[x_1, x_2]$" ] }, { @@ -261,7 +264,7 @@ "id": "16", "metadata": {}, "source": [ - "- ChainableArray.linlin uses self as input v.\n", + "- ChainableArray.linlin uses self as input.\n", "- Here are some mapping examples and plots" ] }, @@ -272,10 +275,10 @@ "metadata": {}, "outputs": [], "source": [ - "vch = chain(np.linspace(0, 1, 100)) # turn data into ChainableArray\n", - "vch.plot(\"k-\", label=\"input data\") # plot input data\n", - "vch.linlin(0, 1, 1, 3).plot(\"r-\", label=\"linlin\")\n", - "vch.linlin(0.2, 0.7, -2, 2, \"minmix\").plot(\"g-\", label=\"linlin with clip\")\n", + "xs = chain(np.linspace(0, 1, 100)) # turn data into ChainableArray\n", + "xs.plot(\"k-\", label=\"input data\") # plot input data\n", + "xs.linlin(0, 1, 1, 3).plot(\"r-\", label=\"linlin\")\n", + "xs.linlin(0.2, 0.7, -2, 2, \"minmix\").plot(\"g-\", label=\"linlin with clip\")\n", "plt.legend(); plt.grid()" ] }, @@ -287,8 +290,8 @@ "outputs": [], "source": [ "# plot mapping function (output vs input)\n", - "plt.figure(figsize=(3,1.5)); plt.grid()\n", - "plt.plot(vch, vch.linlin(0.25, 0.75, -1, 1, \"minmax\"));" + "ys = xs.linlin(0.25, 0.75, -1, 1, \"minmax\")\n", + "plt.figure(figsize=(3, 1.5)); plt.plot(xs, ys); plt.grid(); " ] }, { @@ -298,7 +301,11 @@ "source": [] } ], - "metadata": {}, + "metadata": { + "language_info": { + "name": "python" + } + }, "nbformat": 4, "nbformat_minor": 5 } From f87bb01e8367be70ffbdb54593d942d10127de5b Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Mon, 27 Oct 2025 20:38:42 +0100 Subject: [PATCH 06/87] add linexp() example --- notebooks/pyamapping-examples.ipynb | 67 ++++++++++++++++++++++++++++- 1 file changed, 66 insertions(+), 1 deletion(-) diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index d4013ff..aa24f34 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -298,7 +298,72 @@ "cell_type": "markdown", "id": "19", "metadata": {}, - "source": [] + "source": [ + "### `linexp`\n", + "\n", + "- linexp is implemented in analogy to the SC3 linexp\n", + "- `linexp(v, x1, x2, y1, y2)` maps values v (scalar or arraylike) exponentially so that [x1, x2] is mapped to [y1, y2]:\n", + " $$ z = y_1 \\text{exp}\\left(\\frac{v - x_1}{x_2 - x_1}\\cdot (\\log(y_2) - \\log(y_1))\\right)\n", + "- note that this linexp function extrapolates by default\n", + "- clipping can be controlled via the clip argument (values None (default), \"min\", \"max\", or anything else for \"minmax\")\n", + "- A frequently used invocation is with $x_1 < x_2$, i.e. thinking of them as a range $[x_1, x_2]$" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "20", + "metadata": {}, + "outputs": [], + "source": [ + "pam.linexp(5, 1, 8, 2, 256)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "21", + "metadata": {}, + "outputs": [], + "source": [ + "pam.linexp(7, 0, 5, 100, 300, \"max\") # clip result to maximum input range" + ] + }, + { + "cell_type": "markdown", + "id": "22", + "metadata": {}, + "source": [ + "- ChainableArray.linexp uses self as input.\n", + "- Here are some mapping examples and plots" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "23", + "metadata": {}, + "outputs": [], + "source": [ + "xs = chain(np.linspace(0, 1, 100)) # turn data into ChainableArray\n", + "xs.plot(\"k-\", label=\"input data\") # plot input data\n", + "xs.linexp(0, 1, 0.01, 1).plot(\"r-\", label=\"linlin\")\n", + "xs.linexp(0.2, 0.7, 2, 0.2, \"minmix\").plot(\"g-\", label=\"linlin with clip\")\n", + "plt.legend(); plt.grid()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "24", + "metadata": {}, + "outputs": [], + "source": [ + "# plot linexp mapping function (output vs input)\n", + "ys = xs.linexp(0.25, 0.85, 0.2, 2)\n", + "plt.figure(figsize=(3, 1.5)); plt.plot(xs, ys); plt.grid(); \n", + "plt.plot(xs, ys); " + ] } ], "metadata": { From 6b3637a5412b2daf6ef83a001ace959392cdcf5b Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Mon, 27 Oct 2025 21:44:45 +0100 Subject: [PATCH 07/87] refactor linlog to explin --- src/pyamapping/__init__.py | 4 ++-- src/pyamapping/mappings.py | 9 +++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/pyamapping/__init__.py b/src/pyamapping/__init__.py index e696760..e37069d 100644 --- a/src/pyamapping/__init__.py +++ b/src/pyamapping/__init__.py @@ -32,6 +32,7 @@ distort, ecdf, ecdf_to_lin, + explin, fermi, fold, gain, @@ -43,7 +44,6 @@ lincurve, linexp, linlin, - linlog, linpoly, linspace, mel_to_hz, @@ -73,6 +73,7 @@ "distort", "ecdf_to_lin", "ecdf", + "explin", "fermi", "fold", "gain", @@ -83,7 +84,6 @@ "lincurve", "linexp", "linlin", - "linlog", "linpoly", "linspace", "midi_to_cps", diff --git a/src/pyamapping/mappings.py b/src/pyamapping/mappings.py index d78575f..13995e5 100644 --- a/src/pyamapping/mappings.py +++ b/src/pyamapping/mappings.py @@ -108,7 +108,7 @@ def linexp( return np.minimum(np.maximum(z, y1), y2) -def linlog( +def explin( value: Union[float, ArrayLike], x1: float, x2: float, @@ -118,7 +118,7 @@ def linlog( ) -> Union[float, np.ndarray]: """Map value logarithmically so that [x1, x2] is mapped to [y1, y2]. - linlog is implemented in analogy to the SC3 linlog, yet this + explin is implemented in analogy to the SC3 explin, yet this function extrapolates by default. A frequently used invocation is with x1 < x2, i.e. thinking of them as a range [x1,x2] @@ -145,7 +145,8 @@ def linlog( float or np.ndarray the mapping result """ - z = np.log((value - x1) / (x2 - x1) * (np.exp(y2) - np.exp(y1)) + np.exp(y1)) + z = np.log(value / x1) / np.log(x2 / x1) * (y2 - y1) + y1 + if clip is None: return z if y1 > y2: @@ -1173,6 +1174,7 @@ def _list_numpy_ufuncs(): distort, ecdf_to_lin, ecdf, + explin, fermi, fold, gain, @@ -1184,7 +1186,6 @@ def _list_numpy_ufuncs(): lincurve, linexp, linlin, - linlog, linpoly, linspace, mel_to_hz, From 09851be3a3bac092875e5298fd8958f06572d875 Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Mon, 27 Oct 2025 21:46:23 +0100 Subject: [PATCH 08/87] add explin() example --- notebooks/pyamapping-examples.ipynb | 82 +++++++++++++++++++++++++++-- 1 file changed, 79 insertions(+), 3 deletions(-) diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index aa24f34..f160020 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -79,7 +79,7 @@ "import pyamapping as pam\n", "from pyamapping import chain\n", "\n", - "mpl.rcParams['figure.figsize'] = (9,2.5)" + "mpl.rcParams['figure.figsize'] = (9, 2.5)" ] }, { @@ -347,8 +347,8 @@ "source": [ "xs = chain(np.linspace(0, 1, 100)) # turn data into ChainableArray\n", "xs.plot(\"k-\", label=\"input data\") # plot input data\n", - "xs.linexp(0, 1, 0.01, 1).plot(\"r-\", label=\"linlin\")\n", - "xs.linexp(0.2, 0.7, 2, 0.2, \"minmix\").plot(\"g-\", label=\"linlin with clip\")\n", + "xs.linexp(0, 1, 0.01, 1).plot(\"r-\", label=\"linexp\")\n", + "xs.linexp(0.2, 0.7, 2, 0.2, \"minmix\").plot(\"g-\", label=\"linexp with clip\")\n", "plt.legend(); plt.grid()" ] }, @@ -364,6 +364,82 @@ "plt.figure(figsize=(3, 1.5)); plt.plot(xs, ys); plt.grid(); \n", "plt.plot(xs, ys); " ] + }, + { + "cell_type": "markdown", + "id": "25", + "metadata": {}, + "source": [ + "### `explin`\n", + "\n", + "- explin is implemented in analogy to the SC3 function\n", + "- `explin(v, x1, x2, y1, y2)` maps values v (scalar or arraylike) logarithmically so that [x1, x2] is mapped to [y1, y2]:\n", + "\n", + " $$ y = y_1 + (y_2-y_1) \\frac{\\log(v / x_1)}{\\log(x_2 / x_1)} $$\n", + "\n", + "- note that this `explin` function extrapolates by default\n", + "- clipping can be controlled via the clip argument (values None (default), `\"min\"`, `\"max\"`, or anything else for `\"minmax\"`)\n", + "- A frequently used invocation is with $x_1 < x_2$, i.e. thinking of them as a range $[x_1, x_2]$" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "26", + "metadata": {}, + "outputs": [], + "source": [ + "# example: unmap a frequency to midi note with explin\n", + "f = 220 * 2**(-5/12) # 5 semitones higher than 220 Hz\n", + "pam.explin(f, 220, 440, 0, 12)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "27", + "metadata": {}, + "outputs": [], + "source": [ + "# example: unmap amplitude to level in decibel\n", + "pam.explin(0.01, 0.001, 1.0, -30, 0, \"max\") # clip result to maximum input range" + ] + }, + { + "cell_type": "markdown", + "id": "28", + "metadata": {}, + "source": [ + "- ChainableArray.explin uses self as input.\n", + "- Here are some mapping examples and plots" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "29", + "metadata": {}, + "outputs": [], + "source": [ + "xs = chain(np.linspace(0.01, 1, 100)) # turn data into ChainableArray\n", + "xs.plot(\"k-\", label=\"input data\") # plot input data\n", + "xs.explin(0.1, 1, 0, 1).plot(\"r-\", label=\"explin\")\n", + "xs.explin(0.1, 0.5, 1, 0, \"minmix\").plot(\"g-\", label=\"explin with clip\")\n", + "plt.legend(); plt.grid()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "30", + "metadata": {}, + "outputs": [], + "source": [ + "# plot linexp mapping function (output vs input)\n", + "ys = xs.explin(0.01, 1, 0, 20)\n", + "plt.figure(figsize=(3, 1.5)); plt.plot(xs, ys); plt.grid(); \n", + "plt.plot(xs, ys); " + ] } ], "metadata": { From c0482aa4dccd599351f1b0b40a6fcb5aa0c6f7a1 Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Thu, 30 Oct 2025 14:43:14 +0100 Subject: [PATCH 09/87] improve lincurve mapping function --- src/pyamapping/mappings.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/pyamapping/mappings.py b/src/pyamapping/mappings.py index 13995e5..fb6bfd8 100644 --- a/src/pyamapping/mappings.py +++ b/src/pyamapping/mappings.py @@ -206,10 +206,9 @@ def lincurve( if abs(curve) < 0.001: z = (x - x1) / (x2 - x1) * (y2 - y1) + y1 else: - grow = np.exp(curve) - a = (y2 - y1) / (1.0 - grow) - b = y1 + a - z = b - a * grow ** ((x - x1) / (x2 - x1)) + z = y1 + (y2 - y1) / (1.0 - np.exp(curve)) * ( + 1 - np.exp((curve * (x - x1) / (x2 - x1))) + ) if y1 > y2: y1, y2 = y2, y1 From 30e7c9da1928132eb315ba1eee0c87beb739b09f Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Thu, 30 Oct 2025 14:48:39 +0100 Subject: [PATCH 10/87] add lincurve example --- notebooks/pyamapping-examples.ipynb | 71 ++++++++++++++++++++++++++--- 1 file changed, 64 insertions(+), 7 deletions(-) diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index f160020..2c8b400 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -278,7 +278,7 @@ "xs = chain(np.linspace(0, 1, 100)) # turn data into ChainableArray\n", "xs.plot(\"k-\", label=\"input data\") # plot input data\n", "xs.linlin(0, 1, 1, 3).plot(\"r-\", label=\"linlin\")\n", - "xs.linlin(0.2, 0.7, -2, 2, \"minmix\").plot(\"g-\", label=\"linlin with clip\")\n", + "xs.linlin(0.2, 0.7, -2, 2, \"minmax\").plot(\"g-\", label=\"linlin with clip\")\n", "plt.legend(); plt.grid()" ] }, @@ -389,7 +389,7 @@ "metadata": {}, "outputs": [], "source": [ - "# example: unmap a frequency to midi note with explin\n", + "# example: unmap a frequency to MIDI note with explin\n", "f = 220 * 2**(-5/12) # 5 semitones higher than 220 Hz\n", "pam.explin(f, 220, 440, 0, 12)\n" ] @@ -440,13 +440,70 @@ "plt.figure(figsize=(3, 1.5)); plt.plot(xs, ys); plt.grid(); \n", "plt.plot(xs, ys); " ] + }, + { + "cell_type": "markdown", + "id": "31", + "metadata": {}, + "source": [ + "### `lincurve`\n", + "\n", + "- lincurve is implemented in analogy to the SC3 function\n", + "- `lincurve(v, x1, x2, y1, y2, curve=-2)` maps v (scalar or arraylike) from [x1, x2] to [y1, y2] using the following function (with c=curve): \n", + "\n", + "$$ y_1 + \\frac{y_2 - y_1}{1.0 - e^c} \\left(1 - \\exp\\left(c \\frac{v - x_1}{x_2 - x_1}\\right) \\right) $$\n", + "- in contrast to `explin` (resp. `linexp`) this allows source (resp. target) range to include 0.\n", + "- note that this `lincurve` function extrapolates by default\n", + "- clipping can be controlled via the clip argument (values None (default), `\"min\"`, `\"max\"`, or anything else for `\"minmax\"`)\n", + "- A frequently used invocation is with $x_1 < x_2$, i.e. thinking of them as a range $[x_1, x_2]$" + ] + }, + { + "cell_type": "markdown", + "id": "32", + "metadata": {}, + "source": [ + "- ChainableArray.lincurve uses self as input.\n", + "- Here are some mapping examples and plots" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "33", + "metadata": {}, + "outputs": [], + "source": [ + "xs = chain(np.linspace(0, 1, 100)) # turn data into ChainableArray\n", + "xs.plot(\"k-\", label=\"input data\") # plot input data\n", + "xs.lincurve(0, 1, 0, 0.4, 5).plot(\"r-\", label=\"lincurve\")\n", + "xs.lincurve(0.2, 0.5, 1, 0, 2.5, \"minmax\").plot(\"g-\", label=\"lincurve with clip\")\n", + "plt.legend(); plt.grid()" + ] + }, + { + "cell_type": "markdown", + "id": "34", + "metadata": {}, + "source": [ + "the following plot shows how the curve parameter influences the mapping function" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "35", + "metadata": {}, + "outputs": [], + "source": [ + "xs = chain(np.linspace(0, 100, 100))\n", + "for i, curve in enumerate(range(-9, 10, 3)):\n", + " xs.lincurve(0, 100, -10, 10, curve).plot('-', label=f\"curve={curve}\")\n", + "plt.legend(fontsize=6); plt.grid();" + ] } ], - "metadata": { - "language_info": { - "name": "python" - } - }, + "metadata": {}, "nbformat": 4, "nbformat_minor": 5 } From 5b9306e79d6ab0bb7aeedeb0102f23521269a82c Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Thu, 30 Oct 2025 15:34:21 +0100 Subject: [PATCH 11/87] improve curvelin mapping function --- src/pyamapping/mappings.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/pyamapping/mappings.py b/src/pyamapping/mappings.py index fb6bfd8..b46fd56 100644 --- a/src/pyamapping/mappings.py +++ b/src/pyamapping/mappings.py @@ -267,10 +267,8 @@ def curvelin( if abs(curve) < 0.001: z = (x - x1) / (x2 - x1) * (y2 - y1) + y1 else: - grow = np.exp(curve) - a = (x2 - x1) / (1.0 - grow) - b = x1 + a - z = np.log((b - x) / a) * (y2 - y1) / curve + y1 + a = (x2 - x1) / (1.0 - np.exp(curve)) + z = np.log((x1 + a - x) / a) * (y2 - y1) / curve + y1 if y1 > y2: y1, y2 = y2, y1 @@ -1202,7 +1200,7 @@ def _list_numpy_ufuncs(): ] for fn in pyamapping_functions: - register_chain_fn(fn, name) + register_chain_fn(fn, None) def chain(input_array: ArrayLike) -> ChainableArray: From 5f24f5e35d71526be8579b73b4806078024d246d Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Thu, 30 Oct 2025 15:35:24 +0100 Subject: [PATCH 12/87] add curvelin() example --- notebooks/pyamapping-examples.ipynb | 63 +++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index 2c8b400..8087068 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -501,6 +501,69 @@ " xs.lincurve(0, 100, -10, 10, curve).plot('-', label=f\"curve={curve}\")\n", "plt.legend(fontsize=6); plt.grid();" ] + }, + { + "cell_type": "markdown", + "id": "36", + "metadata": {}, + "source": [ + "### `curvelin`\n", + "\n", + "- curvelin is implemented in analogy to the SC3 function\n", + "- `curvelin(v, x1, x2, y1, y2, curve=-2)` maps v (scalar or arraylike) from an assumed curve-exponential input range [x1, x2] to a linear output range [y1, y2] using the following function (with c=curve): \n", + "$$ f(x) = y_1 + \\frac{y_2 - y_1}{c}\\log\\left(\\frac{a + x_1 - x}{a}\\right) ~~~\\text{with}~~~ a = \\frac{x_2 - x_1}{1 - e^c}$$\n", + "\n", + "- This is the opposite transformation to `lincurve`.\n", + "- note that this `curvelin` function extrapolates by default.\n", + "- clipping can be controlled via the clip argument (values None (default), `\"min\"`, `\"max\"`, or anything else for minmax clipping.\n", + "- A frequently used invocation is with $x_1 < x_2$, i.e. thinking of them as a range $[x_1, x_2]$" + ] + }, + { + "cell_type": "markdown", + "id": "37", + "metadata": {}, + "source": [ + "- ChainableArray.curvelin uses self as input.\n", + "- Here are some mapping examples and plots\n", + "- The first shows how curvelin unmaps or reverts a lincurve warped interval when using the same curve argument." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "38", + "metadata": {}, + "outputs": [], + "source": [ + "xs = chain(np.linspace(0, 1, 100)) # turn data into ChainableArray\n", + "xs.plot(\"k-\", label=\"input data for lincurve\") # plot input data\n", + "curve = 10\n", + "ys = xs.lincurve(0, 1, 0, 0.6, curve).plot(\"r-\", label=\"lincurve output\")\n", + "xs = ys.curvelin(0, 0.6, 0, 1, curve).plot(\"b-.\", lw=3, alpha=0.5, label=\"curvelin to undo lincurve\")\n", + "plt.legend(); plt.grid()" + ] + }, + { + "cell_type": "markdown", + "id": "39", + "metadata": {}, + "source": [ + "the following plot shows how the curve parameter influences the mapping function" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "40", + "metadata": {}, + "outputs": [], + "source": [ + "xs = chain(np.linspace(0, 100, 500))\n", + "for i, curve in enumerate(range(-9, 10, 3)):\n", + " xs.curvelin(0, 100, -10, 10, curve).plot('-', label=f\"curve={curve}\")\n", + "plt.legend(fontsize=6); plt.grid();" + ] } ], "metadata": {}, From 241b14c274e3a548ccd67567bf00c0cadcb70dc8 Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Thu, 30 Oct 2025 16:18:01 +0100 Subject: [PATCH 13/87] add linpoly() example --- notebooks/pyamapping-examples.ipynb | 73 ++++++++++++++++++++++++++++- 1 file changed, 72 insertions(+), 1 deletion(-) diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index 8087068..68f4d62 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -564,9 +564,80 @@ " xs.curvelin(0, 100, -10, 10, curve).plot('-', label=f\"curve={curve}\")\n", "plt.legend(fontsize=6); plt.grid();" ] + }, + { + "cell_type": "markdown", + "id": "41", + "metadata": {}, + "source": [ + "### `linpoly`\n", + "\n", + "- linpoly has no corresponding SC3 function, it provides a polynomial mapping\n", + "- `linpoly(v, xmax, y1, y2, curve=2, clip)` maps v (scalar or arraylike) from an assumed linear input range [-xmax, xmax] to an output range [y1, y2] using the following polynomial mapping function, using a polynomial order m\n", + "\n", + "$$ m = \\left\\{\\begin{align*} 1 + \\text{curve} & ~~~\\text{if} & \\text{curve} \\ge 0\\\\\n", + " \\frac{1}{1-\\text{curve}} & ~~~\\text{else} & \n", + " \\end{align*} \\right.\n", + "$$\n", + "using the mapping function\n", + "$$ f(x) = y_1 + \\frac{y_2 - y_1}{2} \\cdot \\left(1 + \\text{sign}(x) \\left|\\frac{x}{x_{\\max}}\\right|^m\\right)$$\n", + "\n", + "- note that np.sign is used\n", + "- note that this `linpoly` function extrapolates by default.\n", + "- clipping can be controlled via the clip argument (values: None as default, `\"min\"`, `\"max\"`, or anything else for minmax clipping.)\n", + "- It can be used to provide a sensitivity magnification (or reduction) around 0, the center of the input interval." + ] + }, + { + "cell_type": "markdown", + "id": "42", + "metadata": {}, + "source": [ + "- ChainableArray.linpoly uses self as input.\n", + "- Here are some mapping examples and plots" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "43", + "metadata": {}, + "outputs": [], + "source": [ + "xs = chain(np.linspace(-3, 3, 200)) # turn data into ChainableArray\n", + "xs.plot(\"k-\", label=\"input data for linpoly\") # plot input data\n", + "xs.linpoly(3, 0, 20, curve=1).plot(\"r-\", label=\"linpoly output\")\n", + "xs.linpoly(3, 0, 20, curve=-1).plot(\"b-\", label=\"linpoly output\")\n", + "plt.legend(); plt.grid()" + ] + }, + { + "cell_type": "markdown", + "id": "44", + "metadata": {}, + "source": [ + "the following plot shows how the curve parameter influences the mapping function" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "45", + "metadata": {}, + "outputs": [], + "source": [ + "xs = chain(np.linspace(-1, 1, 200))\n", + "for i, curve in enumerate(range(-3, 3, 1)):\n", + " xs.linpoly(1, -10, 10, curve).plot('-', label=f\"curve={curve}\")\n", + "plt.legend(fontsize=6); plt.grid();" + ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "name": "python" + } + }, "nbformat": 4, "nbformat_minor": 5 } From 59aa1fce96bca167b640215de19d38f43139b124 Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Thu, 30 Oct 2025 16:38:09 +0100 Subject: [PATCH 14/87] improve structure and explanations --- notebooks/pyamapping-examples.ipynb | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index 68f4d62..58c7734 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -221,7 +221,9 @@ "source": [ "## Tour of Mapping Functions: Functions from SuperCollider3 and librosa\n", "\n", - "For the following functions, we use `xs` to refer to the input array and `ys` for the outputs." + "- The following function have been implemented in analogy to their versions in Supercollider3 resp. librosa.\n", + "- Please note that some defaults may be different, e.g. functions extrapolate by default\n", + "- For the following demonstrations, we use `xs` to refer to the input array and `ys` for the outputs." ] }, { @@ -569,6 +571,17 @@ "cell_type": "markdown", "id": "41", "metadata": {}, + "source": [ + "## Tour of Mapping Functions: additional/novel mapping functions\n", + "\n", + "- The following function are new additions (i.e. there is no counterpart in Supercollider3 resp. librosa).\n", + "- For the following demonstrations, we use `xs` to refer to the input array and `ys` for the outputs." + ] + }, + { + "cell_type": "markdown", + "id": "42", + "metadata": {}, "source": [ "### `linpoly`\n", "\n", @@ -590,7 +603,7 @@ }, { "cell_type": "markdown", - "id": "42", + "id": "43", "metadata": {}, "source": [ "- ChainableArray.linpoly uses self as input.\n", @@ -600,7 +613,7 @@ { "cell_type": "code", "execution_count": null, - "id": "43", + "id": "44", "metadata": {}, "outputs": [], "source": [ @@ -613,7 +626,7 @@ }, { "cell_type": "markdown", - "id": "44", + "id": "45", "metadata": {}, "source": [ "the following plot shows how the curve parameter influences the mapping function" @@ -622,7 +635,7 @@ { "cell_type": "code", "execution_count": null, - "id": "45", + "id": "46", "metadata": {}, "outputs": [], "source": [ @@ -633,11 +646,7 @@ ] } ], - "metadata": { - "language_info": { - "name": "python" - } - }, + "metadata": {}, "nbformat": 4, "nbformat_minor": 5 } From a433b15f0e7e24812bd7398f5215cee2a2ad3802 Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Thu, 30 Oct 2025 17:13:54 +0100 Subject: [PATCH 15/87] forward kwargs for interp_spline() --- src/pyamapping/mappings.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pyamapping/mappings.py b/src/pyamapping/mappings.py index b46fd56..2250773 100644 --- a/src/pyamapping/mappings.py +++ b/src/pyamapping/mappings.py @@ -399,6 +399,7 @@ def bilin( ycenter: float = 0, ymin: float = -1, ymax: float = 1, + **kwargs, ) -> Union[float, np.ndarray]: """Bilin compatibility function. implements sc3 bilin function. @@ -419,7 +420,7 @@ def bilin( Union[float, np.ndarray], the mapping result """ - return interp_spline(x, [xmin, xcenter, xmax], [ymin, ycenter, ymax]) + return interp_spline(x, [xmin, xcenter, xmax], [ymin, ycenter, ymax], **kwargs) def clip( From 02cbbcb79b2c3c17c1bb2bdc5b62bd3a2a1d2dc2 Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Thu, 30 Oct 2025 17:17:56 +0100 Subject: [PATCH 16/87] add bilin() example --- notebooks/pyamapping-examples.ipynb | 58 ++++++++++++++++++++++++++--- 1 file changed, 52 insertions(+), 6 deletions(-) diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index 58c7734..10d7642 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -571,6 +571,48 @@ "cell_type": "markdown", "id": "41", "metadata": {}, + "source": [ + "### `bilin`\n", + "\n", + "- bilin is implemented similar to the SC3 function, yet with an API change:\n", + "- `bilin(v, xcenter, xmin, xmax, ycenter, ymin, ymax)` maps v (scalar or arraylike) \n", + " according to two linear segments:\n", + " - [xmin, xcenter] to [ymin, ycenter] with default extrapolation beyond xmin\n", + " - [xcenter, xmax] to [ycenter, ymax] with default extrapolation beyond xmax\n", + "- this mapping is achieved using `pyamapping.interp_spline()`.\n", + "- kwargs are passed on to `interp_spline()` if needed.\n", + "- in case, no extrapolation is wanted, pyampapping.interp() offers an alternative\n", + " with a different interface." + ] + }, + { + "cell_type": "markdown", + "id": "42", + "metadata": {}, + "source": [ + "- ChainableArray.bilin uses self as input.\n", + "- Here are some mapping examples and plots" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "43", + "metadata": {}, + "outputs": [], + "source": [ + "xs = chain(np.arange(0, 100)) # turn data into ChainableArray\n", + "xs.bilin(60, 20, 80, 0, -20, 60).plot(\"b.\", ms=1, label='bilin');\n", + "for (x, y, t) in [[20, -20, \"(xmin, ymin)\"], [80, 60, \"(xmax, ymax)\"], [60, 0, \"(xcenter, ycenter)\"]]:\n", + " plt.plot([x], [y], \"ro\")\n", + " plt.text(x+1, y-5, t, fontsize=6)\n", + "plt.legend(); plt.grid()" + ] + }, + { + "cell_type": "markdown", + "id": "44", + "metadata": {}, "source": [ "## Tour of Mapping Functions: additional/novel mapping functions\n", "\n", @@ -580,7 +622,7 @@ }, { "cell_type": "markdown", - "id": "42", + "id": "45", "metadata": {}, "source": [ "### `linpoly`\n", @@ -603,7 +645,7 @@ }, { "cell_type": "markdown", - "id": "43", + "id": "46", "metadata": {}, "source": [ "- ChainableArray.linpoly uses self as input.\n", @@ -613,7 +655,7 @@ { "cell_type": "code", "execution_count": null, - "id": "44", + "id": "47", "metadata": {}, "outputs": [], "source": [ @@ -626,7 +668,7 @@ }, { "cell_type": "markdown", - "id": "45", + "id": "48", "metadata": {}, "source": [ "the following plot shows how the curve parameter influences the mapping function" @@ -635,7 +677,7 @@ { "cell_type": "code", "execution_count": null, - "id": "46", + "id": "49", "metadata": {}, "outputs": [], "source": [ @@ -646,7 +688,11 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "name": "python" + } + }, "nbformat": 4, "nbformat_minor": 5 } From 9592b2d60836f47e605e5fe92727393f3936c6cb Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Thu, 30 Oct 2025 17:43:24 +0100 Subject: [PATCH 17/87] add interp_spline() example --- notebooks/pyamapping-examples.ipynb | 39 +++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index 10d7642..28f6409 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -686,13 +686,42 @@ " xs.linpoly(1, -10, 10, curve).plot('-', label=f\"curve={curve}\")\n", "plt.legend(fontsize=6); plt.grid();" ] + }, + { + "cell_type": "markdown", + "id": "50", + "metadata": {}, + "source": [ + "### `interp_spline`\n", + "\n", + "- interp_spline provides an interface to `scipy.interpolate.make_interp_spline` for line segment interpolation.\n", + "- `interp_spline(v, xc, yc, k)` maps v (scalar or arraylike) along the spline \n", + " - defined by the input coordinates in array xc \n", + " - and corresponding output coordinates in yc\n", + " - using interpolation order k (default 1=linear)\n", + "- note that interp_spline extrapolation beyond segments.\n", + "- interp_spline is called from `bilin()`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "51", + "metadata": {}, + "outputs": [], + "source": [ + "xs = chain(np.linspace(0, 8.2, 1000)) # turn data into ChainableArray\n", + "xc = [1, 2, 5, 7, 8]\n", + "yc = [3, 1, 2, 9, 1]\n", + "plt.plot(xc, yc, \"ro\", label=\"given points\")\n", + "for k in [0, 1, 2]:\n", + " ys = xs.interp_spline(xc, yc, k=k)\n", + " plt.plot(xs,ys, label=f\"spline with k={k}\")\n", + "plt.legend(fontsize=7); plt.grid()" + ] } ], - "metadata": { - "language_info": { - "name": "python" - } - }, + "metadata": {}, "nbformat": 4, "nbformat_minor": 5 } From 19d394255ad3510543466502e07766ca8d89844b Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Thu, 30 Oct 2025 18:01:26 +0100 Subject: [PATCH 18/87] add interp() example --- notebooks/pyamapping-examples.ipynb | 46 +++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index 28f6409..af0ffe4 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -719,6 +719,52 @@ " plt.plot(xs,ys, label=f\"spline with k={k}\")\n", "plt.legend(fontsize=7); plt.grid()" ] + }, + { + "cell_type": "markdown", + "id": "52", + "metadata": {}, + "source": [ + "### `interp`\n", + "\n", + "- interp provides an interface to `np.interp` for line segment interpolation.\n", + "- `interp(v, xc, yc)` maps v (scalar or arraylike) along the sample points \n", + " - defined by the input coordinates in array xc (monotonically increasing)\n", + " - and corresponding output coordinates in yc\n", + "- note that interp clips beyond xc limits.\n", + "- interp can be used as alternative to bilin in case clipped output is needed.\n", + " - some may prefer the more tidy API with x and y values in their arrays." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "53", + "metadata": {}, + "outputs": [], + "source": [ + "xs = chain(np.linspace(0, 8.2, 1000)) # turn data into ChainableArray\n", + "xc = [1, 2, 5, 7, 8]\n", + "yc = [7, 1, 2, 9, 1]\n", + "plt.plot(xc, yc, \"ro\", ms=3, label=\"given points\")\n", + "ys = xs.interp(xc, yc)\n", + "plt.plot(xs, ys, \"b,\", label=f\"interp\")\n", + "plt.legend(fontsize=7); plt.grid()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "54", + "metadata": {}, + "outputs": [], + "source": [ + "xs = chain(np.arange(-100, 150)) # turn data into ChainableArray\n", + "# use interp if clipping is wanted (faster for small datasets)\n", + "xs.interp([-50, 50, 100],[0, 0.4, 1]).plot(\"r-.\", label=\"interp with clipping\"); \n", + "xs.bilin(50, -50, 100, 0.4, 0, 1).plot(\"b:\", label='bilin with extrapolation');\n", + "plt.legend();plt.grid();" + ] } ], "metadata": {}, From 1d058a28bab60e06ba911b44e9dd678634d18e98 Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Fri, 31 Oct 2025 17:34:49 +0100 Subject: [PATCH 19/87] add clip() example --- notebooks/pyamapping-examples.ipynb | 66 ++++++++++++++++++++++++----- 1 file changed, 56 insertions(+), 10 deletions(-) diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index af0ffe4..66c94a3 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -613,6 +613,52 @@ "cell_type": "markdown", "id": "44", "metadata": {}, + "source": [ + "### `clip`\n", + "\n", + "- clip is implemented in analogy to the SC3 clip\n", + "- `clip(value, minimum, maximum)` clips value (scalar or arraylike) to a certain range [minimum, maximum]\n", + "- default values for minium and maximum are so that no clipping occurs, i.e. specifying only minimum or maximum allows one-sided clipping." + ] + }, + { + "cell_type": "markdown", + "id": "45", + "metadata": {}, + "source": [ + "- ChainableArray.clip uses self as input.\n", + "- Here are some mapping examples and plots" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "46", + "metadata": {}, + "outputs": [], + "source": [ + "xs = chain(np.linspace(0, 1, 100)) # turn data into ChainableArray\n", + "xs.plot(\"k:\", label=\"input data\") # plot input data\n", + "xs.clip(0.2, 0.7).plot(\"r-\", label=\"linlin with clip\")\n", + "plt.legend(); plt.grid()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "47", + "metadata": {}, + "outputs": [], + "source": [ + "# plot mapping function (output vs input)\n", + "ys = xs.clip(0.25, 0.75)\n", + "plt.figure(figsize=(3, 1.5)); plt.plot(xs, ys, label=''); plt.grid(); " + ] + }, + { + "cell_type": "markdown", + "id": "48", + "metadata": {}, "source": [ "## Tour of Mapping Functions: additional/novel mapping functions\n", "\n", @@ -622,7 +668,7 @@ }, { "cell_type": "markdown", - "id": "45", + "id": "49", "metadata": {}, "source": [ "### `linpoly`\n", @@ -645,7 +691,7 @@ }, { "cell_type": "markdown", - "id": "46", + "id": "50", "metadata": {}, "source": [ "- ChainableArray.linpoly uses self as input.\n", @@ -655,7 +701,7 @@ { "cell_type": "code", "execution_count": null, - "id": "47", + "id": "51", "metadata": {}, "outputs": [], "source": [ @@ -668,7 +714,7 @@ }, { "cell_type": "markdown", - "id": "48", + "id": "52", "metadata": {}, "source": [ "the following plot shows how the curve parameter influences the mapping function" @@ -677,7 +723,7 @@ { "cell_type": "code", "execution_count": null, - "id": "49", + "id": "53", "metadata": {}, "outputs": [], "source": [ @@ -689,7 +735,7 @@ }, { "cell_type": "markdown", - "id": "50", + "id": "54", "metadata": {}, "source": [ "### `interp_spline`\n", @@ -706,7 +752,7 @@ { "cell_type": "code", "execution_count": null, - "id": "51", + "id": "55", "metadata": {}, "outputs": [], "source": [ @@ -722,7 +768,7 @@ }, { "cell_type": "markdown", - "id": "52", + "id": "56", "metadata": {}, "source": [ "### `interp`\n", @@ -739,7 +785,7 @@ { "cell_type": "code", "execution_count": null, - "id": "53", + "id": "57", "metadata": {}, "outputs": [], "source": [ @@ -755,7 +801,7 @@ { "cell_type": "code", "execution_count": null, - "id": "54", + "id": "58", "metadata": {}, "outputs": [], "source": [ From ccb5286dcb4bafaa6f27154ea70ae982730e0b61 Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Fri, 31 Oct 2025 17:55:34 +0100 Subject: [PATCH 20/87] add method shortcuts for midicps and cpsmidi --- src/pyamapping/mappings.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/pyamapping/mappings.py b/src/pyamapping/mappings.py index 2250773..4691272 100644 --- a/src/pyamapping/mappings.py +++ b/src/pyamapping/mappings.py @@ -1203,6 +1203,9 @@ def _list_numpy_ufuncs(): for fn in pyamapping_functions: register_chain_fn(fn, None) +register_chain_fn(cpsmidi, "cpsmidi") +register_chain_fn(midicps, "midicps") + def chain(input_array: ArrayLike) -> ChainableArray: """Turn np.ndarray into ChainableArray.""" From 131c5c38e732bf892a4e969f634ffa9901f33d6e Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Fri, 31 Oct 2025 17:56:34 +0100 Subject: [PATCH 21/87] add example for midi_to_cps() --- notebooks/pyamapping-examples.ipynb | 77 +++++++++++++++++++++++++---- 1 file changed, 67 insertions(+), 10 deletions(-) diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index 66c94a3..c33d339 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -659,6 +659,63 @@ "cell_type": "markdown", "id": "48", "metadata": {}, + "source": [ + "### `midi_to_cps`\n", + "\n", + "- midi_to_cps is implemented in analogy to the SC3 midicps function\n", + "- the shorter (less pythonic name) midicps can be used as well\n", + "- `midi_to_cps(midi_note)` converts MIDI note midi_note (value or arraylike) to cycles per second (aka Hz).\n", + "- The mapping function is\n", + " $$ f(x) = 440\\cdot 2^{\\frac{x-69}{12}} $$\n", + " which obviously maps MIDI 69 to 440 Hz, the reference for definition. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "49", + "metadata": {}, + "outputs": [], + "source": [ + "pam.midi_to_cps(69+12) # should be 880, i.e. one octave above MIDI 69" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "50", + "metadata": {}, + "outputs": [], + "source": [ + "chain(np.arange(60, 74, 2)).midicps().round(1) # rounded frequencies of full tone scale ('c-d-e-f#-g#-a#-c')" + ] + }, + { + "cell_type": "markdown", + "id": "51", + "metadata": {}, + "source": [ + "- ChainableArray.midi_to_cps uses self as input.\n", + "- Here a mapping examples and plots" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "52", + "metadata": {}, + "outputs": [], + "source": [ + "xs = chain(np.arange(21, 109)) # the standard MIDI range\n", + "xs.plot(\"k-\", label=\"input data (MIDI notes)\") # plot input data\n", + "xs.midi_to_cps().plot(\"r-\", label=\"midi_to_cps result [in Hz]\")\n", + "plt.legend(); plt.grid();" + ] + }, + { + "cell_type": "markdown", + "id": "53", + "metadata": {}, "source": [ "## Tour of Mapping Functions: additional/novel mapping functions\n", "\n", @@ -668,7 +725,7 @@ }, { "cell_type": "markdown", - "id": "49", + "id": "54", "metadata": {}, "source": [ "### `linpoly`\n", @@ -691,7 +748,7 @@ }, { "cell_type": "markdown", - "id": "50", + "id": "55", "metadata": {}, "source": [ "- ChainableArray.linpoly uses self as input.\n", @@ -701,7 +758,7 @@ { "cell_type": "code", "execution_count": null, - "id": "51", + "id": "56", "metadata": {}, "outputs": [], "source": [ @@ -714,7 +771,7 @@ }, { "cell_type": "markdown", - "id": "52", + "id": "57", "metadata": {}, "source": [ "the following plot shows how the curve parameter influences the mapping function" @@ -723,7 +780,7 @@ { "cell_type": "code", "execution_count": null, - "id": "53", + "id": "58", "metadata": {}, "outputs": [], "source": [ @@ -735,7 +792,7 @@ }, { "cell_type": "markdown", - "id": "54", + "id": "59", "metadata": {}, "source": [ "### `interp_spline`\n", @@ -752,7 +809,7 @@ { "cell_type": "code", "execution_count": null, - "id": "55", + "id": "60", "metadata": {}, "outputs": [], "source": [ @@ -768,7 +825,7 @@ }, { "cell_type": "markdown", - "id": "56", + "id": "61", "metadata": {}, "source": [ "### `interp`\n", @@ -785,7 +842,7 @@ { "cell_type": "code", "execution_count": null, - "id": "57", + "id": "62", "metadata": {}, "outputs": [], "source": [ @@ -801,7 +858,7 @@ { "cell_type": "code", "execution_count": null, - "id": "58", + "id": "63", "metadata": {}, "outputs": [], "source": [ From 43fb2242e579d586d1b8c19c7fe0a65377963c13 Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Fri, 31 Oct 2025 18:10:15 +0100 Subject: [PATCH 22/87] add example for cps_to_midi() --- notebooks/pyamapping-examples.ipynb | 79 +++++++++++++++++++++++++---- 1 file changed, 69 insertions(+), 10 deletions(-) diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index c33d339..2891fd7 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -716,6 +716,65 @@ "cell_type": "markdown", "id": "53", "metadata": {}, + "source": [ + "### `cps_to_midi`\n", + "\n", + "- cps_to_midi is implemented in analogy to the SC3 cpsmidi function\n", + "- the shorter (less pythonic name) cpsmidi can be used as well\n", + "- `cps_to_midi(cps)` converts a frequency cps in Hz (value or arraylike) to a MIDI note (in float, resp. Arraylike of float).\n", + "- The mapping function is\n", + " $$ f(x) = 69 + 12 \\log_2\\left(\\frac{x}{440}\\right) $$\n", + " which obviously maps 440 Hz to MIDI 69, the reference by definition. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "54", + "metadata": {}, + "outputs": [], + "source": [ + "pam.cps_to_midi(440*2) # should be 81=69+12" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "55", + "metadata": {}, + "outputs": [], + "source": [ + "chain([110, 220, 330, 440, 550, 660, 770, 880]).cpsmidi().round(2) # rounded MIDI notes for the harmonics series over low A" + ] + }, + { + "cell_type": "markdown", + "id": "56", + "metadata": {}, + "source": [ + "- ChainableArray.midi_to_cps uses self as input.\n", + "- Here a mapping examples and plots" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "57", + "metadata": {}, + "outputs": [], + "source": [ + "xs = chain(np.arange(100, 1000, 100)) # frequencies with 50 Hz spacing\n", + "ys = xs.cps_to_midi() \n", + "\n", + "plt.plot(xs, ys, \"o-\", label=\"MIDI note for harmonics series\"); \n", + "plt.xlabel(\"frequency [Hz]\"); plt.ylabel(\"MIDI note\"); \n", + "plt.legend(); plt.grid();" + ] + }, + { + "cell_type": "markdown", + "id": "58", + "metadata": {}, "source": [ "## Tour of Mapping Functions: additional/novel mapping functions\n", "\n", @@ -725,7 +784,7 @@ }, { "cell_type": "markdown", - "id": "54", + "id": "59", "metadata": {}, "source": [ "### `linpoly`\n", @@ -748,7 +807,7 @@ }, { "cell_type": "markdown", - "id": "55", + "id": "60", "metadata": {}, "source": [ "- ChainableArray.linpoly uses self as input.\n", @@ -758,7 +817,7 @@ { "cell_type": "code", "execution_count": null, - "id": "56", + "id": "61", "metadata": {}, "outputs": [], "source": [ @@ -771,7 +830,7 @@ }, { "cell_type": "markdown", - "id": "57", + "id": "62", "metadata": {}, "source": [ "the following plot shows how the curve parameter influences the mapping function" @@ -780,7 +839,7 @@ { "cell_type": "code", "execution_count": null, - "id": "58", + "id": "63", "metadata": {}, "outputs": [], "source": [ @@ -792,7 +851,7 @@ }, { "cell_type": "markdown", - "id": "59", + "id": "64", "metadata": {}, "source": [ "### `interp_spline`\n", @@ -809,7 +868,7 @@ { "cell_type": "code", "execution_count": null, - "id": "60", + "id": "65", "metadata": {}, "outputs": [], "source": [ @@ -825,7 +884,7 @@ }, { "cell_type": "markdown", - "id": "61", + "id": "66", "metadata": {}, "source": [ "### `interp`\n", @@ -842,7 +901,7 @@ { "cell_type": "code", "execution_count": null, - "id": "62", + "id": "67", "metadata": {}, "outputs": [], "source": [ @@ -858,7 +917,7 @@ { "cell_type": "code", "execution_count": null, - "id": "63", + "id": "68", "metadata": {}, "outputs": [], "source": [ From 178edbdd7bca1727b3398784f1721d7bf77c6605 Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Fri, 31 Oct 2025 22:16:20 +0100 Subject: [PATCH 23/87] add chain fn shortcuts midiratio and ratiomidi --- src/pyamapping/mappings.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/pyamapping/mappings.py b/src/pyamapping/mappings.py index 4691272..4fc02de 100644 --- a/src/pyamapping/mappings.py +++ b/src/pyamapping/mappings.py @@ -1205,6 +1205,8 @@ def _list_numpy_ufuncs(): register_chain_fn(cpsmidi, "cpsmidi") register_chain_fn(midicps, "midicps") +register_chain_fn(ratiomidi, "ratiomidi") +register_chain_fn(midiratio, "midiratio") def chain(input_array: ArrayLike) -> ChainableArray: From f57e2c6a7e937e1942c75922fa1d4401af63db4e Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Fri, 31 Oct 2025 22:18:22 +0100 Subject: [PATCH 24/87] add midi_to_ratio() example --- notebooks/pyamapping-examples.ipynb | 80 +++++++++++++++++++++++++---- 1 file changed, 69 insertions(+), 11 deletions(-) diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index 2891fd7..76f3b7b 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -687,7 +687,7 @@ "metadata": {}, "outputs": [], "source": [ - "chain(np.arange(60, 74, 2)).midicps().round(1) # rounded frequencies of full tone scale ('c-d-e-f#-g#-a#-c')" + "chain(np.arange(60, 74, 2)).midicps().round(1) # rounded frequencies of whole-tone scale ('c-d-e-f#-g#-a#-c')" ] }, { @@ -775,6 +775,64 @@ "cell_type": "markdown", "id": "58", "metadata": {}, + "source": [ + "### `midi_to_ratio`\n", + "\n", + "- midi_to_ratio is implemented in analogy to the SC3 midiratio function\n", + "- the shorter (less pythonic name) midiratio can be used as well\n", + "- `midi_to_ratio(midi_note)` converts MIDI note difference midi_note (value or arraylike) to the ratio of their corresponding frequencies.\n", + "- The mapping function is\n", + " $$ f(x) = 2^{(x/\\tiny 12)} $$" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "59", + "metadata": {}, + "outputs": [], + "source": [ + "pam.midi_to_ratio(7) # a fifth is ~3/2 (in equal tuning)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "60", + "metadata": {}, + "outputs": [], + "source": [ + "chain(np.arange(0, 12, 2)).midi_to_ratio().round(2) # ratio of tones in the whole-tone scale ('c-d-e-f#-g#-a#-c')" + ] + }, + { + "cell_type": "markdown", + "id": "61", + "metadata": {}, + "source": [ + "- ChainableArray.midi_to_cps uses self as input.\n", + "- Here a mapping examples and plots" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "62", + "metadata": {}, + "outputs": [], + "source": [ + "xs = chain(np.arange(-12, 13)) # one octave around any note\n", + "ys = xs.midi_to_ratio()\n", + "\n", + "plt.plot(xs, ys, \"r-\", label=\"midi_to_ratio result\")\n", + "plt.plot(0, 1, \"ro\", label=\"midi_ratio of 0\")\n", + "plt.legend(); plt.grid();" + ] + }, + { + "cell_type": "markdown", + "id": "63", + "metadata": {}, "source": [ "## Tour of Mapping Functions: additional/novel mapping functions\n", "\n", @@ -784,7 +842,7 @@ }, { "cell_type": "markdown", - "id": "59", + "id": "64", "metadata": {}, "source": [ "### `linpoly`\n", @@ -807,7 +865,7 @@ }, { "cell_type": "markdown", - "id": "60", + "id": "65", "metadata": {}, "source": [ "- ChainableArray.linpoly uses self as input.\n", @@ -817,7 +875,7 @@ { "cell_type": "code", "execution_count": null, - "id": "61", + "id": "66", "metadata": {}, "outputs": [], "source": [ @@ -830,7 +888,7 @@ }, { "cell_type": "markdown", - "id": "62", + "id": "67", "metadata": {}, "source": [ "the following plot shows how the curve parameter influences the mapping function" @@ -839,7 +897,7 @@ { "cell_type": "code", "execution_count": null, - "id": "63", + "id": "68", "metadata": {}, "outputs": [], "source": [ @@ -851,7 +909,7 @@ }, { "cell_type": "markdown", - "id": "64", + "id": "69", "metadata": {}, "source": [ "### `interp_spline`\n", @@ -868,7 +926,7 @@ { "cell_type": "code", "execution_count": null, - "id": "65", + "id": "70", "metadata": {}, "outputs": [], "source": [ @@ -884,7 +942,7 @@ }, { "cell_type": "markdown", - "id": "66", + "id": "71", "metadata": {}, "source": [ "### `interp`\n", @@ -901,7 +959,7 @@ { "cell_type": "code", "execution_count": null, - "id": "67", + "id": "72", "metadata": {}, "outputs": [], "source": [ @@ -917,7 +975,7 @@ { "cell_type": "code", "execution_count": null, - "id": "68", + "id": "73", "metadata": {}, "outputs": [], "source": [ From e8677efcb394e4e4eb0325b78f90f2341d9e58c9 Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Fri, 31 Oct 2025 22:26:26 +0100 Subject: [PATCH 25/87] add ratio_to_midi() example --- notebooks/pyamapping-examples.ipynb | 80 +++++++++++++++++++++++++---- 1 file changed, 69 insertions(+), 11 deletions(-) diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index 76f3b7b..e51c681 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -752,7 +752,7 @@ "id": "56", "metadata": {}, "source": [ - "- ChainableArray.midi_to_cps uses self as input.\n", + "- ChainableArray.cps_to_midi uses self as input.\n", "- Here a mapping examples and plots" ] }, @@ -833,6 +833,64 @@ "cell_type": "markdown", "id": "63", "metadata": {}, + "source": [ + "### `ratio_to_midi`\n", + "\n", + "- radio_to_midi is implemented in analogy to the SC3 ratiomidi function\n", + "- the shorter (less pythonic name) ratiomidi can be used as well\n", + "- `ratio_to_midi(ratio)` converts a frequency ratio (value or arraylike) to a MIDI note difference (in float, resp. Arraylike of float).\n", + "- The mapping function is\n", + " $$ f(x) = 12 \\log_2(x) $$" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "64", + "metadata": {}, + "outputs": [], + "source": [ + "pam.ratio_to_midi(2) # should be 12 for ratio=2 (i.e. an octave)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "65", + "metadata": {}, + "outputs": [], + "source": [ + "chain(np.arange(1, 10)).ratio_to_midi().round(2) # rounded MIDI offsets for the harmonics series" + ] + }, + { + "cell_type": "markdown", + "id": "66", + "metadata": {}, + "source": [ + "- ChainableArray.ratio_to_midi uses self as input.\n", + "- Here a mapping examples and plots" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "67", + "metadata": {}, + "outputs": [], + "source": [ + "xs = chain(np.arange(1, 10)) # integer frequency ratios / harmonics\n", + "ys = xs.ratio_to_midi() # likewise ratiomidi()\n", + "\n", + "plt.plot(xs, ys, \"o-\", label=\"MIDI offsets for harmonics series\"); \n", + "plt.xlabel(\"ratio to fundamental frequency\"); plt.ylabel(\"MIDI offset\"); \n", + "plt.legend(); plt.grid();" + ] + }, + { + "cell_type": "markdown", + "id": "68", + "metadata": {}, "source": [ "## Tour of Mapping Functions: additional/novel mapping functions\n", "\n", @@ -842,7 +900,7 @@ }, { "cell_type": "markdown", - "id": "64", + "id": "69", "metadata": {}, "source": [ "### `linpoly`\n", @@ -865,7 +923,7 @@ }, { "cell_type": "markdown", - "id": "65", + "id": "70", "metadata": {}, "source": [ "- ChainableArray.linpoly uses self as input.\n", @@ -875,7 +933,7 @@ { "cell_type": "code", "execution_count": null, - "id": "66", + "id": "71", "metadata": {}, "outputs": [], "source": [ @@ -888,7 +946,7 @@ }, { "cell_type": "markdown", - "id": "67", + "id": "72", "metadata": {}, "source": [ "the following plot shows how the curve parameter influences the mapping function" @@ -897,7 +955,7 @@ { "cell_type": "code", "execution_count": null, - "id": "68", + "id": "73", "metadata": {}, "outputs": [], "source": [ @@ -909,7 +967,7 @@ }, { "cell_type": "markdown", - "id": "69", + "id": "74", "metadata": {}, "source": [ "### `interp_spline`\n", @@ -926,7 +984,7 @@ { "cell_type": "code", "execution_count": null, - "id": "70", + "id": "75", "metadata": {}, "outputs": [], "source": [ @@ -942,7 +1000,7 @@ }, { "cell_type": "markdown", - "id": "71", + "id": "76", "metadata": {}, "source": [ "### `interp`\n", @@ -959,7 +1017,7 @@ { "cell_type": "code", "execution_count": null, - "id": "72", + "id": "77", "metadata": {}, "outputs": [], "source": [ @@ -975,7 +1033,7 @@ { "cell_type": "code", "execution_count": null, - "id": "73", + "id": "78", "metadata": {}, "outputs": [], "source": [ From 9461c7e7a6398fe593290eea84d0cf92905436dd Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Fri, 31 Oct 2025 22:48:41 +0100 Subject: [PATCH 26/87] register chain fn for cpsoct and octcps --- src/pyamapping/mappings.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/pyamapping/mappings.py b/src/pyamapping/mappings.py index 4fc02de..2e2bf99 100644 --- a/src/pyamapping/mappings.py +++ b/src/pyamapping/mappings.py @@ -1207,6 +1207,8 @@ def _list_numpy_ufuncs(): register_chain_fn(midicps, "midicps") register_chain_fn(ratiomidi, "ratiomidi") register_chain_fn(midiratio, "midiratio") +register_chain_fn(cpsoct, "cpsoct") +register_chain_fn(octcps, "octcps") def chain(input_array: ArrayLike) -> ChainableArray: From 348504b1ba723f748c0074c36ef4ad620d95615d Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Fri, 31 Oct 2025 22:49:46 +0100 Subject: [PATCH 27/87] add octave_to_cps() and cps_to_octave() examples --- notebooks/pyamapping-examples.ipynb | 134 +++++++++++++++++++++++++--- 1 file changed, 124 insertions(+), 10 deletions(-) diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index e51c681..00b2996 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -891,6 +891,120 @@ "cell_type": "markdown", "id": "68", "metadata": {}, + "source": [ + "### `octave_to_cps`\n", + "\n", + "- octave_to_cps is implemented in analogy to the SC3 octcps function\n", + "- the shorter (less pythonic name) octcps can be used as well\n", + "- `octave_to_cps(octave)` converts octaves (value or arraylike) to cycles per second (aka Hz).\n", + "- The mapping function is\n", + " $$ f(x) = 440\\cdot 2^{(x - 4.75)} $$" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "69", + "metadata": {}, + "outputs": [], + "source": [ + "pam.octave_to_cps(3.75) # one octave below 440" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "70", + "metadata": {}, + "outputs": [], + "source": [ + "chain(np.arange(2, 9)).octcps().round(1) # rounded frequencies of c-tones" + ] + }, + { + "cell_type": "markdown", + "id": "71", + "metadata": {}, + "source": [ + "- ChainableArray.octave_to_cps uses self as input.\n", + "- Here a mapping examples and plots" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "72", + "metadata": {}, + "outputs": [], + "source": [ + "xs = chain(np.arange(0, 8, 1/4)) # 8 octaves in minor thirds (3 semitone steps)\n", + "ys = xs.octave_to_cps()\n", + "plt.plot(xs, ys, \"ro-\", ms=2,label=\"octave_to_cps result [in Hz]\")\n", + "plt.legend(); plt.grid(); plt.semilogy()" + ] + }, + { + "cell_type": "markdown", + "id": "73", + "metadata": {}, + "source": [ + "### `cps_to_octave`\n", + "\n", + "- cps_to_octave is implemented in analogy to the SC3 cpsoct function\n", + "- the shorter (less pythonic name) cpsoct can be used as well\n", + "- `cps_to_oct(cps)` converts a frequency cps in Hz (value or arraylike) to an octave value (in float, resp. Arraylike of float).\n", + "- The mapping function is\n", + " $$ f(x) = 4.75 + \\log_2\\left(\\frac{x}{440}\\right) $$" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "74", + "metadata": {}, + "outputs": [], + "source": [ + "pam.cps_to_octave(440*2) # one octave above reference" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "75", + "metadata": {}, + "outputs": [], + "source": [ + "chain(pam.midicps(12) * np.arange(1, 10)).cpsoct().round(2) # harmonics series over low C in octaves" + ] + }, + { + "cell_type": "markdown", + "id": "76", + "metadata": {}, + "source": [ + "- ChainableArray.cps_to_octave uses self as input.\n", + "- Here a mapping examples and plots" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "77", + "metadata": {}, + "outputs": [], + "source": [ + "xs = chain(np.arange(100, 1000, 100)) # frequencies with 50 Hz spacing\n", + "ys = xs.cps_to_octave() \n", + "\n", + "plt.plot(xs, ys, \"o-\", label=\"octaves for harmonics series\"); \n", + "plt.xlabel(\"frequency [Hz]\"); plt.ylabel(\"octave\"); \n", + "plt.legend(); plt.grid();" + ] + }, + { + "cell_type": "markdown", + "id": "78", + "metadata": {}, "source": [ "## Tour of Mapping Functions: additional/novel mapping functions\n", "\n", @@ -900,7 +1014,7 @@ }, { "cell_type": "markdown", - "id": "69", + "id": "79", "metadata": {}, "source": [ "### `linpoly`\n", @@ -923,7 +1037,7 @@ }, { "cell_type": "markdown", - "id": "70", + "id": "80", "metadata": {}, "source": [ "- ChainableArray.linpoly uses self as input.\n", @@ -933,7 +1047,7 @@ { "cell_type": "code", "execution_count": null, - "id": "71", + "id": "81", "metadata": {}, "outputs": [], "source": [ @@ -946,7 +1060,7 @@ }, { "cell_type": "markdown", - "id": "72", + "id": "82", "metadata": {}, "source": [ "the following plot shows how the curve parameter influences the mapping function" @@ -955,7 +1069,7 @@ { "cell_type": "code", "execution_count": null, - "id": "73", + "id": "83", "metadata": {}, "outputs": [], "source": [ @@ -967,7 +1081,7 @@ }, { "cell_type": "markdown", - "id": "74", + "id": "84", "metadata": {}, "source": [ "### `interp_spline`\n", @@ -984,7 +1098,7 @@ { "cell_type": "code", "execution_count": null, - "id": "75", + "id": "85", "metadata": {}, "outputs": [], "source": [ @@ -1000,7 +1114,7 @@ }, { "cell_type": "markdown", - "id": "76", + "id": "86", "metadata": {}, "source": [ "### `interp`\n", @@ -1017,7 +1131,7 @@ { "cell_type": "code", "execution_count": null, - "id": "77", + "id": "87", "metadata": {}, "outputs": [], "source": [ @@ -1033,7 +1147,7 @@ { "cell_type": "code", "execution_count": null, - "id": "78", + "id": "88", "metadata": {}, "outputs": [], "source": [ From 499ef14755c57bffd30b698c7762e2039599c24a Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Fri, 31 Oct 2025 23:07:44 +0100 Subject: [PATCH 28/87] register chain fn for ampdb and dbamp --- src/pyamapping/mappings.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/pyamapping/mappings.py b/src/pyamapping/mappings.py index 2e2bf99..f868ba1 100644 --- a/src/pyamapping/mappings.py +++ b/src/pyamapping/mappings.py @@ -1209,6 +1209,8 @@ def _list_numpy_ufuncs(): register_chain_fn(midiratio, "midiratio") register_chain_fn(cpsoct, "cpsoct") register_chain_fn(octcps, "octcps") +register_chain_fn(ampdb, "ampdb") +register_chain_fn(dbamp, "dbamp") def chain(input_array: ArrayLike) -> ChainableArray: From de86068d0ea1c448825a7363119c656404026592 Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Fri, 31 Oct 2025 23:08:13 +0100 Subject: [PATCH 29/87] add db_to_amp() and amp_to_db() examples --- notebooks/pyamapping-examples.ipynb | 123 +++++++++++++++++++++++++--- 1 file changed, 113 insertions(+), 10 deletions(-) diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index 00b2996..58c614e 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -1005,6 +1005,109 @@ "cell_type": "markdown", "id": "78", "metadata": {}, + "source": [ + "### `db_to_amp`\n", + "\n", + "- db_to_amp is implemented in analogy to the SC3 dbamp function\n", + "- the shorter (less pythonic name) dbamp can be used as well\n", + "- `db_to_amp(decibels)` converts decibels (value or arraylike) to amplitudes.\n", + "- The mapping function is\n", + " $$ f(x) = 10^{(x/20)}$$" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "79", + "metadata": {}, + "outputs": [], + "source": [ + "pam.db_to_amp(np.array([-6, -12, -20]))" + ] + }, + { + "cell_type": "markdown", + "id": "80", + "metadata": {}, + "source": [ + "- ChainableArray.db_to_amp uses self as input.\n", + "- Here a mapping examples and plots" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "81", + "metadata": {}, + "outputs": [], + "source": [ + "xs = chain(np.arange(-60, 0, 6)) # some 6 dB steps\n", + "ys = xs.dbamp()\n", + "plt.plot(xs, ys, \"ro-\", ms=2,label=\"db_to_amp result [arb. unit]\")\n", + "plt.legend(); plt.grid();" + ] + }, + { + "cell_type": "markdown", + "id": "82", + "metadata": {}, + "source": [ + "### `amp_to_db`\n", + "\n", + "- amp_to_db is implemented in analogy to the SC3 ampdb function\n", + "- the shorter (less pythonic name) ampdb can be used as well\n", + "- `amp_to_db(amp)` converts amplitude(s) amp (in arb. units) (value or arraylike) to decibel values (in float, resp. Arraylike of float).\n", + "- The mapping function is\n", + " $$ f(x) = 20 * \\log_{10}(x) $$" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "83", + "metadata": {}, + "outputs": [], + "source": [ + "pam.amp_to_db(0.01) # 10^(-2) will be 10^(-4) for energy, aka -40 dB" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "84", + "metadata": {}, + "outputs": [], + "source": [ + "chain(np.arange(0.1, 1, 0.1)).ampdb().round(2) # harmonics series over low C in octaves" + ] + }, + { + "cell_type": "markdown", + "id": "85", + "metadata": {}, + "source": [ + "- ChainableArray.amp_to_db uses self as input.\n", + "- Here a mapping examples and plots" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "86", + "metadata": {}, + "outputs": [], + "source": [ + "xs = chain(np.arange(0.1, 2.1, 0.1)) # ampltitudes from 0.1 to 2.0\n", + "ys = xs.ampdb() # likewise amp_to_db()\n", + "plt.plot(xs, ys, \"o-\", label=\"decibel\"); \n", + "plt.xlabel(\"amplitudes\"); plt.ylabel(\"dB\"); \n", + "plt.legend(); plt.grid();" + ] + }, + { + "cell_type": "markdown", + "id": "87", + "metadata": {}, "source": [ "## Tour of Mapping Functions: additional/novel mapping functions\n", "\n", @@ -1014,7 +1117,7 @@ }, { "cell_type": "markdown", - "id": "79", + "id": "88", "metadata": {}, "source": [ "### `linpoly`\n", @@ -1037,7 +1140,7 @@ }, { "cell_type": "markdown", - "id": "80", + "id": "89", "metadata": {}, "source": [ "- ChainableArray.linpoly uses self as input.\n", @@ -1047,7 +1150,7 @@ { "cell_type": "code", "execution_count": null, - "id": "81", + "id": "90", "metadata": {}, "outputs": [], "source": [ @@ -1060,7 +1163,7 @@ }, { "cell_type": "markdown", - "id": "82", + "id": "91", "metadata": {}, "source": [ "the following plot shows how the curve parameter influences the mapping function" @@ -1069,7 +1172,7 @@ { "cell_type": "code", "execution_count": null, - "id": "83", + "id": "92", "metadata": {}, "outputs": [], "source": [ @@ -1081,7 +1184,7 @@ }, { "cell_type": "markdown", - "id": "84", + "id": "93", "metadata": {}, "source": [ "### `interp_spline`\n", @@ -1098,7 +1201,7 @@ { "cell_type": "code", "execution_count": null, - "id": "85", + "id": "94", "metadata": {}, "outputs": [], "source": [ @@ -1114,7 +1217,7 @@ }, { "cell_type": "markdown", - "id": "86", + "id": "95", "metadata": {}, "source": [ "### `interp`\n", @@ -1131,7 +1234,7 @@ { "cell_type": "code", "execution_count": null, - "id": "87", + "id": "96", "metadata": {}, "outputs": [], "source": [ @@ -1147,7 +1250,7 @@ { "cell_type": "code", "execution_count": null, - "id": "88", + "id": "97", "metadata": {}, "outputs": [], "source": [ From 959efcbc2372768474376b8bc9f908f4c223b30f Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Sat, 1 Nov 2025 11:06:28 +0100 Subject: [PATCH 30/87] update hz_to_mel(), mel_to_hz() docstring --- src/pyamapping/mappings.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/pyamapping/mappings.py b/src/pyamapping/mappings.py index f868ba1..75261c8 100644 --- a/src/pyamapping/mappings.py +++ b/src/pyamapping/mappings.py @@ -578,28 +578,28 @@ def hz_to_mel(hz): Parameters ---------- hz : number of array - value in Hz, can be an array + frequencies in Hz, can be an array Returns ------- _ : number of array - value in Mels, same type as the input. + mel scale value, same type as the input. """ return 2595 * np.log10(1 + hz / 700.0) def mel_to_hz(mel): - """Convert a value in Hertz to Mels. + """Convert a frequency in Hz to mel using . Parameters ---------- - hz : number of array - value in Hz, can be an array + mel : number of array + melody value Returns ------- _ : number of array - value in Mels, same type as the input. + cps in Hz, same type as the input. """ return 700 * (10 ** (mel / 2595.0) - 1) From 7af357043872496043e5711e122f6985d9402255 Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Sat, 1 Nov 2025 11:07:46 +0100 Subject: [PATCH 31/87] add mel_to_hz() and hz_to_mel() examples --- notebooks/pyamapping-examples.ipynb | 127 +++++++++++++++++++++++++--- 1 file changed, 116 insertions(+), 11 deletions(-) diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index 58c614e..857ad1b 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -1105,9 +1105,114 @@ ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": null, "id": "87", "metadata": {}, + "outputs": [], + "source": [ + "import librosa\n", + "help(librosa.mel_to_hz)" + ] + }, + { + "cell_type": "markdown", + "id": "88", + "metadata": {}, + "source": [ + "### `mel_to_hz`\n", + "\n", + "- mel_to_hz is implemented in analogy to its librosa counterpart, but instaed of Slanays formula using the formula from O'Shaughnessy (1987) (available in librosa via argument htk=True)\n", + "- `mel_to_hz(mel)` converts mel (value or arraylike) to cycles per second (aka Hz). 1000 mel roughly matches 1000 Hz.\n", + "- The mapping function is\n", + " $$ f(x) = 700 \\cdot (10^{\\frac{x}{2595}} - 1) $$\n", + "- ToDo: alternative methods could be added via a method argument, e.g. 'htk' (default), 'slaney', ..." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "89", + "metadata": {}, + "outputs": [], + "source": [ + "pam.mel_to_hz(1000)" + ] + }, + { + "cell_type": "markdown", + "id": "90", + "metadata": {}, + "source": [ + "- ChainableArray.mel_to_hz uses self as input.\n", + "- Here a mapping examples and plots" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "91", + "metadata": {}, + "outputs": [], + "source": [ + "xs = chain(np.arange(0, 2500, 100)) \n", + "ys = xs.mel_to_hz()\n", + "plt.plot(xs, ys, \"r-\", label=\"mel_to_hz\")\n", + "plt.legend(); plt.grid();" + ] + }, + { + "cell_type": "markdown", + "id": "92", + "metadata": {}, + "source": [ + "### `hz_to_mel`\n", + "\n", + "- hz_to_mel is implemented in analogy to its librosa counterpart, assuming the htk=True flag, i.e. using the formula from O'Shaughnessy (1987).\n", + "- `hz_to_mel(hz)` converts a frequency in Hz (value or arraylike) to a mel scale value (in float, resp. Arraylike of float).\n", + "- The mapping function is\n", + " $$ f(x) = 2595 \\cdot \\log_{10}\\left(1 + \\frac{x}{700}\\right) $$\n", + "- ToDo: alternative methods could be added via a method argument, e.g. 'htk' (default), 'slaney', ..." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "93", + "metadata": {}, + "outputs": [], + "source": [ + "pam.hz_to_mel(1000) " + ] + }, + { + "cell_type": "markdown", + "id": "94", + "metadata": {}, + "source": [ + "- ChainableArray.hz_to_mel uses self as input.\n", + "- Here a mapping examples and plots" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "95", + "metadata": {}, + "outputs": [], + "source": [ + "xs = chain(np.arange(21, 108, 7)).midicps() # frequencies of fifth series\n", + "ys = xs.hz_to_mel() \n", + "plt.plot(xs, ys, \"o-\", label=\"mel values for frequencies\"); \n", + "plt.xlabel(\"frequency [Hz]\"); plt.ylabel(\"mel scale\"); \n", + "plt.legend(); plt.grid(); plt.loglog()\n", + "plt.plot([1000], [1000], \"ro-\", label=\"a reference point\");" + ] + }, + { + "cell_type": "markdown", + "id": "96", + "metadata": {}, "source": [ "## Tour of Mapping Functions: additional/novel mapping functions\n", "\n", @@ -1117,7 +1222,7 @@ }, { "cell_type": "markdown", - "id": "88", + "id": "97", "metadata": {}, "source": [ "### `linpoly`\n", @@ -1140,7 +1245,7 @@ }, { "cell_type": "markdown", - "id": "89", + "id": "98", "metadata": {}, "source": [ "- ChainableArray.linpoly uses self as input.\n", @@ -1150,7 +1255,7 @@ { "cell_type": "code", "execution_count": null, - "id": "90", + "id": "99", "metadata": {}, "outputs": [], "source": [ @@ -1163,7 +1268,7 @@ }, { "cell_type": "markdown", - "id": "91", + "id": "100", "metadata": {}, "source": [ "the following plot shows how the curve parameter influences the mapping function" @@ -1172,7 +1277,7 @@ { "cell_type": "code", "execution_count": null, - "id": "92", + "id": "101", "metadata": {}, "outputs": [], "source": [ @@ -1184,7 +1289,7 @@ }, { "cell_type": "markdown", - "id": "93", + "id": "102", "metadata": {}, "source": [ "### `interp_spline`\n", @@ -1201,7 +1306,7 @@ { "cell_type": "code", "execution_count": null, - "id": "94", + "id": "103", "metadata": {}, "outputs": [], "source": [ @@ -1217,7 +1322,7 @@ }, { "cell_type": "markdown", - "id": "95", + "id": "104", "metadata": {}, "source": [ "### `interp`\n", @@ -1234,7 +1339,7 @@ { "cell_type": "code", "execution_count": null, - "id": "96", + "id": "105", "metadata": {}, "outputs": [], "source": [ @@ -1250,7 +1355,7 @@ { "cell_type": "code", "execution_count": null, - "id": "97", + "id": "106", "metadata": {}, "outputs": [], "source": [ From 7493c86f275aa0a64e56d7a70d354f7e0bb1e19f Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Sat, 1 Nov 2025 17:28:23 +0100 Subject: [PATCH 32/87] add Slaney mel scale to mel_to_hz() and hz_to_mel() --- src/pyamapping/mappings.py | 37 +++++++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/src/pyamapping/mappings.py b/src/pyamapping/mappings.py index 75261c8..c18725e 100644 --- a/src/pyamapping/mappings.py +++ b/src/pyamapping/mappings.py @@ -572,36 +572,61 @@ def octave_to_cps(octave: float) -> float: octcps = octave_to_cps -def hz_to_mel(hz): - """Convert a value in Hertz to Mels. +def hz_to_mel(hz, htk=False): + """Convert frequencies [Hz] to mel scale. Parameters ---------- hz : number of array frequencies in Hz, can be an array + htk: bool + flag: if True use O'Shaughnessy (1987) formula + if False use Slaney's matlab formula + Returns ------- _ : number of array mel scale value, same type as the input. """ - return 2595 * np.log10(1 + hz / 700.0) + if htk: + return 2595 * np.log10(1 + hz / 700.0) + else: + hz = np.asanyarray(hz) # supports both scalars and arrays + mel = np.where( + hz < 1000, # point between linear and log scale + 3.0 * hz / 200, # linear law + 15 + 27 * np.log(hz / 1000) / np.log(6.4), # log law + ) + return mel if mel.ndim > 0 else float(mel) -def mel_to_hz(mel): - """Convert a frequency in Hz to mel using . +def mel_to_hz(mel, htk=False): + """Convert mel from mel scale to frequency [Hz]. Parameters ---------- mel : number of array melody value + htk: bool + flag: if True use O'Shaughnessy (1987) formula + if False use Slaney's matlab formula Returns ------- _ : number of array cps in Hz, same type as the input. """ - return 700 * (10 ** (mel / 2595.0) - 1) + if htk: + return 700 * (10 ** (mel / 2595.0) - 1) + else: + mel = np.asanyarray(mel) + hz = np.where( + mel < 15, # border between lin/exp regime + (200.0 / 3) * mel, # linear regime + 1000 * (6.4 ** ((mel - 15) / 27)), + ) # exp. regime + return hz if hz.ndim > 0 else float(hz) def db_to_amp(decibels: float) -> float: From db1a25e8c4d223193239c43c6aca70d41adbdeae Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Sat, 1 Nov 2025 17:29:21 +0100 Subject: [PATCH 33/87] improve mel_to_hz and hz_to_mel examples --- notebooks/pyamapping-examples.ipynb | 99 +++++++++++++++++++---------- 1 file changed, 67 insertions(+), 32 deletions(-) diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index 857ad1b..5bf0889 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -1122,11 +1122,17 @@ "source": [ "### `mel_to_hz`\n", "\n", - "- mel_to_hz is implemented in analogy to its librosa counterpart, but instaed of Slanays formula using the formula from O'Shaughnessy (1987) (available in librosa via argument htk=True)\n", - "- `mel_to_hz(mel)` converts mel (value or arraylike) to cycles per second (aka Hz). 1000 mel roughly matches 1000 Hz.\n", - "- The mapping function is\n", - " $$ f(x) = 700 \\cdot (10^{\\frac{x}{2595}} - 1) $$\n", - "- ToDo: alternative methods could be added via a method argument, e.g. 'htk' (default), 'slaney', ..." + "- mel_to_hz is implemented in analogy to its librosa counterpart, i.e. using Slanay's formula with a linear and logarithmic part by default, and alternatively the formula from O'Shaughnessy (1987) via the argument `htk=True`.\n", + "- `mel_to_hz(mel)` converts mel (value or arraylike) to cycles per second (aka Hz). \n", + "- For the default (Slaney) the mapping function is\n", + " - linear part (for $mel<15$): \n", + " $$ f(\\text{mel}) = \\frac{200}{3} \\cdot\\text{mel}$$\n", + " - exponential part (for $\\text{mel}>15$):\n", + " $$ f(\\text{mel}) = 1000 \\cdot 6.4 ^{(\\frac{mel - 15}{27})}$$\n", + " - Note that this mel scale has another range: 15 mel = 1000 Hz, and ~10kHz is obtained for mel = 48.5.\n", + "- if `htk==True`, the mapping function is the O'Shaughnessy (1987) formula\n", + " $$ f(\\text{mel}) = 700 \\cdot (10^{\\frac{\\text{mel}}{2595}} - 1) $$\n", + "- Note that here 1000 mel roughly matches 1000 Hz.\n" ] }, { @@ -1136,13 +1142,23 @@ "metadata": {}, "outputs": [], "source": [ - "pam.mel_to_hz(1000)" + "pam.mel_to_hz(1000, htk=True) # using the O'Shaughnessy (1987) formula" ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": null, "id": "90", "metadata": {}, + "outputs": [], + "source": [ + "pam.mel_to_hz(15) # using the Slaney formula" + ] + }, + { + "cell_type": "markdown", + "id": "91", + "metadata": {}, "source": [ "- ChainableArray.mel_to_hz uses self as input.\n", "- Here a mapping examples and plots" @@ -1151,43 +1167,62 @@ { "cell_type": "code", "execution_count": null, - "id": "91", + "id": "92", "metadata": {}, "outputs": [], "source": [ "xs = chain(np.arange(0, 2500, 100)) \n", - "ys = xs.mel_to_hz()\n", - "plt.plot(xs, ys, \"r-\", label=\"mel_to_hz\")\n", + "ys = xs.mel_to_hz(htk=True)\n", + "plt.plot(xs, ys, \"r-\", label=\"mel_to_hz (O'Shaughnessy)\")\n", + "plt.legend(); plt.grid();" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "93", + "metadata": {}, + "outputs": [], + "source": [ + "xs = chain(np.arange(0, 40, 1)) \n", + "ys = xs.mel_to_hz() # i.e. Slaney\n", + "plt.plot(xs, ys, \"r-\", label=\"mel_to_hz (Slaney)\")\n", "plt.legend(); plt.grid();" ] }, { "cell_type": "markdown", - "id": "92", + "id": "94", "metadata": {}, "source": [ "### `hz_to_mel`\n", "\n", - "- hz_to_mel is implemented in analogy to its librosa counterpart, assuming the htk=True flag, i.e. using the formula from O'Shaughnessy (1987).\n", + "- hz_to_mel is implemented in analogy to its librosa counterpart, using Slaney method as default, allowing to set htk=True flag for the formula from O'Shaughnessy (1987).\n", "- `hz_to_mel(hz)` converts a frequency in Hz (value or arraylike) to a mel scale value (in float, resp. Arraylike of float).\n", - "- The mapping function is\n", - " $$ f(x) = 2595 \\cdot \\log_{10}\\left(1 + \\frac{x}{700}\\right) $$\n", - "- ToDo: alternative methods could be added via a method argument, e.g. 'htk' (default), 'slaney', ..." + "- The default (Slaney) mapping is:\n", + " $$ \\text{mel}(f) = \\left\\{ \\begin{align*} 3f/200 &~\\text{if}~& f < 1000\\\\\n", + " 15 + 27 \\log_{6.4}(f/1000) &~\\text{if}~& f \\ge 1000\\\\\n", + " \\end{align*}\\right.$$ \n", + "- The alternative (htk=True, O'Shaughnessy (1987) formula) mapping is:\n", + " $$ f(\\text{mel}) = 2595 \\cdot \\log_{10}\\left(1 + \\frac{\\text{mel}}{700}\\right) $$\n" ] }, { "cell_type": "code", "execution_count": null, - "id": "93", + "id": "95", "metadata": {}, "outputs": [], "source": [ - "pam.hz_to_mel(1000) " + "xs = chain(np.arange(1, 10000))\n", + "plt.plot(xs, pam.hz_to_mel(xs));\n", + "plt.xlabel('frequencies [Hz]'); plt.ylabel('mel scale (Slaney)');\n", + "plt.grid()" ] }, { "cell_type": "markdown", - "id": "94", + "id": "96", "metadata": {}, "source": [ "- ChainableArray.hz_to_mel uses self as input.\n", @@ -1197,12 +1232,12 @@ { "cell_type": "code", "execution_count": null, - "id": "95", + "id": "97", "metadata": {}, "outputs": [], "source": [ - "xs = chain(np.arange(21, 108, 7)).midicps() # frequencies of fifth series\n", - "ys = xs.hz_to_mel() \n", + "xs = chain(np.arange(21, 120, 7)).midicps() # frequencies of fifth series\n", + "ys = xs.hz_to_mel(htk=True) \n", "plt.plot(xs, ys, \"o-\", label=\"mel values for frequencies\"); \n", "plt.xlabel(\"frequency [Hz]\"); plt.ylabel(\"mel scale\"); \n", "plt.legend(); plt.grid(); plt.loglog()\n", @@ -1211,7 +1246,7 @@ }, { "cell_type": "markdown", - "id": "96", + "id": "98", "metadata": {}, "source": [ "## Tour of Mapping Functions: additional/novel mapping functions\n", @@ -1222,7 +1257,7 @@ }, { "cell_type": "markdown", - "id": "97", + "id": "99", "metadata": {}, "source": [ "### `linpoly`\n", @@ -1245,7 +1280,7 @@ }, { "cell_type": "markdown", - "id": "98", + "id": "100", "metadata": {}, "source": [ "- ChainableArray.linpoly uses self as input.\n", @@ -1255,7 +1290,7 @@ { "cell_type": "code", "execution_count": null, - "id": "99", + "id": "101", "metadata": {}, "outputs": [], "source": [ @@ -1268,7 +1303,7 @@ }, { "cell_type": "markdown", - "id": "100", + "id": "102", "metadata": {}, "source": [ "the following plot shows how the curve parameter influences the mapping function" @@ -1277,7 +1312,7 @@ { "cell_type": "code", "execution_count": null, - "id": "101", + "id": "103", "metadata": {}, "outputs": [], "source": [ @@ -1289,7 +1324,7 @@ }, { "cell_type": "markdown", - "id": "102", + "id": "104", "metadata": {}, "source": [ "### `interp_spline`\n", @@ -1306,7 +1341,7 @@ { "cell_type": "code", "execution_count": null, - "id": "103", + "id": "105", "metadata": {}, "outputs": [], "source": [ @@ -1322,7 +1357,7 @@ }, { "cell_type": "markdown", - "id": "104", + "id": "106", "metadata": {}, "source": [ "### `interp`\n", @@ -1339,7 +1374,7 @@ { "cell_type": "code", "execution_count": null, - "id": "105", + "id": "107", "metadata": {}, "outputs": [], "source": [ @@ -1355,7 +1390,7 @@ { "cell_type": "code", "execution_count": null, - "id": "106", + "id": "108", "metadata": {}, "outputs": [], "source": [ From f691c09899207cde095fa550361deaa2e53aad4d Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Sat, 1 Nov 2025 17:52:49 +0100 Subject: [PATCH 34/87] add distort() example --- notebooks/pyamapping-examples.ipynb | 90 +++++++++++++++++++++++++---- 1 file changed, 79 insertions(+), 11 deletions(-) diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index 5bf0889..cff2631 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -1245,9 +1245,77 @@ ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": null, "id": "98", "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "99", + "metadata": {}, + "source": [ + "### `distort`\n", + "\n", + "- `distort(x, threshold=1)` is implemented in analogy to its sc3 counterpart `.distort`\n", + "\n", + "- It applies a distortion to x (float, resp. Arraylike of float).\n", + "- the threshold parameter controls the non-linearity\n", + "- The mapping function is:\n", + " $$ f(x, \\theta) = \\frac{x}{\\theta + |x|}$$\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "100", + "metadata": {}, + "outputs": [], + "source": [ + "pam.distort([0, 1, 2, 3], 1)" + ] + }, + { + "cell_type": "markdown", + "id": "101", + "metadata": {}, + "source": [ + "- ChainableArray.distort uses self as input.\n", + "- Here a mapping examples and plots" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "102", + "metadata": {}, + "outputs": [], + "source": [ + "xs = chain(np.arange(-3, 3, 0.01))\n", + "for theta in [0.1, 0.5, 1, 3]:\n", + " plt.plot(xs, xs.distort(theta), label=f\"threshold = {theta}\")\n", + "plt.xlabel('input'); plt.ylabel('output'); plt.grid(); \n", + "plt.legend(); plt.title(\"distort mapping function\");" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "103", + "metadata": {}, + "outputs": [], + "source": [ + "ts = chain(np.linspace(0, 0.1, 500))\n", + "xs = np.sin(2*np.pi*50*ts)\n", + "xs.plot(label='sine').distort(0.3).plot(label='distorted');" + ] + }, + { + "cell_type": "markdown", + "id": "104", + "metadata": {}, "source": [ "## Tour of Mapping Functions: additional/novel mapping functions\n", "\n", @@ -1257,7 +1325,7 @@ }, { "cell_type": "markdown", - "id": "99", + "id": "105", "metadata": {}, "source": [ "### `linpoly`\n", @@ -1280,7 +1348,7 @@ }, { "cell_type": "markdown", - "id": "100", + "id": "106", "metadata": {}, "source": [ "- ChainableArray.linpoly uses self as input.\n", @@ -1290,7 +1358,7 @@ { "cell_type": "code", "execution_count": null, - "id": "101", + "id": "107", "metadata": {}, "outputs": [], "source": [ @@ -1303,7 +1371,7 @@ }, { "cell_type": "markdown", - "id": "102", + "id": "108", "metadata": {}, "source": [ "the following plot shows how the curve parameter influences the mapping function" @@ -1312,7 +1380,7 @@ { "cell_type": "code", "execution_count": null, - "id": "103", + "id": "109", "metadata": {}, "outputs": [], "source": [ @@ -1324,7 +1392,7 @@ }, { "cell_type": "markdown", - "id": "104", + "id": "110", "metadata": {}, "source": [ "### `interp_spline`\n", @@ -1341,7 +1409,7 @@ { "cell_type": "code", "execution_count": null, - "id": "105", + "id": "111", "metadata": {}, "outputs": [], "source": [ @@ -1357,7 +1425,7 @@ }, { "cell_type": "markdown", - "id": "106", + "id": "112", "metadata": {}, "source": [ "### `interp`\n", @@ -1374,7 +1442,7 @@ { "cell_type": "code", "execution_count": null, - "id": "107", + "id": "113", "metadata": {}, "outputs": [], "source": [ @@ -1390,7 +1458,7 @@ { "cell_type": "code", "execution_count": null, - "id": "108", + "id": "114", "metadata": {}, "outputs": [], "source": [ From 3cddd5b7f9b40ba1cb6cb1d6b6f4a1a8e9710836 Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Sat, 1 Nov 2025 18:11:52 +0100 Subject: [PATCH 35/87] improve softclip() code and docstring --- src/pyamapping/mappings.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/pyamapping/mappings.py b/src/pyamapping/mappings.py index c18725e..87da1b0 100644 --- a/src/pyamapping/mappings.py +++ b/src/pyamapping/mappings.py @@ -695,15 +695,18 @@ def softclip( Parameters ---------- x (Union[float, np.typing.ArrayLike]): input value or array - threshold (float, optional): defaults to 1.0. Returns ------- Union[float, np.ndarray]: softclip distorted value / array """ - condition = np.abs(x) > 0.5 - return (np.abs(x) - 0.25) / x * condition + (1 - condition) * x - # return (np.abs(x) - 0.25)/x if np.abs(x)<0.5 else x + x = np.asarray(x) # ensure numpy array for elementwise operations + y = np.where( + np.abs(x) > 0.5, # condition + (np.abs(x) - 0.25) / x, # if condition + x, # else + ) + return y if y.ndim > 0 else float(y) def scurve( From ae451d3a48665ba9fb210bbc9c502606d7983a94 Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Sat, 1 Nov 2025 18:12:39 +0100 Subject: [PATCH 36/87] add softclip() example --- notebooks/pyamapping-examples.ipynb | 103 +++++++++++++++++++++------- 1 file changed, 79 insertions(+), 24 deletions(-) diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index cff2631..cc01e50 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -1244,17 +1244,9 @@ "plt.plot([1000], [1000], \"ro-\", label=\"a reference point\");" ] }, - { - "cell_type": "code", - "execution_count": null, - "id": "98", - "metadata": {}, - "outputs": [], - "source": [] - }, { "cell_type": "markdown", - "id": "99", + "id": "98", "metadata": {}, "source": [ "### `distort`\n", @@ -1270,7 +1262,7 @@ { "cell_type": "code", "execution_count": null, - "id": "100", + "id": "99", "metadata": {}, "outputs": [], "source": [ @@ -1279,7 +1271,7 @@ }, { "cell_type": "markdown", - "id": "101", + "id": "100", "metadata": {}, "source": [ "- ChainableArray.distort uses self as input.\n", @@ -1289,7 +1281,7 @@ { "cell_type": "code", "execution_count": null, - "id": "102", + "id": "101", "metadata": {}, "outputs": [], "source": [ @@ -1303,19 +1295,82 @@ { "cell_type": "code", "execution_count": null, - "id": "103", + "id": "102", "metadata": {}, "outputs": [], "source": [ "ts = chain(np.linspace(0, 0.1, 500))\n", "xs = np.sin(2*np.pi*50*ts)\n", - "xs.plot(label='sine').distort(0.3).plot(label='distorted');" + "xs.plot(label='sine').distort(0.3).plot(label='distorted');\n", + "plt.legend(loc='upper right');" ] }, { "cell_type": "markdown", + "id": "103", + "metadata": {}, + "source": [ + "### `softclip`\n", + "\n", + "- `softclip(x)` is implemented in analogy to its sc3 counterpart `.softclip`\n", + "\n", + "- It applies a softclip distortion to x (float, resp. Arraylike of float).\n", + "- The mapping function is:\n", + " $$ f(x, \\theta) = \\left\\{\\begin{align*}\n", + " x & ~~~\\text{if}~~~ & |x| \\le 0.5 \\\\\n", + " \\frac{|x| - 0.25}{x} & ~~~\\text{else}~~~ & \\\\\n", + " \\end{align*}\\right.$$\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, "id": "104", "metadata": {}, + "outputs": [], + "source": [ + "pam.softclip([0, 1, 2, 3])" + ] + }, + { + "cell_type": "markdown", + "id": "105", + "metadata": {}, + "source": [ + "- ChainableArray.distort uses self as input.\n", + "- Here a mapping examples and plots" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "106", + "metadata": {}, + "outputs": [], + "source": [ + "xs = chain(np.arange(-3, 3, 0.01))\n", + "plt.plot(xs, xs.softclip(), label=f\"threshold = {theta}\")\n", + "plt.xlabel('input'); plt.ylabel('output'); plt.grid(); \n", + "plt.legend(); plt.title(\"softclip mapping function\");" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "107", + "metadata": {}, + "outputs": [], + "source": [ + "ts = chain(np.linspace(0, 0.1, 500))\n", + "xs = np.sin(2*np.pi*50*ts)\n", + "xs.plot(label='sine').softclip().plot(label='softclip distorted');\n", + "plt.legend(loc='upper right');" + ] + }, + { + "cell_type": "markdown", + "id": "108", + "metadata": {}, "source": [ "## Tour of Mapping Functions: additional/novel mapping functions\n", "\n", @@ -1325,7 +1380,7 @@ }, { "cell_type": "markdown", - "id": "105", + "id": "109", "metadata": {}, "source": [ "### `linpoly`\n", @@ -1348,7 +1403,7 @@ }, { "cell_type": "markdown", - "id": "106", + "id": "110", "metadata": {}, "source": [ "- ChainableArray.linpoly uses self as input.\n", @@ -1358,7 +1413,7 @@ { "cell_type": "code", "execution_count": null, - "id": "107", + "id": "111", "metadata": {}, "outputs": [], "source": [ @@ -1371,7 +1426,7 @@ }, { "cell_type": "markdown", - "id": "108", + "id": "112", "metadata": {}, "source": [ "the following plot shows how the curve parameter influences the mapping function" @@ -1380,7 +1435,7 @@ { "cell_type": "code", "execution_count": null, - "id": "109", + "id": "113", "metadata": {}, "outputs": [], "source": [ @@ -1392,7 +1447,7 @@ }, { "cell_type": "markdown", - "id": "110", + "id": "114", "metadata": {}, "source": [ "### `interp_spline`\n", @@ -1409,7 +1464,7 @@ { "cell_type": "code", "execution_count": null, - "id": "111", + "id": "115", "metadata": {}, "outputs": [], "source": [ @@ -1425,7 +1480,7 @@ }, { "cell_type": "markdown", - "id": "112", + "id": "116", "metadata": {}, "source": [ "### `interp`\n", @@ -1442,7 +1497,7 @@ { "cell_type": "code", "execution_count": null, - "id": "113", + "id": "117", "metadata": {}, "outputs": [], "source": [ @@ -1458,7 +1513,7 @@ { "cell_type": "code", "execution_count": null, - "id": "114", + "id": "118", "metadata": {}, "outputs": [], "source": [ From 2eb1fc1ef17501b9a083fc00484c0cd028785e22 Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Sat, 1 Nov 2025 18:42:24 +0100 Subject: [PATCH 37/87] fix dtype bug in softclip(), improve scurve() --- src/pyamapping/mappings.py | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/src/pyamapping/mappings.py b/src/pyamapping/mappings.py index 87da1b0..c8582ef 100644 --- a/src/pyamapping/mappings.py +++ b/src/pyamapping/mappings.py @@ -684,9 +684,7 @@ def distort( return x / (threshold + np.abs(x)) -def softclip( - x: Union[float, ArrayLike], threshold: float = 1.0 -) -> Union[float, np.ndarray]: +def softclip(x: Union[float, ArrayLike]) -> Union[float, np.ndarray]: """Apply softclip distortion to x. This yields a perfectly linear region within [-0.5, 0.5], @@ -700,26 +698,22 @@ def softclip( ------- Union[float, np.ndarray]: softclip distorted value / array """ - x = np.asarray(x) # ensure numpy array for elementwise operations - y = np.where( - np.abs(x) > 0.5, # condition - (np.abs(x) - 0.25) / x, # if condition - x, # else - ) + x = np.asarray(x, dtype=float) # ensure numpy array for elementwise operations + y = np.empty_like(x) + mask = np.abs(x) <= 0.5 + y[mask] = x[mask] + y[~mask] = (np.abs(x[~mask]) - 0.25) / x[~mask] return y if y.ndim > 0 else float(y) -def scurve( - x: Union[float, ArrayLike], threshold: float = 1.0 -) -> Union[float, np.ndarray]: +def scurve(x: Union[float, ArrayLike]) -> Union[float, np.ndarray]: """Map value onto an S-curve bound to [0,1]. - Implements v * v * (3-(2*v)) mit v = x.clip(0,1) + Implements v * v * (3-(2*v)) mit v = x.clip(0, 1) Parameters ---------- x (Union[float, np.typing.ArrayLike]): input value or array - threshold (float, optional): defaults to 1.0. Returns ------- From ce80c0ce952b7c3b83974007f00bcdd49ebe77f2 Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Sat, 1 Nov 2025 18:43:37 +0100 Subject: [PATCH 38/87] add scurve() example --- notebooks/pyamapping-examples.ipynb | 89 ++++++++++++++++++++++++----- 1 file changed, 74 insertions(+), 15 deletions(-) diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index cc01e50..771e9de 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -1316,7 +1316,7 @@ "\n", "- It applies a softclip distortion to x (float, resp. Arraylike of float).\n", "- The mapping function is:\n", - " $$ f(x, \\theta) = \\left\\{\\begin{align*}\n", + " $$ f(x) = \\left\\{\\begin{align*}\n", " x & ~~~\\text{if}~~~ & |x| \\le 0.5 \\\\\n", " \\frac{|x| - 0.25}{x} & ~~~\\text{else}~~~ & \\\\\n", " \\end{align*}\\right.$$\n" @@ -1329,7 +1329,7 @@ "metadata": {}, "outputs": [], "source": [ - "pam.softclip([0, 1, 2, 3])" + "pam.softclip(np.arange(1, 5))" ] }, { @@ -1337,7 +1337,7 @@ "id": "105", "metadata": {}, "source": [ - "- ChainableArray.distort uses self as input.\n", + "- ChainableArray.softclip uses self as input.\n", "- Here a mapping examples and plots" ] }, @@ -1349,9 +1349,9 @@ "outputs": [], "source": [ "xs = chain(np.arange(-3, 3, 0.01))\n", - "plt.plot(xs, xs.softclip(), label=f\"threshold = {theta}\")\n", + "plt.plot(xs, xs.softclip())\n", "plt.xlabel('input'); plt.ylabel('output'); plt.grid(); \n", - "plt.legend(); plt.title(\"softclip mapping function\");" + "plt.title(\"softclip mapping function\");" ] }, { @@ -1371,6 +1371,65 @@ "cell_type": "markdown", "id": "108", "metadata": {}, + "source": [ + "### `scurve`\n", + "\n", + "- `scurve(x)` is implemented in analogy to its sc3 counterpart `.scurve`\n", + "\n", + "- It applies an scurve distortion to x (float, resp. Arraylike of float).\n", + "- The mapping function is:\n", + " $$ f(x) = v^2 (3-2v) ~~\\text{with}~~ v = \\min(\\max(x, 0), 1)~~~\\text{i.e. v=clip(x, 0, 1)}$$\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "109", + "metadata": {}, + "outputs": [], + "source": [ + "pam.scurve(np.arange(0, 1, 0.25))" + ] + }, + { + "cell_type": "markdown", + "id": "110", + "metadata": {}, + "source": [ + "- ChainableArray.scurve uses self as input.\n", + "- Here a mapping examples and plots" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "111", + "metadata": {}, + "outputs": [], + "source": [ + "xs = chain(np.arange(0, 1, 0.01))\n", + "plt.plot(xs, xs.scurve())\n", + "plt.xlabel('input'); plt.ylabel('output'); plt.grid(); \n", + "plt.legend(); plt.title(\"scurve mapping function\");" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "112", + "metadata": {}, + "outputs": [], + "source": [ + "ts = chain(np.linspace(0, 0.1, 500))\n", + "xs = np.sin(2*np.pi*50*ts).linlin(-1, 1, 0, 1)\n", + "xs.plot(label='sine with offset').scurve().plot(label='scurve distorted');\n", + "plt.legend(loc='upper right');" + ] + }, + { + "cell_type": "markdown", + "id": "113", + "metadata": {}, "source": [ "## Tour of Mapping Functions: additional/novel mapping functions\n", "\n", @@ -1380,7 +1439,7 @@ }, { "cell_type": "markdown", - "id": "109", + "id": "114", "metadata": {}, "source": [ "### `linpoly`\n", @@ -1403,7 +1462,7 @@ }, { "cell_type": "markdown", - "id": "110", + "id": "115", "metadata": {}, "source": [ "- ChainableArray.linpoly uses self as input.\n", @@ -1413,7 +1472,7 @@ { "cell_type": "code", "execution_count": null, - "id": "111", + "id": "116", "metadata": {}, "outputs": [], "source": [ @@ -1426,7 +1485,7 @@ }, { "cell_type": "markdown", - "id": "112", + "id": "117", "metadata": {}, "source": [ "the following plot shows how the curve parameter influences the mapping function" @@ -1435,7 +1494,7 @@ { "cell_type": "code", "execution_count": null, - "id": "113", + "id": "118", "metadata": {}, "outputs": [], "source": [ @@ -1447,7 +1506,7 @@ }, { "cell_type": "markdown", - "id": "114", + "id": "119", "metadata": {}, "source": [ "### `interp_spline`\n", @@ -1464,7 +1523,7 @@ { "cell_type": "code", "execution_count": null, - "id": "115", + "id": "120", "metadata": {}, "outputs": [], "source": [ @@ -1480,7 +1539,7 @@ }, { "cell_type": "markdown", - "id": "116", + "id": "121", "metadata": {}, "source": [ "### `interp`\n", @@ -1497,7 +1556,7 @@ { "cell_type": "code", "execution_count": null, - "id": "117", + "id": "122", "metadata": {}, "outputs": [], "source": [ @@ -1513,7 +1572,7 @@ { "cell_type": "code", "execution_count": null, - "id": "118", + "id": "123", "metadata": {}, "outputs": [], "source": [ From d9dc43321cd759d986b7fdca14d663010d92f208 Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Sat, 1 Nov 2025 18:58:33 +0100 Subject: [PATCH 39/87] fix error in lcurve() docstring --- src/pyamapping/mappings.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pyamapping/mappings.py b/src/pyamapping/mappings.py index c8582ef..f304c7e 100644 --- a/src/pyamapping/mappings.py +++ b/src/pyamapping/mappings.py @@ -728,10 +728,10 @@ def lcurve( ) -> Union[float, np.ndarray]: """Map value or array onto an L-curve. - Implements (1 + m * exp(-x/tau) + 1) / (1 + n * exp(-x/tau)) + Implements (1 + m * exp(-x/tau)) / (1 + n * exp(-x/tau)) - equal to fermi function with default parameters - note that different to the sc3 implementation, tau is inside - the exp function (unclear tau placement in sc3...) + the exp function (...unclear tau placement in sc3...) Parameters ---------- From 0a1050f8bd109bcba4a46024fb79c6d75dfad0e5 Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Sat, 1 Nov 2025 18:59:14 +0100 Subject: [PATCH 40/87] add lcurve() example --- notebooks/pyamapping-examples.ipynb | 81 +++++++++++++++++++++++++---- 1 file changed, 71 insertions(+), 10 deletions(-) diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index 771e9de..2523ffc 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -1430,6 +1430,67 @@ "cell_type": "markdown", "id": "113", "metadata": {}, + "source": [ + "### `lcurve`\n", + "\n", + "- `lcurve(x, m=0.0, n=1.0, tau=1.0)` is implemented in analogy to its sc3 counterpart `.lcurve`\n", + "\n", + "- It applies an l-curve distortion to x (float, resp. Arraylike of float).\n", + "- The mapping function is:\n", + " $$ f(x) = \n", + " \\frac{1 + m e^{-x/\\tau}}{1 + n e^{-x/\\tau}} $$\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "114", + "metadata": {}, + "outputs": [], + "source": [ + "pam.lcurve(np.array([-1, -0.5, 0, 0.5, 1]))" + ] + }, + { + "cell_type": "markdown", + "id": "115", + "metadata": {}, + "source": [ + "- ChainableArray.lcurve uses self as input.\n", + "- Here a mapping examples and plots" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "116", + "metadata": {}, + "outputs": [], + "source": [ + "xs = chain(np.arange(-10, 10, 0.005))\n", + "for tau in [0.2, 0.5, 1, 2]:\n", + " plt.plot(xs, xs.lcurve(tau=tau), label=f'lcurve for tau={tau}')\n", + "plt.xlabel('input'); plt.ylabel('output'); plt.grid(); \n", + "plt.legend(); plt.title(\"scurve mapping function\");" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "117", + "metadata": {}, + "outputs": [], + "source": [ + "ts = chain(np.linspace(0, 0.1, 500))\n", + "xs = np.sin(2*np.pi*50*ts)\n", + "xs.plot(label='sine').lcurve(tau=0.25).plot(label='lcurve distorted');\n", + "plt.legend(loc='upper right');" + ] + }, + { + "cell_type": "markdown", + "id": "118", + "metadata": {}, "source": [ "## Tour of Mapping Functions: additional/novel mapping functions\n", "\n", @@ -1439,7 +1500,7 @@ }, { "cell_type": "markdown", - "id": "114", + "id": "119", "metadata": {}, "source": [ "### `linpoly`\n", @@ -1462,7 +1523,7 @@ }, { "cell_type": "markdown", - "id": "115", + "id": "120", "metadata": {}, "source": [ "- ChainableArray.linpoly uses self as input.\n", @@ -1472,7 +1533,7 @@ { "cell_type": "code", "execution_count": null, - "id": "116", + "id": "121", "metadata": {}, "outputs": [], "source": [ @@ -1485,7 +1546,7 @@ }, { "cell_type": "markdown", - "id": "117", + "id": "122", "metadata": {}, "source": [ "the following plot shows how the curve parameter influences the mapping function" @@ -1494,7 +1555,7 @@ { "cell_type": "code", "execution_count": null, - "id": "118", + "id": "123", "metadata": {}, "outputs": [], "source": [ @@ -1506,7 +1567,7 @@ }, { "cell_type": "markdown", - "id": "119", + "id": "124", "metadata": {}, "source": [ "### `interp_spline`\n", @@ -1523,7 +1584,7 @@ { "cell_type": "code", "execution_count": null, - "id": "120", + "id": "125", "metadata": {}, "outputs": [], "source": [ @@ -1539,7 +1600,7 @@ }, { "cell_type": "markdown", - "id": "121", + "id": "126", "metadata": {}, "source": [ "### `interp`\n", @@ -1556,7 +1617,7 @@ { "cell_type": "code", "execution_count": null, - "id": "122", + "id": "127", "metadata": {}, "outputs": [], "source": [ @@ -1572,7 +1633,7 @@ { "cell_type": "code", "execution_count": null, - "id": "123", + "id": "128", "metadata": {}, "outputs": [], "source": [ From 080ddc156fa522ade21648de7e77226177bc7d21 Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Sat, 1 Nov 2025 19:38:26 +0100 Subject: [PATCH 41/87] fixed bug in wrap() --- src/pyamapping/mappings.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pyamapping/mappings.py b/src/pyamapping/mappings.py index f304c7e..47f144e 100644 --- a/src/pyamapping/mappings.py +++ b/src/pyamapping/mappings.py @@ -792,7 +792,7 @@ def wrap( ) -> Union[float, np.ndarray]: """Wrap array around target range [y1, y2]. - This implements the mapping y1 + x % (y2 - y1). + This implements the mapping y1 + np.mod(x - y1, y2 - y1). The order of y1, y2 is irrelevant. Parameters @@ -805,7 +805,7 @@ def wrap( ------- Union[float, np.ndarray]: wraped array """ - return y1 + x % (y2 - y1) + return y1 + np.mod(x - y1, y2 - y1) def fold( From 992ba82f7592ca87a168d3c73f5fef4c79849a8c Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Sat, 1 Nov 2025 19:38:54 +0100 Subject: [PATCH 42/87] add wrap() example --- notebooks/pyamapping-examples.ipynb | 83 +++++++++++++++++++++++++---- 1 file changed, 72 insertions(+), 11 deletions(-) diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index 2523ffc..0acbc6a 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -1471,7 +1471,7 @@ "for tau in [0.2, 0.5, 1, 2]:\n", " plt.plot(xs, xs.lcurve(tau=tau), label=f'lcurve for tau={tau}')\n", "plt.xlabel('input'); plt.ylabel('output'); plt.grid(); \n", - "plt.legend(); plt.title(\"scurve mapping function\");" + "plt.legend(); plt.title(\"lcurve mapping function\");" ] }, { @@ -1491,6 +1491,67 @@ "cell_type": "markdown", "id": "118", "metadata": {}, + "source": [ + "### `wrap`\n", + "\n", + "- `wrap(x, y1=-1.0, y2=1.0)` is implemented in analogy to its sc3 counterpart `.wrap`\n", + "\n", + "- It wraps x (float, resp. Arraylike of float) around target range [y1, y2].\n", + "- The mapping function is:\n", + " $$ f(x) = (x - y_1) \\mod (y_2 - y_1) $$\n", + "- the order of y1 and y2 is irrelevant\n", + "- wrap delivers the quantization error when quantizing a signal in units of the interval $|y_2-y_1|$" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "119", + "metadata": {}, + "outputs": [], + "source": [ + "pam.wrap(np.arange(0, 13), 0, 3)" + ] + }, + { + "cell_type": "markdown", + "id": "120", + "metadata": {}, + "source": [ + "- ChainableArray.wrap uses self as input.\n", + "- Here a mapping examples and plots" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "121", + "metadata": {}, + "outputs": [], + "source": [ + "xs = chain(np.arange(-5, 5, 0.01))\n", + "plt.plot(xs, xs.wrap(y1=-1, y2=1))\n", + "plt.xlabel('input'); plt.ylabel('output'); plt.grid(); \n", + "plt.title(\"wrap mapping function\");" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "122", + "metadata": {}, + "outputs": [], + "source": [ + "ts = chain(np.linspace(0, 0.1, 500))\n", + "xs = np.sin(2*np.pi*30*ts)\n", + "xs.plot(label='sine').wrap(-0.8, 0.5).plot(label='wrapped sine');\n", + "plt.legend(loc='upper right');" + ] + }, + { + "cell_type": "markdown", + "id": "123", + "metadata": {}, "source": [ "## Tour of Mapping Functions: additional/novel mapping functions\n", "\n", @@ -1500,7 +1561,7 @@ }, { "cell_type": "markdown", - "id": "119", + "id": "124", "metadata": {}, "source": [ "### `linpoly`\n", @@ -1523,7 +1584,7 @@ }, { "cell_type": "markdown", - "id": "120", + "id": "125", "metadata": {}, "source": [ "- ChainableArray.linpoly uses self as input.\n", @@ -1533,7 +1594,7 @@ { "cell_type": "code", "execution_count": null, - "id": "121", + "id": "126", "metadata": {}, "outputs": [], "source": [ @@ -1546,7 +1607,7 @@ }, { "cell_type": "markdown", - "id": "122", + "id": "127", "metadata": {}, "source": [ "the following plot shows how the curve parameter influences the mapping function" @@ -1555,7 +1616,7 @@ { "cell_type": "code", "execution_count": null, - "id": "123", + "id": "128", "metadata": {}, "outputs": [], "source": [ @@ -1567,7 +1628,7 @@ }, { "cell_type": "markdown", - "id": "124", + "id": "129", "metadata": {}, "source": [ "### `interp_spline`\n", @@ -1584,7 +1645,7 @@ { "cell_type": "code", "execution_count": null, - "id": "125", + "id": "130", "metadata": {}, "outputs": [], "source": [ @@ -1600,7 +1661,7 @@ }, { "cell_type": "markdown", - "id": "126", + "id": "131", "metadata": {}, "source": [ "### `interp`\n", @@ -1617,7 +1678,7 @@ { "cell_type": "code", "execution_count": null, - "id": "127", + "id": "132", "metadata": {}, "outputs": [], "source": [ @@ -1633,7 +1694,7 @@ { "cell_type": "code", "execution_count": null, - "id": "128", + "id": "133", "metadata": {}, "outputs": [], "source": [ From f0817f33e217927a6b37700011a57fc97b9c9650 Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Sat, 1 Nov 2025 19:48:07 +0100 Subject: [PATCH 43/87] add fold() example --- notebooks/pyamapping-examples.ipynb | 82 +++++++++++++++++++++++++---- 1 file changed, 71 insertions(+), 11 deletions(-) diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index 0acbc6a..5dd1eff 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -1498,7 +1498,7 @@ "\n", "- It wraps x (float, resp. Arraylike of float) around target range [y1, y2].\n", "- The mapping function is:\n", - " $$ f(x) = (x - y_1) \\mod (y_2 - y_1) $$\n", + " $$ f(x) = y1 + ((x - y_1) \\mod (y_2 - y_1)) $$\n", "- the order of y1 and y2 is irrelevant\n", "- wrap delivers the quantization error when quantizing a signal in units of the interval $|y_2-y_1|$" ] @@ -1552,6 +1552,66 @@ "cell_type": "markdown", "id": "123", "metadata": {}, + "source": [ + "### `fold`\n", + "\n", + "- `fold(x, y1=-1.0, y2=1.0)` is implemented in analogy to its sc3 counterpart `.fold`\n", + "\n", + "- It folds x (float, resp. Arraylike of float) beyond limits [y1, y2] back by mirroring the signal.\n", + "- The mapping function is:\n", + " $$ f(x) = y_1 + |(x - y_2) \\mod (2L) - L| \\text{~~with~~} L = y_2 -y_1 $$\n", + "- the order of y1 and y2 is irrelevant: a swap is done internally " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "124", + "metadata": {}, + "outputs": [], + "source": [ + "pam.fold(np.arange(0, 13), 0, 4)" + ] + }, + { + "cell_type": "markdown", + "id": "125", + "metadata": {}, + "source": [ + "- ChainableArray.wrap uses self as input.\n", + "- Here a mapping examples and plots" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "126", + "metadata": {}, + "outputs": [], + "source": [ + "xs = chain(np.arange(-5, 5, 0.01))\n", + "plt.plot(xs, xs.fold(y1=-1, y2=1))\n", + "plt.xlabel('input'); plt.ylabel('output'); plt.grid(); \n", + "plt.title(\"wrap mapping function\");" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "127", + "metadata": {}, + "outputs": [], + "source": [ + "ts = chain(np.linspace(0, 0.1, 500))\n", + "xs = np.sin(2*np.pi*30*ts)\n", + "xs.plot(label='sine').fold(-0.75, 0.5).plot(label='folded sine');\n", + "plt.legend(loc='upper right'); plt.grid()" + ] + }, + { + "cell_type": "markdown", + "id": "128", + "metadata": {}, "source": [ "## Tour of Mapping Functions: additional/novel mapping functions\n", "\n", @@ -1561,7 +1621,7 @@ }, { "cell_type": "markdown", - "id": "124", + "id": "129", "metadata": {}, "source": [ "### `linpoly`\n", @@ -1584,7 +1644,7 @@ }, { "cell_type": "markdown", - "id": "125", + "id": "130", "metadata": {}, "source": [ "- ChainableArray.linpoly uses self as input.\n", @@ -1594,7 +1654,7 @@ { "cell_type": "code", "execution_count": null, - "id": "126", + "id": "131", "metadata": {}, "outputs": [], "source": [ @@ -1607,7 +1667,7 @@ }, { "cell_type": "markdown", - "id": "127", + "id": "132", "metadata": {}, "source": [ "the following plot shows how the curve parameter influences the mapping function" @@ -1616,7 +1676,7 @@ { "cell_type": "code", "execution_count": null, - "id": "128", + "id": "133", "metadata": {}, "outputs": [], "source": [ @@ -1628,7 +1688,7 @@ }, { "cell_type": "markdown", - "id": "129", + "id": "134", "metadata": {}, "source": [ "### `interp_spline`\n", @@ -1645,7 +1705,7 @@ { "cell_type": "code", "execution_count": null, - "id": "130", + "id": "135", "metadata": {}, "outputs": [], "source": [ @@ -1661,7 +1721,7 @@ }, { "cell_type": "markdown", - "id": "131", + "id": "136", "metadata": {}, "source": [ "### `interp`\n", @@ -1678,7 +1738,7 @@ { "cell_type": "code", "execution_count": null, - "id": "132", + "id": "137", "metadata": {}, "outputs": [], "source": [ @@ -1694,7 +1754,7 @@ { "cell_type": "code", "execution_count": null, - "id": "133", + "id": "138", "metadata": {}, "outputs": [], "source": [ From 24bb5c0edfbed51a0ab2e93b3a2d6513239a16c9 Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Mon, 3 Nov 2025 16:15:03 +0100 Subject: [PATCH 44/87] improve/correct fermi() docstring --- src/pyamapping/mappings.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pyamapping/mappings.py b/src/pyamapping/mappings.py index 47f144e..65e0d2f 100644 --- a/src/pyamapping/mappings.py +++ b/src/pyamapping/mappings.py @@ -752,12 +752,13 @@ def fermi( ) -> Union[float, np.ndarray]: """Apply fermi function to value or array. - Implements 1 / (1 + exp(-x/tau)) + Implements 1 / (1 + exp(-(x-mu)/tau)) Parameters ---------- x (Union[float, np.typing.ArrayLike]): input value or array tau (float, optional): scale constant, defaults to 1.0. + mu (float, optional): shift, defaults to 0.0 Returns ------- From ce45ea880d1ba8b485f15b0904fcf1a07bf522c6 Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Mon, 3 Nov 2025 16:15:59 +0100 Subject: [PATCH 45/87] add fermi() example --- notebooks/pyamapping-examples.ipynb | 71 +++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index 5dd1eff..022dd9f 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -1764,6 +1764,77 @@ "xs.bilin(50, -50, 100, 0.4, 0, 1).plot(\"b:\", label='bilin with extrapolation');\n", "plt.legend();plt.grid();" ] + }, + { + "cell_type": "markdown", + "id": "139", + "metadata": {}, + "source": [ + "### `fermi`\n", + "\n", + "- `fermi(x, tau=1.0, mu=0.0)` implements a (shiftable) fermi function.\n", + "\n", + "- It applies a Fermi function to x (float, resp. Arraylike of float).\n", + "- The mapping function is:\n", + " $$ f(x) = \n", + " \\frac{1}{1 + n e^{-(x-\\mu)/\\tau}} $$\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "140", + "metadata": {}, + "outputs": [], + "source": [ + "pam.fermi(np.array([-1, -0.5, 0, 0.5, 1]))" + ] + }, + { + "cell_type": "markdown", + "id": "141", + "metadata": {}, + "source": [ + "- ChainableArray.fermi uses self as input.\n", + "- Here a mapping examples and plots" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "142", + "metadata": {}, + "outputs": [], + "source": [ + "xs = chain(np.arange(-10, 10, 0.005))\n", + "for i, mu in enumerate([-2, 0, 2]):\n", + " for j, tau in enumerate([0.2, 0.5, 1]):\n", + " plt.plot(xs, xs.fermi(tau, mu), color=['r','g','b'][i], \n", + " lw=j+1, label=f'lcurve for tau={tau}')\n", + "plt.xlabel('input'); plt.ylabel('output'); plt.grid(); \n", + "plt.legend(fontsize=8); plt.title(\"fermi curve mapping functions\");" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "143", + "metadata": {}, + "outputs": [], + "source": [ + "ts = chain(np.linspace(0, 0.1, 500))\n", + "xs = np.sin(2*np.pi*50*ts)\n", + "xs.plot(label='sine').fermi(tau=0.25, mu=1).plot(label='fermi distorted');\n", + "plt.legend(loc='upper right'); plt.grid()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "144", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": {}, From 558303c81648af921118f365e9d99ef50f9fc832 Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Mon, 3 Nov 2025 16:33:04 +0100 Subject: [PATCH 46/87] fix normalize() input type --- src/pyamapping/mappings.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/pyamapping/mappings.py b/src/pyamapping/mappings.py index 65e0d2f..c1807c5 100644 --- a/src/pyamapping/mappings.py +++ b/src/pyamapping/mappings.py @@ -767,9 +767,7 @@ def fermi( return 1.0 / (1 + np.exp(-(x - mu) / tau)) -def normalize( - x: Union[float, ArrayLike], y1: float = -1.0, y2: float = 1.0 -) -> Union[float, np.ndarray]: +def normalize(x: np.ndarray, y1: float = -1.0, y2: float = 1.0) -> np.ndarray: """Normalize array to target range [y1, y2]. Linear mapping [min(x), max(x)] to [y1, y2]. Use y1 > y2 to change polarity. From 9b50b9f79a52c4b15352fc219c817d3831d80b70 Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Mon, 3 Nov 2025 16:33:32 +0100 Subject: [PATCH 47/87] add normalize() example --- notebooks/pyamapping-examples.ipynb | 46 +++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index 022dd9f..c438b70 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -1777,7 +1777,7 @@ "- It applies a Fermi function to x (float, resp. Arraylike of float).\n", "- The mapping function is:\n", " $$ f(x) = \n", - " \\frac{1}{1 + n e^{-(x-\\mu)/\\tau}} $$\n" + " \\frac{1}{1 + e^{-(x-\\mu)/\\tau}} $$\n" ] }, { @@ -1828,13 +1828,53 @@ "plt.legend(loc='upper right'); plt.grid()" ] }, + { + "cell_type": "markdown", + "id": "144", + "metadata": {}, + "source": [ + "### `normalize`\n", + "\n", + "- `normalize(x, y1=-1.0, y2=1.0)` implements a signal normalization to [y1,y2].\n", + "- A linear mapping from input range [min(x) to max(x)] to output range [y1, y2]\n", + " is applied to argument x (Arraylike of float).\n", + "- Note that this won't work for min(x) = max(x)\n", + "- Note that an implicit polarity change can be achieved by choosing y1>y2.\n", + "- The mapping function is:\n", + " $$ f(x) = y_1 + \\frac{x - x_1}{x_2 - x_1} (y_2 - y_1) $$\n" + ] + }, { "cell_type": "code", "execution_count": null, - "id": "144", + "id": "145", + "metadata": {}, + "outputs": [], + "source": [ + "pam.normalize(np.random.rand(10)) # you'll find a 1 and a -1" + ] + }, + { + "cell_type": "markdown", + "id": "146", + "metadata": {}, + "source": [ + "- ChainableArray.normalize uses self as input.\n", + "- Here a mapping examples and plots" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "147", "metadata": {}, "outputs": [], - "source": [] + "source": [ + "ts = chain(np.linspace(0, 0.1, 500))\n", + "xs = np.sin(2*np.pi*50*ts)\n", + "xs.plot(label='sine').normalize(0.5,1).plot(label='normalized to [0.5, 1]');\n", + "plt.legend(loc='upper right'); plt.grid()" + ] } ], "metadata": {}, From 148ad035350e28fd03187a217ed7e02209de8a6c Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Mon, 3 Nov 2025 16:53:41 +0100 Subject: [PATCH 48/87] fixed norm_peak() type definition --- src/pyamapping/mappings.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/pyamapping/mappings.py b/src/pyamapping/mappings.py index c1807c5..b0a32ec 100644 --- a/src/pyamapping/mappings.py +++ b/src/pyamapping/mappings.py @@ -847,17 +847,17 @@ def remove_dc( return x - np.mean(x) -def norm_peak(x: Union[float, ArrayLike], peak=1.0): - """Normalize array so that max(abs(x)) = peak. +def norm_peak(x: np.ndarray, peak=1.0): + """Normalize by scaling array so that max(abs(x)) = peak. Parameters ---------- - x (Union[float, np.typing.ArrayLike]): input value or array + x (np.ndarray]): input array peak (float): target peak Returns ------- - Union[float, np.ndarray]: normalized (scaled) array + np.ndarray: normalized (scaled) array """ peak_of_x = np.max(np.abs(x)) return (x / peak_of_x) * peak if peak_of_x != 0 else x From 4a7a42eca06f03f0498b4e51cf074acacc2d9590 Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Mon, 3 Nov 2025 16:55:23 +0100 Subject: [PATCH 49/87] add norm_peak() example --- notebooks/pyamapping-examples.ipynb | 49 +++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index c438b70..9f2af20 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -1840,6 +1840,7 @@ " is applied to argument x (Arraylike of float).\n", "- Note that this won't work for min(x) = max(x)\n", "- Note that an implicit polarity change can be achieved by choosing y1>y2.\n", + "- Note that normalize is different from sc3 normalize (see `pyamapping.norm_peak()`). \n", "- The mapping function is:\n", " $$ f(x) = y_1 + \\frac{x - x_1}{x_2 - x_1} (y_2 - y_1) $$\n" ] @@ -1875,6 +1876,54 @@ "xs.plot(label='sine').normalize(0.5,1).plot(label='normalized to [0.5, 1]');\n", "plt.legend(loc='upper right'); plt.grid()" ] + }, + { + "cell_type": "markdown", + "id": "148", + "metadata": {}, + "source": [ + "### `norm_peak`\n", + "\n", + "- `norm_peak(x, peak=1.0)` implements a signal normalization by scaling to new peak.\n", + "- The signal is scaled by peak/max(abs(x)).\n", + "- note that a polarity change results in negative values of `peak`.\n", + "- Note that `norm_peak` is resembles .normalize from SuperCollider. \n", + "- The mapping function is:\n", + " $$ f(x, \\text{peak}) = \\text{peak}\\cdot\\frac{x}{\\max|x|} $$\n", + "- i.e. if the signal is DC-free, it remains so as it is merely scaled. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "149", + "metadata": {}, + "outputs": [], + "source": [ + "pam.norm_peak(np.random.rand(10), 5) # you'll find a 5 (not not a -5)" + ] + }, + { + "cell_type": "markdown", + "id": "150", + "metadata": {}, + "source": [ + "- ChainableArray.norm_peak uses self as input.\n", + "- Here a mapping examples and plots" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "151", + "metadata": {}, + "outputs": [], + "source": [ + "ts = chain(np.linspace(0, 0.1, 500))\n", + "xs = np.sin(2*np.pi*50*ts)\n", + "xs.plot(label='sine').norm_peak(0.5).plot(label='norm_peak to 0.5');\n", + "plt.legend(loc='upper right'); plt.grid()" + ] } ], "metadata": {}, From 763c2cb08b23e1b001c4eebdfe26a7a90c890d74 Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Mon, 3 Nov 2025 17:08:35 +0100 Subject: [PATCH 50/87] fix norm_rms() type definiton --- src/pyamapping/mappings.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pyamapping/mappings.py b/src/pyamapping/mappings.py index b0a32ec..0461ea4 100644 --- a/src/pyamapping/mappings.py +++ b/src/pyamapping/mappings.py @@ -863,17 +863,17 @@ def norm_peak(x: np.ndarray, peak=1.0): return (x / peak_of_x) * peak if peak_of_x != 0 else x -def norm_rms(x: Union[float, ArrayLike], rms=1.0): +def norm_rms(x: np.ndarray, rms=1.0): """Normalize array so that its RMS value equals `rms`. Parameters ---------- - x (Union[float, np.typing.ArrayLike]): input value or array + x (np.ndarray): input array rms (float): target rms of array Returns ------- - Union[float, np.ndarray]: rms normalized (scaled) array + np.ndarray: rms normalized (scaled) array """ rms_of_x = np.sqrt(np.mean(x**2)) return (x / rms_of_x) * rms if rms_of_x != 0 else x From d97d53352b7405fb3e90fc3625ca0587ff1171ad Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Mon, 3 Nov 2025 17:09:21 +0100 Subject: [PATCH 51/87] add norm_rms() example --- notebooks/pyamapping-examples.ipynb | 48 +++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index 9f2af20..51cec71 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -1924,6 +1924,54 @@ "xs.plot(label='sine').norm_peak(0.5).plot(label='norm_peak to 0.5');\n", "plt.legend(loc='upper right'); plt.grid()" ] + }, + { + "cell_type": "markdown", + "id": "152", + "metadata": {}, + "source": [ + "### `norm_rms`\n", + "\n", + "- `norm_rms(x, rms=1.0)` implements a signal normalization by scaling to target RMS.\n", + "- The signal is scaled, not shifted.\n", + "- Note that negative `rms` result in a polarity change.\n", + "- The mapping function is:\n", + " $$ f(x, \\text{rms}) = \\text{rms}\\cdot\\frac{x}{\\sqrt{\\langle x^2 \\rangle}} \n", + " = \\text{rms}\\cdot\\frac{x}{\\sqrt{\\frac{1}{n}\\sum\\limits_{i=1}^n x_i^2}} $$\n", + "- i.e. if the signal is DC-free, it remains so as it is merely scaled. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "153", + "metadata": {}, + "outputs": [], + "source": [ + "pam.norm_rms(np.array([1,0,0,-1]), 1) # scale by sqrt(2) to magnify RMS" + ] + }, + { + "cell_type": "markdown", + "id": "154", + "metadata": {}, + "source": [ + "- ChainableArray.norm_rms uses self as input.\n", + "- Here a mapping examples and plots" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "155", + "metadata": {}, + "outputs": [], + "source": [ + "ts = chain(np.linspace(0, 0.1, 500))\n", + "xs = np.sin(2*np.pi*50*ts)\n", + "xs.plot(label='sine').norm_rms(0.5).plot(label='norm_rms to 0.5');\n", + "plt.legend(loc='upper right'); plt.grid()" + ] } ], "metadata": {}, From c667391e382a9d688a88dc5a1afb64798d5e1f89 Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Mon, 3 Nov 2025 23:00:43 +0100 Subject: [PATCH 52/87] fix remove_dc() type hints --- src/pyamapping/mappings.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/pyamapping/mappings.py b/src/pyamapping/mappings.py index 0461ea4..b73ff59 100644 --- a/src/pyamapping/mappings.py +++ b/src/pyamapping/mappings.py @@ -831,18 +831,16 @@ def fold( return np.abs((x - y2) % (2 * L) - L) + y1 -def remove_dc( - x: Union[float, ArrayLike], -) -> Union[float, np.ndarray]: +def remove_dc(x: np.darray) -> np.ndarray: """Remove DC bias. Parameters ---------- - x (Union[float, np.typing.ArrayLike]): input value or array + x (np.ndarray): input array Returns ------- - Union[float, np.ndarray]: normalized / scaled array + np.ndarray: mean-free array """ return x - np.mean(x) From c869f41438c1767619297bf4a1f4640e72ab6c00 Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Mon, 3 Nov 2025 23:01:37 +0100 Subject: [PATCH 53/87] add remove_dc() example --- notebooks/pyamapping-examples.ipynb | 46 +++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index 51cec71..626b128 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -1972,6 +1972,52 @@ "xs.plot(label='sine').norm_rms(0.5).plot(label='norm_rms to 0.5');\n", "plt.legend(loc='upper right'); plt.grid()" ] + }, + { + "cell_type": "markdown", + "id": "156", + "metadata": {}, + "source": [ + "### `remove_dc`\n", + "\n", + "- `remove_dc(x)` removes the signal's mean.\n", + "- The mapping function is:\n", + " $$ f(x) = x - \\left< x \\right> $$\n", + "- i.e. the signals mean is shifted to zero.\n", + "- Note that this could cause a signal to clip [-1,1]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "157", + "metadata": {}, + "outputs": [], + "source": [ + "pam.remove_dc(np.array([1,2,3,4]))" + ] + }, + { + "cell_type": "markdown", + "id": "158", + "metadata": {}, + "source": [ + "- ChainableArray.remove_dc uses self as input.\n", + "- Here a mapping examples and plots" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "159", + "metadata": {}, + "outputs": [], + "source": [ + "ts = chain(np.linspace(0, 0.1, 500))\n", + "xs = np.sin(2*np.pi*25*ts)**2\n", + "xs.plot(label='sine').remove_dc().plot(label='remove_dc output');\n", + "plt.legend(loc='upper right'); plt.grid()" + ] } ], "metadata": {}, From fbeb49f71512b96cb722998696e2c8b73f5726fe Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Mon, 3 Nov 2025 23:21:50 +0100 Subject: [PATCH 54/87] fix gain() type hints --- src/pyamapping/mappings.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/pyamapping/mappings.py b/src/pyamapping/mappings.py index b73ff59..9941262 100644 --- a/src/pyamapping/mappings.py +++ b/src/pyamapping/mappings.py @@ -877,22 +877,20 @@ def norm_rms(x: np.ndarray, rms=1.0): return (x / rms_of_x) * rms if rms_of_x != 0 else x -def gain( - x: Union[float, ArrayLike], db: Optional[float] = None, amp: Optional[float] = None -): +def gain(x: np.ndarray, db: Optional[float] = None, amp: Optional[float] = None): """Apply gain, either as dB (SPL) or scalar factor amp. No operation done if neither argument is given, it applies both if both are given. Parameters ---------- - x (Union[float, np.typing.ArrayLike]): input value or array + x (np.ndarray): input array db (None or float): dB SPL = gain 10**(db/20), e.g. -6 dB ~ factor 0.5 amp (None or float): gain factor Returns ------- - Union[float, np.ndarray]: scaled (amplified / attenuated) array + np.ndarray: scaled (amplified / attenuated) array """ if db: sig = x * dbamp(db) From 703ebd2695c9949a713ca66f79d873d65c19409e Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Mon, 3 Nov 2025 23:22:43 +0100 Subject: [PATCH 55/87] add gain() example --- notebooks/pyamapping-examples.ipynb | 48 +++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index 626b128..1fd8e25 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -2018,6 +2018,54 @@ "xs.plot(label='sine').remove_dc().plot(label='remove_dc output');\n", "plt.legend(loc='upper right'); plt.grid()" ] + }, + { + "cell_type": "markdown", + "id": "160", + "metadata": {}, + "source": [ + "### `gain`\n", + "\n", + "- `gain(x, db=None, amp=None` applies gain in either dB or amp.\n", + "- The mapping function is:\n", + " $$ f(x) = \\left\\{\\begin{align*}\n", + " x\\cdot \\text{db\\_to\\_amp}(\\text{db}) & ~~\\text{if~ } & \\text{db} \\neq \\text{None}\\\\\n", + " x\\cdot \\text{amp} & ~~\\text{elif~} & \\text{amp} \\neq \\text{None}\\\\\n", + " x & ~~\\text{else~} & ~ \\\\\n", + " \\end{align*}\\right. $$" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "161", + "metadata": {}, + "outputs": [], + "source": [ + "pam.gain(np.array([1,2,3,4]), amp=2)" + ] + }, + { + "cell_type": "markdown", + "id": "162", + "metadata": {}, + "source": [ + "- ChainableArray.gain uses self as input.\n", + "- Here a mapping examples and plots" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "163", + "metadata": {}, + "outputs": [], + "source": [ + "ts = chain(np.linspace(0, 0.1, 500))\n", + "xs = np.sin(2*np.pi*25*ts)\n", + "xs.plot(label='sine').gain(db=-6).plot(label='-6 dB gain');\n", + "plt.legend(loc='upper right'); plt.grid()" + ] } ], "metadata": {}, From ee852c45a4afaa2c05024731858ae3722d029591 Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Tue, 4 Nov 2025 13:58:03 +0100 Subject: [PATCH 56/87] fix remove_dc() type hint error --- src/pyamapping/mappings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pyamapping/mappings.py b/src/pyamapping/mappings.py index 9941262..bc265c5 100644 --- a/src/pyamapping/mappings.py +++ b/src/pyamapping/mappings.py @@ -831,7 +831,7 @@ def fold( return np.abs((x - y2) % (2 * L) - L) + y1 -def remove_dc(x: np.darray) -> np.ndarray: +def remove_dc(x: np.ndarray) -> np.ndarray: """Remove DC bias. Parameters From e54692f839e9f3dd782d0db56311c1ea7054fe19 Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Tue, 4 Nov 2025 15:09:13 +0100 Subject: [PATCH 57/87] remove obsolete linspace() --- src/pyamapping/mappings.py | 26 +------------------------- 1 file changed, 1 insertion(+), 25 deletions(-) diff --git a/src/pyamapping/mappings.py b/src/pyamapping/mappings.py index bc265c5..efb8a7e 100644 --- a/src/pyamapping/mappings.py +++ b/src/pyamapping/mappings.py @@ -901,35 +901,12 @@ def gain(x: np.ndarray, db: Optional[float] = None, amp: Optional[float] = None) return sig -def linspace( - x: Union[float, int, ArrayLike], x1: float, x2: float, endpoint: bool = True -) -> np.ndarray: - """Create np.linspace from x1 to x2 in int(x) resp len(x) steps. - - Parameters - ---------- - x (Union[float, int, ArrayLike]): length or array of which only shape is used - x1 (float): target interval one side - x2 (float): target interval other side - endpoint (bool): forwarded to np.linspace - - Returns - ------- - Union[float, np.ndarray]: array of length len(x) - (resp. int(x) if x is float) of numbers between x1 and x2 - """ - if isinstance(x, np.ndarray): - return np.linspace(x1, x2, x.shape[0], endpoint=endpoint) - else: - return np.linspace(x1, x2, int(abs(x)), endpoint=endpoint) - - def lin_to_ecdf( x: Union[float, ArrayLike], ref_data: np.ndarray, sorted: bool = False ) -> Union[float, np.ndarray]: """Map data using empiric cumulative distribution function as mapping. - This meann feature values are mapped to quantiles. + This means feature values are mapped to quantiles. if sorted==True: ref_data is regarded as sorted, speeding repeated invocations. Parameters @@ -1202,7 +1179,6 @@ def _list_numpy_ufuncs(): linexp, linlin, linpoly, - linspace, mel_to_hz, midi_to_cps, midi_to_ratio, From 39f4abaf1fb2a0602da0ad7a8d12956ab4a98734 Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Tue, 4 Nov 2025 15:28:56 +0100 Subject: [PATCH 58/87] remove linspace(), fix lin_ecdf() extrapolation --- src/pyamapping/__init__.py | 1 - src/pyamapping/mappings.py | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/pyamapping/__init__.py b/src/pyamapping/__init__.py index e37069d..09d7893 100644 --- a/src/pyamapping/__init__.py +++ b/src/pyamapping/__init__.py @@ -45,7 +45,6 @@ linexp, linlin, linpoly, - linspace, mel_to_hz, midi_to_cps, midi_to_ratio, diff --git a/src/pyamapping/mappings.py b/src/pyamapping/mappings.py index efb8a7e..d5baf7e 100644 --- a/src/pyamapping/mappings.py +++ b/src/pyamapping/mappings.py @@ -922,7 +922,7 @@ def lin_to_ecdf( """ if sorted: return interp( - x, ref_data, np.arange(1, len(ref_data) + 1) / float(len(ref_data)) + x, ref_data, np.arange(1, len(ref_data) + 1) / float(len(ref_data), left=0) ) else: return interp(x, *ecdf(ref_data)) From d72f1e599af0d4dec162888ce670b13aaa667828 Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Tue, 4 Nov 2025 15:30:11 +0100 Subject: [PATCH 59/87] add ecdf(), lin_to_ecdf(), ecdf_to_lin() examples --- notebooks/pyamapping-examples.ipynb | 156 ++++++++++++++++++++++++++++ 1 file changed, 156 insertions(+) diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index 1fd8e25..835ea73 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -2066,6 +2066,162 @@ "xs.plot(label='sine').gain(db=-6).plot(label='-6 dB gain');\n", "plt.legend(loc='upper right'); plt.grid()" ] + }, + { + "cell_type": "markdown", + "id": "164", + "metadata": {}, + "source": [ + "### `ecdf`\n", + "\n", + "- `ecdf(x, selection=slice())` computes the empirical cumulative distribution function for x.\n", + "- it basically:\n", + " - sorts x to obtain locations for the steps (step_x)\n", + " - creates a step function with len(x)+1 steps (these values become step_y)\n", + " - returns the step_x and step_y coordinates for the given selection\n", + "- Applications:\n", + " - This enables handcrafted mapping functions such as for using `ChainableArray.interp()`.\n", + " - it is used in `lin_to_ecdf()` and `ecdf_to_lin()`\n", + "- Remarks:\n", + " - cdf steps by 1/n occur at points in the sorted data.\n", + " - the values are the cdf at (i.e. including) the data point\n", + " - in consequence the correct cdf for any point left of min(x) is 0\n", + " - however, as there are no data points left of min(x), `interp()` would rather hold, i.e. stay on value 1/n\n", + " - use left=0 as remedy to get cdf=0 for values < min(x)\n", + " - there is no extrapolation problem on the right side: hold on 1 is correct for any v > max(x)\n", + " - note that interp would interpolate between these points, so not generate a step function" + ] + }, + { + "cell_type": "markdown", + "id": "165", + "metadata": {}, + "source": [ + "**Example 1**: (compute once - use many)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "166", + "metadata": {}, + "outputs": [], + "source": [ + "from pyamapping import ecdf\n", + "\n", + "data = np.array([1, 3, 1.5, 3.5, 2, 5, 8, 9, 16]) # your data, unsorted\n", + "myecdf = ecdf(data) # compute the (xc, yc) for interp()\n", + "\n", + "# now myecdf may be used many times\n", + "xn = chain(np.linspace(0, 20, 50)) # your custom x (at which you need ecdf)\n", + "yn = xn.interp(*myecdf, left=0) # extra argument to specify left extrapolation\n", + "\n", + "# plot data, ecdf and results of interp\n", + "plt.plot(data, np.zeros_like(data), \"bx\", label=\"data\")\n", + "plt.plot(*myecdf, \"ro\", ms=5, label=\"ecdf for data\")\n", + "plt.plot(xn, yn, \"ko-\", lw=0.5, ms=2, label=\"your applied ecdf to custom data\")\n", + "plt.grid()\n" + ] + }, + { + "cell_type": "markdown", + "id": "167", + "metadata": {}, + "source": [ + "**Example 2:** (compute and map in one go)\n", + "\n", + "```chain(otherdata).interp(*ecdf(data))```\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "168", + "metadata": {}, + "outputs": [], + "source": [ + "newdata = chain(np.array([0.5, 3.25, 20]))\n", + "newdata.interp(*ecdf(data), left=0) # turn newdata into ecdfs of data " + ] + }, + { + "cell_type": "markdown", + "id": "169", + "metadata": {}, + "source": [ + "### `lin_to_ecdf`\n", + "\n", + "- `lin_to_ecdf(x, ref_data, sorted=False)` maps data using the empiric cumulative \n", + " distribution function as mapping.\n", + " - This means feature values are mapped to quantiles.\n", + " - if `sorted==True`, `ref_data` is regarded as sorted, speeding repeated invocations.\n", + "- Note that left=0 argument to interp() is used to make sure cdf=0 for values < min(ref_data)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "170", + "metadata": {}, + "outputs": [], + "source": [ + "data_feat = np.random.randn(200) # data used for crafting the mapping\n", + "test_data = np.linspace(-3, 3, 200) # data to apply mapping to\n", + "chain(test_data).lin_to_ecdf(data_feat, sorted=False).plot(xs=test_data);" + ] + }, + { + "cell_type": "markdown", + "id": "171", + "metadata": {}, + "source": [ + "### `ecdf_to_lin`\n", + "\n", + "- `ecdf_to_lin(x, ref_data, sorted=False)` maps data using the inverse empiric cumulative \n", + " distribution function as mapping.\n", + " - if ref_data is omitted, x is used instead.\n", + " - if `sorted==True`, `ref_data` is regarded as sorted, speeding repeated invocations." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "172", + "metadata": {}, + "outputs": [], + "source": [ + "# ecdf_to_lin\n", + "data = chain(np.random.randn(500)).normalize(0,10) # some quantiles, i.e. in [0,1]\n", + "test_data = np.linspace(0, 1, 100) # data to apply mapping to\n", + "chain(test_data).ecdf_to_lin(data).plot(xs=test_data)\n", + "\n", + "plt.axvline(0.5, ls=\":\", color='k'); \n", + "plt.xlabel('test data, resp. quantile'); plt.ylabel('feature values')\n", + "plt.axhline(np.median(data), ls=\":\", color='k');" + ] + }, + { + "cell_type": "markdown", + "id": "173", + "metadata": {}, + "source": [ + "- quantiles mapping should pass a cdf array \n", + " - so that this does not need to be computed each invocation" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "174", + "metadata": {}, + "outputs": [], + "source": [ + "data = chain(np.random.randn(200)) # data used for crafting the mapping\n", + "test_data = np.linspace(-3, 3, 200) # data to apply mapping to\n", + "\n", + "chain(test_data).interp(*ecdf(data)).plot(xs=test_data, label='full data ecdf');\n", + "chain(test_data).interp(*ecdf(data, np.s_[20:-15:10])).plot(\"r-\", xs=test_data, ms=1, label='ecdf sliced');" + ] } ], "metadata": {}, From e36bb858101f52ee9b62524820ce3fb87f3e099f Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Tue, 4 Nov 2025 18:50:33 +0100 Subject: [PATCH 60/87] update .plot() for mapping with xs arg --- notebooks/pyamapping-examples.ipynb | 54 ++++++++++++----------------- 1 file changed, 22 insertions(+), 32 deletions(-) diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index 835ea73..1d0c949 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -175,6 +175,7 @@ "- `to_array` - back to numpy ndarray\n", "- `to_asig` - convert into pya.Asig\n", "- `plot` - plot signal(s) as time series\n", + " - optional kwarg 'xs' allows to pass x values for data.\n", "- `mapvec` - map function on self by using numpy.vectorize\n", "- `map` - apply function directly to the array itself\n", "\n", @@ -292,8 +293,8 @@ "outputs": [], "source": [ "# plot mapping function (output vs input)\n", - "ys = xs.linlin(0.25, 0.75, -1, 1, \"minmax\")\n", - "plt.figure(figsize=(3, 1.5)); plt.plot(xs, ys); plt.grid(); " + "plt.figure(figsize=(3, 1.5)); plt.grid();\n", + "xs.linlin(0.25, 0.75, -1, 1, \"minmax\").plot(xs=xs); " ] }, { @@ -362,9 +363,7 @@ "outputs": [], "source": [ "# plot linexp mapping function (output vs input)\n", - "ys = xs.linexp(0.25, 0.85, 0.2, 2)\n", - "plt.figure(figsize=(3, 1.5)); plt.plot(xs, ys); plt.grid(); \n", - "plt.plot(xs, ys); " + "ys = xs.linexp(0.25, 0.85, 0.2, 2).plot(xs=xs)" ] }, { @@ -438,9 +437,7 @@ "outputs": [], "source": [ "# plot linexp mapping function (output vs input)\n", - "ys = xs.explin(0.01, 1, 0, 20)\n", - "plt.figure(figsize=(3, 1.5)); plt.plot(xs, ys); plt.grid(); \n", - "plt.plot(xs, ys); " + "ys = xs.explin(0.01, 1, 0, 20).plot(xs=xs)" ] }, { @@ -651,8 +648,7 @@ "outputs": [], "source": [ "# plot mapping function (output vs input)\n", - "ys = xs.clip(0.25, 0.75)\n", - "plt.figure(figsize=(3, 1.5)); plt.plot(xs, ys, label=''); plt.grid(); " + "ys = xs.clip(0.25, 0.75).plot(xs=xs, label=''); plt.grid(); " ] }, { @@ -822,9 +818,7 @@ "outputs": [], "source": [ "xs = chain(np.arange(-12, 13)) # one octave around any note\n", - "ys = xs.midi_to_ratio()\n", - "\n", - "plt.plot(xs, ys, \"r-\", label=\"midi_to_ratio result\")\n", + "ys = xs.midi_to_ratio().plot(xs=xs, c=\"r\", ls=\"-\", label=\"midi_to_ratio result\")\n", "plt.plot(0, 1, \"ro\", label=\"midi_ratio of 0\")\n", "plt.legend(); plt.grid();" ] @@ -1042,8 +1036,7 @@ "outputs": [], "source": [ "xs = chain(np.arange(-60, 0, 6)) # some 6 dB steps\n", - "ys = xs.dbamp()\n", - "plt.plot(xs, ys, \"ro-\", ms=2,label=\"db_to_amp result [arb. unit]\")\n", + "ys = xs.dbamp().plot(xs=xs, marker=\"o\", ms=2, label=\"db_to_amp result [arb. unit]\")\n", "plt.legend(); plt.grid();" ] }, @@ -1215,9 +1208,8 @@ "outputs": [], "source": [ "xs = chain(np.arange(1, 10000))\n", - "plt.plot(xs, pam.hz_to_mel(xs));\n", - "plt.xlabel('frequencies [Hz]'); plt.ylabel('mel scale (Slaney)');\n", - "plt.grid()" + "xs.hz_to_mel().plot(xs=xs)\n", + "plt.xlabel('frequencies [Hz]'); plt.ylabel('mel scale (Slaney)'); plt.grid();" ] }, { @@ -1237,8 +1229,7 @@ "outputs": [], "source": [ "xs = chain(np.arange(21, 120, 7)).midicps() # frequencies of fifth series\n", - "ys = xs.hz_to_mel(htk=True) \n", - "plt.plot(xs, ys, \"o-\", label=\"mel values for frequencies\"); \n", + "xs.hz_to_mel(htk=True).plot(xs=xs, marker=\"o\", label=\"mel values for frequencies\"); \n", "plt.xlabel(\"frequency [Hz]\"); plt.ylabel(\"mel scale\"); \n", "plt.legend(); plt.grid(); plt.loglog()\n", "plt.plot([1000], [1000], \"ro-\", label=\"a reference point\");" @@ -1287,7 +1278,7 @@ "source": [ "xs = chain(np.arange(-3, 3, 0.01))\n", "for theta in [0.1, 0.5, 1, 3]:\n", - " plt.plot(xs, xs.distort(theta), label=f\"threshold = {theta}\")\n", + " xs.distort(theta).plot(xs=xs, label=f\"threshold = {theta}\")\n", "plt.xlabel('input'); plt.ylabel('output'); plt.grid(); \n", "plt.legend(); plt.title(\"distort mapping function\");" ] @@ -1300,8 +1291,7 @@ "outputs": [], "source": [ "ts = chain(np.linspace(0, 0.1, 500))\n", - "xs = np.sin(2*np.pi*50*ts)\n", - "xs.plot(label='sine').distort(0.3).plot(label='distorted');\n", + "np.sin(2*np.pi*50*ts).plot(label='sine').distort(0.3).plot(label='distorted');\n", "plt.legend(loc='upper right');" ] }, @@ -1349,7 +1339,7 @@ "outputs": [], "source": [ "xs = chain(np.arange(-3, 3, 0.01))\n", - "plt.plot(xs, xs.softclip())\n", + "xs.softclip().plot(xs=xs)\n", "plt.xlabel('input'); plt.ylabel('output'); plt.grid(); \n", "plt.title(\"softclip mapping function\");" ] @@ -1408,9 +1398,9 @@ "outputs": [], "source": [ "xs = chain(np.arange(0, 1, 0.01))\n", - "plt.plot(xs, xs.scurve())\n", + "xs.scurve().plot(xs=xs)\n", "plt.xlabel('input'); plt.ylabel('output'); plt.grid(); \n", - "plt.legend(); plt.title(\"scurve mapping function\");" + "plt.title(\"scurve mapping function\");" ] }, { @@ -1421,7 +1411,7 @@ "outputs": [], "source": [ "ts = chain(np.linspace(0, 0.1, 500))\n", - "xs = np.sin(2*np.pi*50*ts).linlin(-1, 1, 0, 1)\n", + "xs = (2*np.pi*50*ts).sin().linlin(-1, 1, 0, 1)\n", "xs.plot(label='sine with offset').scurve().plot(label='scurve distorted');\n", "plt.legend(loc='upper right');" ] @@ -1469,7 +1459,7 @@ "source": [ "xs = chain(np.arange(-10, 10, 0.005))\n", "for tau in [0.2, 0.5, 1, 2]:\n", - " plt.plot(xs, xs.lcurve(tau=tau), label=f'lcurve for tau={tau}')\n", + " xs.lcurve(tau=tau).plot(xs=xs, label=f'lcurve for tau={tau}')\n", "plt.xlabel('input'); plt.ylabel('output'); plt.grid(); \n", "plt.legend(); plt.title(\"lcurve mapping function\");" ] @@ -1530,7 +1520,7 @@ "outputs": [], "source": [ "xs = chain(np.arange(-5, 5, 0.01))\n", - "plt.plot(xs, xs.wrap(y1=-1, y2=1))\n", + "xs.wrap(y1=-1, y2=1).plot(xs=xs)\n", "plt.xlabel('input'); plt.ylabel('output'); plt.grid(); \n", "plt.title(\"wrap mapping function\");" ] @@ -1590,7 +1580,7 @@ "outputs": [], "source": [ "xs = chain(np.arange(-5, 5, 0.01))\n", - "plt.plot(xs, xs.fold(y1=-1, y2=1))\n", + "xs.fold(y1=-1, y2=1).plot(xs=xs)\n", "plt.xlabel('input'); plt.ylabel('output'); plt.grid(); \n", "plt.title(\"wrap mapping function\");" ] @@ -1809,7 +1799,7 @@ "xs = chain(np.arange(-10, 10, 0.005))\n", "for i, mu in enumerate([-2, 0, 2]):\n", " for j, tau in enumerate([0.2, 0.5, 1]):\n", - " plt.plot(xs, xs.fermi(tau, mu), color=['r','g','b'][i], \n", + " xs.fermi(tau, mu).plot(xs=xs, color=['r','g','b'][i], \n", " lw=j+1, label=f'lcurve for tau={tau}')\n", "plt.xlabel('input'); plt.ylabel('output'); plt.grid(); \n", "plt.legend(fontsize=8); plt.title(\"fermi curve mapping functions\");" @@ -1872,7 +1862,7 @@ "outputs": [], "source": [ "ts = chain(np.linspace(0, 0.1, 500))\n", - "xs = np.sin(2*np.pi*50*ts)\n", + "xs = (2*np.pi*50*ts).sin()\n", "xs.plot(label='sine').normalize(0.5,1).plot(label='normalized to [0.5, 1]');\n", "plt.legend(loc='upper right'); plt.grid()" ] From 02781780b029d3ff9f3566bb8b4abe4a854566a8 Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Tue, 4 Nov 2025 21:06:47 +0100 Subject: [PATCH 61/87] fix linspace removal bug --- src/pyamapping/__init__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/pyamapping/__init__.py b/src/pyamapping/__init__.py index 09d7893..cb83831 100644 --- a/src/pyamapping/__init__.py +++ b/src/pyamapping/__init__.py @@ -84,7 +84,6 @@ "linexp", "linlin", "linpoly", - "linspace", "midi_to_cps", "midi_to_ratio", "norm_peak", From 76c7ac4f172ba8e67d2932983a6736827a04a132 Mon Sep 17 00:00:00 2001 From: Fabian Hommel Date: Wed, 5 Nov 2025 10:27:51 +0100 Subject: [PATCH 62/87] Updated maximum python version for testing matrix in github workflow. --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d5c6825..e6e0739 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -61,7 +61,7 @@ jobs: matrix: python: - "3.7" # oldest Python supported by PSF - - "3.11" # newest Python that is stable + - "3.13" # newest Python that is stable platform: - ubuntu-latest - macos-latest @@ -110,7 +110,7 @@ jobs: steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 - with: {python-version: "3.11"} + with: {python-version: "3.12"} - name: Retrieve pre-built distribution files uses: actions/download-artifact@v3 with: {name: python-distribution-files, path: dist/} From bf3b9825246cae61eef6be03c42db271423cd86d Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Wed, 5 Nov 2025 17:26:58 +0100 Subject: [PATCH 63/87] correct wrap() example plot title --- notebooks/pyamapping-examples.ipynb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index 1d0c949..60237d7 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -1581,8 +1581,7 @@ "source": [ "xs = chain(np.arange(-5, 5, 0.01))\n", "xs.fold(y1=-1, y2=1).plot(xs=xs)\n", - "plt.xlabel('input'); plt.ylabel('output'); plt.grid(); \n", - "plt.title(\"wrap mapping function\");" + "plt.xlabel('input'); plt.ylabel('output'); plt.grid(); " ] }, { From d57f6cb0fb7d9bd16bf5e970fd7d2332401cd9d3 Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Wed, 5 Nov 2025 19:15:18 +0100 Subject: [PATCH 64/87] move ChainableArray to separate module --- notebooks/pyamapping-examples.ipynb | 187 +++++++++++------------ src/pyamapping/__init__.py | 136 ++++++++++++++++- src/pyamapping/chainable_array.py | 108 +++++++++++++ src/pyamapping/mappings.py | 229 +--------------------------- 4 files changed, 331 insertions(+), 329 deletions(-) create mode 100644 src/pyamapping/chainable_array.py diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index 60237d7..c27d591 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -101,7 +101,7 @@ "metadata": {}, "outputs": [], "source": [ - "from pyamapping.mappings import _list_numpy_ufuncs, pyamapping_functions\n", + "from pyamapping import _list_numpy_ufuncs, pyamapping_functions\n", "\n", "# print (i) a compact list of all unary and binary numpy functions \n", "# and (ii) all pyamapping functions\n", @@ -1097,20 +1097,9 @@ "plt.legend(); plt.grid();" ] }, - { - "cell_type": "code", - "execution_count": null, - "id": "87", - "metadata": {}, - "outputs": [], - "source": [ - "import librosa\n", - "help(librosa.mel_to_hz)" - ] - }, { "cell_type": "markdown", - "id": "88", + "id": "87", "metadata": {}, "source": [ "### `mel_to_hz`\n", @@ -1131,7 +1120,7 @@ { "cell_type": "code", "execution_count": null, - "id": "89", + "id": "88", "metadata": {}, "outputs": [], "source": [ @@ -1141,7 +1130,7 @@ { "cell_type": "code", "execution_count": null, - "id": "90", + "id": "89", "metadata": {}, "outputs": [], "source": [ @@ -1150,7 +1139,7 @@ }, { "cell_type": "markdown", - "id": "91", + "id": "90", "metadata": {}, "source": [ "- ChainableArray.mel_to_hz uses self as input.\n", @@ -1160,7 +1149,7 @@ { "cell_type": "code", "execution_count": null, - "id": "92", + "id": "91", "metadata": {}, "outputs": [], "source": [ @@ -1173,7 +1162,7 @@ { "cell_type": "code", "execution_count": null, - "id": "93", + "id": "92", "metadata": {}, "outputs": [], "source": [ @@ -1185,7 +1174,7 @@ }, { "cell_type": "markdown", - "id": "94", + "id": "93", "metadata": {}, "source": [ "### `hz_to_mel`\n", @@ -1203,7 +1192,7 @@ { "cell_type": "code", "execution_count": null, - "id": "95", + "id": "94", "metadata": {}, "outputs": [], "source": [ @@ -1214,7 +1203,7 @@ }, { "cell_type": "markdown", - "id": "96", + "id": "95", "metadata": {}, "source": [ "- ChainableArray.hz_to_mel uses self as input.\n", @@ -1224,7 +1213,7 @@ { "cell_type": "code", "execution_count": null, - "id": "97", + "id": "96", "metadata": {}, "outputs": [], "source": [ @@ -1237,7 +1226,7 @@ }, { "cell_type": "markdown", - "id": "98", + "id": "97", "metadata": {}, "source": [ "### `distort`\n", @@ -1253,7 +1242,7 @@ { "cell_type": "code", "execution_count": null, - "id": "99", + "id": "98", "metadata": {}, "outputs": [], "source": [ @@ -1262,7 +1251,7 @@ }, { "cell_type": "markdown", - "id": "100", + "id": "99", "metadata": {}, "source": [ "- ChainableArray.distort uses self as input.\n", @@ -1272,7 +1261,7 @@ { "cell_type": "code", "execution_count": null, - "id": "101", + "id": "100", "metadata": {}, "outputs": [], "source": [ @@ -1286,7 +1275,7 @@ { "cell_type": "code", "execution_count": null, - "id": "102", + "id": "101", "metadata": {}, "outputs": [], "source": [ @@ -1297,7 +1286,7 @@ }, { "cell_type": "markdown", - "id": "103", + "id": "102", "metadata": {}, "source": [ "### `softclip`\n", @@ -1315,7 +1304,7 @@ { "cell_type": "code", "execution_count": null, - "id": "104", + "id": "103", "metadata": {}, "outputs": [], "source": [ @@ -1324,7 +1313,7 @@ }, { "cell_type": "markdown", - "id": "105", + "id": "104", "metadata": {}, "source": [ "- ChainableArray.softclip uses self as input.\n", @@ -1334,7 +1323,7 @@ { "cell_type": "code", "execution_count": null, - "id": "106", + "id": "105", "metadata": {}, "outputs": [], "source": [ @@ -1347,7 +1336,7 @@ { "cell_type": "code", "execution_count": null, - "id": "107", + "id": "106", "metadata": {}, "outputs": [], "source": [ @@ -1359,7 +1348,7 @@ }, { "cell_type": "markdown", - "id": "108", + "id": "107", "metadata": {}, "source": [ "### `scurve`\n", @@ -1374,7 +1363,7 @@ { "cell_type": "code", "execution_count": null, - "id": "109", + "id": "108", "metadata": {}, "outputs": [], "source": [ @@ -1383,7 +1372,7 @@ }, { "cell_type": "markdown", - "id": "110", + "id": "109", "metadata": {}, "source": [ "- ChainableArray.scurve uses self as input.\n", @@ -1393,7 +1382,7 @@ { "cell_type": "code", "execution_count": null, - "id": "111", + "id": "110", "metadata": {}, "outputs": [], "source": [ @@ -1406,7 +1395,7 @@ { "cell_type": "code", "execution_count": null, - "id": "112", + "id": "111", "metadata": {}, "outputs": [], "source": [ @@ -1418,7 +1407,7 @@ }, { "cell_type": "markdown", - "id": "113", + "id": "112", "metadata": {}, "source": [ "### `lcurve`\n", @@ -1434,7 +1423,7 @@ { "cell_type": "code", "execution_count": null, - "id": "114", + "id": "113", "metadata": {}, "outputs": [], "source": [ @@ -1443,7 +1432,7 @@ }, { "cell_type": "markdown", - "id": "115", + "id": "114", "metadata": {}, "source": [ "- ChainableArray.lcurve uses self as input.\n", @@ -1453,7 +1442,7 @@ { "cell_type": "code", "execution_count": null, - "id": "116", + "id": "115", "metadata": {}, "outputs": [], "source": [ @@ -1467,7 +1456,7 @@ { "cell_type": "code", "execution_count": null, - "id": "117", + "id": "116", "metadata": {}, "outputs": [], "source": [ @@ -1479,7 +1468,7 @@ }, { "cell_type": "markdown", - "id": "118", + "id": "117", "metadata": {}, "source": [ "### `wrap`\n", @@ -1496,7 +1485,7 @@ { "cell_type": "code", "execution_count": null, - "id": "119", + "id": "118", "metadata": {}, "outputs": [], "source": [ @@ -1505,7 +1494,7 @@ }, { "cell_type": "markdown", - "id": "120", + "id": "119", "metadata": {}, "source": [ "- ChainableArray.wrap uses self as input.\n", @@ -1515,7 +1504,7 @@ { "cell_type": "code", "execution_count": null, - "id": "121", + "id": "120", "metadata": {}, "outputs": [], "source": [ @@ -1528,7 +1517,7 @@ { "cell_type": "code", "execution_count": null, - "id": "122", + "id": "121", "metadata": {}, "outputs": [], "source": [ @@ -1540,7 +1529,7 @@ }, { "cell_type": "markdown", - "id": "123", + "id": "122", "metadata": {}, "source": [ "### `fold`\n", @@ -1556,7 +1545,7 @@ { "cell_type": "code", "execution_count": null, - "id": "124", + "id": "123", "metadata": {}, "outputs": [], "source": [ @@ -1565,7 +1554,7 @@ }, { "cell_type": "markdown", - "id": "125", + "id": "124", "metadata": {}, "source": [ "- ChainableArray.wrap uses self as input.\n", @@ -1575,7 +1564,7 @@ { "cell_type": "code", "execution_count": null, - "id": "126", + "id": "125", "metadata": {}, "outputs": [], "source": [ @@ -1587,7 +1576,7 @@ { "cell_type": "code", "execution_count": null, - "id": "127", + "id": "126", "metadata": {}, "outputs": [], "source": [ @@ -1599,7 +1588,7 @@ }, { "cell_type": "markdown", - "id": "128", + "id": "127", "metadata": {}, "source": [ "## Tour of Mapping Functions: additional/novel mapping functions\n", @@ -1610,7 +1599,7 @@ }, { "cell_type": "markdown", - "id": "129", + "id": "128", "metadata": {}, "source": [ "### `linpoly`\n", @@ -1633,7 +1622,7 @@ }, { "cell_type": "markdown", - "id": "130", + "id": "129", "metadata": {}, "source": [ "- ChainableArray.linpoly uses self as input.\n", @@ -1643,7 +1632,7 @@ { "cell_type": "code", "execution_count": null, - "id": "131", + "id": "130", "metadata": {}, "outputs": [], "source": [ @@ -1656,7 +1645,7 @@ }, { "cell_type": "markdown", - "id": "132", + "id": "131", "metadata": {}, "source": [ "the following plot shows how the curve parameter influences the mapping function" @@ -1665,7 +1654,7 @@ { "cell_type": "code", "execution_count": null, - "id": "133", + "id": "132", "metadata": {}, "outputs": [], "source": [ @@ -1677,7 +1666,7 @@ }, { "cell_type": "markdown", - "id": "134", + "id": "133", "metadata": {}, "source": [ "### `interp_spline`\n", @@ -1694,7 +1683,7 @@ { "cell_type": "code", "execution_count": null, - "id": "135", + "id": "134", "metadata": {}, "outputs": [], "source": [ @@ -1710,7 +1699,7 @@ }, { "cell_type": "markdown", - "id": "136", + "id": "135", "metadata": {}, "source": [ "### `interp`\n", @@ -1727,7 +1716,7 @@ { "cell_type": "code", "execution_count": null, - "id": "137", + "id": "136", "metadata": {}, "outputs": [], "source": [ @@ -1743,7 +1732,7 @@ { "cell_type": "code", "execution_count": null, - "id": "138", + "id": "137", "metadata": {}, "outputs": [], "source": [ @@ -1756,7 +1745,7 @@ }, { "cell_type": "markdown", - "id": "139", + "id": "138", "metadata": {}, "source": [ "### `fermi`\n", @@ -1772,7 +1761,7 @@ { "cell_type": "code", "execution_count": null, - "id": "140", + "id": "139", "metadata": {}, "outputs": [], "source": [ @@ -1781,7 +1770,7 @@ }, { "cell_type": "markdown", - "id": "141", + "id": "140", "metadata": {}, "source": [ "- ChainableArray.fermi uses self as input.\n", @@ -1791,7 +1780,7 @@ { "cell_type": "code", "execution_count": null, - "id": "142", + "id": "141", "metadata": {}, "outputs": [], "source": [ @@ -1807,7 +1796,7 @@ { "cell_type": "code", "execution_count": null, - "id": "143", + "id": "142", "metadata": {}, "outputs": [], "source": [ @@ -1819,7 +1808,7 @@ }, { "cell_type": "markdown", - "id": "144", + "id": "143", "metadata": {}, "source": [ "### `normalize`\n", @@ -1837,7 +1826,7 @@ { "cell_type": "code", "execution_count": null, - "id": "145", + "id": "144", "metadata": {}, "outputs": [], "source": [ @@ -1846,7 +1835,7 @@ }, { "cell_type": "markdown", - "id": "146", + "id": "145", "metadata": {}, "source": [ "- ChainableArray.normalize uses self as input.\n", @@ -1856,7 +1845,7 @@ { "cell_type": "code", "execution_count": null, - "id": "147", + "id": "146", "metadata": {}, "outputs": [], "source": [ @@ -1868,7 +1857,7 @@ }, { "cell_type": "markdown", - "id": "148", + "id": "147", "metadata": {}, "source": [ "### `norm_peak`\n", @@ -1885,7 +1874,7 @@ { "cell_type": "code", "execution_count": null, - "id": "149", + "id": "148", "metadata": {}, "outputs": [], "source": [ @@ -1894,7 +1883,7 @@ }, { "cell_type": "markdown", - "id": "150", + "id": "149", "metadata": {}, "source": [ "- ChainableArray.norm_peak uses self as input.\n", @@ -1904,7 +1893,7 @@ { "cell_type": "code", "execution_count": null, - "id": "151", + "id": "150", "metadata": {}, "outputs": [], "source": [ @@ -1916,7 +1905,7 @@ }, { "cell_type": "markdown", - "id": "152", + "id": "151", "metadata": {}, "source": [ "### `norm_rms`\n", @@ -1933,7 +1922,7 @@ { "cell_type": "code", "execution_count": null, - "id": "153", + "id": "152", "metadata": {}, "outputs": [], "source": [ @@ -1942,7 +1931,7 @@ }, { "cell_type": "markdown", - "id": "154", + "id": "153", "metadata": {}, "source": [ "- ChainableArray.norm_rms uses self as input.\n", @@ -1952,7 +1941,7 @@ { "cell_type": "code", "execution_count": null, - "id": "155", + "id": "154", "metadata": {}, "outputs": [], "source": [ @@ -1964,7 +1953,7 @@ }, { "cell_type": "markdown", - "id": "156", + "id": "155", "metadata": {}, "source": [ "### `remove_dc`\n", @@ -1979,7 +1968,7 @@ { "cell_type": "code", "execution_count": null, - "id": "157", + "id": "156", "metadata": {}, "outputs": [], "source": [ @@ -1988,7 +1977,7 @@ }, { "cell_type": "markdown", - "id": "158", + "id": "157", "metadata": {}, "source": [ "- ChainableArray.remove_dc uses self as input.\n", @@ -1998,7 +1987,7 @@ { "cell_type": "code", "execution_count": null, - "id": "159", + "id": "158", "metadata": {}, "outputs": [], "source": [ @@ -2010,7 +1999,7 @@ }, { "cell_type": "markdown", - "id": "160", + "id": "159", "metadata": {}, "source": [ "### `gain`\n", @@ -2027,7 +2016,7 @@ { "cell_type": "code", "execution_count": null, - "id": "161", + "id": "160", "metadata": {}, "outputs": [], "source": [ @@ -2036,7 +2025,7 @@ }, { "cell_type": "markdown", - "id": "162", + "id": "161", "metadata": {}, "source": [ "- ChainableArray.gain uses self as input.\n", @@ -2046,7 +2035,7 @@ { "cell_type": "code", "execution_count": null, - "id": "163", + "id": "162", "metadata": {}, "outputs": [], "source": [ @@ -2058,7 +2047,7 @@ }, { "cell_type": "markdown", - "id": "164", + "id": "163", "metadata": {}, "source": [ "### `ecdf`\n", @@ -2083,7 +2072,7 @@ }, { "cell_type": "markdown", - "id": "165", + "id": "164", "metadata": {}, "source": [ "**Example 1**: (compute once - use many)\n" @@ -2092,7 +2081,7 @@ { "cell_type": "code", "execution_count": null, - "id": "166", + "id": "165", "metadata": {}, "outputs": [], "source": [ @@ -2114,7 +2103,7 @@ }, { "cell_type": "markdown", - "id": "167", + "id": "166", "metadata": {}, "source": [ "**Example 2:** (compute and map in one go)\n", @@ -2125,7 +2114,7 @@ { "cell_type": "code", "execution_count": null, - "id": "168", + "id": "167", "metadata": {}, "outputs": [], "source": [ @@ -2135,7 +2124,7 @@ }, { "cell_type": "markdown", - "id": "169", + "id": "168", "metadata": {}, "source": [ "### `lin_to_ecdf`\n", @@ -2150,7 +2139,7 @@ { "cell_type": "code", "execution_count": null, - "id": "170", + "id": "169", "metadata": {}, "outputs": [], "source": [ @@ -2161,7 +2150,7 @@ }, { "cell_type": "markdown", - "id": "171", + "id": "170", "metadata": {}, "source": [ "### `ecdf_to_lin`\n", @@ -2175,7 +2164,7 @@ { "cell_type": "code", "execution_count": null, - "id": "172", + "id": "171", "metadata": {}, "outputs": [], "source": [ @@ -2191,7 +2180,7 @@ }, { "cell_type": "markdown", - "id": "173", + "id": "172", "metadata": {}, "source": [ "- quantiles mapping should pass a cdf array \n", @@ -2201,7 +2190,7 @@ { "cell_type": "code", "execution_count": null, - "id": "174", + "id": "173", "metadata": {}, "outputs": [], "source": [ diff --git a/src/pyamapping/__init__.py b/src/pyamapping/__init__.py index cb83831..b750b6c 100644 --- a/src/pyamapping/__init__.py +++ b/src/pyamapping/__init__.py @@ -15,17 +15,20 @@ finally: del version, PackageNotFoundError +from typing import Callable, Union +import numpy as np + +from pyamapping.chainable_array import ChainableArray, chain from pyamapping.mappings import ( # some synonyms; the class and helper functions - ChainableArray, amp_to_db, ampdb, bilin, - chain, clip, cps_to_midi, cps_to_octave, cpsmidi, + cpsoct, curvelin, db_to_amp, dbamp, @@ -49,18 +52,23 @@ midi_to_cps, midi_to_ratio, midicps, + midiratio, norm_peak, norm_rms, normalize, octave_to_cps, + octcps, ratio_to_midi, - register_chain_fn, + ratiomidi, remove_dc, scurve, softclip, wrap, ) +# defined here: register_chain_fn, + + __all__ = [ "amp_to_db", "bilin", @@ -107,3 +115,125 @@ "chain", "register_chain_fn", ] # type: ignore + + +def register_numpy_ufunc(fn: np.ufunc, name: Union[None, str] = None) -> None: + """Register numpy ufunc with one or two ndarray arguments.""" + nin = fn.nin + if nin == 1: + + def method1(self, *args, **kwargs): + return ChainableArray(fn(self, *args, **kwargs)) + + method = method1 + + elif nin == 2: + + def method2(self, other, *args, **kwargs): + return ChainableArray(fn(self, other, *args, **kwargs)) + + method = method2 + + else: + print("warning: np.ufunc fn has nin not in [1,2]") + + def default_method(x): + return None + + method = default_method + + method.__name__ = fn.__name__ if not name else name + method.__doc__ = ( + f"{method.__name__} implements numpy.{method.__name__}" + + f"function for ChainableArray. See help(np.{fn.__name__})" + ) + + setattr(ChainableArray, method.__name__, method) + + +def register_chain_fn(fn: Callable, name: Union[None, str] = None) -> None: + """Register function fn for chaining, optionally under given name.""" + + def method(self, *args, **kwargs): + return ChainableArray(fn(self, *args, **kwargs)) + + method.__name__ = fn.__name__ if not name else name + method.__doc__ = ( + f"{method.__name__} implements the {method.__name__}" + + "operation for ChainableArray. Argument: np.ndarray" + ) + + setattr(ChainableArray, method.__name__, method) + + +def _list_numpy_ufuncs(): + """Return all numpy ufuncs with 1 or 2 ndarray arguments.""" + ufunc_list = [] + for attr_name in dir(np): # all attributes in numpy + attr = getattr(np, attr_name) + if isinstance(attr, np.ufunc): + if attr.nin <= 2: + ufunc_list.append(attr) + else: + print(attr, attr.nin) + return ufunc_list + + +# create class methods for numpy functions and pyamapping functions +for fn in _list_numpy_ufuncs(): # numpy_mapping_functions: + name = "abs" if fn.__name__ == "absolute" else None + register_numpy_ufunc(fn, name) + +# register some non-ufunc which nontheless should workd +register_chain_fn(np.angle, "angle") +ChainableArray.magnitude = ChainableArray.abs + +pyamapping_functions = [ + amp_to_db, + bilin, + clip, + cps_to_midi, + cps_to_octave, + curvelin, + db_to_amp, + distort, + ecdf_to_lin, + ecdf, + explin, + fermi, + fold, + gain, + hz_to_mel, + interp_spline, + interp, + lcurve, + lin_to_ecdf, + lincurve, + linexp, + linlin, + linpoly, + mel_to_hz, + midi_to_cps, + midi_to_ratio, + norm_peak, + norm_rms, + normalize, + octave_to_cps, + ratio_to_midi, + remove_dc, + scurve, + softclip, + wrap, +] + +for fn in pyamapping_functions: + register_chain_fn(fn, None) + +register_chain_fn(cpsmidi, "cpsmidi") +register_chain_fn(midicps, "midicps") +register_chain_fn(ratiomidi, "ratiomidi") +register_chain_fn(midiratio, "midiratio") +register_chain_fn(cpsoct, "cpsoct") +register_chain_fn(octcps, "octcps") +register_chain_fn(ampdb, "ampdb") +register_chain_fn(dbamp, "dbamp") diff --git a/src/pyamapping/chainable_array.py b/src/pyamapping/chainable_array.py new file mode 100644 index 0000000..599d7c6 --- /dev/null +++ b/src/pyamapping/chainable_array.py @@ -0,0 +1,108 @@ +"""ChainableArray - a subclass of numpy.ndarray.""" + +from typing import Any, Callable, TypeVar + +import numpy as np +from numpy.typing import ArrayLike + +NDArrayType = TypeVar("NDArrayType", bound=np.ndarray) + + +class ChainableArray(np.ndarray): + """subclass for simpler numpy mapping by chaining syntax.""" + + def __new__(cls, input_array, *args, **kwargs): + """Create new instance.""" + obj = np.asarray(input_array).view(cls) + return obj + + def __array_finalize__(self, obj): + """Finalize array.""" + if obj is None: + return + + def to_array(self): + """Convert self to np.ndarray.""" + return np.array(self) + + def to_asig(self, sr=44100): + """Convert self to pya.Asig.""" + from pya import Asig + + return Asig(self, sr=sr) + + def plot(self, *args, **kwargs): + """Plot self via matplotlib.""" + import matplotlib.pyplot as plt + + sr = kwargs.pop("sr", None) + if sr: + xs = np.arange(0, self.shape[0]) / sr + plt.plot(xs, self, *args, **kwargs) + plt.xlabel("time [s]") + else: + xs = kwargs.pop("xs", None) + if xs is not None: + plt.plot(xs, self, *args, **kwargs) + else: + plt.plot(self, *args, **kwargs) + + return self + + def mapvec( + self: NDArrayType, fn: Callable[..., Any], *args: Any, **kwargs: Any + ) -> NDArrayType: + """Map fn on self by using np.vectorize(). + + Parameters + ---------- + self (NDArrayType): array to map + fn (Callable[..., Any]): function to call on each element + + Returns + ------- + NDArrayType: mapping result as ChainableArray + """ + return np.vectorize(fn)(self, *args, **kwargs) + + def map( + self: NDArrayType, fn: Callable[..., Any], *args: Any, **kwargs: Any + ) -> NDArrayType: + """Apply function fn directly to self; on fail suggest to use mapvec(). + + Parameters + ---------- + self (np.ndarray): array used as input of fn + fn (Callable[..., Any]): mapping function + args and kwargs are passed on to fn + + Raises + ------ + TypeError: if fn fails to operate on np.ndarray as first argument. + mapvec() is then proposed as alternative. + + Returns + ------- + ChainableArray: the mapping result as ChainableArray + """ + try: + return chain(fn(self, *args, **kwargs)) + except (TypeError, ValueError, AttributeError) as e: + raise TypeError( + f"Function {fn.__name__} does not support NumPy arrays directly. " + "Use .mapvec() instead for np.vectorize elementwise mapping." + ) from e + + def __getattr__(self, name: str) -> Callable: + """Dynamically handle method calls.""" + if name.startswith("dynamic_"): + return lambda *args: f"Called {name} with {args}" + raise AttributeError( + f"'{self.__class__.__name__}' object has no attribute '{name}'" + ) + + +def chain(input_array: ArrayLike) -> ChainableArray: + """Turn np.ndarray into ChainableArray.""" + # ToDo: check difference to input_array.view(ChainableArray) + return ChainableArray(input_array) diff --git a/src/pyamapping/mappings.py b/src/pyamapping/mappings.py index d5baf7e..0286d0f 100644 --- a/src/pyamapping/mappings.py +++ b/src/pyamapping/mappings.py @@ -1,11 +1,11 @@ """Collection of audio related mapping functions.""" -from typing import Any, Callable, List, Optional, TypeVar, Union +from typing import List, Optional, Union import numpy as np from numpy.typing import ArrayLike -NDArrayType = TypeVar("NDArrayType", bound=np.ndarray) +from .chainable_array import ChainableArray, chain def linlin( @@ -957,103 +957,6 @@ def ecdf_to_lin( return interp(x, yc, xc) -# create subclass of numpy.ndarray - - -class ChainableArray(np.ndarray): - """subclass for simpler numpy mapping by chaining syntax.""" - - def __new__(cls, input_array, *args, **kwargs): - """Create new instance.""" - obj = np.asarray(input_array).view(cls) - return obj - - def __array_finalize__(self, obj): - """Finalize array.""" - if obj is None: - return - - def to_array(self): - """Convert self to np.ndarray.""" - return np.array(self) - - def to_asig(self, sr=44100): - """Convert self to pya.Asig.""" - from pya import Asig - - return Asig(self, sr=sr) - - def plot(self, *args, **kwargs): - """Plot self via matplotlib.""" - import matplotlib.pyplot as plt - - sr = kwargs.pop("sr", None) - if sr: - xs = np.arange(0, self.shape[0]) / sr - plt.plot(xs, self, *args, **kwargs) - plt.xlabel("time [s]") - else: - xs = kwargs.pop("xs", None) - if xs is not None: - plt.plot(xs, self, *args, **kwargs) - else: - plt.plot(self, *args, **kwargs) - - return self - - def mapvec( - self: NDArrayType, fn: Callable[..., Any], *args: Any, **kwargs: Any - ) -> NDArrayType: - """Map fn on self by using np.vectorize(). - - Parameters - ---------- - self (NDArrayType): array to map - fn (Callable[..., Any]): function to call on each element - - Returns - ------- - NDArrayType: mapping result as ChainableArray - """ - return np.vectorize(fn)(self, *args, **kwargs) - - def map( - self: NDArrayType, fn: Callable[..., Any], *args: Any, **kwargs: Any - ) -> NDArrayType: - """Apply function fn directly to self; on fail suggest to use mapvec(). - - Parameters - ---------- - self (np.ndarray): array used as input of fn - fn (Callable[..., Any]): mapping function - args and kwargs are passed on to fn - - Raises - ------ - TypeError: if fn fails to operate on np.ndarray as first argument. - mapvec() is then proposed as alternative. - - Returns - ------- - ChainableArray: the mapping result as ChainableArray - """ - try: - return chain(fn(self, *args, **kwargs)) - except (TypeError, ValueError, AttributeError) as e: - raise TypeError( - f"Function {fn.__name__} does not support NumPy arrays directly. " - "Use .mapvec() instead for np.vectorize elementwise mapping." - ) from e - - def __getattr__(self, name: str) -> Callable: - """Dynamically handle method calls.""" - if name.startswith("dynamic_"): - return lambda *args: f"Called {name} with {args}" - raise AttributeError( - f"'{self.__class__.__name__}' object has no attribute '{name}'" - ) - - def ecdf( x: np.ndarray, selection: slice = slice(None, None, None) ) -> tuple[np.ndarray, np.ndarray]: @@ -1082,131 +985,3 @@ def ecdf( xs = np.sort(x) ys = np.arange(1, len(xs) + 1) / float(len(xs)) return xs[selection], ys[selection] - - -def register_numpy_ufunc(fn: np.ufunc, name: Union[None, str] = None) -> None: - """Register numpy ufunc with one or two ndarray arguments.""" - nin = fn.nin - if nin == 1: - - def method1(self, *args, **kwargs): - return ChainableArray(fn(self, *args, **kwargs)) - - method = method1 - - elif nin == 2: - - def method2(self, other, *args, **kwargs): - return ChainableArray(fn(self, other, *args, **kwargs)) - - method = method2 - - else: - print("warning: np.ufunc fn has nin not in [1,2]") - - def default_method(x): - return None - - method = default_method - - method.__name__ = fn.__name__ if not name else name - method.__doc__ = ( - f"{method.__name__} implements numpy.{method.__name__}" - + f"function for ChainableArray. See help(np.{fn.__name__})" - ) - - setattr(ChainableArray, method.__name__, method) - - -def register_chain_fn(fn: Callable, name: Union[None, str] = None) -> None: - """Register function fn for chaining, optionally under given name.""" - - def method(self, *args, **kwargs): - return ChainableArray(fn(self, *args, **kwargs)) - - method.__name__ = fn.__name__ if not name else name - method.__doc__ = ( - f"{method.__name__} implements the {method.__name__}" - + "operation for ChainableArray. Argument: np.ndarray" - ) - - setattr(ChainableArray, method.__name__, method) - - -def _list_numpy_ufuncs(): - """Return all numpy ufuncs with 1 or 2 ndarray arguments.""" - ufunc_list = [] - for attr_name in dir(np): # all attributes in numpy - attr = getattr(np, attr_name) - if isinstance(attr, np.ufunc): - if attr.nin <= 2: - ufunc_list.append(attr) - else: - print(attr, attr.nin) - return ufunc_list - - -# create class methods for numpy functions and pyamapping functions -for fn in _list_numpy_ufuncs(): # numpy_mapping_functions: - name = "abs" if fn.__name__ == "absolute" else None - register_numpy_ufunc(fn, name) - -# register some non-ufunc which nontheless should workd -register_chain_fn(np.angle, "angle") -ChainableArray.magnitude = ChainableArray.abs - -pyamapping_functions = [ - amp_to_db, - bilin, - clip, - cps_to_midi, - cps_to_octave, - curvelin, - db_to_amp, - distort, - ecdf_to_lin, - ecdf, - explin, - fermi, - fold, - gain, - hz_to_mel, - interp_spline, - interp, - lcurve, - lin_to_ecdf, - lincurve, - linexp, - linlin, - linpoly, - mel_to_hz, - midi_to_cps, - midi_to_ratio, - norm_peak, - norm_rms, - normalize, - octave_to_cps, - ratio_to_midi, - remove_dc, - scurve, - softclip, - wrap, -] - -for fn in pyamapping_functions: - register_chain_fn(fn, None) - -register_chain_fn(cpsmidi, "cpsmidi") -register_chain_fn(midicps, "midicps") -register_chain_fn(ratiomidi, "ratiomidi") -register_chain_fn(midiratio, "midiratio") -register_chain_fn(cpsoct, "cpsoct") -register_chain_fn(octcps, "octcps") -register_chain_fn(ampdb, "ampdb") -register_chain_fn(dbamp, "dbamp") - - -def chain(input_array: ArrayLike) -> ChainableArray: - """Turn np.ndarray into ChainableArray.""" - # ToDo: check difference to input_array.view(ChainableArray) - return ChainableArray(input_array) From a4b0d82b26d08e59e0c30fbd2e7bd4c769a91237 Mon Sep 17 00:00:00 2001 From: Fabian Hommel Date: Thu, 6 Nov 2025 10:45:59 +0100 Subject: [PATCH 65/87] Added a few tests for mappings, also added scipy as a dependency to the setup.cfg --- setup.cfg | 1 + tests/test_mappings.py | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/setup.cfg b/setup.cfg index 333c4f6..cf14e4b 100644 --- a/setup.cfg +++ b/setup.cfg @@ -49,6 +49,7 @@ package_dir = # For more information, check out https://semver.org/. install_requires = numpy + scipy importlib-metadata; python_version<"3.8" diff --git a/tests/test_mappings.py b/tests/test_mappings.py index 21182be..02518af 100644 --- a/tests/test_mappings.py +++ b/tests/test_mappings.py @@ -1,4 +1,5 @@ import numpy as np +from pyamapping.mappings import bilin, curvelin, explin, lincurve, midi_to_ratio, ratio_to_midi import pytest from pyamapping import ( @@ -50,6 +51,11 @@ def test_midi_cps(): assert x == cps_to_midi(midi_to_cps(x)) +def test_midi_ratio(): + pytest.approx(midi_to_ratio(7), 1.4983070768766815) + pytest.approx(ratio_to_midi(2), 12.0) + + def test_db_amp(): for x in range(128): assert x == pytest.approx(amp_to_db(db_to_amp(x))) @@ -60,3 +66,30 @@ def test_hz_mel(): pytest.approx(mel_to_hz(549.64), 440) for x in range(128): assert x == pytest.approx(hz_to_mel(mel_to_hz(x))) + + +def test_explin(): + f = 220 * 2**(-5/12) + pytest.approx(explin(f, 220, 440, 0, 12), -5.0) + pytest.approx(explin(0.01, 0.001, 1.0, -30, 0, "max"), -20.0) + + +def test_lincurve(): + pytest.approx( + lincurve(np.array([0.0, 0.1, 0.4, 0.7, 1.0]), 0, 1, 0, 0.4), + np.array([0., 0.08385643, 0.25474431, 0.34852956, 0.4]) + ) + + +def test_curvelin(): + pytest.approx( + curvelin(np.array([0, 0.1, 0.3, 0.5]), 0, 0.5, 0, 10), + np.array([ 0., 0.94934752, 3.65734932, 10.]) + ) + + +def test_bilin(): + pytest.approx( + bilin(np.array([0, 20, 40, 60, 80, 100]), 60, 20, 80, 0, -20, 60), + np.array([-30., -20., -10., 0., 60., 120.]) + ) \ No newline at end of file From 49b8cdb12d8930a649ecd886f0990d832d726ea9 Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Thu, 6 Nov 2025 13:57:52 +0100 Subject: [PATCH 66/87] add tests and update test function names --- tests/test_mappings.py | 74 +++++++++++++++++++++++++++++++++++------- 1 file changed, 63 insertions(+), 11 deletions(-) diff --git a/tests/test_mappings.py b/tests/test_mappings.py index 02518af..f4b0a31 100644 --- a/tests/test_mappings.py +++ b/tests/test_mappings.py @@ -1,5 +1,4 @@ import numpy as np -from pyamapping.mappings import bilin, curvelin, explin, lincurve, midi_to_ratio, ratio_to_midi import pytest from pyamapping import ( @@ -12,6 +11,21 @@ mel_to_hz, midi_to_cps, ) +from pyamapping.mappings import ( + bilin, + cps_to_octave, + curvelin, + distort, + explin, + lcurve, + lincurve, + linexp, + midi_to_ratio, + octave_to_cps, + ratio_to_midi, + scurve, + softclip, +) def test_linlin(): @@ -44,32 +58,42 @@ def test_clip(): assert np.array_equal(clip(a1, 2, 4), a2) -def test_midi_cps(): +def test_midi_to_cps_to_midi(): assert midi_to_cps(69) == 440 assert cps_to_midi(440) == 69 for x in range(128): assert x == cps_to_midi(midi_to_cps(x)) -def test_midi_ratio(): +def test_midi_ratio_midi(): pytest.approx(midi_to_ratio(7), 1.4983070768766815) pytest.approx(ratio_to_midi(2), 12.0) -def test_db_amp(): +def test_cps_octave_cps(): + pytest.approx(octave_to_cps(5.75), 880) + pytest.approx(cps_to_octave(220), 3.75) + + +def test_db_amp_db(): for x in range(128): assert x == pytest.approx(amp_to_db(db_to_amp(x))) -def test_hz_mel(): +def test_hz_mel_hz(): pytest.approx(hz_to_mel(440), 549.64) pytest.approx(mel_to_hz(549.64), 440) - for x in range(128): + for x in np.arange(1, 128): assert x == pytest.approx(hz_to_mel(mel_to_hz(x))) +def test_linexp(): + pytest.approx(linexp(5, 1, 8, 2, 256), 32.0) + pytest.approx(linexp(7, 0, 5, 100, 300, "max"), 300) + + def test_explin(): - f = 220 * 2**(-5/12) + f = 220 * 2 ** (-5 / 12) pytest.approx(explin(f, 220, 440, 0, 12), -5.0) pytest.approx(explin(0.01, 0.001, 1.0, -30, 0, "max"), -20.0) @@ -77,19 +101,47 @@ def test_explin(): def test_lincurve(): pytest.approx( lincurve(np.array([0.0, 0.1, 0.4, 0.7, 1.0]), 0, 1, 0, 0.4), - np.array([0., 0.08385643, 0.25474431, 0.34852956, 0.4]) + np.array([0.0, 0.08385643, 0.25474431, 0.34852956, 0.4]), ) def test_curvelin(): pytest.approx( curvelin(np.array([0, 0.1, 0.3, 0.5]), 0, 0.5, 0, 10), - np.array([ 0., 0.94934752, 3.65734932, 10.]) + np.array([0.0, 0.94934752, 3.65734932, 10.0]), ) def test_bilin(): pytest.approx( bilin(np.array([0, 20, 40, 60, 80, 100]), 60, 20, 80, 0, -20, 60), - np.array([-30., -20., -10., 0., 60., 120.]) - ) \ No newline at end of file + np.array([-30.0, -20.0, -10.0, 0.0, 60.0, 120.0]), + ) + + +def test_distort(): + pytest.approx( + distort([0, 1, 2, 3], 1), + np.array([0.0, 0.5, 0.66666667, 0.75]), + ) + + +def test_softclip(): + pytest.approx( + softclip(np.arange(1, 5)), + np.array([0.75, 0.875, 0.91666667, 0.9375]), + ) + + +def test_scurve(): + pytest.approx( + scurve(np.arange(0, 1, 0.25)), + np.array([0.0, 0.15625, 0.5, 0.84375]), + ) + + +def test_lcurve(): + pytest.approx( + lcurve(np.array([-1, -0.5, 0, 0.5, 1])), + np.array([0.26894142, 0.37754067, 0.5, 0.62245933, 0.73105858]), + ) From 417f0e945f5661fa1901e0df79c95192654136bf Mon Sep 17 00:00:00 2001 From: Thomas Hermann Date: Thu, 6 Nov 2025 14:21:58 +0100 Subject: [PATCH 67/87] add more tests --- tests/test_mappings.py | 72 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/tests/test_mappings.py b/tests/test_mappings.py index f4b0a31..a421495 100644 --- a/tests/test_mappings.py +++ b/tests/test_mappings.py @@ -17,14 +17,23 @@ curvelin, distort, explin, + fermi, + fold, + gain, lcurve, lincurve, linexp, + linpoly, midi_to_ratio, + norm_peak, + norm_rms, + normalize, octave_to_cps, ratio_to_midi, + remove_dc, scurve, softclip, + wrap, ) @@ -140,8 +149,71 @@ def test_scurve(): ) +def test_fermi(): + pytest.approx( + fermi(np.array([-1, -0.5, 0, 0.5, 1])), + np.array([0.26894142, 0.37754067, 0.5, 0.62245933, 0.73105858]), + ) + + def test_lcurve(): pytest.approx( lcurve(np.array([-1, -0.5, 0, 0.5, 1])), np.array([0.26894142, 0.37754067, 0.5, 0.62245933, 0.73105858]), ) + + +def test_wrap(): + pytest.approx( + wrap(np.arange(-3, 5), 0, 3), + np.array([0, 1, 2, 0, 1, 2, 0, 1]), + ) + + +def test_fold(): + pytest.approx( + fold(np.arange(0, 13), 0, 4), + np.array([0, 1, 2, 3, 4, 3, 2, 1, 0, 1, 2, 3, 4]), + ) + + +def test_linpoly(): + pytest.approx( + linpoly(np.arange(-2, 3), 2.5, 100, 500, curve=1), + np.array([172.0, 268.0, 300.0, 332.0, 428.0]), + ) + + +def test_normalize(): + pytest.approx( + np.sort(normalize(np.random.rand(10)))[[0, -1]], + np.array([-1, 1]), + ) + + +def test_norm_peak(): + pytest.approx( + np.max(norm_peak(np.random.rand(10), 5)), + 5, + ) + + +def test_norm_rms(): + pytest.approx( + norm_rms(np.array([1, 0, 0, -1]), 1), + np.array([1.41421356, 0.0, 0.0, -1.41421356]), + ) + + +def test_remove_dc(): + pytest.approx( + remove_dc(np.array([1, 2, 3, 4])), + np.array([-1.5, -0.5, 0.5, 1.5]), + ) + + +def test_gain(): + pytest.approx( + gain(np.array([1, 2, 3, 4]), amp=2), + np.array([2, 4, 6, 8]), + ) From f9efca529207c269b1b81829e06da5649ed1d10b Mon Sep 17 00:00:00 2001 From: Fabian Hommel Date: Thu, 26 Mar 2026 12:37:01 +0100 Subject: [PATCH 68/87] Increased test coverage a tiny bit. Maybe need to switch to more elaborate test format? --- notebooks/pyamapping-examples.ipynb | 277 +++++++++++++++++++++++++--- tests/test_mappings.py | 8 + 2 files changed, 255 insertions(+), 30 deletions(-) diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index c27d591..e4934fb 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -67,7 +67,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "id": "2", "metadata": {}, "outputs": [], @@ -96,10 +96,45 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "id": "4", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "=== numpy functions with 1 argument ===\n", + "['absolute', 'absolute', 'arccos', 'arccosh', 'arccos', 'arccosh', 'arcsin',\n", + " 'arcsinh', 'arctan', 'arctanh', 'arcsin', 'arcsinh', 'arctan', 'arctanh',\n", + " 'bitwise_count', 'invert', 'invert', 'cbrt', 'ceil', 'conjugate', 'conjugate',\n", + " 'cos', 'cosh', 'deg2rad', 'degrees', 'exp', 'exp2', 'expm1', 'fabs', 'floor',\n", + " 'frexp', 'invert', 'isfinite', 'isinf', 'isnan', 'isnat', 'log', 'log10',\n", + " 'log1p', 'log2', 'logical_not', 'modf', 'negative', 'positive', 'rad2deg',\n", + " 'radians', 'reciprocal', 'rint', 'sign', 'signbit', 'sin', 'sinh', 'spacing',\n", + " 'sqrt', 'square', 'tan', 'tanh', 'trunc']\n", + "\n", + "=== numpy functions with 2 argument ===\n", + "['add', 'arctan2', 'arctan2', 'bitwise_and', 'left_shift', 'bitwise_or',\n", + " 'right_shift', 'bitwise_xor', 'copysign', 'divide', 'divmod', 'equal',\n", + " 'float_power', 'floor_divide', 'fmax', 'fmin', 'fmod', 'gcd', 'greater',\n", + " 'greater_equal', 'heaviside', 'hypot', 'lcm', 'ldexp', 'left_shift', 'less',\n", + " 'less_equal', 'logaddexp', 'logaddexp2', 'logical_and', 'logical_or',\n", + " 'logical_xor', 'matmul', 'matvec', 'maximum', 'minimum', 'remainder',\n", + " 'multiply', 'nextafter', 'not_equal', 'power', 'power', 'remainder',\n", + " 'right_shift', 'subtract', 'divide', 'vecdot', 'vecmat']\n", + "\n", + "=== pyamapping functions: ===\n", + "['amp_to_db', 'bilin', 'clip', 'cps_to_midi', 'cps_to_octave', 'curvelin',\n", + " 'db_to_amp', 'distort', 'ecdf_to_lin', 'ecdf', 'explin', 'fermi', 'fold',\n", + " 'gain', 'hz_to_mel', 'interp_spline', 'interp', 'lcurve', 'lin_to_ecdf',\n", + " 'lincurve', 'linexp', 'linlin', 'linpoly', 'mel_to_hz', 'midi_to_cps',\n", + " 'midi_to_ratio', 'norm_peak', 'norm_rms', 'normalize', 'octave_to_cps',\n", + " 'ratio_to_midi', 'remove_dc', 'scurve', 'softclip', 'wrap']\n" + ] + } + ], "source": [ "from pyamapping import _list_numpy_ufuncs, pyamapping_functions\n", "\n", @@ -314,20 +349,42 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "id": "20", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "np.float64(32.0)" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "pam.linexp(5, 1, 8, 2, 256)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "id": "21", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "np.float64(300.0)" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "pam.linexp(7, 0, 5, 100, 300, \"max\") # clip result to maximum input range" ] @@ -343,10 +400,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "id": "23", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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rTB37lzs2bMH06ZNS+9TExERERHZpXQH7e3bt8eNGzcwZMgQNZi0YsWKWLFiReJg0/DwcFVRRvPCCy+o2uxfffUVvvjiCzW5klSOscUa7URERERE5vBcA1ElFSa5dJgNGzY8s+31119XjYiIiIiI0u9plzgREREREVklqyz5aEz3v9k20zPCNjNHDks5HnluDkS1T3wP2Deef/vG82/feP7tW1wWxIBabKvFutk+aL93T18NXco+EhERERHZEol1fXx8UryNgy4tob2FSVnJq1evImfOnHDI4pk1tRrxly5dyvIa8WQd+B6wbzz/9o3n377x/Nu36CyIASUMl4A9T548SQq5ZNuednkR+fLls+g+yMli0G7f+B6wbzz/9o3n377x/Ns3bzPHgKn1sGs4EJWIiIiIyMoxaCciIiIisnIM2lPh5uaGr7/+Wi3JPvE9YN94/u0bz7994/m3b25WFgNmi4GoRERERET2jD3tRERERERWjkE7EREREZGVY9BORERERGTlGLQTEREREVk5Bu2pmDx5MgoWLAh3d3fUqFEDu3btypozQ1lq5MiRqFatmpp1NzAwEG3atMHJkyeT3ObRo0f46KOP4O/vDy8vL7Rr1w6RkZE8UzZo1KhRavblPn36JG7j+bdtV65cQadOndT/7xw5cqBcuXLYs2dP4vVSs2HIkCEICQlR1zdu3BinT5+26D5T5oiPj8fgwYNRqFAhdW6LFCmCYcOGqXOu4fm3HZs2bcLLL7+sZiCVv/OLFi1Kcn1azvXt27fRsWNHNeFSrly58O677+L+/ftm33cG7SmYN28e+vXrp8r97Nu3DxUqVECzZs1w/fp1s58YylobN25UAfmOHTuwevVqxMXFoWnTpnjw4EHibfr27YslS5Zg/vz56vZXr17Fq6++ylNlY3bv3o2ff/4Z5cuXT7Kd59923blzB7Vr14aLiwuWL1+OY8eOYezYsfD19U28zffff4+ffvoJU6dOxc6dO+Hp6ak+D+TLHGVvo0ePxpQpUzBp0iQcP35crcv5njhxYuJteP5tx4MHD1Q8J52ypqTlXEvAfvToURUvLF26VH0R6NGjh/l3Xko+kmnVq1fXffTRR4nr8fHxujx58uhGjhzJQ2bjrl+/Ll0suo0bN6r1u3fv6lxcXHTz589PvM3x48fVbbZv327BPaXMdO/ePV2xYsV0q1ev1tWrV0/Xu3dvtZ3n37Z9/vnnujp16iR7fUJCgi44OFg3ZsyYxG3ynnBzc9PNmTMni/aSzKVVq1a6d955J8m2V199VdexY0d1meffdgHQLVy4MHE9Lef62LFj6n67d+9OvM3y5ct1Dg4OuitXrph1f9nTnozHjx9j79696mcRjaOjo1rfvn27+b9NkUVFRUWppZ+fn1rKe0F63w3fDyVLlkRoaCjfDzZEfm1p1apVkvMseP5t2+LFi1G1alW8/vrrKj2uUqVK+OWXXxKvP3/+PCIiIpK8L3x8fFTKJD8Psr8XXngBa9euxalTp9T6wYMHsWXLFrRo0UKt8/zbj/Np+L8uS0mJkb8ZGrm9xIjSM29OzmZ99Gzs5s2bKs8tKCgoyXZZP3HihMX2i8wvISFB5TLLz+Vly5ZV2+Q/saurq/qPavx+kOso+5s7d65Kg5P0GGM8/7bt3LlzKj1C0iG/+OIL9R745JNP1P/5rl27Jv4fN/V5wP//2d/AgQMRHR2tOmKcnJzUZ//w4cNVCoTg+bcfEWn4vy5L+XJvyNnZWXXymfvvAYN2IhO9rUeOHFE9LWQfLl26hN69e6v8RBl0TvZFvqhLr9mIESPUuvS0y98AyWmVoJ1s299//42//voLs2fPRpkyZXDgwAHVcSMDFXn+yZowPSYZAQEB6hu3cXUQWQ8ODs6Kc0MW0KtXLzWoZP369ciXL1/idjnnkjJ19+7dJLfn+8E2SPqLDDCvXLmy6jGRJoONZTCSXJZeFp5/2yVVIkqXLp1kW6lSpRAeHq4ua3/z+Xlgm/r376962998801VNahz585q4LlUFRM8//YjOA3/12VpXJDkyZMnqqKMueNDBu3JkJ9Fq1SpovLcDHtjZL1WrVpmPSmU9WQ8igTsCxcuxLp161TpL0PyXpDKEobvBykJKR/qfD9kf40aNcLhw4dVD5vWpOdVfh7XLvP82y5JhTMu8Sr5zQUKFFCX5e+BfBgb/v+XdArJX+X//+wvJiZG5SMbkk47+cwXPP/2o1Aa/q/LUjrwpLNHI3GDvF8k992szDrMNZubO3euGjE8Y8YMNVq4R48euly5cukiIiIsvWuUyXr27Knz8fHRbdiwQXft2rXEFhMTk3ibDz74QBcaGqpbt26dbs+ePbpatWqpRrbJsHqM4Pm3Xbt27dI5Ozvrhg8frjt9+rTur7/+0nl4eOhmzZqVeJtRo0apv////fef7tChQ7rWrVvrChUqpHv48KFF950yrmvXrrq8efPqli5dqjt//rxuwYIFuoCAAN2AAQMSb8Pzb1tVwvbv36+ahMHjxo1Tly9evJjmc928eXNdpUqVdDt37tRt2bJFVR3r0KGD2fedQXsqJk6cqAI1V1dXVQJyx44dZj8plPXkP66p9vvvvyfeRv7DfvjhhzpfX1/1gd62bVsV2JN9BO08/7ZtyZIlurJly6qOmpIlS+qmTZuW5HopBTd48GBdUFCQuk2jRo10J0+etNj+UuaJjo5W/9fls97d3V1XuHBh3ZdffqmLjY1NvA3Pv+1Yv369yc97+fKW1nN969YtFaR7eXnpvL29dd26dVNfBszNQf4xb18+ERERERFlBHPaiYiIiIisHIN2IiIiIiIrx6CdiIiIiMjKMWgnIiIiIrJyDNqJiIiIiKwcg3YiIiIiIivHoJ2IiIiIyMoxaCciIiIisnIM2omIiIiIrByDdiIiIiIiK8egnYiIiIjIyjFoJyIiIiKCdft/G9LnyH5DysQAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "xs = chain(np.linspace(0, 1, 100)) # turn data into ChainableArray\n", "xs.plot(\"k-\", label=\"input data\") # plot input data\n", @@ -357,10 +425,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "id": "24", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# plot linexp mapping function (output vs input)\n", "ys = xs.linexp(0.25, 0.85, 0.2, 2).plot(xs=xs)" @@ -385,10 +464,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "id": "26", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "np.float64(-5.0)" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# example: unmap a frequency to MIDI note with explin\n", "f = 220 * 2**(-5/12) # 5 semitones higher than 220 Hz\n", @@ -397,10 +487,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "id": "27", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "np.float64(-20.0)" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# example: unmap amplitude to level in decibel\n", "pam.explin(0.01, 0.001, 1.0, -30, 0, \"max\") # clip result to maximum input range" @@ -468,10 +569,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "id": "33", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "xs = chain(np.linspace(0, 1, 100)) # turn data into ChainableArray\n", "xs.plot(\"k-\", label=\"input data\") # plot input data\n", @@ -490,10 +602,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "id": "35", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "xs = chain(np.linspace(0, 100, 100))\n", "for i, curve in enumerate(range(-9, 10, 3)):\n", @@ -530,10 +653,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "id": "38", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "xs = chain(np.linspace(0, 1, 100)) # turn data into ChainableArray\n", "xs.plot(\"k-\", label=\"input data for lincurve\") # plot input data\n", @@ -553,10 +687,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "id": "40", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "xs = chain(np.linspace(0, 100, 500))\n", "for i, curve in enumerate(range(-9, 10, 3)):\n", @@ -593,10 +738,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 26, "id": "43", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "xs = chain(np.arange(0, 100)) # turn data into ChainableArray\n", "xs.bilin(60, 20, 80, 0, -20, 60).plot(\"b.\", ms=1, label='bilin');\n", @@ -606,6 +762,27 @@ "plt.legend(); plt.grid()" ] }, + { + "cell_type": "code", + "execution_count": 27, + "id": "cb3b9473", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "ChainableArray([-30., -20., -10., 0., 60., 120.])" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pam.bilin(np.array([0, 20, 40, 60, 80, 100]), 60, 20, 80, 0, -20, 60)" + ] + }, { "cell_type": "markdown", "id": "44", @@ -783,10 +960,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 28, "id": "59", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "1.4983070768766815" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "pam.midi_to_ratio(7) # a fifth is ~3/2 (in equal tuning)" ] @@ -839,10 +1027,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 29, "id": "64", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "np.float64(12.0)" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "pam.ratio_to_midi(2) # should be 12 for ratio=2 (i.e. an octave)" ] @@ -2202,7 +2401,25 @@ ] } ], - "metadata": {}, + "metadata": { + "kernelspec": { + "display_name": "pyamapping (3.12.8)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.8" + } + }, "nbformat": 4, "nbformat_minor": 5 } diff --git a/tests/test_mappings.py b/tests/test_mappings.py index a421495..26ef21c 100644 --- a/tests/test_mappings.py +++ b/tests/test_mappings.py @@ -98,13 +98,21 @@ def test_hz_mel_hz(): def test_linexp(): pytest.approx(linexp(5, 1, 8, 2, 256), 32.0) + pytest.approx(linexp(5, 1, 8, 256, 2, "minmax"), 16.0) pytest.approx(linexp(7, 0, 5, 100, 300, "max"), 300) + pytest.approx(linexp(1, 2, 5, 100, 300, "min"), 100) + pytest.approx(linexp(1, 2, 5, 100, 300, "minmax"), 100) + pytest.approx(linexp(6, 2, 5, 100, 300, "minmax"), 300) def test_explin(): f = 220 * 2 ** (-5 / 12) pytest.approx(explin(f, 220, 440, 0, 12), -5.0) pytest.approx(explin(0.01, 0.001, 1.0, -30, 0, "max"), -20.0) + pytest.approx(explin(0.01, 0.001, 1.0, 0, -30, "minmax"), -10.0) + pytest.approx(explin(2, 0.001, 1.0, 0, 1, "max"), 1) + pytest.approx(explin(0.0001, 0.001, 1.0, 0, 1, "min"), 0) + pytest.approx(explin(0.0001, 0.001, 1.0, 0, 1, "minmax"), 0) def test_lincurve(): From ede80c3b07b629fde9e15e96e6e82309ae97688c Mon Sep 17 00:00:00 2001 From: Fabian Hommel Date: Fri, 27 Mar 2026 13:16:41 +0100 Subject: [PATCH 69/87] Started creating extensive text coverage with AI help. A few functions are still missing, to be continued --- src/pyamapping/mappings.py | 2 +- tests/test_mappings.py | 166 ------------------------------------- 2 files changed, 1 insertion(+), 167 deletions(-) diff --git a/src/pyamapping/mappings.py b/src/pyamapping/mappings.py index 0286d0f..56c377e 100644 --- a/src/pyamapping/mappings.py +++ b/src/pyamapping/mappings.py @@ -792,7 +792,7 @@ def wrap( """Wrap array around target range [y1, y2]. This implements the mapping y1 + np.mod(x - y1, y2 - y1). - The order of y1, y2 is irrelevant. + The order of y1, y2 is irrelevant with input values strictly inside the range. Parameters ---------- diff --git a/tests/test_mappings.py b/tests/test_mappings.py index 26ef21c..04191ea 100644 --- a/tests/test_mappings.py +++ b/tests/test_mappings.py @@ -1,134 +1,17 @@ import numpy as np import pytest -from pyamapping import ( - amp_to_db, - clip, - cps_to_midi, - db_to_amp, - hz_to_mel, - linlin, - mel_to_hz, - midi_to_cps, -) from pyamapping.mappings import ( bilin, - cps_to_octave, - curvelin, - distort, - explin, - fermi, fold, gain, - lcurve, - lincurve, - linexp, linpoly, - midi_to_ratio, norm_peak, norm_rms, - normalize, - octave_to_cps, - ratio_to_midi, remove_dc, - scurve, - softclip, - wrap, ) -def test_linlin(): - origin = np.array([-1, 0, 1, 2, 4]) - target = np.array([-50, 0, 50, 100, 200]) - assert np.array_equal(target, linlin(origin, 0, 2, 0, 100)) - - # test clipping - assert 100 == linlin(-10, 0, 100, 100, 200, "min") - assert 200 == linlin(105, 0, 100, 100, 200, "max") - - assert 200 == linlin(-10, 0, 100, 200, 100, "max") - assert 100 == linlin(105, 0, 100, 200, 100, "min") - - assert 100 == linlin(3, 5, 105, 100, 1000, "minmax") - assert 1000 == linlin(105, 0, 100, 100, 1000, "minmax") - - # test y1 > y2 - assert 0.0 == linlin(1, 0, 1, 1, 0) - assert 0.5 == linlin(0.5, 0, 1, 1, 0) - assert 1.0 == linlin(0, 0, 1, 1, 0) - - -def test_clip(): - for x, y in zip([2, 3, 4, 5, 6], [3, 3, 4, 5, 5]): - assert y == clip(x, 3, 5) - - a1 = np.arange(6) - a2 = np.array([2, 2, 2, 3, 4, 4]) - assert np.array_equal(clip(a1, 2, 4), a2) - - -def test_midi_to_cps_to_midi(): - assert midi_to_cps(69) == 440 - assert cps_to_midi(440) == 69 - for x in range(128): - assert x == cps_to_midi(midi_to_cps(x)) - - -def test_midi_ratio_midi(): - pytest.approx(midi_to_ratio(7), 1.4983070768766815) - pytest.approx(ratio_to_midi(2), 12.0) - - -def test_cps_octave_cps(): - pytest.approx(octave_to_cps(5.75), 880) - pytest.approx(cps_to_octave(220), 3.75) - - -def test_db_amp_db(): - for x in range(128): - assert x == pytest.approx(amp_to_db(db_to_amp(x))) - - -def test_hz_mel_hz(): - pytest.approx(hz_to_mel(440), 549.64) - pytest.approx(mel_to_hz(549.64), 440) - for x in np.arange(1, 128): - assert x == pytest.approx(hz_to_mel(mel_to_hz(x))) - - -def test_linexp(): - pytest.approx(linexp(5, 1, 8, 2, 256), 32.0) - pytest.approx(linexp(5, 1, 8, 256, 2, "minmax"), 16.0) - pytest.approx(linexp(7, 0, 5, 100, 300, "max"), 300) - pytest.approx(linexp(1, 2, 5, 100, 300, "min"), 100) - pytest.approx(linexp(1, 2, 5, 100, 300, "minmax"), 100) - pytest.approx(linexp(6, 2, 5, 100, 300, "minmax"), 300) - - -def test_explin(): - f = 220 * 2 ** (-5 / 12) - pytest.approx(explin(f, 220, 440, 0, 12), -5.0) - pytest.approx(explin(0.01, 0.001, 1.0, -30, 0, "max"), -20.0) - pytest.approx(explin(0.01, 0.001, 1.0, 0, -30, "minmax"), -10.0) - pytest.approx(explin(2, 0.001, 1.0, 0, 1, "max"), 1) - pytest.approx(explin(0.0001, 0.001, 1.0, 0, 1, "min"), 0) - pytest.approx(explin(0.0001, 0.001, 1.0, 0, 1, "minmax"), 0) - - -def test_lincurve(): - pytest.approx( - lincurve(np.array([0.0, 0.1, 0.4, 0.7, 1.0]), 0, 1, 0, 0.4), - np.array([0.0, 0.08385643, 0.25474431, 0.34852956, 0.4]), - ) - - -def test_curvelin(): - pytest.approx( - curvelin(np.array([0, 0.1, 0.3, 0.5]), 0, 0.5, 0, 10), - np.array([0.0, 0.94934752, 3.65734932, 10.0]), - ) - - def test_bilin(): pytest.approx( bilin(np.array([0, 20, 40, 60, 80, 100]), 60, 20, 80, 0, -20, 60), @@ -136,48 +19,6 @@ def test_bilin(): ) -def test_distort(): - pytest.approx( - distort([0, 1, 2, 3], 1), - np.array([0.0, 0.5, 0.66666667, 0.75]), - ) - - -def test_softclip(): - pytest.approx( - softclip(np.arange(1, 5)), - np.array([0.75, 0.875, 0.91666667, 0.9375]), - ) - - -def test_scurve(): - pytest.approx( - scurve(np.arange(0, 1, 0.25)), - np.array([0.0, 0.15625, 0.5, 0.84375]), - ) - - -def test_fermi(): - pytest.approx( - fermi(np.array([-1, -0.5, 0, 0.5, 1])), - np.array([0.26894142, 0.37754067, 0.5, 0.62245933, 0.73105858]), - ) - - -def test_lcurve(): - pytest.approx( - lcurve(np.array([-1, -0.5, 0, 0.5, 1])), - np.array([0.26894142, 0.37754067, 0.5, 0.62245933, 0.73105858]), - ) - - -def test_wrap(): - pytest.approx( - wrap(np.arange(-3, 5), 0, 3), - np.array([0, 1, 2, 0, 1, 2, 0, 1]), - ) - - def test_fold(): pytest.approx( fold(np.arange(0, 13), 0, 4), @@ -192,13 +33,6 @@ def test_linpoly(): ) -def test_normalize(): - pytest.approx( - np.sort(normalize(np.random.rand(10)))[[0, -1]], - np.array([-1, 1]), - ) - - def test_norm_peak(): pytest.approx( np.max(norm_peak(np.random.rand(10), 5)), From c3c4ddf989a979f848a03ae7c693a890e563c2f2 Mon Sep 17 00:00:00 2001 From: Fabian Hommel Date: Tue, 31 Mar 2026 10:34:20 +0200 Subject: [PATCH 70/87] in-depth testing of all mapping functions --- src/pyamapping/mappings.py | 9 ++++-- tests/test_mappings.py | 61 -------------------------------------- 2 files changed, 6 insertions(+), 64 deletions(-) delete mode 100644 tests/test_mappings.py diff --git a/src/pyamapping/mappings.py b/src/pyamapping/mappings.py index 56c377e..5e5f898 100644 --- a/src/pyamapping/mappings.py +++ b/src/pyamapping/mappings.py @@ -892,11 +892,11 @@ def gain(x: np.ndarray, db: Optional[float] = None, amp: Optional[float] = None) ------- np.ndarray: scaled (amplified / attenuated) array """ - if db: + if db is not None: sig = x * dbamp(db) else: sig = x.copy() - if amp: + if amp is not None: sig *= amp return sig @@ -922,7 +922,7 @@ def lin_to_ecdf( """ if sorted: return interp( - x, ref_data, np.arange(1, len(ref_data) + 1) / float(len(ref_data), left=0) + x, ref_data, np.arange(1, len(ref_data) + 1) / float(len(ref_data)), left=0 ) else: return interp(x, *ecdf(ref_data)) @@ -985,3 +985,6 @@ def ecdf( xs = np.sort(x) ys = np.arange(1, len(xs) + 1) / float(len(xs)) return xs[selection], ys[selection] + + + diff --git a/tests/test_mappings.py b/tests/test_mappings.py deleted file mode 100644 index 04191ea..0000000 --- a/tests/test_mappings.py +++ /dev/null @@ -1,61 +0,0 @@ -import numpy as np -import pytest - -from pyamapping.mappings import ( - bilin, - fold, - gain, - linpoly, - norm_peak, - norm_rms, - remove_dc, -) - - -def test_bilin(): - pytest.approx( - bilin(np.array([0, 20, 40, 60, 80, 100]), 60, 20, 80, 0, -20, 60), - np.array([-30.0, -20.0, -10.0, 0.0, 60.0, 120.0]), - ) - - -def test_fold(): - pytest.approx( - fold(np.arange(0, 13), 0, 4), - np.array([0, 1, 2, 3, 4, 3, 2, 1, 0, 1, 2, 3, 4]), - ) - - -def test_linpoly(): - pytest.approx( - linpoly(np.arange(-2, 3), 2.5, 100, 500, curve=1), - np.array([172.0, 268.0, 300.0, 332.0, 428.0]), - ) - - -def test_norm_peak(): - pytest.approx( - np.max(norm_peak(np.random.rand(10), 5)), - 5, - ) - - -def test_norm_rms(): - pytest.approx( - norm_rms(np.array([1, 0, 0, -1]), 1), - np.array([1.41421356, 0.0, 0.0, -1.41421356]), - ) - - -def test_remove_dc(): - pytest.approx( - remove_dc(np.array([1, 2, 3, 4])), - np.array([-1.5, -0.5, 0.5, 1.5]), - ) - - -def test_gain(): - pytest.approx( - gain(np.array([1, 2, 3, 4]), amp=2), - np.array([2, 4, 6, 8]), - ) From 324dc85074be00c40ff8472e5d6f401e2c273e50 Mon Sep 17 00:00:00 2001 From: Fabian Hommel Date: Tue, 31 Mar 2026 10:39:45 +0200 Subject: [PATCH 71/87] Basic test coverage for chainable array --- tests/test_bilin.py | 92 ++++++++++++++++++ tests/test_chainable_array.py | 133 ++++++++++++++++++++++++++ tests/test_clip.py | 89 +++++++++++++++++ tests/test_cps_octave_cps.py | 61 ++++++++++++ tests/test_curvelin.py | 117 +++++++++++++++++++++++ tests/test_db_amp_db.py | 68 +++++++++++++ tests/test_distort.py | 82 ++++++++++++++++ tests/test_ecdf.py | 175 ++++++++++++++++++++++++++++++++++ tests/test_explin.py | 114 ++++++++++++++++++++++ tests/test_fermi.py | 89 +++++++++++++++++ tests/test_fold.py | 92 ++++++++++++++++++ tests/test_gain.py | 79 +++++++++++++++ tests/test_hz_mel_hz.py | 90 +++++++++++++++++ tests/test_lcurve.py | 76 +++++++++++++++ tests/test_lincurve.py | 128 +++++++++++++++++++++++++ tests/test_linexp.py | 104 ++++++++++++++++++++ tests/test_linlin.py | 91 ++++++++++++++++++ tests/test_linpoly.py | 94 ++++++++++++++++++ tests/test_midi_cps_midi.py | 69 ++++++++++++++ tests/test_midi_ratio_midi.py | 61 ++++++++++++ tests/test_norm_peak.py | 79 +++++++++++++++ tests/test_norm_rms.py | 79 +++++++++++++++ tests/test_normalize.py | 86 +++++++++++++++++ tests/test_remove_dc.py | 70 ++++++++++++++ tests/test_scurve.py | 75 +++++++++++++++ tests/test_softclip.py | 80 ++++++++++++++++ tests/test_wrap.py | 70 ++++++++++++++ 27 files changed, 2443 insertions(+) create mode 100644 tests/test_bilin.py create mode 100644 tests/test_chainable_array.py create mode 100644 tests/test_clip.py create mode 100644 tests/test_cps_octave_cps.py create mode 100644 tests/test_curvelin.py create mode 100644 tests/test_db_amp_db.py create mode 100644 tests/test_distort.py create mode 100644 tests/test_ecdf.py create mode 100644 tests/test_explin.py create mode 100644 tests/test_fermi.py create mode 100644 tests/test_fold.py create mode 100644 tests/test_gain.py create mode 100644 tests/test_hz_mel_hz.py create mode 100644 tests/test_lcurve.py create mode 100644 tests/test_lincurve.py create mode 100644 tests/test_linexp.py create mode 100644 tests/test_linlin.py create mode 100644 tests/test_linpoly.py create mode 100644 tests/test_midi_cps_midi.py create mode 100644 tests/test_midi_ratio_midi.py create mode 100644 tests/test_norm_peak.py create mode 100644 tests/test_norm_rms.py create mode 100644 tests/test_normalize.py create mode 100644 tests/test_remove_dc.py create mode 100644 tests/test_scurve.py create mode 100644 tests/test_softclip.py create mode 100644 tests/test_wrap.py diff --git a/tests/test_bilin.py b/tests/test_bilin.py new file mode 100644 index 0000000..e88dc99 --- /dev/null +++ b/tests/test_bilin.py @@ -0,0 +1,92 @@ +import numpy as np +import pytest +from numpy.testing import assert_allclose + +from pyamapping.mappings import interp_spline, bilin +from pyamapping.chainable_array import ChainableArray, chain + + +class TestInterpSplineLinear: + """Test linear interpolation (k=1, default) between control points.""" + + def test_exact_at_control_points(self): + assert_allclose(interp_spline([-1, 0, 1], [-1, 0, 1]), [-1, 0, 1]) + + def test_midpoint_between_control_points(self): + assert interp_spline(0.5, [-1, 0, 1], [-1, 0, 1]) == pytest.approx(0.5) + + def test_custom_control_points(self): + assert interp_spline(50, [0, 100], [0, 200]) == pytest.approx(100.0) + + def test_three_point_piecewise(self): + # two segments with different slopes + result = interp_spline( + np.array([0, 25, 50, 75, 100]), + [0, 50, 100], + [0, 10, 30], + ) + assert_allclose(result, [0, 5, 10, 20, 30]) + + +class TestInterpSplineExtrapolation: + """Test that values outside xc range are extrapolated.""" + + def test_extrapolates_below(self): + result = interp_spline(-1, [0, 1], [0, 10]) + assert result == pytest.approx(-10.0) + + def test_extrapolates_above(self): + result = interp_spline(2, [0, 1], [0, 10]) + assert result == pytest.approx(20.0) + + +class TestInterpSplineReturnType: + """Test that return type depends on input type.""" + + def test_chainable_array_input_returns_plain_ndarray(self): + x = ChainableArray(np.array([0.0, 0.5, 1.0])) + result = interp_spline(x, [-1, 0, 1], [-1, 0, 1]) + assert type(result) == np.ndarray + + def test_plain_array_input_returns_chainable_array(self): + x = np.array([0.0, 0.5, 1.0]) + result = interp_spline(x, [-1, 0, 1], [-1, 0, 1]) + assert isinstance(result, ChainableArray) + + +class TestBilin: + """Test bilin as a two-segment piecewise linear mapping via interp_spline.""" + + def test_known_values(self): + assert_allclose( + bilin(np.array([0, 20, 40, 60, 80, 100]), 60, 20, 80, 0, -20, 60), + [-30.0, -20.0, -10.0, 0.0, 60.0, 120.0], + ) + + def test_xcenter_maps_to_ycenter(self): + assert bilin(60, 60, 20, 80, 0, -20, 60) == pytest.approx(0.0) + + def test_xmin_maps_to_ymin(self): + assert bilin(20, 60, 20, 80, 0, -20, 60) == pytest.approx(-20.0) + + def test_xmax_maps_to_ymax(self): + assert bilin(80, 60, 20, 80, 0, -20, 60) == pytest.approx(60.0) + + def test_extrapolates_below_xmin(self): + result = bilin(0, 60, 20, 80, 0, -20, 60) + assert result < -20.0 + + def test_extrapolates_above_xmax(self): + result = bilin(100, 60, 20, 80, 0, -20, 60) + assert result > 60.0 + + def test_symmetric_mapping(self): + # with symmetric x and y ranges, xcenter should map to ycenter=0 + assert bilin(0.5, 0.5, 0.0, 1.0, 0.0, -1.0, 1.0) == pytest.approx(0.0) + + def test_two_slopes_differ(self): + # slope left of xcenter: (-20-0)/(20-60) = 0.5 + # slope right of xcenter: (60-0)/(80-60) = 3.0 + slope_left = (bilin(40, 60, 20, 80, 0, -20, 60) - bilin(20, 60, 20, 80, 0, -20, 60)) / 20 + slope_right = (bilin(80, 60, 20, 80, 0, -20, 60) - bilin(60, 60, 20, 80, 0, -20, 60)) / 20 + assert slope_left != pytest.approx(slope_right) \ No newline at end of file diff --git a/tests/test_chainable_array.py b/tests/test_chainable_array.py new file mode 100644 index 0000000..3587028 --- /dev/null +++ b/tests/test_chainable_array.py @@ -0,0 +1,133 @@ +import pytest +import numpy as np +from numpy.testing import assert_allclose + +from pyamapping.chainable_array import ChainableArray, chain + +class TestChainableArrayCreation: + """Test ChainableArray instantiation and type.""" + + def test_from_list(self): + a = ChainableArray([1.0, 2.0, 3.0]) + assert isinstance(a, ChainableArray) + assert isinstance(a, np.ndarray) + + def test_from_ndarray(self): + a = ChainableArray(np.array([1.0, 2.0, 3.0])) + assert isinstance(a, ChainableArray) + + def test_values_preserved(self): + a = ChainableArray([1.0, 2.0, 3.0]) + assert_allclose(a, [1.0, 2.0, 3.0]) + + def test_dtype_preserved(self): + a = ChainableArray(np.array([1, 2, 3], dtype=np.int32)) + assert a.dtype == np.int32 + + def test_numpy_operations_return_chainable_array(self): + a = ChainableArray([1.0, 2.0, 3.0]) + result = a * 2 + assert isinstance(result, ChainableArray) + + def test_shape_preserved(self): + a = ChainableArray(np.ones((3, 4))) + assert a.shape == (3, 4) + + +class TestChain: + """Test the chain() factory function.""" + + def test_returns_chainable_array(self): + assert isinstance(chain(np.array([1.0, 2.0])), ChainableArray) + + def test_from_list(self): + assert isinstance(chain([1.0, 2.0, 3.0]), ChainableArray) + + def test_values_preserved(self): + assert_allclose(chain([1.0, 2.0, 3.0]), [1.0, 2.0, 3.0]) + + def test_from_scalar(self): + assert isinstance(chain(1.0), ChainableArray) + + +class TestChainableArrayToArray: + """Test to_array() conversion.""" + + def test_returns_plain_ndarray(self): + a = ChainableArray([1.0, 2.0, 3.0]) + result = a.to_array() + assert type(result) is np.ndarray + assert not isinstance(result, ChainableArray) + + def test_values_preserved(self): + a = ChainableArray([1.0, 2.0, 3.0]) + assert_allclose(a.to_array(), [1.0, 2.0, 3.0]) + + +class TestChainableArrayMap: + """Test map() method.""" + + def test_applies_function(self): + a = ChainableArray([1.0, 2.0, 3.0]) + result = a.map(lambda x: x * 2) + assert_allclose(result, [2.0, 4.0, 6.0]) + + def test_returns_chainable_array(self): + a = ChainableArray([1.0, 2.0, 3.0]) + assert isinstance(a.map(lambda x: x * 2), ChainableArray) + + def test_passes_args(self): + a = ChainableArray([1.0, 2.0, 3.0]) + result = a.map(np.add, 10.0) + assert_allclose(result, [11.0, 12.0, 13.0]) + + def test_raises_type_error_for_scalar_only_function(self): + a = ChainableArray([1.0, 2.0, 3.0]) + with pytest.raises(TypeError, match="Use .mapvec()"): + a.map(lambda x: x + 1 if isinstance(x, float) else (_ for _ in ()).throw(TypeError())) + + def test_chaining(self): + a = ChainableArray([1.0, 2.0, 3.0]) + result = a.map(lambda x: x * 2).map(lambda x: x + 1) + assert_allclose(result, [3.0, 5.0, 7.0]) + + +class TestChainableArrayMapvec: + """Test mapvec() method.""" + + def test_applies_scalar_function_elementwise(self): + a = ChainableArray([1.0, 2.0, 3.0]) + result = a.mapvec(lambda x: x ** 2) + assert_allclose(result, [1.0, 4.0, 9.0]) + + def test_returns_chainable_array(self): + a = ChainableArray([1.0, 4.0, 9.0]) + assert isinstance(a.mapvec(np.sqrt), ChainableArray) + + def test_passes_args(self): + a = ChainableArray([1.0, 2.0, 3.0]) + result = a.mapvec(lambda x, y: x + y, 10.0) + assert_allclose(result, [11.0, 12.0, 13.0]) + + def test_chaining(self): + a = ChainableArray([1.0, 2.0, 3.0]) + result = a.mapvec(lambda x: x * 2).mapvec(lambda x: x + 1) + assert_allclose(result, [3.0, 5.0, 7.0]) + + +class TestChainableArrayGetattr: + """Test dynamic attribute handling via __getattr__.""" + + def test_dynamic_prefix_returns_callable(self): + a = ChainableArray([1.0, 2.0]) + assert callable(a.dynamic_foo) + + def test_dynamic_method_returns_string(self): + a = ChainableArray([1.0, 2.0]) + result = a.dynamic_foo(1, 2) + assert "dynamic_foo" in result + + def test_unknown_attribute_raises_attribute_error(self): + a = ChainableArray([1.0, 2.0]) + with pytest.raises(AttributeError): + _ = a.nonexistent_method \ No newline at end of file diff --git a/tests/test_clip.py b/tests/test_clip.py new file mode 100644 index 0000000..f37358d --- /dev/null +++ b/tests/test_clip.py @@ -0,0 +1,89 @@ +import numpy as np +import pytest +from numpy.testing import assert_allclose + +from pyamapping.mappings import clip + +class TestClipScalar: + """Test clipping of scalar float/int values.""" + + def test_value_below_minimum_is_clipped(self): + assert clip(2, 3, 5) == 3 + + def test_value_above_maximum_is_clipped(self): + assert clip(6, 3, 5) == 5 + + def test_value_within_range_is_unchanged(self): + assert clip(4, 3, 5) == 4 + + def test_value_equal_to_minimum(self): + assert clip(3, 3, 5) == 3 + + def test_value_equal_to_maximum(self): + assert clip(5, 3, 5) == 5 + + def test_negative_range(self): + assert clip(-10, -5, -1) == -5 + assert clip(-3, -5, -1) == -3 + assert clip(0, -5, -1) == -1 + + def test_float_values(self): + assert clip(1.5, 2.0, 4.0) == pytest.approx(2.0) + assert clip(3.5, 2.0, 4.0) == pytest.approx(3.5) + assert clip(5.0, 2.0, 4.0) == pytest.approx(4.0) + + +class TestClipScalarDefaultBounds: + """Test that default bounds (-inf, +inf) leave values unchanged.""" + + def test_no_minimum_large_negative(self): + assert clip(-1e9) == -1e9 + + def test_no_maximum_large_positive(self): + assert clip(1e9) == 1e9 + + def test_only_minimum_clips_below(self): + assert clip(-5, minimum=0) == 0 + assert clip(5, minimum=0) == 5 + + def test_only_maximum_clips_above(self): + assert clip(5, maximum=3) == 3 + assert clip(1, maximum=3) == 1 + + +class TestClipArray: + """Test clipping of numpy array inputs.""" + + def test_array_all_clipped(self): + assert_allclose(clip(np.array([0, 1, 6, 7]), 2, 4), [2, 2, 4, 4]) + + def test_array_none_clipped(self): + a = np.array([2.0, 3.0, 4.0]) + assert_allclose(clip(a, 0, 10), a) + + def test_array_mixed(self): + a1 = np.arange(6) + assert_allclose(clip(a1, 2, 4), [2, 2, 2, 3, 4, 4]) + + def test_array_default_bounds(self): + a = np.array([-1e9, 0.0, 1e9]) + assert_allclose(clip(a), a) + + def test_array_only_minimum(self): + assert_allclose(clip(np.array([0, 2, 5]), minimum=3), [3, 3, 5]) + + def test_array_only_maximum(self): + assert_allclose(clip(np.array([0, 2, 5]), maximum=3), [0, 2, 3]) + + +class TestClipScalarArrayConsistency: + """Scalar and array code paths should return identical results.""" + + def test_same_result_for_value_below(self): + assert clip(1, 3, 5) == clip(np.array([1]), 3, 5)[0] + + def test_same_result_for_value_within(self): + assert clip(4, 3, 5) == clip(np.array([4]), 3, 5)[0] + + def test_same_result_for_value_above(self): + assert clip(7, 3, 5) == clip(np.array([7]), 3, 5)[0] \ No newline at end of file diff --git a/tests/test_cps_octave_cps.py b/tests/test_cps_octave_cps.py new file mode 100644 index 0000000..ca09010 --- /dev/null +++ b/tests/test_cps_octave_cps.py @@ -0,0 +1,61 @@ +import pytest + +from pyamapping.mappings import cps_to_octave, octave_to_cps + + +class TestCpsToOctave: + """Test frequency to decimal octave conversion.""" + + def test_440hz_is_4_75(self): + # reference point: 440 Hz -> 4.75 + assert cps_to_octave(440) == pytest.approx(4.75) + + def test_middle_c_is_4(self): + # MIDI 60 / C4 / 261.626 Hz -> 4.0 + assert cps_to_octave(261.626) == pytest.approx(4.0, rel=1e-4) + + def test_880hz_is_5_75(self): + assert cps_to_octave(880) == pytest.approx(5.75) + + def test_220hz_is_3_75(self): + assert cps_to_octave(220) == pytest.approx(3.75) + + def test_octave_up_increments_by_one(self): + assert cps_to_octave(880) == pytest.approx(cps_to_octave(440) + 1) + + def test_octave_down_decrements_by_one(self): + assert cps_to_octave(220) == pytest.approx(cps_to_octave(440) - 1) + + +class TestOctaveToCps: + """Test decimal octave to frequency conversion.""" + + def test_4_75_is_440hz(self): + assert octave_to_cps(4.75) == pytest.approx(440.0) + + def test_4_is_middle_c(self): + assert octave_to_cps(4.0) == pytest.approx(261.626, rel=1e-4) + + def test_5_75_is_880hz(self): + assert octave_to_cps(5.75) == pytest.approx(880.0) + + def test_3_75_is_220hz(self): + assert octave_to_cps(3.75) == pytest.approx(220.0) + + def test_increment_by_one_doubles_frequency(self): + assert octave_to_cps(5.75) == pytest.approx(octave_to_cps(4.75) * 2) + + def test_decrement_by_one_halves_frequency(self): + assert octave_to_cps(3.75) == pytest.approx(octave_to_cps(4.75) / 2) + + +class TestCpsOctaveRoundtrip: + """Test that the two functions are exact inverses of each other.""" + + def test_cps_to_octave_to_cps(self): + for cps in [27.5, 110.0, 220.0, 261.626, 440.0, 880.0, 1760.0]: + assert octave_to_cps(cps_to_octave(cps)) == pytest.approx(cps, rel=1e-9) + + def test_octave_to_cps_to_octave(self): + for octave in [1.0, 2.75, 3.75, 4.0, 4.75, 5.75, 7.0]: + assert cps_to_octave(octave_to_cps(octave)) == pytest.approx(octave, rel=1e-9) \ No newline at end of file diff --git a/tests/test_curvelin.py b/tests/test_curvelin.py new file mode 100644 index 0000000..a3c9cbf --- /dev/null +++ b/tests/test_curvelin.py @@ -0,0 +1,117 @@ +import pytest +import numpy as np +from numpy.testing import assert_allclose + +from pyamapping.mappings import curvelin, lincurve + +class TestCurvelinEndpoints: + """Test that x1->y1 and x2->y2 mappings are exact.""" + + def test_x1_maps_to_y1(self): + assert curvelin(0.0, 0, 0.5, 0, 10) == pytest.approx(0.0) + + def test_x2_maps_to_y2(self): + assert curvelin(0.5, 0, 0.5, 0, 10) == pytest.approx(10.0) + + def test_x1_maps_to_y1_custom(self): + assert curvelin(2.0, 2, 5, 10, 20) == pytest.approx(10.0) + + def test_x2_maps_to_y2_custom(self): + assert curvelin(5.0, 2, 5, 10, 20) == pytest.approx(20.0) + + +class TestCurvelinLinearFallback: + """Test the linear branch triggered when abs(curve) < 0.001.""" + + def test_zero_curve_midpoint(self): + assert curvelin(0.5, 0, 1, 0, 1, curve=0.0) == pytest.approx(0.5) + + def test_tiny_curve_is_linear(self): + assert curvelin(0.5, 0, 1, 0, 1, curve=0.0009) == pytest.approx(0.5) + + def test_linear_array_input(self): + x = np.array([0.0, 0.5, 1.0]) + assert_allclose(curvelin(x, 0, 1, 0, 1, curve=0.0), [0.0, 0.5, 1.0]) + + +class TestCurvelinCurvedMapping: + """Test exponential (non-linear) mapping with meaningful curve values.""" + + def test_known_values(self): + assert_allclose( + curvelin(np.array([0, 0.1, 0.3, 0.5]), 0, 0.5, 0, 10), + [0.0, 0.94934752, 3.65734932, 10.0], + rtol=1e-5, + ) + + def test_negative_curve_endpoints(self): + assert curvelin(0.0, 0, 1, 0, 1, curve=-2.0) == pytest.approx(0.0) + assert curvelin(1.0, 0, 1, 0, 1, curve=-2.0) == pytest.approx(1.0) + + def test_positive_curve_endpoints(self): + assert curvelin(0.0, 0, 1, 0, 1, curve=2.0) == pytest.approx(0.0) + assert curvelin(1.0, 0, 1, 0, 1, curve=2.0) == pytest.approx(1.0) + + +class TestCurvelinPolarityInversion: + """Test y2 < y1 (inverted range).""" + + def test_inverted_range_endpoints(self): + assert curvelin(0.0, 0, 1, y1=1.0, y2=0.0) == pytest.approx(1.0) + assert curvelin(1.0, 0, 1, y1=1.0, y2=0.0) == pytest.approx(0.0) + + def test_inverted_range_midpoint_is_between_bounds(self): + result = curvelin(0.5, 0, 1, y1=1.0, y2=0.0) + assert 0.0 <= result <= 1.0 + + +class TestCurvelinExtrapolation: + """Default (clip=None) should extrapolate beyond [x1, x2].""" + + def test_extrapolates_below_x1(self): + result = curvelin(-1.0, 0, 1, 0, 1, curve=0.0) + assert result < 0.0 + + def test_extrapolates_above_x2(self): + result = curvelin(2.0, 0, 1, 0, 1, curve=0.0) + assert result > 1.0 + + +class TestCurvelinClipping: + """Test all clip modes.""" + + def test_clip_max_caps_at_y2(self): + assert curvelin(2.0, 0, 1, 0, 1, curve=0.0, clip="max") == pytest.approx(1.0) + + def test_clip_max_does_not_affect_lower_values(self): + assert curvelin(0.5, 0, 1, 0, 1, curve=0.0, clip="max") == pytest.approx(0.5) + + def test_clip_min_caps_at_y1(self): + assert curvelin(-1.0, 0, 1, 0, 1, curve=0.0, clip="min") == pytest.approx(0.0) + + def test_clip_min_does_not_affect_upper_values(self): + assert curvelin(0.5, 0, 1, 0, 1, curve=0.0, clip="min") == pytest.approx(0.5) + + def test_clip_minmax_caps_both_sides(self): + assert curvelin(-1.0, 0, 1, 0, 1, curve=0.0, clip="minmax") == pytest.approx(0.0) + assert curvelin(2.0, 0, 1, 0, 1, curve=0.0, clip="minmax") == pytest.approx(1.0) + + def test_clip_unknown_string_implies_minmax(self): + assert curvelin(-1.0, 0, 1, 0, 1, curve=0.0, clip="both") == pytest.approx(0.0) + assert curvelin(2.0, 0, 1, 0, 1, curve=0.0, clip="both") == pytest.approx(1.0) + + def test_clip_minmax_array_input(self): + result = curvelin(np.array([-1.0, 0.5, 2.0]), 0, 1, 0, 1, curve=0.0, clip="minmax") + assert_allclose(result, [0.0, 0.5, 1.0]) + + +class TestCurvelinVsLincurve: + """curvelin and lincurve should be inverses of each other.""" + + def test_curvelin_is_inverse_of_lincurve(self): + for x in [0.1, 0.3, 0.5, 0.7, 0.9]: + assert curvelin(lincurve(x, 0, 1, 0, 1), 0, 1, 0, 1) == pytest.approx(x, rel=1e-6) + + def test_lincurve_is_inverse_of_curvelin(self): + for x in [0.1, 0.3, 0.5, 0.7, 0.9]: + assert lincurve(curvelin(x, 0, 1, 0, 1), 0, 1, 0, 1) == pytest.approx(x, rel=1e-6) \ No newline at end of file diff --git a/tests/test_db_amp_db.py b/tests/test_db_amp_db.py new file mode 100644 index 0000000..c984eb6 --- /dev/null +++ b/tests/test_db_amp_db.py @@ -0,0 +1,68 @@ +import pytest + +from pyamapping.mappings import db_to_amp, amp_to_db + + +class TestDbToAmp: + """Test decibel to linear amplitude conversion.""" + + def test_0db_is_unity(self): + assert db_to_amp(0) == pytest.approx(1.0) + + def test_20db_is_ten(self): + assert db_to_amp(20) == pytest.approx(10.0) + + def test_minus_20db_is_tenth(self): + assert db_to_amp(-20) == pytest.approx(0.1) + + def test_6db_approximately_doubles(self): + assert db_to_amp(6) == pytest.approx(2.0, rel=1e-2) + + def test_negative_inf_db_is_silence(self): + assert db_to_amp(-float("inf")) == pytest.approx(0.0) + + def test_positive_db_is_above_unity(self): + assert db_to_amp(10) > 1.0 + + def test_negative_db_is_below_unity(self): + assert db_to_amp(-10) < 1.0 + + +class TestAmpToDb: + """Test linear amplitude to decibel conversion.""" + + def test_unity_is_0db(self): + assert amp_to_db(1.0) == pytest.approx(0.0) + + def test_ten_is_20db(self): + assert amp_to_db(10.0) == pytest.approx(20.0) + + def test_tenth_is_minus_20db(self): + assert amp_to_db(0.1) == pytest.approx(-20.0) + + def test_double_amplitude_is_approx_6db(self): + assert amp_to_db(2.0) == pytest.approx(6.0, rel=1e-2) + + def test_half_amplitude_is_approx_minus_6db(self): + assert amp_to_db(0.5) == pytest.approx(-6.0, rel=1e-2) + + def test_zero_amplitude_is_minus_inf(self): + with pytest.warns(RuntimeWarning, match="divide by zero"): + result = amp_to_db(0.0) + assert result == -float("inf") + + +class TestDbAmpRoundtrip: + """Test that the two functions are exact inverses of each other.""" + + def test_db_to_amp_to_db(self): + for db in range(128): + assert amp_to_db(db_to_amp(db)) == pytest.approx(db, rel=1e-9) + + def test_amp_to_db_to_amp(self): + for amp in [0.001, 0.1, 0.5, 1.0, 2.0, 10.0, 100.0]: + assert db_to_amp(amp_to_db(amp)) == pytest.approx(amp, rel=1e-9) + + def test_negative_db_roundtrip(self): + for db in [-60, -40, -20, -6]: + assert amp_to_db(db_to_amp(db)) == pytest.approx(db, rel=1e-9) \ No newline at end of file diff --git a/tests/test_distort.py b/tests/test_distort.py new file mode 100644 index 0000000..1c002b0 --- /dev/null +++ b/tests/test_distort.py @@ -0,0 +1,82 @@ +import pytest +import numpy as np +from numpy.testing import assert_allclose + +from pyamapping.mappings import distort + + +class TestDistortScalar: + """Test distortion of scalar values.""" + + def test_zero_input_is_zero(self): + assert distort(0.0) == pytest.approx(0.0) + + def test_positive_input_is_below_threshold(self): + # x / (1 + |x|) is always < 1 for finite x + assert distort(1.0) == pytest.approx(0.5) + assert distort(2.0) == pytest.approx(2 / 3) + assert distort(3.0) == pytest.approx(0.75) + + def test_negative_input_mirrors_positive(self): + # function is odd: distort(-x) == -distort(x) + assert distort(-1.0) == pytest.approx(-0.5) + assert distort(-2.0) == pytest.approx(-2 / 3) + + def test_output_bounded_below_one(self): + assert abs(distort(1e9)) < 1.0 + + def test_output_bounded_above_minus_one(self): + assert distort(-1e9) > -1.0 + + def test_custom_threshold(self): + assert distort(1.0, threshold=2.0) == pytest.approx(1 / 3) + + def test_threshold_scales_output(self): + # doubling threshold halves the compression at x=threshold + assert distort(1.0, threshold=2.0) == pytest.approx(distort(0.5, threshold=1.0)) + + +class TestDistortArray: + """Test distortion of array inputs.""" + + def test_known_values(self): + assert_allclose( + distort([0, 1, 2, 3], threshold=1), + [0.0, 0.5, 2/3, 0.75], + rtol=1e-6, + ) + + def test_negative_array_mirrors_positive(self): + x = np.array([1.0, 2.0, 3.0]) + assert_allclose(distort(-x), -distort(x)) + + def test_array_output_bounded(self): + x = np.array([-1e9, -1.0, 0.0, 1.0, 1e9]) + result = distort(x) + assert np.all(result > -1.0) + assert np.all(result < 1.0) + + def test_custom_threshold_array(self): + assert_allclose( + distort(np.array([0, 1, 2]), threshold=2.0), + [0.0, 1/3, 0.5], + rtol=1e-6, + ) + + +class TestDistortProperties: + """Test mathematical properties of the distortion function.""" + + def test_odd_symmetry(self): + # distort(-x) == -distort(x) for all x + for x in [0.1, 1.0, 5.0, 100.0]: + assert distort(-x) == pytest.approx(-distort(x)) + + def test_output_range_is_open_minus_one_to_one(self): + # output strictly between -1 and 1 for all finite inputs + for x in [-1e9, -100, -1, 0, 1, 100, 1e9]: + assert -1.0 < distort(x) < 1.0 or distort(x) == 0.0 + + def test_monotonically_increasing(self): + x = np.linspace(-10, 10, 100) + result = distort(x) \ No newline at end of file diff --git a/tests/test_ecdf.py b/tests/test_ecdf.py new file mode 100644 index 0000000..749724c --- /dev/null +++ b/tests/test_ecdf.py @@ -0,0 +1,175 @@ +import numpy as np +import pytest +from numpy.testing import assert_allclose + +from pyamapping.mappings import interp, ecdf, ecdf_to_lin, lin_to_ecdf + + +class TestEcdf: + """Test empirical cumulative distribution function.""" + + def test_output_is_tuple_of_two_arrays(self): + xs, ys = ecdf(np.array([3.0, 1.0, 2.0])) + assert isinstance(xs, np.ndarray) + assert isinstance(ys, np.ndarray) + + def test_xs_are_sorted(self): + xs, ys = ecdf(np.array([3.0, 1.0, 2.0])) + assert np.all(np.diff(xs) >= 0) + + def test_ys_range_from_step_to_one(self): + xs, ys = ecdf(np.array([1.0, 2.0, 3.0, 4.0])) + assert ys[0] == pytest.approx(0.25) + assert ys[-1] == pytest.approx(1.0) + + def test_ys_are_uniformly_spaced(self): + xs, ys = ecdf(np.array([1.0, 2.0, 3.0, 4.0])) + assert_allclose(np.diff(ys), np.full(3, 0.25)) + + def test_lengths_match(self): + x = np.random.rand(20) + xs, ys = ecdf(x) + assert len(xs) == len(ys) == 20 + + def test_selection_slice(self): + x = np.arange(1, 11, dtype=float) + xs, ys = ecdf(x, selection=np.s_[::2]) + assert len(xs) == 5 + assert len(ys) == 5 + + def test_already_sorted_input(self): + x = np.array([1.0, 2.0, 3.0, 4.0]) + xs, ys = ecdf(x) + assert_allclose(xs, x) + + +class TestInterp: + """Test piecewise linear interpolation with clipping.""" + + def test_exact_at_control_points(self): + assert interp(0, [-1, 0, 1], [-1, 0, 1]) == pytest.approx(0.0) + assert interp(-1, [-1, 0, 1], [-1, 0, 1]) == pytest.approx(-1.0) + assert interp(1, [-1, 0, 1], [-1, 0, 1]) == pytest.approx(1.0) + + def test_midpoint_interpolation(self): + assert interp(0.5, [0, 1], [0, 10]) == pytest.approx(5.0) + + def test_clips_below(self): + # numpy.interp clips by default, unlike interp_spline + assert interp(-2, [-1, 0, 1], [-1, 0, 1]) == pytest.approx(-1.0) + + def test_clips_above(self): + assert interp(2, [-1, 0, 1], [-1, 0, 1]) == pytest.approx(1.0) + + def test_array_input(self): + result = interp(np.array([-1.0, 0.0, 1.0]), [-1, 0, 1], [-1, 0, 1]) + assert_allclose(result, [-1.0, 0.0, 1.0]) + + def test_default_yc(self): + # default yc=[-1, 0, 1] maps xc=[-1, 0, 1] linearly + assert interp(0.0, [-1, 0, 1]) == pytest.approx(0.0) + + +class TestLinToEcdf: + """Test mapping via empirical cumulative distribution function.""" + + def test_output_range_is_zero_to_one(self): + ref = np.array([1.0, 2.0, 3.0, 4.0, 5.0]) + result = lin_to_ecdf(ref, ref) + assert np.all(result >= 0.0) + assert np.all(result <= 1.0) + + def test_min_maps_to_lowest_quantile(self): + ref = np.array([1.0, 2.0, 3.0, 4.0, 5.0]) + assert lin_to_ecdf(1.0, ref) == pytest.approx(0.2) + + def test_max_maps_to_one(self): + ref = np.array([1.0, 2.0, 3.0, 4.0, 5.0]) + assert lin_to_ecdf(5.0, ref) == pytest.approx(1.0) + + def test_below_min_clips_to_zero(self): + ref = np.array([1.0, 2.0, 3.0]) + assert lin_to_ecdf(0.0, ref) == pytest.approx(1/3) + + def test_above_max_clips_to_one(self): + ref = np.array([1.0, 2.0, 3.0]) + assert lin_to_ecdf(10.0, ref) == pytest.approx(1.0) + + def test_sorted_and_unsorted_give_same_result(self): + ref = np.array([3.0, 1.0, 4.0, 1.0, 5.0, 2.0]) + x = np.array([1.0, 2.0, 3.0]) + assert_allclose( + lin_to_ecdf(x, ref, sorted=False), + lin_to_ecdf(x, np.sort(ref), sorted=True), + ) + + def test_monotonically_increasing(self): + ref = np.random.rand(50) + x = np.linspace(0, 1, 20) + result = lin_to_ecdf(x, ref) + assert np.all(np.diff(result) >= 0) + + + +class TestEcdfToLin: + """Test inverse ECDF mapping (quantiles back to feature values).""" + + def test_max_quantile_maps_to_max_value(self): + ref = np.array([1.0, 2.0, 3.0, 4.0, 5.0]) + assert ecdf_to_lin(1.0, ref) == pytest.approx(5.0) + + def test_min_quantile_maps_to_min_value(self): + ref = np.array([1.0, 2.0, 3.0, 4.0, 5.0]) + assert ecdf_to_lin(0.2, ref) == pytest.approx(1.0) + + def test_midpoint_quantile(self): + ref = np.array([1.0, 2.0, 3.0, 4.0, 5.0]) + assert ecdf_to_lin(0.6, ref) == pytest.approx(3.0) + + def test_below_min_quantile_clips(self): + ref = np.array([1.0, 2.0, 3.0]) + assert ecdf_to_lin(0.0, ref) == pytest.approx(1.0) + + def test_above_max_quantile_clips(self): + ref = np.array([1.0, 2.0, 3.0]) + assert ecdf_to_lin(1.5, ref) == pytest.approx(3.0) + + def test_sorted_and_unsorted_give_same_result(self): + ref = np.array([3.0, 1.0, 4.0, 1.0, 5.0, 2.0]) + x = np.array([0.2, 0.5, 0.8]) + assert_allclose( + ecdf_to_lin(x, ref, sorted=False), + ecdf_to_lin(x, np.sort(ref), sorted=True), + ) + + def test_monotonically_increasing(self): + ref = np.random.rand(50) + x = np.linspace(0.1, 0.9, 20) + result = ecdf_to_lin(x, ref) + assert np.all(np.diff(result) >= 0) + + def test_array_input(self): + ref = np.array([1.0, 2.0, 3.0, 4.0, 5.0]) + result = ecdf_to_lin(np.array([0.2, 0.6, 1.0]), ref) + assert_allclose(result, [1.0, 3.0, 5.0]) + + +class TestLinEcdfRoundtrip: + """Test that lin_to_ecdf and ecdf_to_lin are inverses of each other.""" + + def test_lin_to_ecdf_to_lin(self): + ref = np.array([1.0, 2.0, 3.0, 4.0, 5.0]) + # map ref values to quantiles and back — should recover original values + quantiles = lin_to_ecdf(ref, ref) + assert_allclose(ecdf_to_lin(quantiles, ref), ref, rtol=1e-6) + + def test_ecdf_to_lin_to_ecdf(self): + ref = np.array([1.0, 2.0, 3.0, 4.0, 5.0]) + quantiles = np.array([0.2, 0.4, 0.6, 0.8, 1.0]) + recovered = lin_to_ecdf(ecdf_to_lin(quantiles, ref), ref) + assert_allclose(recovered, quantiles, rtol=1e-6) + + def test_roundtrip_unsorted_ref(self): + ref = np.array([3.0, 1.0, 4.0, 2.0, 5.0]) + quantiles = lin_to_ecdf(np.sort(ref), ref) + assert_allclose(ecdf_to_lin(quantiles, ref), np.sort(ref), rtol=1e-6) \ No newline at end of file diff --git a/tests/test_explin.py b/tests/test_explin.py new file mode 100644 index 0000000..0dc3ad6 --- /dev/null +++ b/tests/test_explin.py @@ -0,0 +1,114 @@ +import pytest +import numpy as np +from numpy.testing import assert_allclose + +from pyamapping.mappings import explin, linexp + + +class TestExplinEndpoints: + """Test that x1->y1 and x2->y2 mappings are exact.""" + + def test_x1_maps_to_y1(self): + assert explin(220.0, 220, 440, 0, 12) == pytest.approx(0.0) + + def test_x2_maps_to_y2(self): + assert explin(440.0, 220, 440, 0, 12) == pytest.approx(12.0) + + def test_x1_maps_to_y1_custom(self): + assert explin(0.001, 0.001, 1.0, -30, 0) == pytest.approx(-30.0) + + def test_x2_maps_to_y2_custom(self): + assert explin(1.0, 0.001, 1.0, -30, 0) == pytest.approx(0.0) + + +class TestExplinMapping: + """Test logarithmic mapping between endpoints.""" + + def test_known_value(self): + f = 220 * 2 ** (-5 / 12) + assert explin(f, 220, 440, 0, 12) == pytest.approx(-5.0) + + def test_geometric_midpoint_maps_to_linear_midpoint(self): + # log mapping: geometric mean of x1,x2 maps to arithmetic mean of y1,y2 + geo_mid = np.sqrt(1.0 * 100.0) + assert explin(geo_mid, 1.0, 100.0, 0.0, 1.0) == pytest.approx(0.5, rel=1e-6) + + def test_inverted_y_range(self): + assert explin(0.01, 0.001, 1.0, 0, -30) == pytest.approx( + -explin(0.01, 0.001, 1.0, 0, 30), rel=1e-6 + ) + + def test_array_input(self): + result = explin(np.array([220.0, 440.0]), 220, 440, 0, 12) + assert_allclose(result, [0.0, 12.0]) + + +class TestExplinExtrapolation: + """Default (clip=None) should extrapolate beyond [x1, x2].""" + + def test_extrapolates_above_x2(self): + result = explin(2.0, 0.001, 1.0, 0, 1) + assert result > 1.0 + + def test_extrapolates_below_x1(self): + result = explin(0.0001, 0.001, 1.0, 0, 1) + assert result < 0.0 + + +class TestExplinClipping: + """Test all clip modes.""" + + def test_clip_max_caps_at_y2(self): + assert explin(2, 0.001, 1.0, 0, 1, clip="max") == pytest.approx(1.0) + + def test_clip_max_does_not_affect_lower_values(self): + assert explin(0.01, 0.001, 1.0, -30, 0, clip="max") == pytest.approx( + explin(0.01, 0.001, 1.0, -30, 0), rel=1e-6 + ) + + def test_clip_min_caps_at_y1(self): + assert explin(0.0001, 0.001, 1.0, 0, 1, clip="min") == pytest.approx(0.0) + + def test_clip_min_does_not_affect_upper_values(self): + assert explin(0.1, 0.001, 1.0, 0, 1, clip="min") == pytest.approx( + explin(0.1, 0.001, 1.0, 0, 1), rel=1e-6 + ) + + def test_clip_minmax_caps_both_sides(self): + assert explin(0.0001, 0.001, 1.0, 0, 1, clip="minmax") == pytest.approx(0.0) + assert explin(2.0, 0.001, 1.0, 0, 1, clip="minmax") == pytest.approx(1.0) + + def test_clip_unknown_string_implies_minmax(self): + assert explin(0.0001, 0.001, 1.0, 0, 1, clip="both") == pytest.approx(0.0) + assert explin(2.0, 0.001, 1.0, 0, 1, clip="both") == pytest.approx(1.0) + + def test_clip_inverted_y_range(self): + assert explin(0.01, 0.001, 1.0, 0, -30, clip="minmax") == pytest.approx( + -10.0, rel=1e-5 + ) + + def test_clip_minmax_array_input(self): + result = explin( + np.array([0.0001, 0.01, 2.0]), 0.001, 1.0, 0, 1, clip="minmax" + ) + assert_allclose(result, [0.0, explin(0.01, 0.001, 1.0, 0, 1), 1.0]) + + +class TestExplinProperties: + """Test mathematical properties of explin.""" + + def test_monotonically_increasing(self): + x = np.geomspace(0.001, 1.0, 100) + assert np.all(np.diff(explin(x, 0.001, 1.0, 0, 1)) > 0) + + def test_equal_ratios_in_x_give_equal_steps_in_y(self): + # log mapping: equal ratios in x -> equal differences in y + y1 = explin(1.0, 1, 100, 0, 1) + y2 = explin(10.0, 1, 100, 0, 1) + y3 = explin(100.0, 1, 100, 0, 1) + assert y2 - y1 == pytest.approx(y3 - y2, rel=1e-6) + + def test_explin_is_inverse_of_linexp(self): + # explin and linexp should be inverses of each other + for x in [220.0, 311.0, 440.0]: + assert explin(linexp(x, 220, 440, 220, 440), 220, 440, 220, 440) == pytest.approx(x, rel=1e-9) \ No newline at end of file diff --git a/tests/test_fermi.py b/tests/test_fermi.py new file mode 100644 index 0000000..e246804 --- /dev/null +++ b/tests/test_fermi.py @@ -0,0 +1,89 @@ +import pytest +import numpy as np +from numpy.testing import assert_allclose + +from pyamapping.mappings import fermi, lcurve + +class TestFermiDefaultParams: + """Test fermi function with default parameters (tau=1, mu=0).""" + + def test_zero_input_is_half(self): + assert fermi(0.0) == pytest.approx(0.5) + + def test_known_values(self): + assert_allclose( + fermi(np.array([-1, -0.5, 0, 0.5, 1])), + [0.26894142, 0.37754067, 0.5, 0.62245933, 0.73105858], + rtol=1e-6, + ) + + def test_approaches_zero_for_large_negative_x(self): + assert fermi(-500.0) == pytest.approx(0.0, abs=1e-6) + + def test_approaches_one_for_large_positive_x(self): + assert fermi(500.0) == pytest.approx(1.0, abs=1e-6) + + +class TestFermiParameters: + """Test effect of tau and mu parameters.""" + + def test_mu_shifts_midpoint(self): + # midpoint (output=0.5) should occur at x=mu + assert fermi(2.0, mu=2.0) == pytest.approx(0.5) + assert fermi(-3.0, mu=-3.0) == pytest.approx(0.5) + + def test_tau_scales_x_axis(self): + # fermi(x, tau=2) == fermi(x/2, tau=1) + assert fermi(2.0, tau=2.0) == pytest.approx(fermi(1.0, tau=1.0)) + + def test_negative_tau_flips_curve(self): + # negative tau mirrors the curve + assert fermi(1.0, tau=-1.0) == pytest.approx(fermi(-1.0, tau=1.0)) + + def test_large_tau_flattens_curve(self): + # very large tau -> output approaches 0.5 everywhere + assert fermi(10.0, tau=1e9) == pytest.approx(0.5, abs=1e-4) + + def test_small_tau_sharpens_curve(self): + # very small tau -> step function behaviour + assert fermi(0.1, tau=0.001) == pytest.approx(1.0, abs=1e-6) + assert fermi(-0.1, tau=0.001) == pytest.approx(0.0, abs=1e-6) + + +class TestFermiProperties: + """Test mathematical properties of the Fermi function.""" + + def test_point_symmetry_around_mu(self): + # fermi(mu - x) + fermi(mu + x) == 1 + for x in [0.5, 1.0, 2.0, 5.0]: + assert fermi(-x) + fermi(x) == pytest.approx(1.0) + + def test_point_symmetry_with_nonzero_mu(self): + mu = 3.0 + for x in [0.5, 1.0, 2.0]: + assert fermi(mu - x, mu=mu) + fermi(mu + x, mu=mu) == pytest.approx(1.0) + + def test_monotonically_increasing(self): + x = np.linspace(-5, 5, 200) + assert np.all(np.diff(fermi(x)) > 0) + + def test_output_bounded_to_unit_interval(self): + x = np.linspace(-100, 100, 500) + result = fermi(x) + assert np.all(result >= 0.0) + assert np.all(result <= 1.0) + + def test_array_input_returns_ndarray(self): + assert isinstance(fermi(np.array([0.0, 1.0])), np.ndarray) + + +class TestFermiVsLcurve: + """Fermi is a special case of lcurve (m=0, n=1) — results should match.""" + + def test_default_params_match_lcurve(self): + x = np.linspace(-3, 3, 50) + assert_allclose(fermi(x), lcurve(x), rtol=1e-9) + + def test_tau_param_matches_lcurve(self): + x = np.linspace(-3, 3, 50) + assert_allclose(fermi(x, tau=2.0), lcurve(x, tau=2.0), rtol=1e-9) \ No newline at end of file diff --git a/tests/test_fold.py b/tests/test_fold.py new file mode 100644 index 0000000..e4dae97 --- /dev/null +++ b/tests/test_fold.py @@ -0,0 +1,92 @@ +import numpy as np +import pytest +from numpy.testing import assert_allclose + +from pyamapping.mappings import fold + + +class TestFoldDefaultRange: + """Test folding with default range [-1, 1].""" + + def test_value_within_range_unchanged(self): + assert fold(0.0) == pytest.approx(0.0) + assert fold(-0.5) == pytest.approx(-0.5) + assert fold(0.5) == pytest.approx(0.5) + + def test_upper_bound_stays_at_upper(self): + assert fold(1.0) == pytest.approx(1.0) + + def test_lower_bound_stays_at_lower(self): + assert fold(-1.0) == pytest.approx(-1.0) + + def test_folds_back_above_upper(self): + assert fold(1.5) == pytest.approx(0.5) + + def test_folds_back_below_lower(self): + assert fold(-1.5) == pytest.approx(-0.5) + + +class TestFoldCustomRange: + """Test folding with custom ranges.""" + + def test_known_values(self): + assert_allclose( + fold(np.arange(0, 13), 0, 4), + [0, 1, 2, 3, 4, 3, 2, 1, 0, 1, 2, 3, 4], + ) + + def test_value_at_y1_stays_at_y1(self): + assert fold(0.0, 0, 4) == pytest.approx(0.0) + + def test_value_at_y2_stays_at_y2(self): + assert fold(4.0, 0, 4) == pytest.approx(4.0) + + def test_folds_above_y2(self): + assert fold(5.0, 0, 4) == pytest.approx(3.0) + + def test_folds_below_y1(self): + assert fold(-1.0, 0, 4) == pytest.approx(1.0) + + def test_multiple_folds(self): + # after two full periods the pattern repeats + assert fold(8.0, 0, 4) == pytest.approx(fold(0.0, 0, 4)) + assert fold(9.0, 0, 4) == pytest.approx(fold(1.0, 0, 4)) + + +class TestFoldBoundsOrder: + """Test that y1/y2 order is irrelevant due to internal sorting.""" + + def test_swapped_bounds_give_same_result(self): + x = np.linspace(-5, 5, 50) + assert_allclose(fold(x, 0, 4), fold(x, 4, 0)) + + def test_negative_range(self): + assert fold(-3.0, -4, 0) == pytest.approx(-3.0) + assert fold(1.0, -4, 0) == pytest.approx(-1.0) + + +class TestFoldProperties: + """Test mathematical properties of fold.""" + + def test_output_always_in_range(self): + x = np.linspace(-20, 20, 500) + result = fold(x, 0, 4) + assert np.all(result >= 0.0) + assert np.all(result <= 4.0) + + def test_periodic_with_period_twice_the_range(self): + # fold has period 2*L where L = y2 - y1 + period = 2 * 4 + x = np.linspace(-5, 5, 50) + assert_allclose(fold(x, 0, 4), fold(x + period, 0, 4)) + + def test_symmetric_around_bounds(self): + # fold(y2 + d) == fold(y2 - d): mirrors at upper bound + for d in [0.5, 1.0, 1.5]: + assert fold(4 + d, 0, 4) == pytest.approx(fold(4 - d, 0, 4)) + + def test_array_input_returns_ndarray(self): + assert isinstance(fold(np.array([0.0, 1.0])), np.ndarray) + + def test_scalar_input_returns_scalar(self): + assert isinstance(float(fold(0.5)), float) \ No newline at end of file diff --git a/tests/test_gain.py b/tests/test_gain.py new file mode 100644 index 0000000..27a7efd --- /dev/null +++ b/tests/test_gain.py @@ -0,0 +1,79 @@ +import numpy as np +import pytest +from numpy.testing import assert_allclose + +from pyamapping.mappings import gain, db_to_amp + + +class TestGainAmp: + """Test gain applied as a scalar amplitude factor.""" + + def test_known_values(self): + assert_allclose(gain(np.array([1, 2, 3, 4]), amp=2), [2, 4, 6, 8]) + + def test_amp_one_unchanged(self): + x = np.array([1.0, 2.0, 3.0]) + assert_allclose(gain(x, amp=1.0), x) + + def test_amp_half_attenuates(self): + x = np.array([2.0, 4.0, 6.0]) + assert_allclose(gain(x, amp=0.5), [1.0, 2.0, 3.0]) + + def test_amp_zero_silences(self): + x = np.array([1.0, 2.0, 3.0]) + assert_allclose(gain(x, amp=0.0), np.zeros(3)) + + +class TestGainDb: + """Test gain applied as decibels.""" + + def test_0db_unchanged(self): + x = np.array([1.0, 2.0, 3.0]) + assert_allclose(gain(x, db=0), x, rtol=1e-6) + + def test_minus_6db_approximately_halves(self): + x = np.array([1.0, 2.0, 3.0]) + assert_allclose(gain(x, db=-6), x * db_to_amp(-6), rtol=1e-6) + + def test_20db_multiplies_by_ten(self): + x = np.array([1.0, 2.0, 3.0]) + assert_allclose(gain(x, db=20), x * 10.0, rtol=1e-6) + + def test_minus_20db_divides_by_ten(self): + x = np.array([1.0, 2.0, 3.0]) + assert_allclose(gain(x, db=-20), x * 0.1, rtol=1e-6) + + +class TestGainCombined: + """Test gain applied as both db and amp simultaneously.""" + + def test_db_and_amp_both_applied(self): + x = np.array([1.0, 2.0, 3.0]) + assert_allclose(gain(x, db=20, amp=2.0), x * 10.0 * 2.0, rtol=1e-6) + + def test_db_and_amp_order_independent(self): + # db*amp == amp*db mathematically + x = np.array([1.0, 2.0, 3.0]) + assert_allclose( + gain(x, db=6, amp=0.5), + x * db_to_amp(6) * 0.5, + rtol=1e-6, + ) + + +class TestGainEdgeCases: + """Test edge cases and no-op behaviour.""" + + def test_no_args_returns_copy(self): + x = np.array([1.0, 2.0, 3.0]) + result = gain(x) + assert_allclose(result, x) + assert result is not x # should be a copy, not the same object + + def test_shape_preserved(self): + x = np.random.rand(20) + assert gain(x, amp=2.0).shape == x.shape + + def test_negative_amp_inverts_polarity(self): + x = np.array([1.0, -2.0, 3.0]) + assert_allclose(gain(x, amp=-1.0), [-1.0, 2.0, -3.0]) \ No newline at end of file diff --git a/tests/test_hz_mel_hz.py b/tests/test_hz_mel_hz.py new file mode 100644 index 0000000..3d40850 --- /dev/null +++ b/tests/test_hz_mel_hz.py @@ -0,0 +1,90 @@ +import pytest +import numpy as np + +from pyamapping.mappings import hz_to_mel, mel_to_hz + +class TestHzToMel: + """Test Hz to mel conversion for both Slaney and HTK formulas.""" + + def test_zero_hz_is_zero_mel_slaney(self): + assert hz_to_mel(0) == pytest.approx(0.0) + + def test_zero_hz_is_zero_mel_htk(self): + assert hz_to_mel(0, htk=True) == pytest.approx(0.0) + + def test_known_value_slaney(self): + assert hz_to_mel(440) == pytest.approx(6.6, rel=1e-6) + + def test_known_value_htk(self): + # 440 Hz -> mel via O'Shaughnessy formula + assert hz_to_mel(440, htk=True) == pytest.approx(2595 * np.log10(1 + 440 / 700), rel=1e-6) + + def test_linear_regime_below_1000hz(self): + # Slaney: linear law applies below 1000 Hz + assert hz_to_mel(200) == pytest.approx(3.0 * 200 / 200, rel=1e-6) + + def test_log_regime_above_1000hz(self): + # Slaney: log law applies at and above 1000 Hz — boundary value + assert hz_to_mel(1000) == pytest.approx(15.0, rel=1e-6) + + def test_array_input_slaney(self): + result = hz_to_mel(np.array([0, 200, 1000, 4000])) + assert isinstance(result, np.ndarray) + assert result[2] == pytest.approx(15.0, rel=1e-6) + + def test_array_input_htk(self): + result = hz_to_mel(np.array([0, 440, 1000]), htk=True) + assert isinstance(result, np.ndarray) + + +class TestMelToHz: + """Test mel to Hz conversion for both Slaney and HTK formulas.""" + + def test_zero_mel_is_zero_hz_slaney(self): + assert mel_to_hz(0) == pytest.approx(0.0) + + def test_zero_mel_is_zero_hz_htk(self): + assert mel_to_hz(0, htk=True) == pytest.approx(0.0) + + def test_known_value_slaney(self): + assert mel_to_hz(6.6) == pytest.approx(440.0, rel=1e-6) + + + def test_known_value_htk(self): + assert mel_to_hz(2595 * np.log10(1 + 440 / 700), htk=True) == pytest.approx(440, rel=1e-6) + + def test_linear_regime_below_mel_15(self): + # Slaney: linear law applies below mel=15 + assert mel_to_hz(9.0) == pytest.approx(200.0 / 3 * 9, rel=1e-6) + + def test_boundary_mel_15_is_1000hz(self): + assert mel_to_hz(15) == pytest.approx(1000.0, rel=1e-6) + + def test_array_input_slaney(self): + result = mel_to_hz(np.array([0, 9, 15, 30])) + assert isinstance(result, np.ndarray) + assert result[2] == pytest.approx(1000.0, rel=1e-6) + + +class TestHzMelRoundtrip: + """Test that hz_to_mel and mel_to_hz are exact inverses of each other.""" + + def test_hz_to_mel_to_hz_slaney(self): + for hz in np.arange(1, 128): + assert mel_to_hz(hz_to_mel(hz)) == pytest.approx(hz, rel=1e-6) + + def test_mel_to_hz_to_mel_slaney(self): + for mel in np.arange(1, 128): + assert hz_to_mel(mel_to_hz(mel)) == pytest.approx(mel, rel=1e-6) + + def test_hz_to_mel_to_hz_htk(self): + for hz in [100, 440, 1000, 4000, 8000]: + assert mel_to_hz(hz_to_mel(hz, htk=True), htk=True) == pytest.approx(hz, rel=1e-9) + + def test_mel_to_hz_to_mel_htk(self): + for mel in [100, 500, 1000, 2000]: + assert hz_to_mel(mel_to_hz(mel, htk=True), htk=True) == pytest.approx(mel, rel=1e-9) + + def test_htk_and_slaney_differ(self): + # The two formulas are different — their results should not be equal + assert hz_to_mel(440, htk=True) != pytest.approx(hz_to_mel(440, htk=False)) \ No newline at end of file diff --git a/tests/test_lcurve.py b/tests/test_lcurve.py new file mode 100644 index 0000000..71773cd --- /dev/null +++ b/tests/test_lcurve.py @@ -0,0 +1,76 @@ +import pytest +import numpy as np +from numpy.testing import assert_allclose + +from pyamapping.mappings import lcurve + + +class TestLcurveDefaultParams: + """Test lcurve with default parameters (Fermi function: m=0, n=1, tau=1).""" + + def test_zero_input_is_half(self): + # (1 + 0) / (1 + 1) = 0.5 + assert lcurve(0.0) == pytest.approx(0.5) + + def test_known_values(self): + assert_allclose( + lcurve(np.array([-1, -0.5, 0, 0.5, 1])), + [0.26894142, 0.37754067, 0.5, 0.62245933, 0.73105858], + rtol=1e-6, + ) + + def test_approaches_zero_for_large_negative_x(self): + assert lcurve(-500.0) == pytest.approx(0.0, abs=1e-6) + + def test_approaches_one_for_large_positive_x(self): + assert lcurve(500.0) == pytest.approx(1.0, abs=1e-6) + + +class TestLcurveParameters: + """Test effect of m, n, and tau parameters.""" + + def test_m_equals_n_is_constant_one(self): + # (1 + c*exp) / (1 + c*exp) = 1 for any x when m == n + for x in [-1.0, 0.0, 1.0, 10.0]: + assert lcurve(x, m=2.0, n=2.0) == pytest.approx(1.0) + + def test_n_zero_is_constant_one(self): + # (1 + m*exp) / (1 + 0) = 1 + m*exp, but with m=0: always 1 + assert lcurve(0.0, m=0.0, n=0.0) == pytest.approx(1.0) + + def test_tau_scales_x_axis(self): + # lcurve(x, tau=2) == lcurve(x/2, tau=1) + assert lcurve(2.0, tau=2.0) == pytest.approx(lcurve(1.0, tau=1.0)) + + def test_negative_tau_flips_curve(self): + # negative tau mirrors the curve: lcurve(x, tau=-1) == lcurve(-x, tau=1) + assert lcurve(1.0, tau=-1.0) == pytest.approx(lcurve(-1.0, tau=1.0)) + + def test_large_tau_flattens_curve(self): + # very large tau -> exp(-x/tau) -> 1, output approaches (1+m)/(1+n) + assert lcurve(10.0, tau=1e9) == pytest.approx(lcurve(0.0, tau=1e9), rel=1e-4) + + +class TestLcurveProperties: + """Test mathematical properties of the L-curve.""" + + def test_monotonically_increasing_default(self): + x = np.linspace(-5, 5, 200) + assert np.all(np.diff(lcurve(x)) > 0) + + def test_point_symmetry_around_zero_default(self): + # Fermi function: lcurve(-x) + lcurve(x) == 1 + for x in [0.5, 1.0, 2.0, 5.0]: + assert lcurve(-x) + lcurve(x) == pytest.approx(1.0) + + def test_output_bounded_to_unit_interval_default(self): + x = np.linspace(-100, 100, 500) + result = lcurve(x) + assert np.all(result >= 0.0) + assert np.all(result <= 1.0) + + def test_scalar_input_returns_scalar(self): + assert isinstance(float(lcurve(0.5)), float) + + def test_array_input_returns_ndarray(self): + assert isinstance(lcurve(np.array([0.0, 1.0])), np.ndarray) \ No newline at end of file diff --git a/tests/test_lincurve.py b/tests/test_lincurve.py new file mode 100644 index 0000000..946b97d --- /dev/null +++ b/tests/test_lincurve.py @@ -0,0 +1,128 @@ +import numpy as np +import pytest +from numpy.testing import assert_allclose + +from pyamapping.mappings import lincurve + + +class TestLincurveEndpoints: + """Test that x1->y1 and x2->y2 mappings are exact.""" + + def test_x1_maps_to_y1_default_params(self): + assert lincurve(0.0, 0, 1) == pytest.approx(-1.0) + + def test_x2_maps_to_y2_default_params(self): + assert lincurve(1.0, 0, 1) == pytest.approx(1.0) + + def test_x1_maps_to_y1_custom(self): + assert lincurve(2.0, 2, 5, y1=10.0, y2=20.0) == pytest.approx(10.0) + + def test_x2_maps_to_y2_custom(self): + assert lincurve(5.0, 2, 5, y1=10.0, y2=20.0) == pytest.approx(20.0) + + +class TestLincurveLinearFallback: + """Test the linear branch triggered when abs(curve) < 0.001.""" + + def test_zero_curve_midpoint(self): + # With curve=0, should be linear: midpoint maps to midpoint + result = lincurve(0.5, 0, 1, 0, 1, curve=0.0) + assert result == pytest.approx(0.5) + + def test_tiny_curve_is_linear(self): + # curve=0.0009 is below threshold, expect linear behaviour + result = lincurve(0.5, 0, 1, 0, 1, curve=0.0009) + assert result == pytest.approx(0.5) + + def test_linear_array_input(self): + x = np.array([0.0, 0.5, 1.0]) + result = lincurve(x, 0, 1, 0, 1, curve=0.0) + assert_allclose(result, [0.0, 0.5, 1.0]) + + +class TestLincurveCurvedMapping: + """Test exponential (non-linear) mapping with meaningful curve values.""" + + def test_array_input_known_values(self): + result = lincurve(np.array([0.0, 0.1, 0.4, 0.7, 1.0]), 0, 1, 0, 0.4) + assert_allclose( + result, + [0.0, 0.08385643, 0.25474431, 0.34852956, 0.4], + rtol=1e-5, + ) + + def test_negative_curve(self): + # Negative curve bends the other way; endpoints must still hold + assert lincurve(0.0, 0, 1, 0, 1, curve=-2.0) == pytest.approx(0.0) + assert lincurve(1.0, 0, 1, 0, 1, curve=-2.0) == pytest.approx(1.0) + + def test_positive_curve(self): + assert lincurve(0.0, 0, 1, 0, 1, curve=2.0) == pytest.approx(0.0) + assert lincurve(1.0, 0, 1, 0, 1, curve=2.0) == pytest.approx(1.0) + + def test_positive_vs_negative_curve_symmetry(self): + # For x in [0,1]->[0,1], curve and -curve should be symmetric around 0.5 + x = 0.3 + pos = lincurve(x, 0, 1, 0, 1, curve=2.0) + neg = lincurve(1 - x, 0, 1, 0, 1, curve=-2.0) + assert pos == pytest.approx(1 - neg, rel=1e-5) + + +class TestLincurvePolarityInversion: + """Test y2 < y1 (inverted range).""" + + def test_inverted_range_endpoints(self): + assert lincurve(0.0, 0, 1, y1=1.0, y2=0.0) == pytest.approx(1.0) + assert lincurve(1.0, 0, 1, y1=1.0, y2=0.0) == pytest.approx(0.0) + + def test_inverted_range_midpoint_is_between_bounds(self): + result = lincurve(0.5, 0, 1, y1=1.0, y2=0.0) + assert 0.0 <= result <= 1.0 + + +class TestLincurveExtrapolation: + """Default (clip=None) should extrapolate beyond [x1, x2].""" + + def test_extrapolates_below_x1(self): + # x < x1 with linear curve should give z < y1 + result = lincurve(-1.0, 0, 1, 0, 1, curve=0.0) + assert result == pytest.approx(-1.0) + + def test_extrapolates_above_x2(self): + result = lincurve(2.0, 0, 1, 0, 1, curve=0.0) + assert result == pytest.approx(2.0) + + +class TestLincurveClipping: + """Test all clip modes.""" + + def test_clip_max_caps_at_y2(self): + # x > x2 would extrapolate above y2=1; clip="max" should cap it + result = lincurve(2.0, 0, 1, 0, 1, curve=0.0, clip="max") + assert result == pytest.approx(1.0) + + def test_clip_max_does_not_affect_lower_values(self): + result = lincurve(0.5, 0, 1, 0, 1, curve=0.0, clip="max") + assert result == pytest.approx(0.5) + + def test_clip_min_caps_at_y1(self): + result = lincurve(-1.0, 0, 1, 0, 1, curve=0.0, clip="min") + assert result == pytest.approx(0.0) + + def test_clip_min_does_not_affect_upper_values(self): + result = lincurve(0.5, 0, 1, 0, 1, curve=0.0, clip="min") + assert result == pytest.approx(0.5) + + def test_clip_minmax_caps_both_sides(self): + assert lincurve(-1.0, 0, 1, 0, 1, curve=0.0, clip="minmax") == pytest.approx(0.0) + assert lincurve(2.0, 0, 1, 0, 1, curve=0.0, clip="minmax") == pytest.approx(1.0) + + def test_clip_unknown_string_implies_minmax(self): + # Any string other than "min"/"max" should clip both sides + assert lincurve(-1.0, 0, 1, 0, 1, curve=0.0, clip="both") == pytest.approx(0.0) + assert lincurve(2.0, 0, 1, 0, 1, curve=0.0, clip="both") == pytest.approx(1.0) + + def test_clip_minmax_array_input(self): + x = np.array([-1.0, 0.0, 0.5, 1.0, 2.0]) + result = lincurve(x, 0, 1, 0, 1, curve=0.0, clip="minmax") + assert_allclose(result, [0.0, 0.0, 0.5, 1.0, 1.0]) \ No newline at end of file diff --git a/tests/test_linexp.py b/tests/test_linexp.py new file mode 100644 index 0000000..d215111 --- /dev/null +++ b/tests/test_linexp.py @@ -0,0 +1,104 @@ +import pytest +import numpy as np +from numpy.testing import assert_allclose + +from pyamapping.mappings import linexp + +class TestLinexpEndpoints: + """Test that x1->y1 and x2->y2 mappings are exact.""" + + def test_x1_maps_to_y1(self): + assert linexp(1.0, 1, 8, 2, 256) == pytest.approx(2.0) + + def test_x2_maps_to_y2(self): + assert linexp(8.0, 1, 8, 2, 256) == pytest.approx(256.0) + + def test_x1_maps_to_y1_custom(self): + assert linexp(0.0, 0, 4, 100, 300) == pytest.approx(100.0) + + def test_x2_maps_to_y2_custom(self): + assert linexp(4.0, 0, 4, 100, 300) == pytest.approx(300.0) + + +class TestLinexpMapping: + """Test exponential mapping between endpoints.""" + + def test_known_value(self): + assert linexp(5, 1, 8, 2, 256) == pytest.approx(32.0) + + def test_midpoint_is_geometric_mean(self): + # exponential mapping: midpoint maps to sqrt(y1*y2) + assert linexp(0.5, 0, 1, 1, 100) == pytest.approx(10.0, rel=1e-6) + + def test_inverted_range(self): + assert linexp(5, 1, 8, 256, 2) == pytest.approx(16.0, rel=1e-5) + + def test_array_input(self): + result = linexp(np.array([1.0, 8.0]), 1, 8, 2, 256) + assert_allclose(result, [2.0, 256.0]) + + +class TestLinexpExtrapolation: + """Default (clip=None) should extrapolate beyond [x1, x2].""" + + def test_extrapolates_above_x2(self): + result = linexp(9.0, 1, 8, 2, 256) + assert result > 256.0 + + def test_extrapolates_below_x1(self): + result = linexp(0.0, 1, 8, 2, 256) + assert result < 2.0 + + +class TestLinexpClipping: + """Test all clip modes.""" + + def test_clip_max_caps_at_y2(self): + assert linexp(7, 0, 5, 100, 300, clip="max") == pytest.approx(300.0) + + def test_clip_max_does_not_affect_lower_values(self): + assert linexp(2.5, 0, 5, 100, 300, clip="max") == pytest.approx( + linexp(2.5, 0, 5, 100, 300) + ) + + def test_clip_min_caps_at_y1(self): + assert linexp(1, 2, 5, 100, 300, clip="min") == pytest.approx(100.0) + + def test_clip_min_does_not_affect_upper_values(self): + assert linexp(3.5, 2, 5, 100, 300, clip="min") == pytest.approx( + linexp(3.5, 2, 5, 100, 300) + ) + + def test_clip_minmax_caps_both_sides(self): + assert linexp(1, 2, 5, 100, 300, clip="minmax") == pytest.approx(100.0) + assert linexp(6, 2, 5, 100, 300, clip="minmax") == pytest.approx(300.0) + + def test_clip_unknown_string_implies_minmax(self): + assert linexp(1, 2, 5, 100, 300, clip="both") == pytest.approx(100.0) + assert linexp(6, 2, 5, 100, 300, clip="both") == pytest.approx(300.0) + + def test_clip_inverted_range(self): + assert linexp(5, 1, 8, 256, 2, clip="minmax") == pytest.approx(16.0, rel=1e-5) + + def test_clip_minmax_array_input(self): + result = linexp(np.array([0.0, 4.0, 9.0]), 1, 8, 2, 256, clip="minmax") + assert_allclose(result, [2.0, linexp(4.0, 1, 8, 2, 256), 256.0]) + + +class TestLinexpProperties: + """Test mathematical properties of linexp.""" + + def test_output_is_always_positive_for_positive_bounds(self): + x = np.linspace(0, 10, 100) + assert np.all(linexp(x, 1, 8, 2, 256) > 0) + + def test_monotonically_increasing(self): + x = np.linspace(1, 8, 100) + assert np.all(np.diff(linexp(x, 1, 8, 2, 256)) > 0) + + def test_ratio_of_outputs_depends_only_on_ratio_of_inputs(self): + # exponential mapping: equal steps in x -> equal ratios in y + y1 = linexp(1.0, 0, 3, 1, 8) + y2 = linexp(2.0, 0, 3, 1, 8) + y3 = linexp(3.0, 0, 3, 1, 8) + assert y2 / y1 == pytest.approx(y3 / y2, rel=1e-6) \ No newline at end of file diff --git a/tests/test_linlin.py b/tests/test_linlin.py new file mode 100644 index 0000000..51eaa08 --- /dev/null +++ b/tests/test_linlin.py @@ -0,0 +1,91 @@ +import numpy as np +import pytest +from numpy.testing import assert_allclose + +from pyamapping.mappings import linlin + +class TestLinlinEndpoints: + """Test that x1->y1 and x2->y2 mappings are exact.""" + + def test_x1_maps_to_y1(self): + assert linlin(0.0, 0, 1, 10.0, 20.0) == pytest.approx(10.0) + + def test_x2_maps_to_y2(self): + assert linlin(1.0, 0, 1, 10.0, 20.0) == pytest.approx(20.0) + + def test_array_input(self): + origin = np.array([-1, 0, 1, 2, 4]) + target = np.array([-50, 0, 50, 100, 200]) + assert_allclose(linlin(origin, 0, 2, 0, 100), target) + + +class TestLinlinInterpolation: + """Test linear mapping between endpoints.""" + + def test_midpoint(self): + assert linlin(0.5, 0, 1, 0, 1) == pytest.approx(0.5) + + def test_midpoint_custom_range(self): + assert linlin(50, 0, 100, 0, 1) == pytest.approx(0.5) + + def test_negative_range(self): + assert linlin(-0.5, -1, 0, 0, 100) == pytest.approx(50.0) + + +class TestLinlinExtrapolation: + """Default (clip=None) should extrapolate beyond [x1, x2].""" + + def test_extrapolates_below_x1(self): + assert linlin(-1.0, 0, 1, 0, 100) == pytest.approx(-100.0) + + def test_extrapolates_above_x2(self): + assert linlin(2.0, 0, 1, 0, 100) == pytest.approx(200.0) + + +class TestLinlinPolarityInversion: + """Test y2 < y1 (inverted range).""" + + def test_x1_maps_to_y1_inverted(self): + assert linlin(0, 0, 1, 1, 0) == pytest.approx(1.0) + + def test_x2_maps_to_y2_inverted(self): + assert linlin(1, 0, 1, 1, 0) == pytest.approx(0.0) + + def test_midpoint_inverted(self): + assert linlin(0.5, 0, 1, 1, 0) == pytest.approx(0.5) + + +class TestLinlinClipping: + """Test all clip modes, including inverted y1/y2 ranges.""" + + def test_clip_max_caps_at_y2(self): + assert linlin(105, 0, 100, 100, 200, clip="max") == pytest.approx(200.0) + + def test_clip_max_does_not_affect_lower_values(self): + assert linlin(50, 0, 100, 100, 200, clip="max") == pytest.approx(150.0) + + def test_clip_min_caps_at_y1(self): + assert linlin(-10, 0, 100, 100, 200, clip="min") == pytest.approx(100.0) + + def test_clip_min_does_not_affect_upper_values(self): + assert linlin(50, 0, 100, 100, 200, clip="min") == pytest.approx(150.0) + + def test_clip_minmax_caps_both_sides(self): + assert linlin(3, 5, 105, 100, 1000, clip="minmax") == pytest.approx(100.0) + assert linlin(105, 0, 100, 100, 1000, clip="minmax") == pytest.approx(1000.0) + + def test_clip_unknown_string_implies_minmax(self): + assert linlin(-10, 0, 100, 100, 200, clip="both") == pytest.approx(100.0) + assert linlin(110, 0, 100, 100, 200, clip="both") == pytest.approx(200.0) + + def test_clip_max_inverted_range(self): + # y1=200, y2=100 — "max" should still cap at the higher bound (200) + assert linlin(-10, 0, 100, 200, 100, clip="max") == pytest.approx(200.0) + + def test_clip_min_inverted_range(self): + # y1=200, y2=100 — "min" should still floor at the lower bound (100) + assert linlin(105, 0, 100, 200, 100, clip="min") == pytest.approx(100.0) + + def test_clip_minmax_array_input(self): + result = linlin(np.array([-10.0, 50.0, 110.0]), 0, 100, 0, 1, clip="minmax") + assert_allclose(result, [0.0, 0.5, 1.0]) \ No newline at end of file diff --git a/tests/test_linpoly.py b/tests/test_linpoly.py new file mode 100644 index 0000000..3c1b028 --- /dev/null +++ b/tests/test_linpoly.py @@ -0,0 +1,94 @@ +import numpy as np +import pytest +from numpy.testing import assert_allclose + +from pyamapping.mappings import linpoly + + +class TestLinpolyEndpoints: + """Test that -xmax->y1 and xmax->y2 mappings are exact.""" + + def test_xmax_maps_to_y2(self): + assert linpoly(1.0, xmax=1.0, y1=-1.0, y2=1.0) == pytest.approx(1.0) + + def test_negative_xmax_maps_to_y1(self): + assert linpoly(-1.0, xmax=1.0, y1=-1.0, y2=1.0) == pytest.approx(-1.0) + + def test_zero_maps_to_midpoint(self): + # (1 + 0) / 2 = 0.5 -> y1 + 0.5*(y2-y1) = midpoint + assert linpoly(0.0, xmax=1.0, y1=0.0, y2=1.0) == pytest.approx(0.5) + + def test_custom_range_endpoints(self): + assert linpoly(2.5, xmax=2.5, y1=100, y2=500) == pytest.approx(500.0) + assert linpoly(-2.5, xmax=2.5, y1=100, y2=500) == pytest.approx(100.0) + + +class TestLinpolyCurve: + """Test effect of curve parameter on polynomial order.""" + + def test_known_values_curve_1(self): + assert_allclose( + linpoly(np.arange(-2, 3), 2.5, 100, 500, curve=1), + [172.0, 268.0, 300.0, 332.0, 428.0], + rtol=1e-6, + ) + + def test_curve_zero_is_linear(self): + # curve=0 -> order=1, pure linear mapping + x = np.array([-1.0, 0.0, 1.0]) + assert_allclose(linpoly(x, xmax=1.0, y1=0.0, y2=1.0, curve=0), [0.0, 0.5, 1.0]) + + def test_positive_curve_increases_order(self): + # curve=1 -> order=2 (quadratic), curve=2 -> order=3 (cubic) + # higher order -> more compression near zero + mid_curve1 = linpoly(0.5, xmax=1.0, y1=0.0, y2=1.0, curve=1) + mid_curve2 = linpoly(0.5, xmax=1.0, y1=0.0, y2=1.0, curve=2) + assert mid_curve2 < mid_curve1 # more curved -> closer to midpoint + + def test_negative_curve_order(self): + # curve=-1 -> order = 1/(1-(-1)) = 0.5 (square root) + order = 1 / (1 - (-1)) + expected = 0 + 1 * (1 + (0.5 / 1.0) ** order) / 2 + assert linpoly(0.5, xmax=1.0, y1=0.0, y2=1.0, curve=-1) == pytest.approx(expected) + + +class TestLinpolyProperties: + """Test mathematical properties of linpoly.""" + + def test_odd_symmetry_around_midpoint(self): + # linpoly(-x) and linpoly(x) should be symmetric around the output midpoint + for x in [0.25, 0.5, 0.75, 1.0]: + assert linpoly(x, y1=0.0, y2=1.0) + linpoly(-x, y1=0.0, y2=1.0) == pytest.approx(1.0) + + def test_monotonically_increasing(self): + x = np.linspace(-1, 1, 200) + assert np.all(np.diff(linpoly(x)) > 0) + + def test_output_bounded_within_range_for_input_within_xmax(self): + x = np.linspace(-1, 1, 100) + result = linpoly(x, xmax=1.0, y1=0.0, y2=1.0) + assert np.all(result >= 0.0) + assert np.all(result <= 1.0) + + +class TestLinpolyClipping: + """Test all clip modes.""" + + def test_clip_max_caps_at_y2(self): + assert linpoly(2.0, xmax=1.0, y1=0.0, y2=1.0, clip="max") == pytest.approx(1.0) + + def test_clip_min_caps_at_y1(self): + assert linpoly(-2.0, xmax=1.0, y1=0.0, y2=1.0, clip="min") == pytest.approx(0.0) + + def test_clip_minmax_caps_both_sides(self): + assert linpoly(2.0, xmax=1.0, y1=0.0, y2=1.0, clip="minmax") == pytest.approx(1.0) + assert linpoly(-2.0, xmax=1.0, y1=0.0, y2=1.0, clip="minmax") == pytest.approx(0.0) + + def test_clip_unknown_string_implies_minmax(self): + assert linpoly(2.0, xmax=1.0, y1=0.0, y2=1.0, clip="both") == pytest.approx(1.0) + assert linpoly(-2.0, xmax=1.0, y1=0.0, y2=1.0, clip="both") == pytest.approx(0.0) + + def test_clip_does_not_affect_values_within_range(self): + assert linpoly(0.5, xmax=1.0, y1=0.0, y2=1.0, clip="minmax") == pytest.approx( + linpoly(0.5, xmax=1.0, y1=0.0, y2=1.0) + ) \ No newline at end of file diff --git a/tests/test_midi_cps_midi.py b/tests/test_midi_cps_midi.py new file mode 100644 index 0000000..e5de271 --- /dev/null +++ b/tests/test_midi_cps_midi.py @@ -0,0 +1,69 @@ +import numpy as np +import pytest + +from pyamapping.mappings import midi_to_cps, cps_to_midi + + +class TestMidiToCps: + """Test MIDI note to frequency conversion.""" + + def test_a4_is_440hz(self): + assert midi_to_cps(69) == pytest.approx(440.0) + + def test_a5_is_880hz(self): + assert midi_to_cps(81) == pytest.approx(880.0) + + def test_a3_is_220hz(self): + assert midi_to_cps(57) == pytest.approx(220.0) + + def test_middle_c(self): + assert midi_to_cps(60) == pytest.approx(261.6255, rel=1e-4) + + def test_octave_up_doubles_frequency(self): + assert midi_to_cps(69 + 12) == pytest.approx(midi_to_cps(69) * 2) + + def test_octave_down_halves_frequency(self): + assert midi_to_cps(69 - 12) == pytest.approx(midi_to_cps(69) / 2) + + def test_fractional_midi_note(self): + # halfway between two semitones should be between their frequencies + f_low = midi_to_cps(60) + f_high = midi_to_cps(61) + assert f_low < midi_to_cps(60.5) < f_high + + +class TestCpsToMidi: + """Test frequency to MIDI note conversion.""" + + def test_440hz_is_a4(self): + assert cps_to_midi(440.0) == pytest.approx(69.0) + + def test_880hz_is_a5(self): + assert cps_to_midi(880.0) == pytest.approx(81.0) + + def test_220hz_is_a3(self): + assert cps_to_midi(220.0) == pytest.approx(57.0) + + def test_middle_c_frequency(self): + assert cps_to_midi(261.6255) == pytest.approx(60.0, rel=1e-4) + + def test_octave_up_adds_12(self): + assert cps_to_midi(880.0) == pytest.approx(cps_to_midi(440.0) + 12) + + def test_octave_down_subtracts_12(self): + assert cps_to_midi(220.0) == pytest.approx(cps_to_midi(440.0) - 12) + + +class TestMidiCpsRoundtrip: + """Test that the two functions are exact inverses of each other.""" + + def test_midi_to_cps_to_midi(self): + for midi in [0, 21, 60, 69, 81, 108, 127]: + assert cps_to_midi(midi_to_cps(midi)) == pytest.approx(midi, rel=1e-9) + + def test_cps_to_midi_to_cps(self): + for cps in [27.5, 110.0, 220.0, 440.0, 880.0, 1760.0]: + assert midi_to_cps(cps_to_midi(cps)) == pytest.approx(cps, rel=1e-9) + + def test_fractional_roundtrip(self): + assert cps_to_midi(midi_to_cps(60.5)) == pytest.approx(60.5, rel=1e-9) \ No newline at end of file diff --git a/tests/test_midi_ratio_midi.py b/tests/test_midi_ratio_midi.py new file mode 100644 index 0000000..2bdc78b --- /dev/null +++ b/tests/test_midi_ratio_midi.py @@ -0,0 +1,61 @@ +import numpy as np +import pytest +from numpy.testing import assert_allclose + +from pyamapping.mappings import midi_to_ratio, ratio_to_midi + + +class TestMidiToRatio: + """Test MIDI interval to frequency ratio conversion.""" + + def test_unison_is_ratio_one(self): + assert midi_to_ratio(0) == pytest.approx(1.0) + + def test_octave_is_ratio_two(self): + assert midi_to_ratio(12) == pytest.approx(2.0) + + def test_two_octaves_is_ratio_four(self): + assert midi_to_ratio(24) == pytest.approx(4.0) + + def test_perfect_fifth(self): + assert midi_to_ratio(7) == pytest.approx(1.4983070768766815) + + def test_negative_interval_inverts_ratio(self): + assert midi_to_ratio(-12) == pytest.approx(0.5) + + def test_fractional_interval(self): + assert midi_to_ratio(6.0) == pytest.approx(2 ** 0.5, rel=1e-9) + + +class TestRatioToMidi: + """Test frequency ratio to MIDI interval conversion.""" + + def test_ratio_one_is_unison(self): + assert ratio_to_midi(1.0) == pytest.approx(0.0) + + def test_ratio_two_is_octave(self): + assert ratio_to_midi(2.0) == pytest.approx(12.0) + + def test_ratio_four_is_two_octaves(self): + assert ratio_to_midi(4.0) == pytest.approx(24.0) + + def test_ratio_half_is_negative_octave(self): + assert ratio_to_midi(0.5) == pytest.approx(-12.0) + + def test_perfect_fifth_ratio(self): + assert ratio_to_midi(1.4983070768766815) == pytest.approx(7.0, rel=1e-6) + + +class TestMidiRatioRoundtrip: + """Test that the two functions are exact inverses of each other.""" + + def test_midi_to_ratio_to_midi(self): + for midi in [-12, -7, 0, 5, 7, 12, 24]: + assert ratio_to_midi(midi_to_ratio(midi)) == pytest.approx(midi, rel=1e-9) + + def test_ratio_to_midi_to_ratio(self): + for ratio in [0.5, 1.0, 1.5, 2.0, 3.0, 4.0]: + assert midi_to_ratio(ratio_to_midi(ratio)) == pytest.approx(ratio, rel=1e-9) + + def test_fractional_roundtrip(self): + assert ratio_to_midi(midi_to_ratio(3.5)) == pytest.approx(3.5, rel=1e-9) \ No newline at end of file diff --git a/tests/test_norm_peak.py b/tests/test_norm_peak.py new file mode 100644 index 0000000..92e7e53 --- /dev/null +++ b/tests/test_norm_peak.py @@ -0,0 +1,79 @@ +import numpy as np +import pytest +from numpy.testing import assert_allclose + +from pyamapping.mappings import norm_peak + + + +class TestNormPeakDefaultPeak: + """Test peak normalization with default peak=1.0.""" + + def test_max_abs_is_one(self): + x = np.array([1.0, -2.0, 3.0, -0.5]) + result = norm_peak(x) + assert np.max(np.abs(result)) == pytest.approx(1.0) + + def test_positive_array_max_is_one(self): + x = np.array([1.0, 2.0, 3.0, 4.0]) + assert np.max(norm_peak(x)) == pytest.approx(1.0) + + def test_negative_array_min_is_minus_one(self): + x = np.array([-4.0, -3.0, -2.0, -1.0]) + assert np.min(norm_peak(x)) == pytest.approx(-1.0) + + def test_shape_preserved(self): + x = np.random.rand(20) + assert norm_peak(x).shape == x.shape + + +class TestNormPeakCustomPeak: + """Test peak normalization with custom peak values.""" + + def test_custom_peak_random_array(self): + result = norm_peak(np.random.rand(10), peak=5.0) + assert np.max(np.abs(result)) == pytest.approx(5.0) + + def test_custom_peak_known_array(self): + x = np.array([1.0, -2.0, 3.0, -0.5]) + result = norm_peak(x, peak=6.0) + assert np.max(np.abs(result)) == pytest.approx(6.0) + + def test_scaling_is_linear(self): + x = np.array([1.0, 2.0, 3.0]) + result = norm_peak(x, peak=2.0) + assert_allclose(result, [2/3, 4/3, 2.0]) + + def test_ratios_between_elements_preserved(self): + x = np.array([1.0, 2.0, 4.0]) + result = norm_peak(x, peak=5.0) + assert result[1] / result[0] == pytest.approx(2.0) + assert result[2] / result[1] == pytest.approx(2.0) + + +class TestNormPeakEdgeCases: + """Test edge cases including zero arrays and sign preservation.""" + + def test_zero_array_returned_unchanged(self): + x = np.zeros(5) + assert_allclose(norm_peak(x), x) + + def test_zero_array_with_custom_peak_returned_unchanged(self): + x = np.zeros(5) + assert_allclose(norm_peak(x, peak=3.0), x) + + def test_already_normalized_array_unchanged(self): + x = np.array([-1.0, 0.0, 0.5, 1.0]) + assert_allclose(norm_peak(x), x) + + def test_sign_preserved(self): + x = np.array([-3.0, 1.0, 2.0]) + result = norm_peak(x) + assert result[0] < 0 + assert result[1] > 0 + + def test_single_element_array(self): + assert norm_peak(np.array([5.0])) == pytest.approx(1.0) + + def test_single_negative_element(self): + assert norm_peak(np.array([-5.0])) == pytest.approx(-1.0) \ No newline at end of file diff --git a/tests/test_norm_rms.py b/tests/test_norm_rms.py new file mode 100644 index 0000000..a4af9a9 --- /dev/null +++ b/tests/test_norm_rms.py @@ -0,0 +1,79 @@ +import numpy as np +import pytest +from numpy.testing import assert_allclose + +from pyamapping.mappings import norm_rms + + +class TestNormRmsDefaultRms: + """Test RMS normalization with default rms=1.0.""" + + def test_rms_is_one(self): + x = np.array([1.0, -2.0, 3.0, -0.5]) + result = norm_rms(x) + assert np.sqrt(np.mean(result**2)) == pytest.approx(1.0) + + def test_known_values(self): + assert_allclose( + norm_rms(np.array([1, 0, 0, -1]), 1), + [1.41421356, 0.0, 0.0, -1.41421356], + rtol=1e-6, + ) + + def test_shape_preserved(self): + x = np.random.rand(20) + assert norm_rms(x).shape == x.shape + + +class TestNormRmsCustomRms: + """Test RMS normalization with custom target RMS values.""" + + def test_custom_rms_achieved(self): + x = np.array([1.0, -2.0, 3.0, -0.5]) + result = norm_rms(x, rms=2.0) + assert np.sqrt(np.mean(result**2)) == pytest.approx(2.0) + + def test_random_array_custom_rms(self): + x = np.random.rand(100) + result = norm_rms(x, rms=0.5) + assert np.sqrt(np.mean(result**2)) == pytest.approx(0.5) + + def test_scaling_is_linear(self): + # doubling target rms doubles all values + x = np.array([1.0, 2.0, 3.0]) + result1 = norm_rms(x, rms=1.0) + result2 = norm_rms(x, rms=2.0) + assert_allclose(result2, result1 * 2) + + def test_ratios_between_elements_preserved(self): + x = np.array([1.0, 2.0, 4.0]) + result = norm_rms(x, rms=3.0) + assert result[1] / result[0] == pytest.approx(2.0) + assert result[2] / result[1] == pytest.approx(2.0) + + +class TestNormRmsEdgeCases: + """Test edge cases including zero arrays and sign preservation.""" + + def test_zero_array_returned_unchanged(self): + x = np.zeros(5) + assert_allclose(norm_rms(x), x) + + def test_zero_array_with_custom_rms_returned_unchanged(self): + x = np.zeros(5) + assert_allclose(norm_rms(x, rms=3.0), x) + + def test_already_unit_rms_unchanged(self): + # array with rms=1: single element [1.0] + x = np.array([1.0]) + assert_allclose(norm_rms(x), x) + + def test_sign_preserved(self): + x = np.array([-3.0, 1.0, 2.0]) + result = norm_rms(x) + assert result[0] < 0 + assert result[1] > 0 + + def test_single_element_array(self): + result = norm_rms(np.array([5.0])) + assert np.sqrt(np.mean(result**2)) == pytest.approx(1.0) diff --git a/tests/test_normalize.py b/tests/test_normalize.py new file mode 100644 index 0000000..e5d5c64 --- /dev/null +++ b/tests/test_normalize.py @@ -0,0 +1,86 @@ +import pytest +import numpy as np +from numpy.testing import assert_allclose + +from pyamapping.mappings import normalize + + +class TestNormalizeDefaultRange: + """Test normalization to default range [-1, 1].""" + + def test_min_maps_to_minus_one(self): + x = np.array([1.0, 2.0, 3.0, 4.0, 5.0]) + result = normalize(x) + assert result.min() == pytest.approx(-1.0) + + def test_max_maps_to_one(self): + x = np.array([1.0, 2.0, 3.0, 4.0, 5.0]) + result = normalize(x) + assert result.max() == pytest.approx(1.0) + + def test_random_array_bounds(self): + result = normalize(np.random.rand(100)) + assert result.min() == pytest.approx(-1.0) + assert result.max() == pytest.approx(1.0) + + +class TestNormalizeCustomRange: + """Test normalization to custom target ranges.""" + + def test_custom_range(self): + x = np.array([0.0, 1.0, 2.0, 3.0, 4.0]) + result = normalize(x, y1=0.0, y2=100.0) + assert result.min() == pytest.approx(0.0) + assert result.max() == pytest.approx(100.0) + + def test_midpoint_maps_correctly(self): + x = np.array([0.0, 0.5, 1.0]) + result = normalize(x, y1=0.0, y2=1.0) + assert result[1] == pytest.approx(0.5) + + def test_known_values(self): + x = np.array([0.0, 1.0, 2.0, 3.0, 4.0]) + assert_allclose(normalize(x, y1=0.0, y2=1.0), [0.0, 0.25, 0.5, 0.75, 1.0]) + + +class TestNormalizePolarityInversion: + """Test normalization with y1 > y2 (inverted range).""" + + def test_inverted_range_min_maps_to_y1(self): + x = np.array([1.0, 2.0, 3.0]) + result = normalize(x, y1=1.0, y2=0.0) + assert result.max() == pytest.approx(1.0) + + def test_inverted_range_max_maps_to_y2(self): + x = np.array([1.0, 2.0, 3.0]) + result = normalize(x, y1=1.0, y2=0.0) + assert result.min() == pytest.approx(0.0) + + def test_inverted_range_is_mirror_of_normal(self): + x = np.array([1.0, 2.0, 3.0, 4.0, 5.0]) + normal = normalize(x, y1=0.0, y2=1.0) + inverted = normalize(x, y1=1.0, y2=0.0) + assert_allclose(normal + inverted, np.ones_like(x)) + + +class TestNormalizeProperties: + """Test mathematical properties of normalize.""" + + def test_output_shape_matches_input(self): + x = np.random.rand(20) + assert normalize(x).shape == x.shape + + def test_constant_array_with_zero_range(self): + # all same values -> x2 - x1 = 0 -> nan (numpy does not raise) + x = np.array([3.0, 3.0, 3.0]) + result = normalize(x) + assert np.all(np.isnan(result)) + + def test_linear_mapping_preserves_order(self): + x = np.array([1.0, 2.0, 3.0, 4.0, 5.0]) + result = normalize(x) + assert np.all(np.diff(result) > 0) + + def test_already_normalized_input(self): + x = np.array([-1.0, 0.0, 1.0]) + assert_allclose(normalize(x), x) \ No newline at end of file diff --git a/tests/test_remove_dc.py b/tests/test_remove_dc.py new file mode 100644 index 0000000..4c1b222 --- /dev/null +++ b/tests/test_remove_dc.py @@ -0,0 +1,70 @@ +import numpy as np +import pytest +from numpy.testing import assert_allclose + +from pyamapping.mappings import remove_dc + + +class TestRemoveDcBasic: + """Test basic DC removal behaviour.""" + + def test_known_values(self): + assert_allclose( + remove_dc(np.array([1, 2, 3, 4])), + [-1.5, -0.5, 0.5, 1.5], + ) + + def test_mean_of_result_is_zero(self): + x = np.array([1.0, 2.0, 3.0, 4.0]) + assert np.mean(remove_dc(x)) == pytest.approx(0.0) + + def test_mean_of_random_array_is_zero(self): + x = np.random.rand(100) + 5.0 # large DC offset + assert np.mean(remove_dc(x)) == pytest.approx(0.0, abs=1e-12) + + def test_shape_preserved(self): + x = np.random.rand(20) + assert remove_dc(x).shape == x.shape + + +class TestRemoveDcEdgeCases: + """Test edge cases for DC removal.""" + + def test_zero_mean_array_unchanged(self): + x = np.array([-1.0, 0.0, 1.0]) + assert_allclose(remove_dc(x), x) + + def test_constant_array_becomes_zero(self): + x = np.full(5, 3.0) + assert_allclose(remove_dc(x), np.zeros(5)) + + def test_single_element_becomes_zero(self): + assert remove_dc(np.array([7.0])) == pytest.approx(0.0) + + def test_negative_dc_offset(self): + x = np.array([-5.0, -4.0, -3.0]) + assert np.mean(remove_dc(x)) == pytest.approx(0.0) + + +class TestRemoveDcProperties: + """Test mathematical properties of DC removal.""" + + def test_values_sum_to_zero(self): + x = np.array([1.0, 3.0, 5.0, 7.0]) + assert np.sum(remove_dc(x)) == pytest.approx(0.0) + + def test_relative_differences_preserved(self): + # DC removal is a shift — differences between elements are unchanged + x = np.array([1.0, 3.0, 6.0, 10.0]) + result = remove_dc(x) + assert_allclose(np.diff(result), np.diff(x)) + + def test_idempotent(self): + # applying twice gives same result as once + x = np.array([1.0, 2.0, 3.0, 4.0]) + assert_allclose(remove_dc(remove_dc(x)), remove_dc(x)) + + def test_variance_preserved(self): + # DC removal does not change variance + x = np.array([1.0, 2.0, 3.0, 4.0]) + assert np.var(remove_dc(x)) == pytest.approx(np.var(x)) \ No newline at end of file diff --git a/tests/test_scurve.py b/tests/test_scurve.py new file mode 100644 index 0000000..86713ca --- /dev/null +++ b/tests/test_scurve.py @@ -0,0 +1,75 @@ +import pytest +import numpy as np +from numpy.testing import assert_allclose + +from pyamapping.mappings import scurve + + +class TestScurveEndpoints: + """Test boundary and clamping behaviour.""" + + def test_zero_maps_to_zero(self): + assert scurve(0.0) == pytest.approx(0.0) + + def test_one_maps_to_one(self): + assert scurve(1.0) == pytest.approx(1.0) + + def test_below_zero_clamps_to_zero(self): + assert scurve(-1.0) == pytest.approx(0.0) + assert scurve(-1e9) == pytest.approx(0.0) + + def test_above_one_clamps_to_one(self): + assert scurve(2.0) == pytest.approx(1.0) + assert scurve(1e9) == pytest.approx(1.0) + + +class TestScurveKnownValues: + """Test known values along the curve.""" + + def test_midpoint_is_half(self): + assert scurve(0.5) == pytest.approx(0.5) + + def test_known_values(self): + assert_allclose( + scurve(np.arange(0, 1, 0.25)), + [0.0, 0.15625, 0.5, 0.84375], + rtol=1e-6, + ) + + def test_quarter_point(self): + assert scurve(0.25) == pytest.approx(0.15625) + + def test_three_quarter_point(self): + assert scurve(0.75) == pytest.approx(0.84375) + + +class TestScurveProperties: + """Test mathematical properties of the S-curve.""" + + def test_point_symmetry_around_midpoint(self): + # scurve is symmetric around (0.5, 0.5): scurve(1-x) == 1 - scurve(x) + for x in [0.1, 0.25, 0.3, 0.75]: + assert scurve(1 - x) == pytest.approx(1 - scurve(x)) + + def test_monotonically_increasing(self): + x = np.linspace(0, 1, 200) + assert np.all(np.diff(scurve(x)) >= 0) + + def test_output_bounded_to_unit_interval(self): + x = np.linspace(-2, 3, 200) + result = scurve(x) + assert np.all(result >= 0.0) + assert np.all(result <= 1.0) + + def test_slope_at_midpoint_is_steepest(self): + # derivative at 0.5 should be greater than at 0.25 and 0.75 + eps = 1e-5 + slope_mid = (scurve(0.5 + eps) - scurve(0.5 - eps)) / (2 * eps) + slope_quarter = (scurve(0.25 + eps) - scurve(0.25 - eps)) / (2 * eps) + assert slope_mid > slope_quarter + + def test_scalar_input_returns_float(self): + assert isinstance(scurve(0.5), float) + + def test_array_input_returns_ndarray(self): + assert isinstance(scurve(np.array([0.25, 0.75])), np.ndarray) \ No newline at end of file diff --git a/tests/test_softclip.py b/tests/test_softclip.py new file mode 100644 index 0000000..a1a897e --- /dev/null +++ b/tests/test_softclip.py @@ -0,0 +1,80 @@ +import pytest +import numpy as np +from numpy.testing import assert_allclose + +from pyamapping.mappings import softclip + + +class TestSoftclipLinearRegion: + """Test the perfectly linear region within [-0.5, 0.5].""" + + def test_zero_is_zero(self): + assert softclip(0.0) == pytest.approx(0.0) + + def test_positive_boundary(self): + assert softclip(0.5) == pytest.approx(0.5) + + def test_negative_boundary(self): + assert softclip(-0.5) == pytest.approx(-0.5) + + def test_midpoint_linear(self): + assert softclip(0.25) == pytest.approx(0.25) + + def test_linear_region_is_identity(self): + x = np.linspace(-0.5, 0.5, 50) + assert_allclose(softclip(x), x) + + +class TestSoftclipNonlinearRegion: + """Test the compressed region outside [-0.5, 0.5].""" + + def test_known_positive_values(self): + assert_allclose( + softclip(np.arange(1, 5)), + [0.75, 0.875, 0.91666667, 0.9375], + rtol=1e-6, + ) + + def test_just_outside_boundary_positive(self): + # (|0.6| - 0.25) / 0.6 + assert softclip(0.6) == pytest.approx(0.35 / 0.6, rel=1e-6) + + def test_just_outside_boundary_negative(self): + assert softclip(-0.6) == pytest.approx(-0.35 / 0.6, rel=1e-6) + + def test_output_approaches_one_for_large_x(self): + # (x - 0.25) / x -> 1 as x -> inf + assert softclip(1e9) == pytest.approx(1.0, rel=1e-6) + + def test_output_approaches_minus_one_for_large_negative_x(self): + assert softclip(-1e9) == pytest.approx(-1.0, rel=1e-6) + + +class TestSoftclipProperties: + """Test mathematical properties of softclip.""" + + def test_odd_symmetry(self): + for x in [0.3, 0.5, 1.0, 5.0, 100.0]: + assert softclip(-x) == pytest.approx(-softclip(x)) + + def test_output_bounded(self): + x = np.array([-1e9, -10.0, -1.0, 0.0, 1.0, 10.0, 1e9]) + result = softclip(x) + assert np.all(result >= -1.0) + assert np.all(result <= 1.0) + + def test_monotonically_increasing(self): + x = np.linspace(-10, 10, 200) + assert np.all(np.diff(softclip(x)) > 0) + + def test_continuous_at_boundary(self): + # softclip should be continuous at x=±0.5 + assert softclip(0.5 - 1e-9) == pytest.approx(softclip(0.5 + 1e-9), rel=1e-4) + assert softclip(-0.5 - 1e-9) == pytest.approx(softclip(-0.5 + 1e-9), rel=1e-4) + + def test_scalar_input_returns_float(self): + assert isinstance(softclip(0.3), float) + assert isinstance(softclip(1.0), float) + + def test_array_input_returns_ndarray(self): + assert isinstance(softclip(np.array([0.3, 1.0])), np.ndarray) \ No newline at end of file diff --git a/tests/test_wrap.py b/tests/test_wrap.py new file mode 100644 index 0000000..039085b --- /dev/null +++ b/tests/test_wrap.py @@ -0,0 +1,70 @@ +import pytest +import numpy as np +from numpy.testing import assert_allclose + +from pyamapping.mappings import wrap + + +class TestWrapDefaultRange: + """Test wrapping with default range [-1, 1].""" + + def test_value_within_range_unchanged(self): + assert wrap(0.0) == pytest.approx(0.0) + assert wrap(-0.5) == pytest.approx(-0.5) + + def test_upper_bound_wraps_to_lower(self): + assert wrap(1.0) == pytest.approx(-1.0) + + def test_wraps_above_range(self): + assert wrap(1.5) == pytest.approx(-0.5) + + def test_wraps_below_range(self): + assert wrap(-1.5) == pytest.approx(0.5) + + +class TestWrapCustomRange: + """Test wrapping with custom ranges.""" + + def test_known_values(self): + assert_allclose( + wrap(np.arange(-3, 5), 0, 3), + [0, 1, 2, 0, 1, 2, 0, 1], + ) + + def test_value_at_y1_is_y1(self): + assert wrap(0.0, 0, 3) == pytest.approx(0.0) + + def test_value_at_y2_wraps_to_y1(self): + assert wrap(3.0, 0, 3) == pytest.approx(0.0) + + def test_multiple_periods_above(self): + assert wrap(7.0, 0, 3) == pytest.approx(1.0) + + def test_multiple_periods_below(self): + assert wrap(-5.0, 0, 3) == pytest.approx(1.0) + + def test_float_range(self): + assert wrap(1.75, 0.0, 0.5) == pytest.approx(0.25) + + +class TestWrapProperties: + """Test mathematical properties of wrap.""" + + def test_output_always_in_range(self): + x = np.linspace(-10, 10, 200) + result = wrap(x, 0, 3) + assert np.all(result >= 0.0) + assert np.all(result < 3.0) + + def test_periodic_with_period_equal_to_range(self): + # wrap(x) == wrap(x + (y2-y1)) + period = 3.0 + x = np.linspace(-5, 5, 50) + assert_allclose(wrap(x, 0, period), wrap(x + period, 0, period)) + + + def test_array_input_returns_ndarray(self): + assert isinstance(wrap(np.array([0.0, 1.0])), np.ndarray) + + def test_scalar_input_returns_scalar(self): + assert isinstance(float(wrap(0.5)), float) \ No newline at end of file From f091222ad28b7f6c3dfd7c2b9b56ec4bf8b7fe83 Mon Sep 17 00:00:00 2001 From: Fabian Hommel Date: Tue, 14 Apr 2026 12:17:02 +0200 Subject: [PATCH 72/87] Initial steps of migrating build setup to uv --- .github/workflows/ci.yml | 2 +- .gitignore | 3 + .pre-commit-config.yaml | 62 +- coverage.lcov | 498 +++ docs/conf.py | 4 +- {src/pyamapping => pyamapping}/__init__.py | 5 + .../chainable_array.py | 0 {src/pyamapping => pyamapping}/mappings.py | 3 - pyproject.toml | 50 +- tox.ini | 57 +- uv.lock | 3874 +++++++++++++++++ 11 files changed, 4454 insertions(+), 104 deletions(-) create mode 100644 coverage.lcov rename {src/pyamapping => pyamapping}/__init__.py (98%) rename {src/pyamapping => pyamapping}/chainable_array.py (100%) rename {src/pyamapping => pyamapping}/mappings.py (99%) create mode 100644 uv.lock diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e6e0739..3b4b299 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -61,7 +61,7 @@ jobs: matrix: python: - "3.7" # oldest Python supported by PSF - - "3.13" # newest Python that is stable + - "3.14" # newest Python that is stable platform: - ubuntu-latest - macos-latest diff --git a/.gitignore b/.gitignore index e9e1e9b..a8e4e65 100644 --- a/.gitignore +++ b/.gitignore @@ -52,3 +52,6 @@ MANIFEST .venv*/ .conda*/ .python-version + +# Ignore .env file +.env diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 8a753d5..a6cdff3 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -4,70 +4,32 @@ repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.4.0 hooks: - - id: trailing-whitespace - id: check-added-large-files + exclude: uv.lock - id: check-ast - id: check-json - id: check-merge-conflict - id: check-xml - id: check-yaml - - id: debug-statements - id: end-of-file-fixer - - id: requirements-txt-fixer - id: mixed-line-ending args: ['--fix=auto'] # replace 'auto' with 'lf' to enforce Linux/Mac line endings or 'crlf' for Windows -## If you want to automatically "modernize" your Python code: -# - repo: https://github.com/asottile/pyupgrade -# rev: v3.7.0 -# hooks: -# - id: pyupgrade -# args: ['--py37-plus'] - -## If you want to avoid flake8 errors due to unused vars or imports: -# - repo: https://github.com/PyCQA/autoflake -# rev: v2.1.1 -# hooks: -# - id: autoflake -# args: [ -# --in-place, -# --remove-all-unused-imports, -# --remove-unused-variables, -# ] - -- repo: https://github.com/PyCQA/isort - rev: 5.12.0 - hooks: - - id: isort - -- repo: https://github.com/psf/black - rev: 23.7.0 +- repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.9.0 # check latest hooks: - - id: black - language_version: python3 - -## If like to embrace black styles even in the docs: -# - repo: https://github.com/asottile/blacken-docs -# rev: v1.13.0 -# hooks: -# - id: blacken-docs -# additional_dependencies: [black] - -- repo: https://github.com/PyCQA/flake8 - rev: 6.0.0 - hooks: - - id: flake8 - ## You can add flake8 plugins via `additional_dependencies`: - # additional_dependencies: [flake8-bugbear] - -## Check for misspells in documentation files: -# - repo: https://github.com/codespell-project/codespell -# rev: v2.2.5 -# hooks: -# - id: codespell + - id: ruff # replaces isort + flake8 + args: [--fix] # auto-fix where possible + - id: ruff-format # replaces black - repo: https://github.com/kynan/nbstripout rev: 0.8.1 hooks: - id: nbstripout args: [--extra-keys=metadata.kernelspec metadata.language_info] + + +- repo: https://github.com/astral-sh/uv-pre-commit + rev: 0.6.0 # check latest + hooks: + - id: uv-lock # updates uv.lock when pyproject.toml changes diff --git a/coverage.lcov b/coverage.lcov new file mode 100644 index 0000000..d15be63 --- /dev/null +++ b/coverage.lcov @@ -0,0 +1,498 @@ +SF:pyamapping/__init__.py +DA:1,1 +DA:3,1 +DA:9,1 +DA:11,1 +DA:12,1 +DA:16,1 +DA:18,1 +DA:20,1 +DA:22,1 +DA:23,1 +DA:72,1 +DA:120,1 +DA:122,1 +DA:123,1 +DA:125,1 +DA:126,0 +DA:128,1 +DA:130,1 +DA:132,1 +DA:133,0 +DA:135,1 +DA:138,0 +DA:140,0 +DA:141,0 +DA:143,0 +DA:145,1 +DA:146,1 +DA:151,1 +DA:154,1 +DA:157,1 +DA:158,0 +DA:160,1 +DA:161,1 +DA:166,1 +DA:169,1 +DA:171,1 +DA:172,1 +DA:173,1 +DA:174,1 +DA:175,1 +DA:176,1 +DA:178,0 +DA:179,1 +DA:183,1 +DA:184,1 +DA:185,1 +DA:188,1 +DA:189,1 +DA:191,1 +DA:229,1 +DA:230,1 +DA:232,1 +DA:233,1 +DA:234,1 +DA:235,1 +DA:236,1 +DA:237,1 +DA:238,1 +DA:239,1 +LF:59 +LH:51 +FN:120,151,register_numpy_ufunc +FNDA:1,register_numpy_ufunc +FN:125,126,register_numpy_ufunc.method1 +FNDA:0,register_numpy_ufunc.method1 +FN:154,166,register_chain_fn +FNDA:1,register_chain_fn +FN:157,158,register_chain_fn.method +FNDA:0,register_chain_fn.method +FN:169,179,_list_numpy_ufuncs +FNDA:1,_list_numpy_ufuncs +FNF:5 +FNH:3 +BRDA:123,0,jump to line 125,1 +BRDA:123,0,jump to line 130,1 +BRDA:130,0,jump to line 132,1 +BRDA:130,0,jump to line 138,0 +BRDA:172,0,jump to line 173,1 +BRDA:172,0,jump to line 179,1 +BRDA:174,0,jump to line 172,1 +BRDA:174,0,jump to line 175,1 +BRDA:175,0,jump to line 176,1 +BRDA:175,0,jump to line 178,0 +BRDA:183,0,jump to line 184,1 +BRDA:183,0,jump to line 188,1 +BRDA:229,0,jump to line 230,1 +BRDA:229,0,jump to line 232,1 +BRF:14 +BRH:12 +end_of_record +SF:pyamapping/chainable_array.py +DA:3,1 +DA:5,1 +DA:6,1 +DA:8,1 +DA:11,1 +DA:14,1 +DA:16,1 +DA:17,1 +DA:19,1 +DA:21,1 +DA:22,0 +DA:24,1 +DA:26,1 +DA:28,1 +DA:30,0 +DA:32,0 +DA:34,1 +DA:36,0 +DA:38,0 +DA:39,0 +DA:40,0 +DA:41,0 +DA:42,0 +DA:44,0 +DA:45,0 +DA:46,0 +DA:48,0 +DA:50,0 +DA:52,1 +DA:66,1 +DA:68,1 +DA:88,1 +DA:89,1 +DA:90,1 +DA:91,1 +DA:96,1 +DA:98,1 +DA:99,1 +DA:100,1 +DA:105,1 +DA:108,1 +LF:41 +LH:27 +FN:14,17,ChainableArray.__new__ +FNDA:1,ChainableArray.__new__ +FN:19,22,ChainableArray.__array_finalize__ +FNDA:1,ChainableArray.__array_finalize__ +FN:24,26,ChainableArray.to_array +FNDA:1,ChainableArray.to_array +FN:28,32,ChainableArray.to_asig +FNDA:0,ChainableArray.to_asig +FN:34,50,ChainableArray.plot +FNDA:0,ChainableArray.plot +FN:52,66,ChainableArray.mapvec +FNDA:1,ChainableArray.mapvec +FN:68,94,ChainableArray.map +FNDA:1,ChainableArray.map +FN:96,102,ChainableArray.__getattr__ +FNDA:1,ChainableArray.__getattr__ +FN:105,108,chain +FNDA:1,chain +FNF:9 +FNH:7 +BRDA:21,0,jump to line 22,0 +BRDA:21,0,return from function '__array_finalize__',1 +BRDA:39,0,jump to line 40,- +BRDA:39,0,jump to line 44,- +BRDA:45,0,jump to line 46,- +BRDA:45,0,jump to line 48,- +BRDA:98,0,jump to line 99,1 +BRDA:98,0,jump to line 100,1 +BRF:8 +BRH:3 +end_of_record +SF:pyamapping/mappings.py +DA:3,1 +DA:5,1 +DA:6,1 +DA:8,1 +DA:11,1 +DA:48,1 +DA:49,1 +DA:50,1 +DA:51,1 +DA:52,1 +DA:53,1 +DA:54,1 +DA:55,1 +DA:56,1 +DA:58,1 +DA:61,1 +DA:98,1 +DA:99,1 +DA:100,1 +DA:101,1 +DA:102,1 +DA:103,1 +DA:104,1 +DA:105,1 +DA:106,1 +DA:108,1 +DA:111,1 +DA:148,1 +DA:150,1 +DA:151,1 +DA:152,1 +DA:153,1 +DA:154,1 +DA:155,1 +DA:156,1 +DA:157,1 +DA:159,1 +DA:162,1 +DA:206,1 +DA:207,1 +DA:209,1 +DA:213,1 +DA:214,1 +DA:215,1 +DA:216,1 +DA:217,1 +DA:218,1 +DA:219,1 +DA:221,1 +DA:222,1 +DA:225,1 +DA:267,1 +DA:268,1 +DA:270,1 +DA:271,1 +DA:273,1 +DA:274,1 +DA:275,1 +DA:276,1 +DA:277,1 +DA:278,1 +DA:279,1 +DA:281,1 +DA:282,1 +DA:285,1 +DA:315,1 +DA:316,1 +DA:317,1 +DA:318,1 +DA:319,1 +DA:320,0 +DA:321,1 +DA:322,1 +DA:323,1 +DA:324,1 +DA:326,1 +DA:329,1 +DA:358,1 +DA:360,1 +DA:361,1 +DA:364,1 +DA:391,1 +DA:394,1 +DA:423,1 +DA:426,1 +DA:447,1 +DA:448,1 +DA:450,1 +DA:451,1 +DA:452,1 +DA:453,1 +DA:454,1 +DA:457,1 +DA:470,1 +DA:473,1 +DA:476,1 +DA:489,1 +DA:492,1 +DA:495,1 +DA:508,1 +DA:511,1 +DA:514,1 +DA:527,1 +DA:530,1 +DA:533,1 +DA:548,1 +DA:551,1 +DA:554,1 +DA:569,1 +DA:572,1 +DA:575,1 +DA:592,1 +DA:593,1 +DA:595,1 +DA:596,1 +DA:601,1 +DA:604,1 +DA:620,1 +DA:621,1 +DA:623,1 +DA:624,1 +DA:629,1 +DA:632,1 +DA:645,1 +DA:648,1 +DA:651,1 +DA:664,1 +DA:667,1 +DA:670,1 +DA:684,1 +DA:687,1 +DA:701,1 +DA:702,1 +DA:703,1 +DA:704,1 +DA:705,1 +DA:706,1 +DA:709,1 +DA:722,1 +DA:723,1 +DA:726,1 +DA:747,1 +DA:750,1 +DA:767,1 +DA:770,1 +DA:785,1 +DA:786,1 +DA:789,1 +DA:807,1 +DA:810,1 +DA:828,1 +DA:829,1 +DA:830,1 +DA:831,1 +DA:834,1 +DA:845,1 +DA:848,1 +DA:860,1 +DA:861,1 +DA:864,1 +DA:876,1 +DA:877,1 +DA:880,1 +DA:895,1 +DA:896,1 +DA:898,1 +DA:899,1 +DA:900,1 +DA:901,1 +DA:904,1 +DA:923,1 +DA:924,1 +DA:928,1 +DA:931,1 +DA:951,1 +DA:952,1 +DA:956,1 +DA:957,1 +DA:960,1 +DA:985,1 +DA:986,1 +DA:987,1 +LF:182 +LH:181 +FN:11,58,linlin +FNDA:1,linlin +FN:61,108,linexp +FNDA:1,linexp +FN:111,159,explin +FNDA:1,explin +FN:162,222,lincurve +FNDA:1,lincurve +FN:225,282,curvelin +FNDA:1,curvelin +FN:285,326,linpoly +FNDA:1,linpoly +FN:329,361,interp_spline +FNDA:1,interp_spline +FN:364,391,interp +FNDA:1,interp +FN:394,423,bilin +FNDA:1,bilin +FN:426,454,clip +FNDA:1,clip +FN:457,470,midi_to_cps +FNDA:1,midi_to_cps +FN:476,489,cps_to_midi +FNDA:1,cps_to_midi +FN:495,508,midi_to_ratio +FNDA:1,midi_to_ratio +FN:514,527,ratio_to_midi +FNDA:1,ratio_to_midi +FN:533,548,cps_to_octave +FNDA:1,cps_to_octave +FN:554,569,octave_to_cps +FNDA:1,octave_to_cps +FN:575,601,hz_to_mel +FNDA:1,hz_to_mel +FN:604,629,mel_to_hz +FNDA:1,mel_to_hz +FN:632,645,db_to_amp +FNDA:1,db_to_amp +FN:651,664,amp_to_db +FNDA:1,amp_to_db +FN:670,684,distort +FNDA:1,distort +FN:687,706,softclip +FNDA:1,softclip +FN:709,723,scurve +FNDA:1,scurve +FN:726,747,lcurve +FNDA:1,lcurve +FN:750,767,fermi +FNDA:1,fermi +FN:770,786,normalize +FNDA:1,normalize +FN:789,807,wrap +FNDA:1,wrap +FN:810,831,fold +FNDA:1,fold +FN:834,845,remove_dc +FNDA:1,remove_dc +FN:848,861,norm_peak +FNDA:1,norm_peak +FN:864,877,norm_rms +FNDA:1,norm_rms +FN:880,901,gain +FNDA:1,gain +FN:904,928,lin_to_ecdf +FNDA:1,lin_to_ecdf +FN:931,957,ecdf_to_lin +FNDA:1,ecdf_to_lin +FN:960,987,ecdf +FNDA:1,ecdf +FNF:35 +FNH:35 +BRDA:49,0,jump to line 50,1 +BRDA:49,0,jump to line 51,1 +BRDA:51,0,jump to line 52,1 +BRDA:51,0,jump to line 53,1 +BRDA:53,0,jump to line 54,1 +BRDA:53,0,jump to line 55,1 +BRDA:55,0,jump to line 56,1 +BRDA:55,0,jump to line 58,1 +BRDA:99,0,jump to line 100,1 +BRDA:99,0,jump to line 101,1 +BRDA:101,0,jump to line 102,1 +BRDA:101,0,jump to line 103,1 +BRDA:103,0,jump to line 104,1 +BRDA:103,0,jump to line 105,1 +BRDA:105,0,jump to line 106,1 +BRDA:105,0,jump to line 108,1 +BRDA:150,0,jump to line 151,1 +BRDA:150,0,jump to line 152,1 +BRDA:152,0,jump to line 153,1 +BRDA:152,0,jump to line 154,1 +BRDA:154,0,jump to line 155,1 +BRDA:154,0,jump to line 156,1 +BRDA:156,0,jump to line 157,1 +BRDA:156,0,jump to line 159,1 +BRDA:206,0,jump to line 207,1 +BRDA:206,0,jump to line 209,1 +BRDA:213,0,jump to line 214,1 +BRDA:213,0,jump to line 215,1 +BRDA:215,0,jump to line 216,1 +BRDA:215,0,jump to line 222,1 +BRDA:216,0,jump to line 217,1 +BRDA:216,0,jump to line 218,1 +BRDA:218,0,jump to line 219,1 +BRDA:218,0,jump to line 221,1 +BRDA:267,0,jump to line 268,1 +BRDA:267,0,jump to line 270,1 +BRDA:273,0,jump to line 274,1 +BRDA:273,0,jump to line 275,1 +BRDA:275,0,jump to line 276,1 +BRDA:275,0,jump to line 282,1 +BRDA:276,0,jump to line 277,1 +BRDA:276,0,jump to line 278,1 +BRDA:278,0,jump to line 279,1 +BRDA:278,0,jump to line 281,1 +BRDA:317,0,jump to line 318,1 +BRDA:317,0,jump to line 319,1 +BRDA:319,0,jump to line 320,0 +BRDA:319,0,jump to line 321,1 +BRDA:321,0,jump to line 322,1 +BRDA:321,0,jump to line 323,1 +BRDA:323,0,jump to line 324,1 +BRDA:323,0,jump to line 326,1 +BRDA:447,0,jump to line 448,1 +BRDA:447,0,jump to line 450,1 +BRDA:450,0,jump to line 451,1 +BRDA:450,0,jump to line 452,1 +BRDA:452,0,jump to line 453,1 +BRDA:452,0,jump to line 454,1 +BRDA:592,0,jump to line 593,1 +BRDA:592,0,jump to line 595,1 +BRDA:620,0,jump to line 621,1 +BRDA:620,0,jump to line 623,1 +BRDA:828,0,jump to line 829,1 +BRDA:828,0,jump to line 830,1 +BRDA:895,0,jump to line 896,1 +BRDA:895,0,jump to line 898,1 +BRDA:899,0,jump to line 900,1 +BRDA:899,0,jump to line 901,1 +BRDA:923,0,jump to line 924,1 +BRDA:923,0,jump to line 928,1 +BRDA:951,0,jump to line 952,1 +BRDA:951,0,jump to line 956,1 +BRF:72 +BRH:71 +end_of_record diff --git a/docs/conf.py b/docs/conf.py index 7fea13e..87973bf 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -18,7 +18,7 @@ # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. -sys.path.insert(0, os.path.join(__location__, "../src")) +sys.path.insert(0, os.path.join(__location__, "..")) # -- Run sphinx-apidoc ------------------------------------------------------- # This hack is necessary since RTD does not issue `sphinx-apidoc` before running @@ -34,7 +34,7 @@ from sphinx import apidoc output_dir = os.path.join(__location__, "api") -module_dir = os.path.join(__location__, "../src/pyamapping") +module_dir = os.path.join(__location__, "../pyamapping") try: shutil.rmtree(output_dir) except FileNotFoundError: diff --git a/src/pyamapping/__init__.py b/pyamapping/__init__.py similarity index 98% rename from src/pyamapping/__init__.py rename to pyamapping/__init__.py index b750b6c..702b226 100644 --- a/src/pyamapping/__init__.py +++ b/pyamapping/__init__.py @@ -1,3 +1,8 @@ +""" +Contains various mapping functions used +in audio computing and sonification. +""" + import sys if sys.version_info[:2] >= (3, 8): diff --git a/src/pyamapping/chainable_array.py b/pyamapping/chainable_array.py similarity index 100% rename from src/pyamapping/chainable_array.py rename to pyamapping/chainable_array.py diff --git a/src/pyamapping/mappings.py b/pyamapping/mappings.py similarity index 99% rename from src/pyamapping/mappings.py rename to pyamapping/mappings.py index 5e5f898..a652326 100644 --- a/src/pyamapping/mappings.py +++ b/pyamapping/mappings.py @@ -985,6 +985,3 @@ def ecdf( xs = np.sort(x) ys = np.arange(1, len(xs) + 1) / float(len(xs)) return xs[selection], ys[selection] - - - diff --git a/pyproject.toml b/pyproject.toml index 19cf8da..ab41486 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,16 +1,58 @@ +[project] +name = "pyamapping" +description = "A Python package containing audio related functions and mappings" +authors = [ + { name = "Thomas Hermann", email = "thermann@techfak.uni-bielefeld.de"}, + { name = "Dennis Reinsch", email = "dreinsch@techfak.uni-bielefeld.de"} +] +maintainers = [ + {name = "Fabian Hommel", email = "fhommel@techfa.uni-bielefeld.de"} +] +readme = "README.rst" +dynamic = ["version"] +requires-python = ">=3.9" +dependencies = [ + "numpy", + "scipy", +] +license = "MIT" +license-files = ["LICEN[CS]E*", "AUTHORS.rst"] +classifiers = [ + "Development Status :: 4 - Beta", + "Programming Language :: Python" +] + +[project.urls] +github = "https://github.com/interactive-sonification/pyamapping" + [build-system] -# AVOID CHANGING REQUIRES: IT WILL BE UPDATED BY PYSCAFFOLD! -requires = ["setuptools>=46.1.0", "setuptools_scm[toml]>=5"] -build-backend = "setuptools.build_meta" +requires = ["hatchling", "hatch-vcs"] +build-backend = "hatchling.build" + +[tool.hatch.version] +source = "vcs" + +[tool.hatch.build.targets.wheel] +packages = ["pyamapping"] [tool.setuptools_scm] # For smarter version schemes and other configuration options, # check out https://github.com/pypa/setuptools_scm version_scheme = "no-guess-dev" +[project.optional-dependencies] +example-notebooks = ["notebook"] + +[tool.uv] +dev-dependencies = ["tox", "pytest", "pytest-cov", "pre-commit", "sphinx"] + [tool.ruff] line-length = 88 -lint.select = ["D"] +lint.select = ["E", "F", "I", "T10"] # E/F = flake8, I = isort [tool.ruff.lint.pydocstyle] convention = "numpy" + +[tool.pytest.ini_options] +addopts = "--cov=mypackage --cov-report=lcov" +testpaths = ["tests"] diff --git a/tox.ini b/tox.ini index 69f8159..2c0c575 100644 --- a/tox.ini +++ b/tox.ini @@ -1,39 +1,19 @@ # Tox configuration file # Read more under https://tox.wiki/ -# THIS SCRIPT IS SUPPOSED TO BE AN EXAMPLE. MODIFY IT ACCORDING TO YOUR NEEDS! [tox] minversion = 3.24 envlist = default -isolated_build = True -[testenv] +[testenv:{tests}] description = Invoke pytest to run automated tests setenv = TOXINIDIR = {toxinidir} -passenv = - HOME - SETUPTOOLS_* -extras = - testing +skip_install = true +allowlist_externals = uv commands = - pytest {posargs} - - -# # To run `tox -e lint` you need to make sure you have a -# # `.pre-commit-config.yaml` file. See https://pre-commit.com -# [testenv:lint] -# description = Perform static analysis and style checks -# skip_install = True -# deps = pre-commit -# passenv = -# HOMEPATH -# PROGRAMDATA -# SETUPTOOLS_* -# commands = -# pre-commit run --all-files {posargs:--show-diff-on-failure} - + uv run pytest {posargs} [testenv:{build,clean}] description = @@ -41,17 +21,12 @@ description = clean: Remove old distribution files and temporary build artifacts (./build and ./dist) # https://setuptools.pypa.io/en/stable/build_meta.html#how-to-use-it skip_install = True +allowlist_externals = uv changedir = {toxinidir} -deps = - build: build[virtualenv] -passenv = - SETUPTOOLS_* commands = clean: python -c 'import shutil; [shutil.rmtree(p, True) for p in ("build", "dist", "docs/_build")]' clean: python -c 'import pathlib, shutil; [shutil.rmtree(p, True) for p in pathlib.Path("src").glob("*.egg-info")]' - build: python -m build {posargs} -# By default, both `sdist` and `wheel` are built. If your sdist is too big or you don't want -# to make it available, consider running: `tox -e build -- --wheel` + build: uv build {posargs} [testenv:{docs,doctests,linkcheck}] @@ -59,19 +34,16 @@ description = docs: Invoke sphinx-build to build the docs doctests: Invoke sphinx-build to run doctests linkcheck: Check for broken links in the documentation -passenv = - SETUPTOOLS_* +allowlist_externals = uv setenv = DOCSDIR = {toxinidir}/docs BUILDDIR = {toxinidir}/docs/_build docs: BUILD = html doctests: BUILD = doctest linkcheck: BUILD = linkcheck -deps = - -r {toxinidir}/docs/requirements.txt # ^ requirements.txt shared with Read The Docs commands = - sphinx-build --color -b {env:BUILD} -d "{env:BUILDDIR}/doctrees" "{env:DOCSDIR}" "{env:BUILDDIR}/{env:BUILD}" {posargs} + uv run sphinx-build --color -b {env:BUILD} -d "{env:BUILDDIR}/doctrees" "{env:DOCSDIR}" "{env:BUILDDIR}/{env:BUILD}" {posargs} [testenv:publish] @@ -80,14 +52,11 @@ description = By default, it uses testpypi. If you really want to publish your package to be publicly accessible in PyPI, use the `-- --repository pypi` option. skip_install = True +allowlist_externals = uv changedir = {toxinidir} passenv = - # See: https://twine.readthedocs.io/en/latest/ - TWINE_USERNAME - TWINE_PASSWORD - TWINE_REPOSITORY - TWINE_REPOSITORY_URL -deps = twine + UV_PUBLISH_USERNAME + UV_PUBLISH_PASSWORD + UV_PUBLISH_URL commands = - python -m twine check dist/* - python -m twine upload {posargs:--repository {env:TWINE_REPOSITORY:testpypi}} dist/* + uv publish {posargs} diff --git a/uv.lock b/uv.lock new file mode 100644 index 0000000..9b9e760 --- /dev/null +++ b/uv.lock @@ -0,0 +1,3874 @@ +version = 1 +revision = 1 +requires-python = ">=3.9" +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", + "python_full_version < '3.10'", +] + +[[package]] +name = "alabaster" +version = "0.7.16" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/c9/3e/13dd8e5ed9094e734ac430b5d0eb4f2bb001708a8b7856cbf8e084e001ba/alabaster-0.7.16.tar.gz", hash = "sha256:75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65", size = 23776 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/34/d4e1c02d3bee589efb5dfa17f88ea08bdb3e3eac12bc475462aec52ed223/alabaster-0.7.16-py3-none-any.whl", hash = "sha256:b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92", size = 13511 }, +] + +[[package]] +name = "alabaster" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/a6/f8/d9c74d0daf3f742840fd818d69cfae176fa332022fd44e3469487d5a9420/alabaster-1.0.0.tar.gz", hash = "sha256:c00dca57bca26fa62a6d7d0a9fcce65f3e026e9bfe33e9c538fd3fbb2144fd9e", size = 24210 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl", hash = "sha256:fc6786402dc3fcb2de3cabd5fe455a2db534b371124f1f21de8731783dec828b", size = 13929 }, +] + +[[package]] +name = "anyio" +version = "4.12.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "exceptiongroup", marker = "python_full_version < '3.10'" }, + { name = "idna", marker = "python_full_version < '3.10'" }, + { name = "typing-extensions", marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/96/f0/5eb65b2bb0d09ac6776f2eb54adee6abe8228ea05b20a5ad0e4945de8aac/anyio-4.12.1.tar.gz", hash = "sha256:41cfcc3a4c85d3f05c932da7c26d0201ac36f72abd4435ba90d0464a3ffed703", size = 228685 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl", hash = "sha256:d405828884fc140aa80a3c667b8beed277f1dfedec42ba031bd6ac3db606ab6c", size = 113592 }, +] + +[[package]] +name = "anyio" +version = "4.13.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "exceptiongroup", marker = "python_full_version == '3.10.*'" }, + { name = "idna", marker = "python_full_version >= '3.10'" }, + { name = "typing-extensions", marker = "python_full_version >= '3.10' and python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/14/2c5dd9f512b66549ae92767a9c7b330ae88e1932ca57876909410251fe13/anyio-4.13.0.tar.gz", hash = "sha256:334b70e641fd2221c1505b3890c69882fe4a2df910cba14d97019b90b24439dc", size = 231622 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/da/42/e921fccf5015463e32a3cf6ee7f980a6ed0f395ceeaa45060b61d86486c2/anyio-4.13.0-py3-none-any.whl", hash = "sha256:08b310f9e24a9594186fd75b4f73f4a4152069e3853f1ed8bfbf58369f4ad708", size = 114353 }, +] + +[[package]] +name = "appnope" +version = "0.1.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321 }, +] + +[[package]] +name = "argon2-cffi" +version = "25.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "argon2-cffi-bindings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0e/89/ce5af8a7d472a67cc819d5d998aa8c82c5d860608c4db9f46f1162d7dab9/argon2_cffi-25.1.0.tar.gz", hash = "sha256:694ae5cc8a42f4c4e2bf2ca0e64e51e23a040c6a517a85074683d3959e1346c1", size = 45706 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4f/d3/a8b22fa575b297cd6e3e3b0155c7e25db170edf1c74783d6a31a2490b8d9/argon2_cffi-25.1.0-py3-none-any.whl", hash = "sha256:fdc8b074db390fccb6eb4a3604ae7231f219aa669a2652e0f20e16ba513d5741", size = 14657 }, +] + +[[package]] +name = "argon2-cffi-bindings" +version = "25.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5c/2d/db8af0df73c1cf454f71b2bbe5e356b8c1f8041c979f505b3d3186e520a9/argon2_cffi_bindings-25.1.0.tar.gz", hash = "sha256:b957f3e6ea4d55d820e40ff76f450952807013d361a65d7f28acc0acbf29229d", size = 1783441 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/97/3c0a35f46e52108d4707c44b95cfe2afcafc50800b5450c197454569b776/argon2_cffi_bindings-25.1.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:3d3f05610594151994ca9ccb3c771115bdb4daef161976a266f0dd8aa9996b8f", size = 54393 }, + { url = "https://files.pythonhosted.org/packages/9d/f4/98bbd6ee89febd4f212696f13c03ca302b8552e7dbf9c8efa11ea4a388c3/argon2_cffi_bindings-25.1.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:8b8efee945193e667a396cbc7b4fb7d357297d6234d30a489905d96caabde56b", size = 29328 }, + { url = "https://files.pythonhosted.org/packages/43/24/90a01c0ef12ac91a6be05969f29944643bc1e5e461155ae6559befa8f00b/argon2_cffi_bindings-25.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:3c6702abc36bf3ccba3f802b799505def420a1b7039862014a65db3205967f5a", size = 31269 }, + { url = "https://files.pythonhosted.org/packages/d4/d3/942aa10782b2697eee7af5e12eeff5ebb325ccfb86dd8abda54174e377e4/argon2_cffi_bindings-25.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a1c70058c6ab1e352304ac7e3b52554daadacd8d453c1752e547c76e9c99ac44", size = 86558 }, + { url = "https://files.pythonhosted.org/packages/0d/82/b484f702fec5536e71836fc2dbc8c5267b3f6e78d2d539b4eaa6f0db8bf8/argon2_cffi_bindings-25.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e2fd3bfbff3c5d74fef31a722f729bf93500910db650c925c2d6ef879a7e51cb", size = 92364 }, + { url = "https://files.pythonhosted.org/packages/c9/c1/a606ff83b3f1735f3759ad0f2cd9e038a0ad11a3de3b6c673aa41c24bb7b/argon2_cffi_bindings-25.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c4f9665de60b1b0e99bcd6be4f17d90339698ce954cfd8d9cf4f91c995165a92", size = 85637 }, + { url = "https://files.pythonhosted.org/packages/44/b4/678503f12aceb0262f84fa201f6027ed77d71c5019ae03b399b97caa2f19/argon2_cffi_bindings-25.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ba92837e4a9aa6a508c8d2d7883ed5a8f6c308c89a4790e1e447a220deb79a85", size = 91934 }, + { url = "https://files.pythonhosted.org/packages/f0/c7/f36bd08ef9bd9f0a9cff9428406651f5937ce27b6c5b07b92d41f91ae541/argon2_cffi_bindings-25.1.0-cp314-cp314t-win32.whl", hash = "sha256:84a461d4d84ae1295871329b346a97f68eade8c53b6ed9a7ca2d7467f3c8ff6f", size = 28158 }, + { url = "https://files.pythonhosted.org/packages/b3/80/0106a7448abb24a2c467bf7d527fe5413b7fdfa4ad6d6a96a43a62ef3988/argon2_cffi_bindings-25.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b55aec3565b65f56455eebc9b9f34130440404f27fe21c3b375bf1ea4d8fbae6", size = 32597 }, + { url = "https://files.pythonhosted.org/packages/05/b8/d663c9caea07e9180b2cb662772865230715cbd573ba3b5e81793d580316/argon2_cffi_bindings-25.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:87c33a52407e4c41f3b70a9c2d3f6056d88b10dad7695be708c5021673f55623", size = 28231 }, + { url = "https://files.pythonhosted.org/packages/1d/57/96b8b9f93166147826da5f90376e784a10582dd39a393c99bb62cfcf52f0/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:aecba1723ae35330a008418a91ea6cfcedf6d31e5fbaa056a166462ff066d500", size = 54121 }, + { url = "https://files.pythonhosted.org/packages/0a/08/a9bebdb2e0e602dde230bdde8021b29f71f7841bd54801bcfd514acb5dcf/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:2630b6240b495dfab90aebe159ff784d08ea999aa4b0d17efa734055a07d2f44", size = 29177 }, + { url = "https://files.pythonhosted.org/packages/b6/02/d297943bcacf05e4f2a94ab6f462831dc20158614e5d067c35d4e63b9acb/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:7aef0c91e2c0fbca6fc68e7555aa60ef7008a739cbe045541e438373bc54d2b0", size = 31090 }, + { url = "https://files.pythonhosted.org/packages/c1/93/44365f3d75053e53893ec6d733e4a5e3147502663554b4d864587c7828a7/argon2_cffi_bindings-25.1.0-cp39-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1e021e87faa76ae0d413b619fe2b65ab9a037f24c60a1e6cc43457ae20de6dc6", size = 81246 }, + { url = "https://files.pythonhosted.org/packages/09/52/94108adfdd6e2ddf58be64f959a0b9c7d4ef2fa71086c38356d22dc501ea/argon2_cffi_bindings-25.1.0-cp39-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d3e924cfc503018a714f94a49a149fdc0b644eaead5d1f089330399134fa028a", size = 87126 }, + { url = "https://files.pythonhosted.org/packages/72/70/7a2993a12b0ffa2a9271259b79cc616e2389ed1a4d93842fac5a1f923ffd/argon2_cffi_bindings-25.1.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:c87b72589133f0346a1cb8d5ecca4b933e3c9b64656c9d175270a000e73b288d", size = 80343 }, + { url = "https://files.pythonhosted.org/packages/78/9a/4e5157d893ffc712b74dbd868c7f62365618266982b64accab26bab01edc/argon2_cffi_bindings-25.1.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1db89609c06afa1a214a69a462ea741cf735b29a57530478c06eb81dd403de99", size = 86777 }, + { url = "https://files.pythonhosted.org/packages/74/cd/15777dfde1c29d96de7f18edf4cc94c385646852e7c7b0320aa91ccca583/argon2_cffi_bindings-25.1.0-cp39-abi3-win32.whl", hash = "sha256:473bcb5f82924b1becbb637b63303ec8d10e84c8d241119419897a26116515d2", size = 27180 }, + { url = "https://files.pythonhosted.org/packages/e2/c6/a759ece8f1829d1f162261226fbfd2c6832b3ff7657384045286d2afa384/argon2_cffi_bindings-25.1.0-cp39-abi3-win_amd64.whl", hash = "sha256:a98cd7d17e9f7ce244c0803cad3c23a7d379c301ba618a5fa76a67d116618b98", size = 31715 }, + { url = "https://files.pythonhosted.org/packages/42/b9/f8d6fa329ab25128b7e98fd83a3cb34d9db5b059a9847eddb840a0af45dd/argon2_cffi_bindings-25.1.0-cp39-abi3-win_arm64.whl", hash = "sha256:b0fdbcf513833809c882823f98dc2f931cf659d9a1429616ac3adebb49f5db94", size = 27149 }, + { url = "https://files.pythonhosted.org/packages/11/2d/ba4e4ca8d149f8dcc0d952ac0967089e1d759c7e5fcf0865a317eb680fbb/argon2_cffi_bindings-25.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:6dca33a9859abf613e22733131fc9194091c1fa7cb3e131c143056b4856aa47e", size = 24549 }, + { url = "https://files.pythonhosted.org/packages/5c/82/9b2386cc75ac0bd3210e12a44bfc7fd1632065ed8b80d573036eecb10442/argon2_cffi_bindings-25.1.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:21378b40e1b8d1655dd5310c84a40fc19a9aa5e6366e835ceb8576bf0fea716d", size = 25539 }, + { url = "https://files.pythonhosted.org/packages/31/db/740de99a37aa727623730c90d92c22c9e12585b3c98c54b7960f7810289f/argon2_cffi_bindings-25.1.0-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d588dec224e2a83edbdc785a5e6f3c6cd736f46bfd4b441bbb5aa1f5085e584", size = 28467 }, + { url = "https://files.pythonhosted.org/packages/71/7a/47c4509ea18d755f44e2b92b7178914f0c113946d11e16e626df8eaa2b0b/argon2_cffi_bindings-25.1.0-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5acb4e41090d53f17ca1110c3427f0a130f944b896fc8c83973219c97f57b690", size = 27355 }, + { url = "https://files.pythonhosted.org/packages/ee/82/82745642d3c46e7cea25e1885b014b033f4693346ce46b7f47483cf5d448/argon2_cffi_bindings-25.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:da0c79c23a63723aa5d782250fbf51b768abca630285262fb5144ba5ae01e520", size = 29187 }, +] + +[[package]] +name = "arrow" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "python-dateutil" }, + { name = "tzdata" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b9/33/032cdc44182491aa708d06a68b62434140d8c50820a087fac7af37703357/arrow-1.4.0.tar.gz", hash = "sha256:ed0cc050e98001b8779e84d461b0098c4ac597e88704a655582b21d116e526d7", size = 152931 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl", hash = "sha256:749f0769958ebdc79c173ff0b0670d59051a535fa26e8eba02953dc19eb43205", size = 68797 }, +] + +[[package]] +name = "asttokens" +version = "3.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/be/a5/8e3f9b6771b0b408517c82d97aed8f2036509bc247d46114925e32fe33f0/asttokens-3.0.1.tar.gz", hash = "sha256:71a4ee5de0bde6a31d64f6b13f2293ac190344478f081c3d1bccfcf5eacb0cb7", size = 62308 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/39/e7eaf1799466a4aef85b6a4fe7bd175ad2b1c6345066aa33f1f58d4b18d0/asttokens-3.0.1-py3-none-any.whl", hash = "sha256:15a3ebc0f43c2d0a50eeafea25e19046c68398e487b9f1f5b517f7c0f40f976a", size = 27047 }, +] + +[[package]] +name = "async-lru" +version = "2.0.5" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b2/4d/71ec4d3939dc755264f680f6c2b4906423a304c3d18e96853f0a595dfe97/async_lru-2.0.5.tar.gz", hash = "sha256:481d52ccdd27275f42c43a928b4a50c3bfb2d67af4e78b170e3e0bb39c66e5bb", size = 10380 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/03/49/d10027df9fce941cb8184e78a02857af36360d33e1721df81c5ed2179a1a/async_lru-2.0.5-py3-none-any.whl", hash = "sha256:ab95404d8d2605310d345932697371a5f40def0487c03d6d0ad9138de52c9943", size = 6069 }, +] + +[[package]] +name = "async-lru" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "typing-extensions", marker = "python_full_version == '3.10.*'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e8/1f/989ecfef8e64109a489fff357450cb73fa73a865a92bd8c272170a6922c2/async_lru-2.3.0.tar.gz", hash = "sha256:89bdb258a0140d7313cf8f4031d816a042202faa61d0ab310a0a538baa1c24b6", size = 16332 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/e2/c2e3abf398f80732e58b03be77bde9022550d221dd8781bf586bd4d97cc1/async_lru-2.3.0-py3-none-any.whl", hash = "sha256:eea27b01841909316f2cc739807acea1c623df2be8c5cfad7583286397bb8315", size = 8403 }, +] + +[[package]] +name = "attrs" +version = "26.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/82a0fe20a541c03148528be8cac2408564a6c9a0cc7e9171802bc1d26985/attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32", size = 952055 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548 }, +] + +[[package]] +name = "babel" +version = "2.18.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/b2/51899539b6ceeeb420d40ed3cd4b7a40519404f9baf3d4ac99dc413a834b/babel-2.18.0.tar.gz", hash = "sha256:b80b99a14bd085fcacfa15c9165f651fbb3406e66cc603abf11c5750937c992d", size = 9959554 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl", hash = "sha256:e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35", size = 10196845 }, +] + +[[package]] +name = "beautifulsoup4" +version = "4.14.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "soupsieve" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c3/b0/1c6a16426d389813b48d95e26898aff79abbde42ad353958ad95cc8c9b21/beautifulsoup4-4.14.3.tar.gz", hash = "sha256:6292b1c5186d356bba669ef9f7f051757099565ad9ada5dd630bd9de5fa7fb86", size = 627737 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl", hash = "sha256:0918bfe44902e6ad8d57732ba310582e98da931428d231a5ecb9e7c703a735bb", size = 107721 }, +] + +[[package]] +name = "bleach" +version = "6.2.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "webencodings", marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/76/9a/0e33f5054c54d349ea62c277191c020c2d6ef1d65ab2cb1993f91ec846d1/bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f", size = 203083 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fc/55/96142937f66150805c25c4d0f31ee4132fd33497753400734f9dfdcbdc66/bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e", size = 163406 }, +] + +[package.optional-dependencies] +css = [ + { name = "tinycss2", marker = "python_full_version < '3.10'" }, +] + +[[package]] +name = "bleach" +version = "6.3.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "webencodings", marker = "python_full_version >= '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/07/18/3c8523962314be6bf4c8989c79ad9531c825210dd13a8669f6b84336e8bd/bleach-6.3.0.tar.gz", hash = "sha256:6f3b91b1c0a02bb9a78b5a454c92506aa0fdf197e1d5e114d2e00c6f64306d22", size = 203533 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cd/3a/577b549de0cc09d95f11087ee63c739bba856cd3952697eec4c4bb91350a/bleach-6.3.0-py3-none-any.whl", hash = "sha256:fe10ec77c93ddf3d13a73b035abaac7a9f5e436513864ccdad516693213c65d6", size = 164437 }, +] + +[package.optional-dependencies] +css = [ + { name = "tinycss2", marker = "python_full_version >= '3.10'" }, +] + +[[package]] +name = "cachetools" +version = "6.2.6" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/39/91/d9ae9a66b01102a18cd16db0cf4cd54187ffe10f0865cc80071a4104fbb3/cachetools-6.2.6.tar.gz", hash = "sha256:16c33e1f276b9a9c0b49ab5782d901e3ad3de0dd6da9bf9bcd29ac5672f2f9e6", size = 32363 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/90/45/f458fa2c388e79dd9d8b9b0c99f1d31b568f27388f2fdba7bb66bbc0c6ed/cachetools-6.2.6-py3-none-any.whl", hash = "sha256:8c9717235b3c651603fff0076db52d6acbfd1b338b8ed50256092f7ce9c85bda", size = 11668 }, +] + +[[package]] +name = "cachetools" +version = "7.0.5" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/af/dd/57fe3fdb6e65b25a5987fd2cdc7e22db0aef508b91634d2e57d22928d41b/cachetools-7.0.5.tar.gz", hash = "sha256:0cd042c24377200c1dcd225f8b7b12b0ca53cc2c961b43757e774ebe190fd990", size = 37367 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/06/f3/39cf3367b8107baa44f861dc802cbf16263c945b62d8265d36034fc07bea/cachetools-7.0.5-py3-none-any.whl", hash = "sha256:46bc8ebefbe485407621d0a4264b23c080cedd913921bad7ac3ed2f26c183114", size = 13918 }, +] + +[[package]] +name = "certifi" +version = "2026.2.25" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/af/2d/7bf41579a8986e348fa033a31cdd0e4121114f6bce2457e8876010b092dd/certifi-2026.2.25.tar.gz", hash = "sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7", size = 155029 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl", hash = "sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa", size = 153684 }, +] + +[[package]] +name = "cffi" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", version = "2.23", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' and implementation_name != 'PyPy'" }, + { name = "pycparser", version = "3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10' and implementation_name != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/93/d7/516d984057745a6cd96575eea814fe1edd6646ee6efd552fb7b0921dec83/cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44", size = 184283 }, + { url = "https://files.pythonhosted.org/packages/9e/84/ad6a0b408daa859246f57c03efd28e5dd1b33c21737c2db84cae8c237aa5/cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49", size = 180504 }, + { url = "https://files.pythonhosted.org/packages/50/bd/b1a6362b80628111e6653c961f987faa55262b4002fcec42308cad1db680/cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c", size = 208811 }, + { url = "https://files.pythonhosted.org/packages/4f/27/6933a8b2562d7bd1fb595074cf99cc81fc3789f6a6c05cdabb46284a3188/cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb", size = 216402 }, + { url = "https://files.pythonhosted.org/packages/05/eb/b86f2a2645b62adcfff53b0dd97e8dfafb5c8aa864bd0d9a2c2049a0d551/cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0", size = 203217 }, + { url = "https://files.pythonhosted.org/packages/9f/e0/6cbe77a53acf5acc7c08cc186c9928864bd7c005f9efd0d126884858a5fe/cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4", size = 203079 }, + { url = "https://files.pythonhosted.org/packages/98/29/9b366e70e243eb3d14a5cb488dfd3a0b6b2f1fb001a203f653b93ccfac88/cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453", size = 216475 }, + { url = "https://files.pythonhosted.org/packages/21/7a/13b24e70d2f90a322f2900c5d8e1f14fa7e2a6b3332b7309ba7b2ba51a5a/cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495", size = 218829 }, + { url = "https://files.pythonhosted.org/packages/60/99/c9dc110974c59cc981b1f5b66e1d8af8af764e00f0293266824d9c4254bc/cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5", size = 211211 }, + { url = "https://files.pythonhosted.org/packages/49/72/ff2d12dbf21aca1b32a40ed792ee6b40f6dc3a9cf1644bd7ef6e95e0ac5e/cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb", size = 218036 }, + { url = "https://files.pythonhosted.org/packages/e2/cc/027d7fb82e58c48ea717149b03bcadcbdc293553edb283af792bd4bcbb3f/cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a", size = 172184 }, + { url = "https://files.pythonhosted.org/packages/33/fa/072dd15ae27fbb4e06b437eb6e944e75b068deb09e2a2826039e49ee2045/cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739", size = 182790 }, + { url = "https://files.pythonhosted.org/packages/12/4a/3dfd5f7850cbf0d06dc84ba9aa00db766b52ca38d8b86e3a38314d52498c/cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe", size = 184344 }, + { url = "https://files.pythonhosted.org/packages/4f/8b/f0e4c441227ba756aafbe78f117485b25bb26b1c059d01f137fa6d14896b/cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c", size = 180560 }, + { url = "https://files.pythonhosted.org/packages/b1/b7/1200d354378ef52ec227395d95c2576330fd22a869f7a70e88e1447eb234/cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92", size = 209613 }, + { url = "https://files.pythonhosted.org/packages/b8/56/6033f5e86e8cc9bb629f0077ba71679508bdf54a9a5e112a3c0b91870332/cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93", size = 216476 }, + { url = "https://files.pythonhosted.org/packages/dc/7f/55fecd70f7ece178db2f26128ec41430d8720f2d12ca97bf8f0a628207d5/cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5", size = 203374 }, + { url = "https://files.pythonhosted.org/packages/84/ef/a7b77c8bdc0f77adc3b46888f1ad54be8f3b7821697a7b89126e829e676a/cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664", size = 202597 }, + { url = "https://files.pythonhosted.org/packages/d7/91/500d892b2bf36529a75b77958edfcd5ad8e2ce4064ce2ecfeab2125d72d1/cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26", size = 215574 }, + { url = "https://files.pythonhosted.org/packages/44/64/58f6255b62b101093d5df22dcb752596066c7e89dd725e0afaed242a61be/cffi-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9", size = 218971 }, + { url = "https://files.pythonhosted.org/packages/ab/49/fa72cebe2fd8a55fbe14956f9970fe8eb1ac59e5df042f603ef7c8ba0adc/cffi-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414", size = 211972 }, + { url = "https://files.pythonhosted.org/packages/0b/28/dd0967a76aab36731b6ebfe64dec4e981aff7e0608f60c2d46b46982607d/cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743", size = 217078 }, + { url = "https://files.pythonhosted.org/packages/2b/c0/015b25184413d7ab0a410775fdb4a50fca20f5589b5dab1dbbfa3baad8ce/cffi-2.0.0-cp311-cp311-win32.whl", hash = "sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5", size = 172076 }, + { url = "https://files.pythonhosted.org/packages/ae/8f/dc5531155e7070361eb1b7e4c1a9d896d0cb21c49f807a6c03fd63fc877e/cffi-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5", size = 182820 }, + { url = "https://files.pythonhosted.org/packages/95/5c/1b493356429f9aecfd56bc171285a4c4ac8697f76e9bbbbb105e537853a1/cffi-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d", size = 177635 }, + { url = "https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d", size = 185271 }, + { url = "https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c", size = 181048 }, + { url = "https://files.pythonhosted.org/packages/ff/df/a4f0fbd47331ceeba3d37c2e51e9dfc9722498becbeec2bd8bc856c9538a/cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe", size = 212529 }, + { url = "https://files.pythonhosted.org/packages/d5/72/12b5f8d3865bf0f87cf1404d8c374e7487dcf097a1c91c436e72e6badd83/cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062", size = 220097 }, + { url = "https://files.pythonhosted.org/packages/c2/95/7a135d52a50dfa7c882ab0ac17e8dc11cec9d55d2c18dda414c051c5e69e/cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e", size = 207983 }, + { url = "https://files.pythonhosted.org/packages/3a/c8/15cb9ada8895957ea171c62dc78ff3e99159ee7adb13c0123c001a2546c1/cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037", size = 206519 }, + { url = "https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba", size = 219572 }, + { url = "https://files.pythonhosted.org/packages/07/e0/267e57e387b4ca276b90f0434ff88b2c2241ad72b16d31836adddfd6031b/cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94", size = 222963 }, + { url = "https://files.pythonhosted.org/packages/b6/75/1f2747525e06f53efbd878f4d03bac5b859cbc11c633d0fb81432d98a795/cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187", size = 221361 }, + { url = "https://files.pythonhosted.org/packages/7b/2b/2b6435f76bfeb6bbf055596976da087377ede68df465419d192acf00c437/cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18", size = 172932 }, + { url = "https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5", size = 183557 }, + { url = "https://files.pythonhosted.org/packages/95/31/9f7f93ad2f8eff1dbc1c3656d7ca5bfd8fb52c9d786b4dcf19b2d02217fa/cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6", size = 177762 }, + { url = "https://files.pythonhosted.org/packages/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb", size = 185230 }, + { url = "https://files.pythonhosted.org/packages/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca", size = 181043 }, + { url = "https://files.pythonhosted.org/packages/b0/1e/d22cc63332bd59b06481ceaac49d6c507598642e2230f201649058a7e704/cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b", size = 212446 }, + { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", size = 220101 }, + { url = "https://files.pythonhosted.org/packages/f2/7f/e6647792fc5850d634695bc0e6ab4111ae88e89981d35ac269956605feba/cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2", size = 207948 }, + { url = "https://files.pythonhosted.org/packages/cb/1e/a5a1bd6f1fb30f22573f76533de12a00bf274abcdc55c8edab639078abb6/cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3", size = 206422 }, + { url = "https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26", size = 219499 }, + { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", size = 222928 }, + { url = "https://files.pythonhosted.org/packages/36/54/0362578dd2c9e557a28ac77698ed67323ed5b9775ca9d3fe73fe191bb5d8/cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b", size = 221302 }, + { url = "https://files.pythonhosted.org/packages/eb/6d/bf9bda840d5f1dfdbf0feca87fbdb64a918a69bca42cfa0ba7b137c48cb8/cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27", size = 172909 }, + { url = "https://files.pythonhosted.org/packages/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75", size = 183402 }, + { url = "https://files.pythonhosted.org/packages/cb/0e/02ceeec9a7d6ee63bb596121c2c8e9b3a9e150936f4fbef6ca1943e6137c/cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91", size = 177780 }, + { url = "https://files.pythonhosted.org/packages/92/c4/3ce07396253a83250ee98564f8d7e9789fab8e58858f35d07a9a2c78de9f/cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5", size = 185320 }, + { url = "https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13", size = 181487 }, + { url = "https://files.pythonhosted.org/packages/d6/43/0e822876f87ea8a4ef95442c3d766a06a51fc5298823f884ef87aaad168c/cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b", size = 220049 }, + { url = "https://files.pythonhosted.org/packages/b4/89/76799151d9c2d2d1ead63c2429da9ea9d7aac304603de0c6e8764e6e8e70/cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c", size = 207793 }, + { url = "https://files.pythonhosted.org/packages/bb/dd/3465b14bb9e24ee24cb88c9e3730f6de63111fffe513492bf8c808a3547e/cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef", size = 206300 }, + { url = "https://files.pythonhosted.org/packages/47/d9/d83e293854571c877a92da46fdec39158f8d7e68da75bf73581225d28e90/cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775", size = 219244 }, + { url = "https://files.pythonhosted.org/packages/2b/0f/1f177e3683aead2bb00f7679a16451d302c436b5cbf2505f0ea8146ef59e/cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205", size = 222828 }, + { url = "https://files.pythonhosted.org/packages/c6/0f/cafacebd4b040e3119dcb32fed8bdef8dfe94da653155f9d0b9dc660166e/cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1", size = 220926 }, + { url = "https://files.pythonhosted.org/packages/3e/aa/df335faa45b395396fcbc03de2dfcab242cd61a9900e914fe682a59170b1/cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f", size = 175328 }, + { url = "https://files.pythonhosted.org/packages/bb/92/882c2d30831744296ce713f0feb4c1cd30f346ef747b530b5318715cc367/cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25", size = 185650 }, + { url = "https://files.pythonhosted.org/packages/9f/2c/98ece204b9d35a7366b5b2c6539c350313ca13932143e79dc133ba757104/cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad", size = 180687 }, + { url = "https://files.pythonhosted.org/packages/3e/61/c768e4d548bfa607abcda77423448df8c471f25dbe64fb2ef6d555eae006/cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9", size = 188773 }, + { url = "https://files.pythonhosted.org/packages/2c/ea/5f76bce7cf6fcd0ab1a1058b5af899bfbef198bea4d5686da88471ea0336/cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d", size = 185013 }, + { url = "https://files.pythonhosted.org/packages/be/b4/c56878d0d1755cf9caa54ba71e5d049479c52f9e4afc230f06822162ab2f/cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c", size = 221593 }, + { url = "https://files.pythonhosted.org/packages/e0/0d/eb704606dfe8033e7128df5e90fee946bbcb64a04fcdaa97321309004000/cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8", size = 209354 }, + { url = "https://files.pythonhosted.org/packages/d8/19/3c435d727b368ca475fb8742ab97c9cb13a0de600ce86f62eab7fa3eea60/cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc", size = 208480 }, + { url = "https://files.pythonhosted.org/packages/d0/44/681604464ed9541673e486521497406fadcc15b5217c3e326b061696899a/cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592", size = 221584 }, + { url = "https://files.pythonhosted.org/packages/25/8e/342a504ff018a2825d395d44d63a767dd8ebc927ebda557fecdaca3ac33a/cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512", size = 224443 }, + { url = "https://files.pythonhosted.org/packages/e1/5e/b666bacbbc60fbf415ba9988324a132c9a7a0448a9a8f125074671c0f2c3/cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4", size = 223437 }, + { url = "https://files.pythonhosted.org/packages/a0/1d/ec1a60bd1a10daa292d3cd6bb0b359a81607154fb8165f3ec95fe003b85c/cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e", size = 180487 }, + { url = "https://files.pythonhosted.org/packages/bf/41/4c1168c74fac325c0c8156f04b6749c8b6a8f405bbf91413ba088359f60d/cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6", size = 191726 }, + { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195 }, + { url = "https://files.pythonhosted.org/packages/c0/cc/08ed5a43f2996a16b462f64a7055c6e962803534924b9b2f1371d8c00b7b/cffi-2.0.0-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf", size = 184288 }, + { url = "https://files.pythonhosted.org/packages/3d/de/38d9726324e127f727b4ecc376bc85e505bfe61ef130eaf3f290c6847dd4/cffi-2.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:de8dad4425a6ca6e4e5e297b27b5c824ecc7581910bf9aee86cb6835e6812aa7", size = 180509 }, + { url = "https://files.pythonhosted.org/packages/9b/13/c92e36358fbcc39cf0962e83223c9522154ee8630e1df7c0b3a39a8124e2/cffi-2.0.0-cp39-cp39-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:4647afc2f90d1ddd33441e5b0e85b16b12ddec4fca55f0d9671fef036ecca27c", size = 208813 }, + { url = "https://files.pythonhosted.org/packages/15/12/a7a79bd0df4c3bff744b2d7e52cc1b68d5e7e427b384252c42366dc1ecbc/cffi-2.0.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3f4d46d8b35698056ec29bca21546e1551a205058ae1a181d871e278b0b28165", size = 216498 }, + { url = "https://files.pythonhosted.org/packages/a3/ad/5c51c1c7600bdd7ed9a24a203ec255dccdd0ebf4527f7b922a0bde2fb6ed/cffi-2.0.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:e6e73b9e02893c764e7e8d5bb5ce277f1a009cd5243f8228f75f842bf937c534", size = 203243 }, + { url = "https://files.pythonhosted.org/packages/32/f2/81b63e288295928739d715d00952c8c6034cb6c6a516b17d37e0c8be5600/cffi-2.0.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:cb527a79772e5ef98fb1d700678fe031e353e765d1ca2d409c92263c6d43e09f", size = 203158 }, + { url = "https://files.pythonhosted.org/packages/1f/74/cc4096ce66f5939042ae094e2e96f53426a979864aa1f96a621ad128be27/cffi-2.0.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:61d028e90346df14fedc3d1e5441df818d095f3b87d286825dfcbd6459b7ef63", size = 216548 }, + { url = "https://files.pythonhosted.org/packages/e8/be/f6424d1dc46b1091ffcc8964fa7c0ab0cd36839dd2761b49c90481a6ba1b/cffi-2.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0f6084a0ea23d05d20c3edcda20c3d006f9b6f3fefeac38f59262e10cef47ee2", size = 218897 }, + { url = "https://files.pythonhosted.org/packages/f7/e0/dda537c2309817edf60109e39265f24f24aa7f050767e22c98c53fe7f48b/cffi-2.0.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1cd13c99ce269b3ed80b417dcd591415d3372bcac067009b6e0f59c7d4015e65", size = 211249 }, + { url = "https://files.pythonhosted.org/packages/2b/e7/7c769804eb75e4c4b35e658dba01de1640a351a9653c3d49ca89d16ccc91/cffi-2.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:89472c9762729b5ae1ad974b777416bfda4ac5642423fa93bd57a09204712322", size = 218041 }, + { url = "https://files.pythonhosted.org/packages/aa/d9/6218d78f920dcd7507fc16a766b5ef8f3b913cc7aa938e7fc80b9978d089/cffi-2.0.0-cp39-cp39-win32.whl", hash = "sha256:2081580ebb843f759b9f617314a24ed5738c51d2aee65d31e02f6f7a2b97707a", size = 172138 }, + { url = "https://files.pythonhosted.org/packages/54/8f/a1e836f82d8e32a97e6b29cc8f641779181ac7363734f12df27db803ebda/cffi-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9", size = 182794 }, +] + +[[package]] +name = "cfgv" +version = "3.4.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/11/74/539e56497d9bd1d484fd863dd69cbbfa653cd2aa27abfe35653494d85e94/cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560", size = 7114 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2456f06955289ca770a5dbd5fd267374/cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", size = 7249 }, +] + +[[package]] +name = "cfgv" +version = "3.5.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/4e/b5/721b8799b04bf9afe054a3899c6cf4e880fcf8563cc71c15610242490a0c/cfgv-3.5.0.tar.gz", hash = "sha256:d5b1034354820651caa73ede66a6294d6e95c1b00acc5e9b098e917404669132", size = 7334 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl", hash = "sha256:a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0", size = 7445 }, +] + +[[package]] +name = "chardet" +version = "5.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/f7b6ab21ec75897ed80c17d79b15951a719226b9fababf1e40ea74d69079/chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7", size = 2069618 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970", size = 199385 }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7b/60/e3bec1881450851b087e301bedc3daa9377a4d45f1c26aa90b0b235e38aa/charset_normalizer-3.4.6.tar.gz", hash = "sha256:1ae6b62897110aa7c79ea2f5dd38d1abca6db663687c0b1ad9aed6f6bae3d9d6", size = 143363 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/8c/2c56124c6dc53a774d435f985b5973bc592f42d437be58c0c92d65ae7296/charset_normalizer-3.4.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2e1d8ca8611099001949d1cdfaefc510cf0f212484fe7c565f735b68c78c3c95", size = 298751 }, + { url = "https://files.pythonhosted.org/packages/86/2a/2a7db6b314b966a3bcad8c731c0719c60b931b931de7ae9f34b2839289ee/charset_normalizer-3.4.6-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e25369dc110d58ddf29b949377a93e0716d72a24f62bad72b2b39f155949c1fd", size = 200027 }, + { url = "https://files.pythonhosted.org/packages/68/f2/0fe775c74ae25e2a3b07b01538fc162737b3e3f795bada3bc26f4d4d495c/charset_normalizer-3.4.6-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:259695e2ccc253feb2a016303543d691825e920917e31f894ca1a687982b1de4", size = 220741 }, + { url = "https://files.pythonhosted.org/packages/10/98/8085596e41f00b27dd6aa1e68413d1ddda7e605f34dd546833c61fddd709/charset_normalizer-3.4.6-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:dda86aba335c902b6149a02a55b38e96287157e609200811837678214ba2b1db", size = 215802 }, + { url = "https://files.pythonhosted.org/packages/fd/ce/865e4e09b041bad659d682bbd98b47fb490b8e124f9398c9448065f64fee/charset_normalizer-3.4.6-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:51fb3c322c81d20567019778cb5a4a6f2dc1c200b886bc0d636238e364848c89", size = 207908 }, + { url = "https://files.pythonhosted.org/packages/a8/54/8c757f1f7349262898c2f169e0d562b39dcb977503f18fdf0814e923db78/charset_normalizer-3.4.6-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:4482481cb0572180b6fd976a4d5c72a30263e98564da68b86ec91f0fe35e8565", size = 194357 }, + { url = "https://files.pythonhosted.org/packages/6f/29/e88f2fac9218907fc7a70722b393d1bbe8334c61fe9c46640dba349b6e66/charset_normalizer-3.4.6-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:39f5068d35621da2881271e5c3205125cc456f54e9030d3f723288c873a71bf9", size = 205610 }, + { url = "https://files.pythonhosted.org/packages/4c/c5/21d7bb0cb415287178450171d130bed9d664211fdd59731ed2c34267b07d/charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8bea55c4eef25b0b19a0337dc4e3f9a15b00d569c77211fa8cde38684f234fb7", size = 203512 }, + { url = "https://files.pythonhosted.org/packages/a4/be/ce52f3c7fdb35cc987ad38a53ebcef52eec498f4fb6c66ecfe62cfe57ba2/charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:f0cdaecd4c953bfae0b6bb64910aaaca5a424ad9c72d85cb88417bb9814f7550", size = 195398 }, + { url = "https://files.pythonhosted.org/packages/81/a0/3ab5dd39d4859a3555e5dadfc8a9fa7f8352f8c183d1a65c90264517da0e/charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:150b8ce8e830eb7ccb029ec9ca36022f756986aaaa7956aad6d9ec90089338c0", size = 221772 }, + { url = "https://files.pythonhosted.org/packages/04/6e/6a4e41a97ba6b2fa87f849c41e4d229449a586be85053c4d90135fe82d26/charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:e68c14b04827dd76dcbd1aeea9e604e3e4b78322d8faf2f8132c7138efa340a8", size = 205759 }, + { url = "https://files.pythonhosted.org/packages/db/3b/34a712a5ee64a6957bf355b01dc17b12de457638d436fdb05d01e463cd1c/charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:3778fd7d7cd04ae8f54651f4a7a0bd6e39a0cf20f801720a4c21d80e9b7ad6b0", size = 216938 }, + { url = "https://files.pythonhosted.org/packages/cb/05/5bd1e12da9ab18790af05c61aafd01a60f489778179b621ac2a305243c62/charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:dad6e0f2e481fffdcf776d10ebee25e0ef89f16d691f1e5dee4b586375fdc64b", size = 210138 }, + { url = "https://files.pythonhosted.org/packages/bd/8e/3cb9e2d998ff6b21c0a1860343cb7b83eba9cdb66b91410e18fc4969d6ab/charset_normalizer-3.4.6-cp310-cp310-win32.whl", hash = "sha256:74a2e659c7ecbc73562e2a15e05039f1e22c75b7c7618b4b574a3ea9118d1557", size = 144137 }, + { url = "https://files.pythonhosted.org/packages/d8/8f/78f5489ffadb0db3eb7aff53d31c24531d33eb545f0c6f6567c25f49a5ff/charset_normalizer-3.4.6-cp310-cp310-win_amd64.whl", hash = "sha256:aa9cccf4a44b9b62d8ba8b4dd06c649ba683e4bf04eea606d2e94cfc2d6ff4d6", size = 154244 }, + { url = "https://files.pythonhosted.org/packages/e4/74/e472659dffb0cadb2f411282d2d76c60da1fc94076d7fffed4ae8a93ec01/charset_normalizer-3.4.6-cp310-cp310-win_arm64.whl", hash = "sha256:e985a16ff513596f217cee86c21371b8cd011c0f6f056d0920aa2d926c544058", size = 143312 }, + { url = "https://files.pythonhosted.org/packages/62/28/ff6f234e628a2de61c458be2779cb182bc03f6eec12200d4a525bbfc9741/charset_normalizer-3.4.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:82060f995ab5003a2d6e0f4ad29065b7672b6593c8c63559beefe5b443242c3e", size = 293582 }, + { url = "https://files.pythonhosted.org/packages/1c/b7/b1a117e5385cbdb3205f6055403c2a2a220c5ea80b8716c324eaf75c5c95/charset_normalizer-3.4.6-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:60c74963d8350241a79cb8feea80e54d518f72c26db618862a8f53e5023deaf9", size = 197240 }, + { url = "https://files.pythonhosted.org/packages/a1/5f/2574f0f09f3c3bc1b2f992e20bce6546cb1f17e111c5be07308dc5427956/charset_normalizer-3.4.6-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f6e4333fb15c83f7d1482a76d45a0818897b3d33f00efd215528ff7c51b8e35d", size = 217363 }, + { url = "https://files.pythonhosted.org/packages/4a/d1/0ae20ad77bc949ddd39b51bf383b6ca932f2916074c95cad34ae465ab71f/charset_normalizer-3.4.6-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:bc72863f4d9aba2e8fd9085e63548a324ba706d2ea2c83b260da08a59b9482de", size = 212994 }, + { url = "https://files.pythonhosted.org/packages/60/ac/3233d262a310c1b12633536a07cde5ddd16985e6e7e238e9f3f9423d8eb9/charset_normalizer-3.4.6-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9cc4fc6c196d6a8b76629a70ddfcd4635a6898756e2d9cac5565cf0654605d73", size = 204697 }, + { url = "https://files.pythonhosted.org/packages/25/3c/8a18fc411f085b82303cfb7154eed5bd49c77035eb7608d049468b53f87c/charset_normalizer-3.4.6-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:0c173ce3a681f309f31b87125fecec7a5d1347261ea11ebbb856fa6006b23c8c", size = 191673 }, + { url = "https://files.pythonhosted.org/packages/ff/a7/11cfe61d6c5c5c7438d6ba40919d0306ed83c9ab957f3d4da2277ff67836/charset_normalizer-3.4.6-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c907cdc8109f6c619e6254212e794d6548373cc40e1ec75e6e3823d9135d29cc", size = 201120 }, + { url = "https://files.pythonhosted.org/packages/b5/10/cf491fa1abd47c02f69687046b896c950b92b6cd7337a27e6548adbec8e4/charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:404a1e552cf5b675a87f0651f8b79f5f1e6fd100ee88dc612f89aa16abd4486f", size = 200911 }, + { url = "https://files.pythonhosted.org/packages/28/70/039796160b48b18ed466fde0af84c1b090c4e288fae26cd674ad04a2d703/charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:e3c701e954abf6fc03a49f7c579cc80c2c6cc52525340ca3186c41d3f33482ef", size = 192516 }, + { url = "https://files.pythonhosted.org/packages/ff/34/c56f3223393d6ff3124b9e78f7de738047c2d6bc40a4f16ac0c9d7a1cb3c/charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:7a6967aaf043bceabab5412ed6bd6bd26603dae84d5cb75bf8d9a74a4959d398", size = 218795 }, + { url = "https://files.pythonhosted.org/packages/e8/3b/ce2d4f86c5282191a041fdc5a4ce18f1c6bd40a5bd1f74cf8625f08d51c1/charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:5feb91325bbceade6afab43eb3b508c63ee53579fe896c77137ded51c6b6958e", size = 201833 }, + { url = "https://files.pythonhosted.org/packages/3b/9b/b6a9f76b0fd7c5b5ec58b228ff7e85095370282150f0bd50b3126f5506d6/charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:f820f24b09e3e779fe84c3c456cb4108a7aa639b0d1f02c28046e11bfcd088ed", size = 213920 }, + { url = "https://files.pythonhosted.org/packages/ae/98/7bc23513a33d8172365ed30ee3a3b3fe1ece14a395e5fc94129541fc6003/charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b35b200d6a71b9839a46b9b7fff66b6638bb52fc9658aa58796b0326595d3021", size = 206951 }, + { url = "https://files.pythonhosted.org/packages/32/73/c0b86f3d1458468e11aec870e6b3feac931facbe105a894b552b0e518e79/charset_normalizer-3.4.6-cp311-cp311-win32.whl", hash = "sha256:9ca4c0b502ab399ef89248a2c84c54954f77a070f28e546a85e91da627d1301e", size = 143703 }, + { url = "https://files.pythonhosted.org/packages/c6/e3/76f2facfe8eddee0bbd38d2594e709033338eae44ebf1738bcefe0a06185/charset_normalizer-3.4.6-cp311-cp311-win_amd64.whl", hash = "sha256:a9e68c9d88823b274cf1e72f28cb5dc89c990edf430b0bfd3e2fb0785bfeabf4", size = 153857 }, + { url = "https://files.pythonhosted.org/packages/e2/dc/9abe19c9b27e6cd3636036b9d1b387b78c40dedbf0b47f9366737684b4b0/charset_normalizer-3.4.6-cp311-cp311-win_arm64.whl", hash = "sha256:97d0235baafca5f2b09cf332cc275f021e694e8362c6bb9c96fc9a0eb74fc316", size = 142751 }, + { url = "https://files.pythonhosted.org/packages/e5/62/c0815c992c9545347aeea7859b50dc9044d147e2e7278329c6e02ac9a616/charset_normalizer-3.4.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:2ef7fedc7a6ecbe99969cd09632516738a97eeb8bd7258bf8a0f23114c057dab", size = 295154 }, + { url = "https://files.pythonhosted.org/packages/a8/37/bdca6613c2e3c58c7421891d80cc3efa1d32e882f7c4a7ee6039c3fc951a/charset_normalizer-3.4.6-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a4ea868bc28109052790eb2b52a9ab33f3aa7adc02f96673526ff47419490e21", size = 199191 }, + { url = "https://files.pythonhosted.org/packages/6c/92/9934d1bbd69f7f398b38c5dae1cbf9cc672e7c34a4adf7b17c0a9c17d15d/charset_normalizer-3.4.6-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:836ab36280f21fc1a03c99cd05c6b7af70d2697e374c7af0b61ed271401a72a2", size = 218674 }, + { url = "https://files.pythonhosted.org/packages/af/90/25f6ab406659286be929fd89ab0e78e38aa183fc374e03aa3c12d730af8a/charset_normalizer-3.4.6-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f1ce721c8a7dfec21fcbdfe04e8f68174183cf4e8188e0645e92aa23985c57ff", size = 215259 }, + { url = "https://files.pythonhosted.org/packages/4e/ef/79a463eb0fff7f96afa04c1d4c51f8fc85426f918db467854bfb6a569ce3/charset_normalizer-3.4.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e28d62a8fc7a1fa411c43bd65e346f3bce9716dc51b897fbe930c5987b402d5", size = 207276 }, + { url = "https://files.pythonhosted.org/packages/f7/72/d0426afec4b71dc159fa6b4e68f868cd5a3ecd918fec5813a15d292a7d10/charset_normalizer-3.4.6-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:530d548084c4a9f7a16ed4a294d459b4f229db50df689bfe92027452452943a0", size = 195161 }, + { url = "https://files.pythonhosted.org/packages/bf/18/c82b06a68bfcb6ce55e508225d210c7e6a4ea122bfc0748892f3dc4e8e11/charset_normalizer-3.4.6-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:30f445ae60aad5e1f8bdbb3108e39f6fbc09f4ea16c815c66578878325f8f15a", size = 203452 }, + { url = "https://files.pythonhosted.org/packages/44/d6/0c25979b92f8adafdbb946160348d8d44aa60ce99afdc27df524379875cb/charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ac2393c73378fea4e52aa56285a3d64be50f1a12395afef9cce47772f60334c2", size = 202272 }, + { url = "https://files.pythonhosted.org/packages/2e/3d/7fea3e8fe84136bebbac715dd1221cc25c173c57a699c030ab9b8900cbb7/charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:90ca27cd8da8118b18a52d5f547859cc1f8354a00cd1e8e5120df3e30d6279e5", size = 195622 }, + { url = "https://files.pythonhosted.org/packages/57/8a/d6f7fd5cb96c58ef2f681424fbca01264461336d2a7fc875e4446b1f1346/charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8e5a94886bedca0f9b78fecd6afb6629142fd2605aa70a125d49f4edc6037ee6", size = 220056 }, + { url = "https://files.pythonhosted.org/packages/16/50/478cdda782c8c9c3fb5da3cc72dd7f331f031e7f1363a893cdd6ca0f8de0/charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:695f5c2823691a25f17bc5d5ffe79fa90972cc34b002ac6c843bb8a1720e950d", size = 203751 }, + { url = "https://files.pythonhosted.org/packages/75/fc/cc2fcac943939c8e4d8791abfa139f685e5150cae9f94b60f12520feaa9b/charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:231d4da14bcd9301310faf492051bee27df11f2bc7549bc0bb41fef11b82daa2", size = 216563 }, + { url = "https://files.pythonhosted.org/packages/a8/b7/a4add1d9a5f68f3d037261aecca83abdb0ab15960a3591d340e829b37298/charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a056d1ad2633548ca18ffa2f85c202cfb48b68615129143915b8dc72a806a923", size = 209265 }, + { url = "https://files.pythonhosted.org/packages/6c/18/c094561b5d64a24277707698e54b7f67bd17a4f857bbfbb1072bba07c8bf/charset_normalizer-3.4.6-cp312-cp312-win32.whl", hash = "sha256:c2274ca724536f173122f36c98ce188fd24ce3dad886ec2b7af859518ce008a4", size = 144229 }, + { url = "https://files.pythonhosted.org/packages/ab/20/0567efb3a8fd481b8f34f739ebddc098ed062a59fed41a8d193a61939e8f/charset_normalizer-3.4.6-cp312-cp312-win_amd64.whl", hash = "sha256:c8ae56368f8cc97c7e40a7ee18e1cedaf8e780cd8bc5ed5ac8b81f238614facb", size = 154277 }, + { url = "https://files.pythonhosted.org/packages/15/57/28d79b44b51933119e21f65479d0864a8d5893e494cf5daab15df0247c17/charset_normalizer-3.4.6-cp312-cp312-win_arm64.whl", hash = "sha256:899d28f422116b08be5118ef350c292b36fc15ec2daeb9ea987c89281c7bb5c4", size = 142817 }, + { url = "https://files.pythonhosted.org/packages/1e/1d/4fdabeef4e231153b6ed7567602f3b68265ec4e5b76d6024cf647d43d981/charset_normalizer-3.4.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:11afb56037cbc4b1555a34dd69151e8e069bee82e613a73bef6e714ce733585f", size = 294823 }, + { url = "https://files.pythonhosted.org/packages/47/7b/20e809b89c69d37be748d98e84dce6820bf663cf19cf6b942c951a3e8f41/charset_normalizer-3.4.6-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:423fb7e748a08f854a08a222b983f4df1912b1daedce51a72bd24fe8f26a1843", size = 198527 }, + { url = "https://files.pythonhosted.org/packages/37/a6/4f8d27527d59c039dce6f7622593cdcd3d70a8504d87d09eb11e9fdc6062/charset_normalizer-3.4.6-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d73beaac5e90173ac3deb9928a74763a6d230f494e4bfb422c217a0ad8e629bf", size = 218388 }, + { url = "https://files.pythonhosted.org/packages/f6/9b/4770ccb3e491a9bacf1c46cc8b812214fe367c86a96353ccc6daf87b01ec/charset_normalizer-3.4.6-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d60377dce4511655582e300dc1e5a5f24ba0cb229005a1d5c8d0cb72bb758ab8", size = 214563 }, + { url = "https://files.pythonhosted.org/packages/2b/58/a199d245894b12db0b957d627516c78e055adc3a0d978bc7f65ddaf7c399/charset_normalizer-3.4.6-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:530e8cebeea0d76bdcf93357aa5e41336f48c3dc709ac52da2bb167c5b8271d9", size = 206587 }, + { url = "https://files.pythonhosted.org/packages/7e/70/3def227f1ec56f5c69dfc8392b8bd63b11a18ca8178d9211d7cc5e5e4f27/charset_normalizer-3.4.6-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:a26611d9987b230566f24a0a125f17fe0de6a6aff9f25c9f564aaa2721a5fb88", size = 194724 }, + { url = "https://files.pythonhosted.org/packages/58/ab/9318352e220c05efd31c2779a23b50969dc94b985a2efa643ed9077bfca5/charset_normalizer-3.4.6-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:34315ff4fc374b285ad7f4a0bf7dcbfe769e1b104230d40f49f700d4ab6bbd84", size = 202956 }, + { url = "https://files.pythonhosted.org/packages/75/13/f3550a3ac25b70f87ac98c40d3199a8503676c2f1620efbf8d42095cfc40/charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5f8ddd609f9e1af8c7bd6e2aca279c931aefecd148a14402d4e368f3171769fd", size = 201923 }, + { url = "https://files.pythonhosted.org/packages/1b/db/c5c643b912740b45e8eec21de1bbab8e7fc085944d37e1e709d3dcd9d72f/charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:80d0a5615143c0b3225e5e3ef22c8d5d51f3f72ce0ea6fb84c943546c7b25b6c", size = 195366 }, + { url = "https://files.pythonhosted.org/packages/5a/67/3b1c62744f9b2448443e0eb160d8b001c849ec3fef591e012eda6484787c/charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:92734d4d8d187a354a556626c221cd1a892a4e0802ccb2af432a1d85ec012194", size = 219752 }, + { url = "https://files.pythonhosted.org/packages/f6/98/32ffbaf7f0366ffb0445930b87d103f6b406bc2c271563644bde8a2b1093/charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:613f19aa6e082cf96e17e3ffd89383343d0d589abda756b7764cf78361fd41dc", size = 203296 }, + { url = "https://files.pythonhosted.org/packages/41/12/5d308c1bbe60cabb0c5ef511574a647067e2a1f631bc8634fcafaccd8293/charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:2b1a63e8224e401cafe7739f77efd3f9e7f5f2026bda4aead8e59afab537784f", size = 215956 }, + { url = "https://files.pythonhosted.org/packages/53/e9/5f85f6c5e20669dbe56b165c67b0260547dea97dba7e187938833d791687/charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6cceb5473417d28edd20c6c984ab6fee6c6267d38d906823ebfe20b03d607dc2", size = 208652 }, + { url = "https://files.pythonhosted.org/packages/f1/11/897052ea6af56df3eef3ca94edafee410ca699ca0c7b87960ad19932c55e/charset_normalizer-3.4.6-cp313-cp313-win32.whl", hash = "sha256:d7de2637729c67d67cf87614b566626057e95c303bc0a55ffe391f5205e7003d", size = 143940 }, + { url = "https://files.pythonhosted.org/packages/a1/5c/724b6b363603e419829f561c854b87ed7c7e31231a7908708ac086cdf3e2/charset_normalizer-3.4.6-cp313-cp313-win_amd64.whl", hash = "sha256:572d7c822caf521f0525ba1bce1a622a0b85cf47ffbdae6c9c19e3b5ac3c4389", size = 154101 }, + { url = "https://files.pythonhosted.org/packages/01/a5/7abf15b4c0968e47020f9ca0935fb3274deb87cb288cd187cad92e8cdffd/charset_normalizer-3.4.6-cp313-cp313-win_arm64.whl", hash = "sha256:a4474d924a47185a06411e0064b803c68be044be2d60e50e8bddcc2649957c1f", size = 143109 }, + { url = "https://files.pythonhosted.org/packages/25/6f/ffe1e1259f384594063ea1869bfb6be5cdb8bc81020fc36c3636bc8302a1/charset_normalizer-3.4.6-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:9cc6e6d9e571d2f863fa77700701dae73ed5f78881efc8b3f9a4398772ff53e8", size = 294458 }, + { url = "https://files.pythonhosted.org/packages/56/60/09bb6c13a8c1016c2ed5c6a6488e4ffef506461aa5161662bd7636936fb1/charset_normalizer-3.4.6-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ef5960d965e67165d75b7c7ffc60a83ec5abfc5c11b764ec13ea54fbef8b4421", size = 199277 }, + { url = "https://files.pythonhosted.org/packages/00/50/dcfbb72a5138bbefdc3332e8d81a23494bf67998b4b100703fd15fa52d81/charset_normalizer-3.4.6-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b3694e3f87f8ac7ce279d4355645b3c878d24d1424581b46282f24b92f5a4ae2", size = 218758 }, + { url = "https://files.pythonhosted.org/packages/03/b3/d79a9a191bb75f5aa81f3aaaa387ef29ce7cb7a9e5074ba8ea095cc073c2/charset_normalizer-3.4.6-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5d11595abf8dd942a77883a39d81433739b287b6aa71620f15164f8096221b30", size = 215299 }, + { url = "https://files.pythonhosted.org/packages/76/7e/bc8911719f7084f72fd545f647601ea3532363927f807d296a8c88a62c0d/charset_normalizer-3.4.6-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7bda6eebafd42133efdca535b04ccb338ab29467b3f7bf79569883676fc628db", size = 206811 }, + { url = "https://files.pythonhosted.org/packages/e2/40/c430b969d41dda0c465aa36cc7c2c068afb67177bef50905ac371b28ccc7/charset_normalizer-3.4.6-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:bbc8c8650c6e51041ad1be191742b8b421d05bbd3410f43fa2a00c8db87678e8", size = 193706 }, + { url = "https://files.pythonhosted.org/packages/48/15/e35e0590af254f7df984de1323640ef375df5761f615b6225ba8deb9799a/charset_normalizer-3.4.6-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:22c6f0c2fbc31e76c3b8a86fba1a56eda6166e238c29cdd3d14befdb4a4e4815", size = 202706 }, + { url = "https://files.pythonhosted.org/packages/5e/bd/f736f7b9cc5e93a18b794a50346bb16fbfd6b37f99e8f306f7951d27c17c/charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7edbed096e4a4798710ed6bc75dcaa2a21b68b6c356553ac4823c3658d53743a", size = 202497 }, + { url = "https://files.pythonhosted.org/packages/9d/ba/2cc9e3e7dfdf7760a6ed8da7446d22536f3d0ce114ac63dee2a5a3599e62/charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:7f9019c9cb613f084481bd6a100b12e1547cf2efe362d873c2e31e4035a6fa43", size = 193511 }, + { url = "https://files.pythonhosted.org/packages/9e/cb/5be49b5f776e5613be07298c80e1b02a2d900f7a7de807230595c85a8b2e/charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:58c948d0d086229efc484fe2f30c2d382c86720f55cd9bc33591774348ad44e0", size = 220133 }, + { url = "https://files.pythonhosted.org/packages/83/43/99f1b5dad345accb322c80c7821071554f791a95ee50c1c90041c157ae99/charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:419a9d91bd238052642a51938af8ac05da5b3343becde08d5cdeab9046df9ee1", size = 203035 }, + { url = "https://files.pythonhosted.org/packages/87/9a/62c2cb6a531483b55dddff1a68b3d891a8b498f3ca555fbcf2978e804d9d/charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:5273b9f0b5835ff0350c0828faea623c68bfa65b792720c453e22b25cc72930f", size = 216321 }, + { url = "https://files.pythonhosted.org/packages/6e/79/94a010ff81e3aec7c293eb82c28f930918e517bc144c9906a060844462eb/charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:0e901eb1049fdb80f5bd11ed5ea1e498ec423102f7a9b9e4645d5b8204ff2815", size = 208973 }, + { url = "https://files.pythonhosted.org/packages/2a/57/4ecff6d4ec8585342f0c71bc03efaa99cb7468f7c91a57b105bcd561cea8/charset_normalizer-3.4.6-cp314-cp314-win32.whl", hash = "sha256:b4ff1d35e8c5bd078be89349b6f3a845128e685e751b6ea1169cf2160b344c4d", size = 144610 }, + { url = "https://files.pythonhosted.org/packages/80/94/8434a02d9d7f168c25767c64671fead8d599744a05d6a6c877144c754246/charset_normalizer-3.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:74119174722c4349af9708993118581686f343adc1c8c9c007d59be90d077f3f", size = 154962 }, + { url = "https://files.pythonhosted.org/packages/46/4c/48f2cdbfd923026503dfd67ccea45c94fd8fe988d9056b468579c66ed62b/charset_normalizer-3.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:e5bcc1a1ae744e0bb59641171ae53743760130600da8db48cbb6e4918e186e4e", size = 143595 }, + { url = "https://files.pythonhosted.org/packages/31/93/8878be7569f87b14f1d52032946131bcb6ebbd8af3e20446bc04053dc3f1/charset_normalizer-3.4.6-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:ad8faf8df23f0378c6d527d8b0b15ea4a2e23c89376877c598c4870d1b2c7866", size = 314828 }, + { url = "https://files.pythonhosted.org/packages/06/b6/fae511ca98aac69ecc35cde828b0a3d146325dd03d99655ad38fc2cc3293/charset_normalizer-3.4.6-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f5ea69428fa1b49573eef0cc44a1d43bebd45ad0c611eb7d7eac760c7ae771bc", size = 208138 }, + { url = "https://files.pythonhosted.org/packages/54/57/64caf6e1bf07274a1e0b7c160a55ee9e8c9ec32c46846ce59b9c333f7008/charset_normalizer-3.4.6-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:06a7e86163334edfc5d20fe104db92fcd666e5a5df0977cb5680a506fe26cc8e", size = 224679 }, + { url = "https://files.pythonhosted.org/packages/aa/cb/9ff5a25b9273ef160861b41f6937f86fae18b0792fe0a8e75e06acb08f1d/charset_normalizer-3.4.6-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e1f6e2f00a6b8edb562826e4632e26d063ac10307e80f7461f7de3ad8ef3f077", size = 223475 }, + { url = "https://files.pythonhosted.org/packages/fc/97/440635fc093b8d7347502a377031f9605a1039c958f3cd18dcacffb37743/charset_normalizer-3.4.6-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:95b52c68d64c1878818687a473a10547b3292e82b6f6fe483808fb1468e2f52f", size = 215230 }, + { url = "https://files.pythonhosted.org/packages/cd/24/afff630feb571a13f07c8539fbb502d2ab494019492aaffc78ef41f1d1d0/charset_normalizer-3.4.6-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:7504e9b7dc05f99a9bbb4525c67a2c155073b44d720470a148b34166a69c054e", size = 199045 }, + { url = "https://files.pythonhosted.org/packages/e5/17/d1399ecdaf7e0498c327433e7eefdd862b41236a7e484355b8e0e5ebd64b/charset_normalizer-3.4.6-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:172985e4ff804a7ad08eebec0a1640ece87ba5041d565fff23c8f99c1f389484", size = 211658 }, + { url = "https://files.pythonhosted.org/packages/b5/38/16baa0affb957b3d880e5ac2144caf3f9d7de7bc4a91842e447fbb5e8b67/charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:4be9f4830ba8741527693848403e2c457c16e499100963ec711b1c6f2049b7c7", size = 210769 }, + { url = "https://files.pythonhosted.org/packages/05/34/c531bc6ac4c21da9ddfddb3107be2287188b3ea4b53b70fc58f2a77ac8d8/charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:79090741d842f564b1b2827c0b82d846405b744d31e84f18d7a7b41c20e473ff", size = 201328 }, + { url = "https://files.pythonhosted.org/packages/fa/73/a5a1e9ca5f234519c1953608a03fe109c306b97fdfb25f09182babad51a7/charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:87725cfb1a4f1f8c2fc9890ae2f42094120f4b44db9360be5d99a4c6b0e03a9e", size = 225302 }, + { url = "https://files.pythonhosted.org/packages/ba/f6/cd782923d112d296294dea4bcc7af5a7ae0f86ab79f8fefbda5526b6cfc0/charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:fcce033e4021347d80ed9c66dcf1e7b1546319834b74445f561d2e2221de5659", size = 211127 }, + { url = "https://files.pythonhosted.org/packages/0e/c5/0b6898950627af7d6103a449b22320372c24c6feda91aa24e201a478d161/charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:ca0276464d148c72defa8bb4390cce01b4a0e425f3b50d1435aa6d7a18107602", size = 222840 }, + { url = "https://files.pythonhosted.org/packages/7d/25/c4bba773bef442cbdc06111d40daa3de5050a676fa26e85090fc54dd12f0/charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:197c1a244a274bb016dd8b79204850144ef77fe81c5b797dc389327adb552407", size = 216890 }, + { url = "https://files.pythonhosted.org/packages/35/1a/05dacadb0978da72ee287b0143097db12f2e7e8d3ffc4647da07a383b0b7/charset_normalizer-3.4.6-cp314-cp314t-win32.whl", hash = "sha256:2a24157fa36980478dd1770b585c0f30d19e18f4fb0c47c13aa568f871718579", size = 155379 }, + { url = "https://files.pythonhosted.org/packages/5d/7a/d269d834cb3a76291651256f3b9a5945e81d0a49ab9f4a498964e83c0416/charset_normalizer-3.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:cd5e2801c89992ed8c0a3f0293ae83c159a60d9a5d685005383ef4caca77f2c4", size = 169043 }, + { url = "https://files.pythonhosted.org/packages/23/06/28b29fba521a37a8932c6a84192175c34d49f84a6d4773fa63d05f9aff22/charset_normalizer-3.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:47955475ac79cc504ef2704b192364e51d0d473ad452caedd0002605f780101c", size = 148523 }, + { url = "https://files.pythonhosted.org/packages/41/85/580dbaa12ab31041ed7df59f0bebc8893514fc21da6c05c3a1c1707d118f/charset_normalizer-3.4.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:31215157227939b4fb3d740cd23fe27be0439afef67b785a1eb78a3ae69cba9e", size = 298620 }, + { url = "https://files.pythonhosted.org/packages/67/2c/1e55af3a5e2f52e44396d5c5b731e0ae4f3bb92915ff09a610fb2f4497eb/charset_normalizer-3.4.6-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecbbd45615a6885fe3240eb9db73b9e62518b611850fdf8ab08bd56de7ad2b17", size = 200106 }, + { url = "https://files.pythonhosted.org/packages/10/42/0f2f51a1d16caa45fbf384fd337d4242df1a5b313babee211381d2d39a96/charset_normalizer-3.4.6-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c45a03a4c69820a399f1dda9e1d8fbf3562eda46e7720458180302021b08f778", size = 220539 }, + { url = "https://files.pythonhosted.org/packages/1c/0c/4e10996c740eec0f4ae8afbbbfa25f66e8479c4b6ee9cff1ca366a4f6c04/charset_normalizer-3.4.6-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e8aeb10fcbe92767f0fa69ad5a72deca50d0dca07fbde97848997d778a50c9fe", size = 215821 }, + { url = "https://files.pythonhosted.org/packages/46/73/205ae7644ebb581a7c6fa9c3751e283606e145f0e6f066003c66aafc9973/charset_normalizer-3.4.6-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:54fae94be3d75f3e573c9a1b5402dc593de19377013c9a0e4285e3d402dd3a2a", size = 207917 }, + { url = "https://files.pythonhosted.org/packages/b3/ca/18f7dcf19afdab8097aeb2feb8b3809bb4b6ee356cb720abf5263d79406a/charset_normalizer-3.4.6-cp39-cp39-manylinux_2_31_armv7l.whl", hash = "sha256:2f7fdd9b6e6c529d6a2501a2d36b240109e78a8ceaef5687cfcfa2bbe671d297", size = 194513 }, + { url = "https://files.pythonhosted.org/packages/e4/6a/e7e3e204c8d79832a091e00b24595af1d5d9800d37dc1f67a6b264cc99a6/charset_normalizer-3.4.6-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4d1d02209e06550bdaef34af58e041ad71b88e624f5d825519da3a3308e22687", size = 205612 }, + { url = "https://files.pythonhosted.org/packages/ff/ae/2169ebcea2851c5460c7a21993a0f87028be3c3e60899cb36251e1135cf5/charset_normalizer-3.4.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8bc5f0687d796c05b1e28ab0d38a50e6309906ee09375dd3aff6a9c09dd6e8f4", size = 203519 }, + { url = "https://files.pythonhosted.org/packages/43/a0/6a49a925b9c225fe35dffeac5c76f68996b814c637e9d7213718f96be109/charset_normalizer-3.4.6-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:ee4ec14bc1680d6b0afab9aea2ef27e26d2024f18b24a2d7155a52b60da7e833", size = 195411 }, + { url = "https://files.pythonhosted.org/packages/47/f7/a26b0a18e52b1a0f11f53c2c400ed062f386ac227a64ae4be4c5a64699be/charset_normalizer-3.4.6-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:d1a2ee9c1499fc8f86f4521f27a973c914b211ffa87322f4ee33bb35392da2c5", size = 221653 }, + { url = "https://files.pythonhosted.org/packages/a7/3a/ed1d3b5bb55e3634bd5c31cedbe4fff79d0e5b8d9a062f663a757a07760d/charset_normalizer-3.4.6-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:48696db7f18afb80a068821504296eb0787d9ce239b91ca15059d1d3eaacf13b", size = 205650 }, + { url = "https://files.pythonhosted.org/packages/b1/27/c75819eea5ceeefc49bae329327bb91e81adc346e2a9873d9fdb9e77cde6/charset_normalizer-3.4.6-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4f41da960b196ea355357285ad1316a00099f22d0929fe168343b99b254729c9", size = 216919 }, + { url = "https://files.pythonhosted.org/packages/0f/42/6e91bf8b15f67b7c957091138a36057a083e60703cc27848d5e36ca1eb03/charset_normalizer-3.4.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:802168e03fba8bbc5ce0d866d589e4b1ca751d06edee69f7f3a19c5a9fe6b597", size = 210101 }, + { url = "https://files.pythonhosted.org/packages/99/ff/101af2605e66a7ee59961d7f9e1060df7c92e8ea54208a02ab881422c24e/charset_normalizer-3.4.6-cp39-cp39-win32.whl", hash = "sha256:8761ac29b6c81574724322a554605608a9960769ea83d2c73e396f3df896ad54", size = 144136 }, + { url = "https://files.pythonhosted.org/packages/1d/da/de5942dfbf21f28c19e9202267dabf7bc73f195465d020a3a60054520cc5/charset_normalizer-3.4.6-cp39-cp39-win_amd64.whl", hash = "sha256:1cf0a70018692f85172348fe06d3a4b63f94ecb055e13a00c644d368eb82e5b8", size = 154210 }, + { url = "https://files.pythonhosted.org/packages/06/df/1b780a25b86d22b1d736f6ac883afd38ffdf30ddc18e5dc0e82211f493f1/charset_normalizer-3.4.6-cp39-cp39-win_arm64.whl", hash = "sha256:3516bbb8d42169de9e61b8520cbeeeb716f12f4ecfe3fd30a9919aa16c806ca8", size = 143225 }, + { url = "https://files.pythonhosted.org/packages/2a/68/687187c7e26cb24ccbd88e5069f5ef00eba804d36dde11d99aad0838ab45/charset_normalizer-3.4.6-py3-none-any.whl", hash = "sha256:947cf925bc916d90adba35a64c82aace04fa39b46b52d4630ece166655905a69", size = 61455 }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, +] + +[[package]] +name = "comm" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4c/13/7d740c5849255756bc17888787313b61fd38a0a8304fc4f073dfc46122aa/comm-0.2.3.tar.gz", hash = "sha256:2dc8048c10962d55d7ad693be1e7045d891b7ce8d999c97963a5e3e99c055971", size = 6319 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl", hash = "sha256:c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417", size = 7294 }, +] + +[[package]] +name = "coverage" +version = "7.10.7" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/51/26/d22c300112504f5f9a9fd2297ce33c35f3d353e4aeb987c8419453b2a7c2/coverage-7.10.7.tar.gz", hash = "sha256:f4ab143ab113be368a3e9b795f9cd7906c5ef407d6173fe9675a902e1fffc239", size = 827704 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/6c/3a3f7a46888e69d18abe3ccc6fe4cb16cccb1e6a2f99698931dafca489e6/coverage-7.10.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fc04cc7a3db33664e0c2d10eb8990ff6b3536f6842c9590ae8da4c614b9ed05a", size = 217987 }, + { url = "https://files.pythonhosted.org/packages/03/94/952d30f180b1a916c11a56f5c22d3535e943aa22430e9e3322447e520e1c/coverage-7.10.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e201e015644e207139f7e2351980feb7040e6f4b2c2978892f3e3789d1c125e5", size = 218388 }, + { url = "https://files.pythonhosted.org/packages/50/2b/9e0cf8ded1e114bcd8b2fd42792b57f1c4e9e4ea1824cde2af93a67305be/coverage-7.10.7-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:240af60539987ced2c399809bd34f7c78e8abe0736af91c3d7d0e795df633d17", size = 245148 }, + { url = "https://files.pythonhosted.org/packages/19/20/d0384ac06a6f908783d9b6aa6135e41b093971499ec488e47279f5b846e6/coverage-7.10.7-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8421e088bc051361b01c4b3a50fd39a4b9133079a2229978d9d30511fd05231b", size = 246958 }, + { url = "https://files.pythonhosted.org/packages/60/83/5c283cff3d41285f8eab897651585db908a909c572bdc014bcfaf8a8b6ae/coverage-7.10.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6be8ed3039ae7f7ac5ce058c308484787c86e8437e72b30bf5e88b8ea10f3c87", size = 248819 }, + { url = "https://files.pythonhosted.org/packages/60/22/02eb98fdc5ff79f423e990d877693e5310ae1eab6cb20ae0b0b9ac45b23b/coverage-7.10.7-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e28299d9f2e889e6d51b1f043f58d5f997c373cc12e6403b90df95b8b047c13e", size = 245754 }, + { url = "https://files.pythonhosted.org/packages/b4/bc/25c83bcf3ad141b32cd7dc45485ef3c01a776ca3aa8ef0a93e77e8b5bc43/coverage-7.10.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c4e16bd7761c5e454f4efd36f345286d6f7c5fa111623c355691e2755cae3b9e", size = 246860 }, + { url = "https://files.pythonhosted.org/packages/3c/b7/95574702888b58c0928a6e982038c596f9c34d52c5e5107f1eef729399b5/coverage-7.10.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b1c81d0e5e160651879755c9c675b974276f135558cf4ba79fee7b8413a515df", size = 244877 }, + { url = "https://files.pythonhosted.org/packages/47/b6/40095c185f235e085df0e0b158f6bd68cc6e1d80ba6c7721dc81d97ec318/coverage-7.10.7-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:606cc265adc9aaedcc84f1f064f0e8736bc45814f15a357e30fca7ecc01504e0", size = 245108 }, + { url = "https://files.pythonhosted.org/packages/c8/50/4aea0556da7a4b93ec9168420d170b55e2eb50ae21b25062513d020c6861/coverage-7.10.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:10b24412692df990dbc34f8fb1b6b13d236ace9dfdd68df5b28c2e39cafbba13", size = 245752 }, + { url = "https://files.pythonhosted.org/packages/6a/28/ea1a84a60828177ae3b100cb6723838523369a44ec5742313ed7db3da160/coverage-7.10.7-cp310-cp310-win32.whl", hash = "sha256:b51dcd060f18c19290d9b8a9dd1e0181538df2ce0717f562fff6cf74d9fc0b5b", size = 220497 }, + { url = "https://files.pythonhosted.org/packages/fc/1a/a81d46bbeb3c3fd97b9602ebaa411e076219a150489bcc2c025f151bd52d/coverage-7.10.7-cp310-cp310-win_amd64.whl", hash = "sha256:3a622ac801b17198020f09af3eaf45666b344a0d69fc2a6ffe2ea83aeef1d807", size = 221392 }, + { url = "https://files.pythonhosted.org/packages/d2/5d/c1a17867b0456f2e9ce2d8d4708a4c3a089947d0bec9c66cdf60c9e7739f/coverage-7.10.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a609f9c93113be646f44c2a0256d6ea375ad047005d7f57a5c15f614dc1b2f59", size = 218102 }, + { url = "https://files.pythonhosted.org/packages/54/f0/514dcf4b4e3698b9a9077f084429681bf3aad2b4a72578f89d7f643eb506/coverage-7.10.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:65646bb0359386e07639c367a22cf9b5bf6304e8630b565d0626e2bdf329227a", size = 218505 }, + { url = "https://files.pythonhosted.org/packages/20/f6/9626b81d17e2a4b25c63ac1b425ff307ecdeef03d67c9a147673ae40dc36/coverage-7.10.7-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5f33166f0dfcce728191f520bd2692914ec70fac2713f6bf3ce59c3deacb4699", size = 248898 }, + { url = "https://files.pythonhosted.org/packages/b0/ef/bd8e719c2f7417ba03239052e099b76ea1130ac0cbb183ee1fcaa58aaff3/coverage-7.10.7-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:35f5e3f9e455bb17831876048355dca0f758b6df22f49258cb5a91da23ef437d", size = 250831 }, + { url = "https://files.pythonhosted.org/packages/a5/b6/bf054de41ec948b151ae2b79a55c107f5760979538f5fb80c195f2517718/coverage-7.10.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4da86b6d62a496e908ac2898243920c7992499c1712ff7c2b6d837cc69d9467e", size = 252937 }, + { url = "https://files.pythonhosted.org/packages/0f/e5/3860756aa6f9318227443c6ce4ed7bf9e70bb7f1447a0353f45ac5c7974b/coverage-7.10.7-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6b8b09c1fad947c84bbbc95eca841350fad9cbfa5a2d7ca88ac9f8d836c92e23", size = 249021 }, + { url = "https://files.pythonhosted.org/packages/26/0f/bd08bd042854f7fd07b45808927ebcce99a7ed0f2f412d11629883517ac2/coverage-7.10.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4376538f36b533b46f8971d3a3e63464f2c7905c9800db97361c43a2b14792ab", size = 250626 }, + { url = "https://files.pythonhosted.org/packages/8e/a7/4777b14de4abcc2e80c6b1d430f5d51eb18ed1d75fca56cbce5f2db9b36e/coverage-7.10.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:121da30abb574f6ce6ae09840dae322bef734480ceafe410117627aa54f76d82", size = 248682 }, + { url = "https://files.pythonhosted.org/packages/34/72/17d082b00b53cd45679bad682fac058b87f011fd8b9fe31d77f5f8d3a4e4/coverage-7.10.7-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:88127d40df529336a9836870436fc2751c339fbaed3a836d42c93f3e4bd1d0a2", size = 248402 }, + { url = "https://files.pythonhosted.org/packages/81/7a/92367572eb5bdd6a84bfa278cc7e97db192f9f45b28c94a9ca1a921c3577/coverage-7.10.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ba58bbcd1b72f136080c0bccc2400d66cc6115f3f906c499013d065ac33a4b61", size = 249320 }, + { url = "https://files.pythonhosted.org/packages/2f/88/a23cc185f6a805dfc4fdf14a94016835eeb85e22ac3a0e66d5e89acd6462/coverage-7.10.7-cp311-cp311-win32.whl", hash = "sha256:972b9e3a4094b053a4e46832b4bc829fc8a8d347160eb39d03f1690316a99c14", size = 220536 }, + { url = "https://files.pythonhosted.org/packages/fe/ef/0b510a399dfca17cec7bc2f05ad8bd78cf55f15c8bc9a73ab20c5c913c2e/coverage-7.10.7-cp311-cp311-win_amd64.whl", hash = "sha256:a7b55a944a7f43892e28ad4bc0561dfd5f0d73e605d1aa5c3c976b52aea121d2", size = 221425 }, + { url = "https://files.pythonhosted.org/packages/51/7f/023657f301a276e4ba1850f82749bc136f5a7e8768060c2e5d9744a22951/coverage-7.10.7-cp311-cp311-win_arm64.whl", hash = "sha256:736f227fb490f03c6488f9b6d45855f8e0fd749c007f9303ad30efab0e73c05a", size = 220103 }, + { url = "https://files.pythonhosted.org/packages/13/e4/eb12450f71b542a53972d19117ea5a5cea1cab3ac9e31b0b5d498df1bd5a/coverage-7.10.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7bb3b9ddb87ef7725056572368040c32775036472d5a033679d1fa6c8dc08417", size = 218290 }, + { url = "https://files.pythonhosted.org/packages/37/66/593f9be12fc19fb36711f19a5371af79a718537204d16ea1d36f16bd78d2/coverage-7.10.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:18afb24843cbc175687225cab1138c95d262337f5473512010e46831aa0c2973", size = 218515 }, + { url = "https://files.pythonhosted.org/packages/66/80/4c49f7ae09cafdacc73fbc30949ffe77359635c168f4e9ff33c9ebb07838/coverage-7.10.7-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:399a0b6347bcd3822be369392932884b8216d0944049ae22925631a9b3d4ba4c", size = 250020 }, + { url = "https://files.pythonhosted.org/packages/a6/90/a64aaacab3b37a17aaedd83e8000142561a29eb262cede42d94a67f7556b/coverage-7.10.7-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:314f2c326ded3f4b09be11bc282eb2fc861184bc95748ae67b360ac962770be7", size = 252769 }, + { url = "https://files.pythonhosted.org/packages/98/2e/2dda59afd6103b342e096f246ebc5f87a3363b5412609946c120f4e7750d/coverage-7.10.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c41e71c9cfb854789dee6fc51e46743a6d138b1803fab6cb860af43265b42ea6", size = 253901 }, + { url = "https://files.pythonhosted.org/packages/53/dc/8d8119c9051d50f3119bb4a75f29f1e4a6ab9415cd1fa8bf22fcc3fb3b5f/coverage-7.10.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc01f57ca26269c2c706e838f6422e2a8788e41b3e3c65e2f41148212e57cd59", size = 250413 }, + { url = "https://files.pythonhosted.org/packages/98/b3/edaff9c5d79ee4d4b6d3fe046f2b1d799850425695b789d491a64225d493/coverage-7.10.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a6442c59a8ac8b85812ce33bc4d05bde3fb22321fa8294e2a5b487c3505f611b", size = 251820 }, + { url = "https://files.pythonhosted.org/packages/11/25/9a0728564bb05863f7e513e5a594fe5ffef091b325437f5430e8cfb0d530/coverage-7.10.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:78a384e49f46b80fb4c901d52d92abe098e78768ed829c673fbb53c498bef73a", size = 249941 }, + { url = "https://files.pythonhosted.org/packages/e0/fd/ca2650443bfbef5b0e74373aac4df67b08180d2f184b482c41499668e258/coverage-7.10.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:5e1e9802121405ede4b0133aa4340ad8186a1d2526de5b7c3eca519db7bb89fb", size = 249519 }, + { url = "https://files.pythonhosted.org/packages/24/79/f692f125fb4299b6f963b0745124998ebb8e73ecdfce4ceceb06a8c6bec5/coverage-7.10.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d41213ea25a86f69efd1575073d34ea11aabe075604ddf3d148ecfec9e1e96a1", size = 251375 }, + { url = "https://files.pythonhosted.org/packages/5e/75/61b9bbd6c7d24d896bfeec57acba78e0f8deac68e6baf2d4804f7aae1f88/coverage-7.10.7-cp312-cp312-win32.whl", hash = "sha256:77eb4c747061a6af8d0f7bdb31f1e108d172762ef579166ec84542f711d90256", size = 220699 }, + { url = "https://files.pythonhosted.org/packages/ca/f3/3bf7905288b45b075918d372498f1cf845b5b579b723c8fd17168018d5f5/coverage-7.10.7-cp312-cp312-win_amd64.whl", hash = "sha256:f51328ffe987aecf6d09f3cd9d979face89a617eacdaea43e7b3080777f647ba", size = 221512 }, + { url = "https://files.pythonhosted.org/packages/5c/44/3e32dbe933979d05cf2dac5e697c8599cfe038aaf51223ab901e208d5a62/coverage-7.10.7-cp312-cp312-win_arm64.whl", hash = "sha256:bda5e34f8a75721c96085903c6f2197dc398c20ffd98df33f866a9c8fd95f4bf", size = 220147 }, + { url = "https://files.pythonhosted.org/packages/9a/94/b765c1abcb613d103b64fcf10395f54d69b0ef8be6a0dd9c524384892cc7/coverage-7.10.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:981a651f543f2854abd3b5fcb3263aac581b18209be49863ba575de6edf4c14d", size = 218320 }, + { url = "https://files.pythonhosted.org/packages/72/4f/732fff31c119bb73b35236dd333030f32c4bfe909f445b423e6c7594f9a2/coverage-7.10.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:73ab1601f84dc804f7812dc297e93cd99381162da39c47040a827d4e8dafe63b", size = 218575 }, + { url = "https://files.pythonhosted.org/packages/87/02/ae7e0af4b674be47566707777db1aa375474f02a1d64b9323e5813a6cdd5/coverage-7.10.7-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a8b6f03672aa6734e700bbcd65ff050fd19cddfec4b031cc8cf1c6967de5a68e", size = 249568 }, + { url = "https://files.pythonhosted.org/packages/a2/77/8c6d22bf61921a59bce5471c2f1f7ac30cd4ac50aadde72b8c48d5727902/coverage-7.10.7-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:10b6ba00ab1132a0ce4428ff68cf50a25efd6840a42cdf4239c9b99aad83be8b", size = 252174 }, + { url = "https://files.pythonhosted.org/packages/b1/20/b6ea4f69bbb52dac0aebd62157ba6a9dddbfe664f5af8122dac296c3ee15/coverage-7.10.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c79124f70465a150e89340de5963f936ee97097d2ef76c869708c4248c63ca49", size = 253447 }, + { url = "https://files.pythonhosted.org/packages/f9/28/4831523ba483a7f90f7b259d2018fef02cb4d5b90bc7c1505d6e5a84883c/coverage-7.10.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:69212fbccdbd5b0e39eac4067e20a4a5256609e209547d86f740d68ad4f04911", size = 249779 }, + { url = "https://files.pythonhosted.org/packages/a7/9f/4331142bc98c10ca6436d2d620c3e165f31e6c58d43479985afce6f3191c/coverage-7.10.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7ea7c6c9d0d286d04ed3541747e6597cbe4971f22648b68248f7ddcd329207f0", size = 251604 }, + { url = "https://files.pythonhosted.org/packages/ce/60/bda83b96602036b77ecf34e6393a3836365481b69f7ed7079ab85048202b/coverage-7.10.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b9be91986841a75042b3e3243d0b3cb0b2434252b977baaf0cd56e960fe1e46f", size = 249497 }, + { url = "https://files.pythonhosted.org/packages/5f/af/152633ff35b2af63977edd835d8e6430f0caef27d171edf2fc76c270ef31/coverage-7.10.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:b281d5eca50189325cfe1f365fafade89b14b4a78d9b40b05ddd1fc7d2a10a9c", size = 249350 }, + { url = "https://files.pythonhosted.org/packages/9d/71/d92105d122bd21cebba877228990e1646d862e34a98bb3374d3fece5a794/coverage-7.10.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:99e4aa63097ab1118e75a848a28e40d68b08a5e19ce587891ab7fd04475e780f", size = 251111 }, + { url = "https://files.pythonhosted.org/packages/a2/9e/9fdb08f4bf476c912f0c3ca292e019aab6712c93c9344a1653986c3fd305/coverage-7.10.7-cp313-cp313-win32.whl", hash = "sha256:dc7c389dce432500273eaf48f410b37886be9208b2dd5710aaf7c57fd442c698", size = 220746 }, + { url = "https://files.pythonhosted.org/packages/b1/b1/a75fd25df44eab52d1931e89980d1ada46824c7a3210be0d3c88a44aaa99/coverage-7.10.7-cp313-cp313-win_amd64.whl", hash = "sha256:cac0fdca17b036af3881a9d2729a850b76553f3f716ccb0360ad4dbc06b3b843", size = 221541 }, + { url = "https://files.pythonhosted.org/packages/14/3a/d720d7c989562a6e9a14b2c9f5f2876bdb38e9367126d118495b89c99c37/coverage-7.10.7-cp313-cp313-win_arm64.whl", hash = "sha256:4b6f236edf6e2f9ae8fcd1332da4e791c1b6ba0dc16a2dc94590ceccb482e546", size = 220170 }, + { url = "https://files.pythonhosted.org/packages/bb/22/e04514bf2a735d8b0add31d2b4ab636fc02370730787c576bb995390d2d5/coverage-7.10.7-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a0ec07fd264d0745ee396b666d47cef20875f4ff2375d7c4f58235886cc1ef0c", size = 219029 }, + { url = "https://files.pythonhosted.org/packages/11/0b/91128e099035ece15da3445d9015e4b4153a6059403452d324cbb0a575fa/coverage-7.10.7-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:dd5e856ebb7bfb7672b0086846db5afb4567a7b9714b8a0ebafd211ec7ce6a15", size = 219259 }, + { url = "https://files.pythonhosted.org/packages/8b/51/66420081e72801536a091a0c8f8c1f88a5c4bf7b9b1bdc6222c7afe6dc9b/coverage-7.10.7-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f57b2a3c8353d3e04acf75b3fed57ba41f5c0646bbf1d10c7c282291c97936b4", size = 260592 }, + { url = "https://files.pythonhosted.org/packages/5d/22/9b8d458c2881b22df3db5bb3e7369e63d527d986decb6c11a591ba2364f7/coverage-7.10.7-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1ef2319dd15a0b009667301a3f84452a4dc6fddfd06b0c5c53ea472d3989fbf0", size = 262768 }, + { url = "https://files.pythonhosted.org/packages/f7/08/16bee2c433e60913c610ea200b276e8eeef084b0d200bdcff69920bd5828/coverage-7.10.7-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:83082a57783239717ceb0ad584de3c69cf581b2a95ed6bf81ea66034f00401c0", size = 264995 }, + { url = "https://files.pythonhosted.org/packages/20/9d/e53eb9771d154859b084b90201e5221bca7674ba449a17c101a5031d4054/coverage-7.10.7-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:50aa94fb1fb9a397eaa19c0d5ec15a5edd03a47bf1a3a6111a16b36e190cff65", size = 259546 }, + { url = "https://files.pythonhosted.org/packages/ad/b0/69bc7050f8d4e56a89fb550a1577d5d0d1db2278106f6f626464067b3817/coverage-7.10.7-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2120043f147bebb41c85b97ac45dd173595ff14f2a584f2963891cbcc3091541", size = 262544 }, + { url = "https://files.pythonhosted.org/packages/ef/4b/2514b060dbd1bc0aaf23b852c14bb5818f244c664cb16517feff6bb3a5ab/coverage-7.10.7-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2fafd773231dd0378fdba66d339f84904a8e57a262f583530f4f156ab83863e6", size = 260308 }, + { url = "https://files.pythonhosted.org/packages/54/78/7ba2175007c246d75e496f64c06e94122bdb914790a1285d627a918bd271/coverage-7.10.7-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:0b944ee8459f515f28b851728ad224fa2d068f1513ef6b7ff1efafeb2185f999", size = 258920 }, + { url = "https://files.pythonhosted.org/packages/c0/b3/fac9f7abbc841409b9a410309d73bfa6cfb2e51c3fada738cb607ce174f8/coverage-7.10.7-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4b583b97ab2e3efe1b3e75248a9b333bd3f8b0b1b8e5b45578e05e5850dfb2c2", size = 261434 }, + { url = "https://files.pythonhosted.org/packages/ee/51/a03bec00d37faaa891b3ff7387192cef20f01604e5283a5fabc95346befa/coverage-7.10.7-cp313-cp313t-win32.whl", hash = "sha256:2a78cd46550081a7909b3329e2266204d584866e8d97b898cd7fb5ac8d888b1a", size = 221403 }, + { url = "https://files.pythonhosted.org/packages/53/22/3cf25d614e64bf6d8e59c7c669b20d6d940bb337bdee5900b9ca41c820bb/coverage-7.10.7-cp313-cp313t-win_amd64.whl", hash = "sha256:33a5e6396ab684cb43dc7befa386258acb2d7fae7f67330ebb85ba4ea27938eb", size = 222469 }, + { url = "https://files.pythonhosted.org/packages/49/a1/00164f6d30d8a01c3c9c48418a7a5be394de5349b421b9ee019f380df2a0/coverage-7.10.7-cp313-cp313t-win_arm64.whl", hash = "sha256:86b0e7308289ddde73d863b7683f596d8d21c7d8664ce1dee061d0bcf3fbb4bb", size = 220731 }, + { url = "https://files.pythonhosted.org/packages/23/9c/5844ab4ca6a4dd97a1850e030a15ec7d292b5c5cb93082979225126e35dd/coverage-7.10.7-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:b06f260b16ead11643a5a9f955bd4b5fd76c1a4c6796aeade8520095b75de520", size = 218302 }, + { url = "https://files.pythonhosted.org/packages/f0/89/673f6514b0961d1f0e20ddc242e9342f6da21eaba3489901b565c0689f34/coverage-7.10.7-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:212f8f2e0612778f09c55dd4872cb1f64a1f2b074393d139278ce902064d5b32", size = 218578 }, + { url = "https://files.pythonhosted.org/packages/05/e8/261cae479e85232828fb17ad536765c88dd818c8470aca690b0ac6feeaa3/coverage-7.10.7-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3445258bcded7d4aa630ab8296dea4d3f15a255588dd535f980c193ab6b95f3f", size = 249629 }, + { url = "https://files.pythonhosted.org/packages/82/62/14ed6546d0207e6eda876434e3e8475a3e9adbe32110ce896c9e0c06bb9a/coverage-7.10.7-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:bb45474711ba385c46a0bfe696c695a929ae69ac636cda8f532be9e8c93d720a", size = 252162 }, + { url = "https://files.pythonhosted.org/packages/ff/49/07f00db9ac6478e4358165a08fb41b469a1b053212e8a00cb02f0d27a05f/coverage-7.10.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:813922f35bd800dca9994c5971883cbc0d291128a5de6b167c7aa697fcf59360", size = 253517 }, + { url = "https://files.pythonhosted.org/packages/a2/59/c5201c62dbf165dfbc91460f6dbbaa85a8b82cfa6131ac45d6c1bfb52deb/coverage-7.10.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:93c1b03552081b2a4423091d6fb3787265b8f86af404cff98d1b5342713bdd69", size = 249632 }, + { url = "https://files.pythonhosted.org/packages/07/ae/5920097195291a51fb00b3a70b9bbd2edbfe3c84876a1762bd1ef1565ebc/coverage-7.10.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:cc87dd1b6eaf0b848eebb1c86469b9f72a1891cb42ac7adcfbce75eadb13dd14", size = 251520 }, + { url = "https://files.pythonhosted.org/packages/b9/3c/a815dde77a2981f5743a60b63df31cb322c944843e57dbd579326625a413/coverage-7.10.7-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:39508ffda4f343c35f3236fe8d1a6634a51f4581226a1262769d7f970e73bffe", size = 249455 }, + { url = "https://files.pythonhosted.org/packages/aa/99/f5cdd8421ea656abefb6c0ce92556709db2265c41e8f9fc6c8ae0f7824c9/coverage-7.10.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:925a1edf3d810537c5a3abe78ec5530160c5f9a26b1f4270b40e62cc79304a1e", size = 249287 }, + { url = "https://files.pythonhosted.org/packages/c3/7a/e9a2da6a1fc5d007dd51fca083a663ab930a8c4d149c087732a5dbaa0029/coverage-7.10.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2c8b9a0636f94c43cd3576811e05b89aa9bc2d0a85137affc544ae5cb0e4bfbd", size = 250946 }, + { url = "https://files.pythonhosted.org/packages/ef/5b/0b5799aa30380a949005a353715095d6d1da81927d6dbed5def2200a4e25/coverage-7.10.7-cp314-cp314-win32.whl", hash = "sha256:b7b8288eb7cdd268b0304632da8cb0bb93fadcfec2fe5712f7b9cc8f4d487be2", size = 221009 }, + { url = "https://files.pythonhosted.org/packages/da/b0/e802fbb6eb746de006490abc9bb554b708918b6774b722bb3a0e6aa1b7de/coverage-7.10.7-cp314-cp314-win_amd64.whl", hash = "sha256:1ca6db7c8807fb9e755d0379ccc39017ce0a84dcd26d14b5a03b78563776f681", size = 221804 }, + { url = "https://files.pythonhosted.org/packages/9e/e8/71d0c8e374e31f39e3389bb0bd19e527d46f00ea8571ec7ec8fd261d8b44/coverage-7.10.7-cp314-cp314-win_arm64.whl", hash = "sha256:097c1591f5af4496226d5783d036bf6fd6cd0cbc132e071b33861de756efb880", size = 220384 }, + { url = "https://files.pythonhosted.org/packages/62/09/9a5608d319fa3eba7a2019addeacb8c746fb50872b57a724c9f79f146969/coverage-7.10.7-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:a62c6ef0d50e6de320c270ff91d9dd0a05e7250cac2a800b7784bae474506e63", size = 219047 }, + { url = "https://files.pythonhosted.org/packages/f5/6f/f58d46f33db9f2e3647b2d0764704548c184e6f5e014bef528b7f979ef84/coverage-7.10.7-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:9fa6e4dd51fe15d8738708a973470f67a855ca50002294852e9571cdbd9433f2", size = 219266 }, + { url = "https://files.pythonhosted.org/packages/74/5c/183ffc817ba68e0b443b8c934c8795553eb0c14573813415bd59941ee165/coverage-7.10.7-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8fb190658865565c549b6b4706856d6a7b09302c797eb2cf8e7fe9dabb043f0d", size = 260767 }, + { url = "https://files.pythonhosted.org/packages/0f/48/71a8abe9c1ad7e97548835e3cc1adbf361e743e9d60310c5f75c9e7bf847/coverage-7.10.7-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:affef7c76a9ef259187ef31599a9260330e0335a3011732c4b9effa01e1cd6e0", size = 262931 }, + { url = "https://files.pythonhosted.org/packages/84/fd/193a8fb132acfc0a901f72020e54be5e48021e1575bb327d8ee1097a28fd/coverage-7.10.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e16e07d85ca0cf8bafe5f5d23a0b850064e8e945d5677492b06bbe6f09cc699", size = 265186 }, + { url = "https://files.pythonhosted.org/packages/b1/8f/74ecc30607dd95ad50e3034221113ccb1c6d4e8085cc761134782995daae/coverage-7.10.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:03ffc58aacdf65d2a82bbeb1ffe4d01ead4017a21bfd0454983b88ca73af94b9", size = 259470 }, + { url = "https://files.pythonhosted.org/packages/0f/55/79ff53a769f20d71b07023ea115c9167c0bb56f281320520cf64c5298a96/coverage-7.10.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1b4fd784344d4e52647fd7857b2af5b3fbe6c239b0b5fa63e94eb67320770e0f", size = 262626 }, + { url = "https://files.pythonhosted.org/packages/88/e2/dac66c140009b61ac3fc13af673a574b00c16efdf04f9b5c740703e953c0/coverage-7.10.7-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:0ebbaddb2c19b71912c6f2518e791aa8b9f054985a0769bdb3a53ebbc765c6a1", size = 260386 }, + { url = "https://files.pythonhosted.org/packages/a2/f1/f48f645e3f33bb9ca8a496bc4a9671b52f2f353146233ebd7c1df6160440/coverage-7.10.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:a2d9a3b260cc1d1dbdb1c582e63ddcf5363426a1a68faa0f5da28d8ee3c722a0", size = 258852 }, + { url = "https://files.pythonhosted.org/packages/bb/3b/8442618972c51a7affeead957995cfa8323c0c9bcf8fa5a027421f720ff4/coverage-7.10.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a3cc8638b2480865eaa3926d192e64ce6c51e3d29c849e09d5b4ad95efae5399", size = 261534 }, + { url = "https://files.pythonhosted.org/packages/b2/dc/101f3fa3a45146db0cb03f5b4376e24c0aac818309da23e2de0c75295a91/coverage-7.10.7-cp314-cp314t-win32.whl", hash = "sha256:67f8c5cbcd3deb7a60b3345dffc89a961a484ed0af1f6f73de91705cc6e31235", size = 221784 }, + { url = "https://files.pythonhosted.org/packages/4c/a1/74c51803fc70a8a40d7346660379e144be772bab4ac7bb6e6b905152345c/coverage-7.10.7-cp314-cp314t-win_amd64.whl", hash = "sha256:e1ed71194ef6dea7ed2d5cb5f7243d4bcd334bfb63e59878519be558078f848d", size = 222905 }, + { url = "https://files.pythonhosted.org/packages/12/65/f116a6d2127df30bcafbceef0302d8a64ba87488bf6f73a6d8eebf060873/coverage-7.10.7-cp314-cp314t-win_arm64.whl", hash = "sha256:7fe650342addd8524ca63d77b2362b02345e5f1a093266787d210c70a50b471a", size = 220922 }, + { url = "https://files.pythonhosted.org/packages/a3/ad/d1c25053764b4c42eb294aae92ab617d2e4f803397f9c7c8295caa77a260/coverage-7.10.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fff7b9c3f19957020cac546c70025331113d2e61537f6e2441bc7657913de7d3", size = 217978 }, + { url = "https://files.pythonhosted.org/packages/52/2f/b9f9daa39b80ece0b9548bbb723381e29bc664822d9a12c2135f8922c22b/coverage-7.10.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bc91b314cef27742da486d6839b677b3f2793dfe52b51bbbb7cf736d5c29281c", size = 218370 }, + { url = "https://files.pythonhosted.org/packages/dd/6e/30d006c3b469e58449650642383dddf1c8fb63d44fdf92994bfd46570695/coverage-7.10.7-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:567f5c155eda8df1d3d439d40a45a6a5f029b429b06648235f1e7e51b522b396", size = 244802 }, + { url = "https://files.pythonhosted.org/packages/b0/49/8a070782ce7e6b94ff6a0b6d7c65ba6bc3091d92a92cef4cd4eb0767965c/coverage-7.10.7-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2af88deffcc8a4d5974cf2d502251bc3b2db8461f0b66d80a449c33757aa9f40", size = 246625 }, + { url = "https://files.pythonhosted.org/packages/6a/92/1c1c5a9e8677ce56d42b97bdaca337b2d4d9ebe703d8c174ede52dbabd5f/coverage-7.10.7-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7315339eae3b24c2d2fa1ed7d7a38654cba34a13ef19fbcb9425da46d3dc594", size = 248399 }, + { url = "https://files.pythonhosted.org/packages/c0/54/b140edee7257e815de7426d5d9846b58505dffc29795fff2dfb7f8a1c5a0/coverage-7.10.7-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:912e6ebc7a6e4adfdbb1aec371ad04c68854cd3bf3608b3514e7ff9062931d8a", size = 245142 }, + { url = "https://files.pythonhosted.org/packages/e4/9e/6d6b8295940b118e8b7083b29226c71f6154f7ff41e9ca431f03de2eac0d/coverage-7.10.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f49a05acd3dfe1ce9715b657e28d138578bc40126760efb962322c56e9ca344b", size = 246284 }, + { url = "https://files.pythonhosted.org/packages/db/e5/5e957ca747d43dbe4d9714358375c7546cb3cb533007b6813fc20fce37ad/coverage-7.10.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:cce2109b6219f22ece99db7644b9622f54a4e915dad65660ec435e89a3ea7cc3", size = 244353 }, + { url = "https://files.pythonhosted.org/packages/9a/45/540fc5cc92536a1b783b7ef99450bd55a4b3af234aae35a18a339973ce30/coverage-7.10.7-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:f3c887f96407cea3916294046fc7dab611c2552beadbed4ea901cbc6a40cc7a0", size = 244430 }, + { url = "https://files.pythonhosted.org/packages/75/0b/8287b2e5b38c8fe15d7e3398849bb58d382aedc0864ea0fa1820e8630491/coverage-7.10.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:635adb9a4507c9fd2ed65f39693fa31c9a3ee3a8e6dc64df033e8fdf52a7003f", size = 245311 }, + { url = "https://files.pythonhosted.org/packages/0c/1d/29724999984740f0c86d03e6420b942439bf5bd7f54d4382cae386a9d1e9/coverage-7.10.7-cp39-cp39-win32.whl", hash = "sha256:5a02d5a850e2979b0a014c412573953995174743a3f7fa4ea5a6e9a3c5617431", size = 220500 }, + { url = "https://files.pythonhosted.org/packages/43/11/4b1e6b129943f905ca54c339f343877b55b365ae2558806c1be4f7476ed5/coverage-7.10.7-cp39-cp39-win_amd64.whl", hash = "sha256:c134869d5ffe34547d14e174c866fd8fe2254918cc0a95e99052903bc1543e07", size = 221408 }, + { url = "https://files.pythonhosted.org/packages/ec/16/114df1c291c22cac3b0c127a73e0af5c12ed7bbb6558d310429a0ae24023/coverage-7.10.7-py3-none-any.whl", hash = "sha256:f7941f6f2fe6dd6807a1208737b8a0cbcf1cc6d7b07d24998ad2d63590868260", size = 209952 }, +] + +[package.optional-dependencies] +toml = [ + { name = "tomli", marker = "python_full_version < '3.10'" }, +] + +[[package]] +name = "coverage" +version = "7.13.5" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/9d/e0/70553e3000e345daff267cec284ce4cbf3fc141b6da229ac52775b5428f1/coverage-7.13.5.tar.gz", hash = "sha256:c81f6515c4c40141f83f502b07bbfa5c240ba25bbe73da7b33f1e5b6120ff179", size = 915967 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/33/e8c48488c29a73fd089f9d71f9653c1be7478f2ad6b5bc870db11a55d23d/coverage-7.13.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e0723d2c96324561b9aa76fb982406e11d93cdb388a7a7da2b16e04719cf7ca5", size = 219255 }, + { url = "https://files.pythonhosted.org/packages/da/bd/b0ebe9f677d7f4b74a3e115eec7ddd4bcf892074963a00d91e8b164a6386/coverage-7.13.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:52f444e86475992506b32d4e5ca55c24fc88d73bcbda0e9745095b28ef4dc0cf", size = 219772 }, + { url = "https://files.pythonhosted.org/packages/48/cc/5cb9502f4e01972f54eedd48218bb203fe81e294be606a2bc93970208013/coverage-7.13.5-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:704de6328e3d612a8f6c07000a878ff38181ec3263d5a11da1db294fa6a9bdf8", size = 246532 }, + { url = "https://files.pythonhosted.org/packages/7d/d8/3217636d86c7e7b12e126e4f30ef1581047da73140614523af7495ed5f2d/coverage-7.13.5-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a1a6d79a14e1ec1832cabc833898636ad5f3754a678ef8bb4908515208bf84f4", size = 248333 }, + { url = "https://files.pythonhosted.org/packages/2b/30/2002ac6729ba2d4357438e2ed3c447ad8562866c8c63fc16f6dfc33afe56/coverage-7.13.5-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:79060214983769c7ba3f0cee10b54c97609dca4d478fa1aa32b914480fd5738d", size = 250211 }, + { url = "https://files.pythonhosted.org/packages/6c/85/552496626d6b9359eb0e2f86f920037c9cbfba09b24d914c6e1528155f7d/coverage-7.13.5-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:356e76b46783a98c2a2fe81ec79df4883a1e62895ea952968fb253c114e7f930", size = 252125 }, + { url = "https://files.pythonhosted.org/packages/44/21/40256eabdcbccdb6acf6b381b3016a154399a75fe39d406f790ae84d1f3c/coverage-7.13.5-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0cef0cdec915d11254a7f549c1170afecce708d30610c6abdded1f74e581666d", size = 247219 }, + { url = "https://files.pythonhosted.org/packages/b1/e8/96e2a6c3f21a0ea77d7830b254a1542d0328acc8d7bdf6a284ba7e529f77/coverage-7.13.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:dc022073d063b25a402454e5712ef9e007113e3a676b96c5f29b2bda29352f40", size = 248248 }, + { url = "https://files.pythonhosted.org/packages/da/ba/8477f549e554827da390ec659f3c38e4b6d95470f4daafc2d8ff94eaa9c2/coverage-7.13.5-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9b74db26dfea4f4e50d48a4602207cd1e78be33182bc9cbf22da94f332f99878", size = 246254 }, + { url = "https://files.pythonhosted.org/packages/55/59/bc22aef0e6aa179d5b1b001e8b3654785e9adf27ef24c93dc4228ebd5d68/coverage-7.13.5-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ad146744ca4fd09b50c482650e3c1b1f4dfa1d4792e0a04a369c7f23336f0400", size = 250067 }, + { url = "https://files.pythonhosted.org/packages/de/1b/c6a023a160806a5137dca53468fd97530d6acad24a22003b1578a9c2e429/coverage-7.13.5-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:c555b48be1853fe3997c11c4bd521cdd9a9612352de01fa4508f16ec341e6fe0", size = 246521 }, + { url = "https://files.pythonhosted.org/packages/2d/3f/3532c85a55aa2f899fa17c186f831cfa1aa434d88ff792a709636f64130e/coverage-7.13.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7034b5c56a58ae5e85f23949d52c14aca2cfc6848a31764995b7de88f13a1ea0", size = 247126 }, + { url = "https://files.pythonhosted.org/packages/aa/2e/b9d56af4a24ef45dfbcda88e06870cb7d57b2b0bfa3a888d79b4c8debd76/coverage-7.13.5-cp310-cp310-win32.whl", hash = "sha256:eb7fdf1ef130660e7415e0253a01a7d5a88c9c4d158bcf75cbbd922fd65a5b58", size = 221860 }, + { url = "https://files.pythonhosted.org/packages/9f/cc/d938417e7a4d7f0433ad4edee8bb2acdc60dc7ac5af19e2a07a048ecbee3/coverage-7.13.5-cp310-cp310-win_amd64.whl", hash = "sha256:3e1bb5f6c78feeb1be3475789b14a0f0a5b47d505bfc7267126ccbd50289999e", size = 222788 }, + { url = "https://files.pythonhosted.org/packages/4b/37/d24c8f8220ff07b839b2c043ea4903a33b0f455abe673ae3c03bbdb7f212/coverage-7.13.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:66a80c616f80181f4d643b0f9e709d97bcea413ecd9631e1dedc7401c8e6695d", size = 219381 }, + { url = "https://files.pythonhosted.org/packages/35/8b/cd129b0ca4afe886a6ce9d183c44d8301acbd4ef248622e7c49a23145605/coverage-7.13.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:145ede53ccbafb297c1c9287f788d1bc3efd6c900da23bf6931b09eafc931587", size = 219880 }, + { url = "https://files.pythonhosted.org/packages/55/2f/e0e5b237bffdb5d6c530ce87cc1d413a5b7d7dfd60fb067ad6d254c35c76/coverage-7.13.5-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:0672854dc733c342fa3e957e0605256d2bf5934feeac328da9e0b5449634a642", size = 250303 }, + { url = "https://files.pythonhosted.org/packages/92/be/b1afb692be85b947f3401375851484496134c5554e67e822c35f28bf2fbc/coverage-7.13.5-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ec10e2a42b41c923c2209b846126c6582db5e43a33157e9870ba9fb70dc7854b", size = 252218 }, + { url = "https://files.pythonhosted.org/packages/da/69/2f47bb6fa1b8d1e3e5d0c4be8ccb4313c63d742476a619418f85740d597b/coverage-7.13.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:be3d4bbad9d4b037791794ddeedd7d64a56f5933a2c1373e18e9e568b9141686", size = 254326 }, + { url = "https://files.pythonhosted.org/packages/d5/d0/79db81da58965bd29dabc8f4ad2a2af70611a57cba9d1ec006f072f30a54/coverage-7.13.5-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4d2afbc5cc54d286bfb54541aa50b64cdb07a718227168c87b9e2fb8f25e1743", size = 256267 }, + { url = "https://files.pythonhosted.org/packages/e5/32/d0d7cc8168f91ddab44c0ce4806b969df5f5fdfdbb568eaca2dbc2a04936/coverage-7.13.5-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3ad050321264c49c2fa67bb599100456fc51d004b82534f379d16445da40fb75", size = 250430 }, + { url = "https://files.pythonhosted.org/packages/4d/06/a055311d891ddbe231cd69fdd20ea4be6e3603ffebddf8704b8ca8e10a3c/coverage-7.13.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7300c8a6d13335b29bb76d7651c66af6bd8658517c43499f110ddc6717bfc209", size = 252017 }, + { url = "https://files.pythonhosted.org/packages/d6/f6/d0fd2d21e29a657b5f77a2fe7082e1568158340dceb941954f776dce1b7b/coverage-7.13.5-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:eb07647a5738b89baab047f14edd18ded523de60f3b30e75c2acc826f79c839a", size = 250080 }, + { url = "https://files.pythonhosted.org/packages/4e/ab/0d7fb2efc2e9a5eb7ddcc6e722f834a69b454b7e6e5888c3a8567ecffb31/coverage-7.13.5-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:9adb6688e3b53adffefd4a52d72cbd8b02602bfb8f74dcd862337182fd4d1a4e", size = 253843 }, + { url = "https://files.pythonhosted.org/packages/ba/6f/7467b917bbf5408610178f62a49c0ed4377bb16c1657f689cc61470da8ce/coverage-7.13.5-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7c8d4bc913dd70b93488d6c496c77f3aff5ea99a07e36a18f865bca55adef8bd", size = 249802 }, + { url = "https://files.pythonhosted.org/packages/75/2c/1172fb689df92135f5bfbbd69fc83017a76d24ea2e2f3a1154007e2fb9f8/coverage-7.13.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0e3c426ffc4cd952f54ee9ffbdd10345709ecc78a3ecfd796a57236bfad0b9b8", size = 250707 }, + { url = "https://files.pythonhosted.org/packages/67/21/9ac389377380a07884e3b48ba7a620fcd9dbfaf1d40565facdc6b36ec9ef/coverage-7.13.5-cp311-cp311-win32.whl", hash = "sha256:259b69bb83ad9894c4b25be2528139eecba9a82646ebdda2d9db1ba28424a6bf", size = 221880 }, + { url = "https://files.pythonhosted.org/packages/af/7f/4cd8a92531253f9d7c1bbecd9fa1b472907fb54446ca768c59b531248dc5/coverage-7.13.5-cp311-cp311-win_amd64.whl", hash = "sha256:258354455f4e86e3e9d0d17571d522e13b4e1e19bf0f8596bcf9476d61e7d8a9", size = 222816 }, + { url = "https://files.pythonhosted.org/packages/12/a6/1d3f6155fb0010ca68eba7fe48ca6c9da7385058b77a95848710ecf189b1/coverage-7.13.5-cp311-cp311-win_arm64.whl", hash = "sha256:bff95879c33ec8da99fc9b6fe345ddb5be6414b41d6d1ad1c8f188d26f36e028", size = 221483 }, + { url = "https://files.pythonhosted.org/packages/a0/c3/a396306ba7db865bf96fc1fb3b7fd29bcbf3d829df642e77b13555163cd6/coverage-7.13.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:460cf0114c5016fa841214ff5564aa4864f11948da9440bc97e21ad1f4ba1e01", size = 219554 }, + { url = "https://files.pythonhosted.org/packages/a6/16/a68a19e5384e93f811dccc51034b1fd0b865841c390e3c931dcc4699e035/coverage-7.13.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0e223ce4b4ed47f065bfb123687686512e37629be25cc63728557ae7db261422", size = 219908 }, + { url = "https://files.pythonhosted.org/packages/29/72/20b917c6793af3a5ceb7fb9c50033f3ec7865f2911a1416b34a7cfa0813b/coverage-7.13.5-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:6e3370441f4513c6252bf042b9c36d22491142385049243253c7e48398a15a9f", size = 251419 }, + { url = "https://files.pythonhosted.org/packages/8c/49/cd14b789536ac6a4778c453c6a2338bc0a2fb60c5a5a41b4008328b9acc1/coverage-7.13.5-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:03ccc709a17a1de074fb1d11f217342fb0d2b1582ed544f554fc9fc3f07e95f5", size = 254159 }, + { url = "https://files.pythonhosted.org/packages/9d/00/7b0edcfe64e2ed4c0340dac14a52ad0f4c9bd0b8b5e531af7d55b703db7c/coverage-7.13.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3f4818d065964db3c1c66dc0fbdac5ac692ecbc875555e13374fdbe7eedb4376", size = 255270 }, + { url = "https://files.pythonhosted.org/packages/93/89/7ffc4ba0f5d0a55c1e84ea7cee39c9fc06af7b170513d83fbf3bbefce280/coverage-7.13.5-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:012d5319e66e9d5a218834642d6c35d265515a62f01157a45bcc036ecf947256", size = 257538 }, + { url = "https://files.pythonhosted.org/packages/81/bd/73ddf85f93f7e6fa83e77ccecb6162d9415c79007b4bc124008a4995e4a7/coverage-7.13.5-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8dd02af98971bdb956363e4827d34425cb3df19ee550ef92855b0acb9c7ce51c", size = 251821 }, + { url = "https://files.pythonhosted.org/packages/a0/81/278aff4e8dec4926a0bcb9486320752811f543a3ce5b602cc7a29978d073/coverage-7.13.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f08fd75c50a760c7eb068ae823777268daaf16a80b918fa58eea888f8e3919f5", size = 253191 }, + { url = "https://files.pythonhosted.org/packages/70/ee/fe1621488e2e0a58d7e94c4800f0d96f79671553488d401a612bebae324b/coverage-7.13.5-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:843ea8643cf967d1ac7e8ecd4bb00c99135adf4816c0c0593fdcc47b597fcf09", size = 251337 }, + { url = "https://files.pythonhosted.org/packages/37/a6/f79fb37aa104b562207cc23cb5711ab6793608e246cae1e93f26b2236ed9/coverage-7.13.5-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:9d44d7aa963820b1b971dbecd90bfe5fe8f81cff79787eb6cca15750bd2f79b9", size = 255404 }, + { url = "https://files.pythonhosted.org/packages/75/f0/ed15262a58ec81ce457ceb717b7f78752a1713556b19081b76e90896e8d4/coverage-7.13.5-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:7132bed4bd7b836200c591410ae7d97bf7ae8be6fc87d160b2bd881df929e7bf", size = 250903 }, + { url = "https://files.pythonhosted.org/packages/0f/e9/9129958f20e7e9d4d56d51d42ccf708d15cac355ff4ac6e736e97a9393d2/coverage-7.13.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a698e363641b98843c517817db75373c83254781426e94ada3197cabbc2c919c", size = 252780 }, + { url = "https://files.pythonhosted.org/packages/a4/d7/0ad9b15812d81272db94379fe4c6df8fd17781cc7671fdfa30c76ba5ff7b/coverage-7.13.5-cp312-cp312-win32.whl", hash = "sha256:bdba0a6b8812e8c7df002d908a9a2ea3c36e92611b5708633c50869e6d922fdf", size = 222093 }, + { url = "https://files.pythonhosted.org/packages/29/3d/821a9a5799fac2556bcf0bd37a70d1d11fa9e49784b6d22e92e8b2f85f18/coverage-7.13.5-cp312-cp312-win_amd64.whl", hash = "sha256:d2c87e0c473a10bffe991502eac389220533024c8082ec1ce849f4218dded810", size = 222900 }, + { url = "https://files.pythonhosted.org/packages/d4/fa/2238c2ad08e35cf4f020ea721f717e09ec3152aea75d191a7faf3ef009a8/coverage-7.13.5-cp312-cp312-win_arm64.whl", hash = "sha256:bf69236a9a81bdca3bff53796237aab096cdbf8d78a66ad61e992d9dac7eb2de", size = 221515 }, + { url = "https://files.pythonhosted.org/packages/74/8c/74fedc9663dcf168b0a059d4ea756ecae4da77a489048f94b5f512a8d0b3/coverage-7.13.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5ec4af212df513e399cf11610cc27063f1586419e814755ab362e50a85ea69c1", size = 219576 }, + { url = "https://files.pythonhosted.org/packages/0c/c9/44fb661c55062f0818a6ffd2685c67aa30816200d5f2817543717d4b92eb/coverage-7.13.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:941617e518602e2d64942c88ec8499f7fbd49d3f6c4327d3a71d43a1973032f3", size = 219942 }, + { url = "https://files.pythonhosted.org/packages/5f/13/93419671cee82b780bab7ea96b67c8ef448f5f295f36bf5031154ec9a790/coverage-7.13.5-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:da305e9937617ee95c2e39d8ff9f040e0487cbf1ac174f777ed5eddd7a7c1f26", size = 250935 }, + { url = "https://files.pythonhosted.org/packages/ac/68/1666e3a4462f8202d836920114fa7a5ee9275d1fa45366d336c551a162dd/coverage-7.13.5-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:78e696e1cc714e57e8b25760b33a8b1026b7048d270140d25dafe1b0a1ee05a3", size = 253541 }, + { url = "https://files.pythonhosted.org/packages/4e/5e/3ee3b835647be646dcf3c65a7c6c18f87c27326a858f72ab22c12730773d/coverage-7.13.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:02ca0eed225b2ff301c474aeeeae27d26e2537942aa0f87491d3e147e784a82b", size = 254780 }, + { url = "https://files.pythonhosted.org/packages/44/b3/cb5bd1a04cfcc49ede6cd8409d80bee17661167686741e041abc7ee1b9a9/coverage-7.13.5-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:04690832cbea4e4663d9149e05dba142546ca05cb1848816760e7f58285c970a", size = 256912 }, + { url = "https://files.pythonhosted.org/packages/1b/66/c1dceb7b9714473800b075f5c8a84f4588f887a90eb8645282031676e242/coverage-7.13.5-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0590e44dd2745c696a778f7bab6aa95256de2cbc8b8cff4f7db8ff09813d6969", size = 251165 }, + { url = "https://files.pythonhosted.org/packages/b7/62/5502b73b97aa2e53ea22a39cf8649ff44827bef76d90bf638777daa27a9d/coverage-7.13.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d7cfad2d6d81dd298ab6b89fe72c3b7b05ec7544bdda3b707ddaecff8d25c161", size = 252908 }, + { url = "https://files.pythonhosted.org/packages/7d/37/7792c2d69854397ca77a55c4646e5897c467928b0e27f2d235d83b5d08c6/coverage-7.13.5-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:e092b9499de38ae0fbfbc603a74660eb6ff3e869e507b50d85a13b6db9863e15", size = 250873 }, + { url = "https://files.pythonhosted.org/packages/a3/23/bc866fb6163be52a8a9e5d708ba0d3b1283c12158cefca0a8bbb6e247a43/coverage-7.13.5-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:48c39bc4a04d983a54a705a6389512883d4a3b9862991b3617d547940e9f52b1", size = 255030 }, + { url = "https://files.pythonhosted.org/packages/7d/8b/ef67e1c222ef49860701d346b8bbb70881bef283bd5f6cbba68a39a086c7/coverage-7.13.5-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:2d3807015f138ffea1ed9afeeb8624fd781703f2858b62a8dd8da5a0994c57b6", size = 250694 }, + { url = "https://files.pythonhosted.org/packages/46/0d/866d1f74f0acddbb906db212e096dee77a8e2158ca5e6bb44729f9d93298/coverage-7.13.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ee2aa19e03161671ec964004fb74b2257805d9710bf14a5c704558b9d8dbaf17", size = 252469 }, + { url = "https://files.pythonhosted.org/packages/7a/f5/be742fec31118f02ce42b21c6af187ad6a344fed546b56ca60caacc6a9a0/coverage-7.13.5-cp313-cp313-win32.whl", hash = "sha256:ce1998c0483007608c8382f4ff50164bfc5bd07a2246dd272aa4043b75e61e85", size = 222112 }, + { url = "https://files.pythonhosted.org/packages/66/40/7732d648ab9d069a46e686043241f01206348e2bbf128daea85be4d6414b/coverage-7.13.5-cp313-cp313-win_amd64.whl", hash = "sha256:631efb83f01569670a5e866ceb80fe483e7c159fac6f167e6571522636104a0b", size = 222923 }, + { url = "https://files.pythonhosted.org/packages/48/af/fea819c12a095781f6ccd504890aaddaf88b8fab263c4940e82c7b770124/coverage-7.13.5-cp313-cp313-win_arm64.whl", hash = "sha256:f4cd16206ad171cbc2470dbea9103cf9a7607d5fe8c242fdf1edf36174020664", size = 221540 }, + { url = "https://files.pythonhosted.org/packages/23/d2/17879af479df7fbbd44bd528a31692a48f6b25055d16482fdf5cdb633805/coverage-7.13.5-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0428cbef5783ad91fe240f673cc1f76b25e74bbfe1a13115e4aa30d3f538162d", size = 220262 }, + { url = "https://files.pythonhosted.org/packages/5b/4c/d20e554f988c8f91d6a02c5118f9abbbf73a8768a3048cb4962230d5743f/coverage-7.13.5-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e0b216a19534b2427cc201a26c25da4a48633f29a487c61258643e89d28200c0", size = 220617 }, + { url = "https://files.pythonhosted.org/packages/29/9c/f9f5277b95184f764b24e7231e166dfdb5780a46d408a2ac665969416d61/coverage-7.13.5-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:972a9cd27894afe4bc2b1480107054e062df08e671df7c2f18c205e805ccd806", size = 261912 }, + { url = "https://files.pythonhosted.org/packages/d5/f6/7f1ab39393eeb50cfe4747ae8ef0e4fc564b989225aa1152e13a180d74f8/coverage-7.13.5-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:4b59148601efcd2bac8c4dbf1f0ad6391693ccf7a74b8205781751637076aee3", size = 263987 }, + { url = "https://files.pythonhosted.org/packages/a0/d7/62c084fb489ed9c6fbdf57e006752e7c516ea46fd690e5ed8b8617c7d52e/coverage-7.13.5-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:505d7083c8b0c87a8fa8c07370c285847c1f77739b22e299ad75a6af6c32c5c9", size = 266416 }, + { url = "https://files.pythonhosted.org/packages/a9/f6/df63d8660e1a0bff6125947afda112a0502736f470d62ca68b288ea762d8/coverage-7.13.5-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:60365289c3741e4db327e7baff2a4aaacf22f788e80fa4683393891b70a89fbd", size = 267558 }, + { url = "https://files.pythonhosted.org/packages/5b/02/353ca81d36779bd108f6d384425f7139ac3c58c750dcfaafe5d0bee6436b/coverage-7.13.5-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1b88c69c8ef5d4b6fe7dea66d6636056a0f6a7527c440e890cf9259011f5e606", size = 261163 }, + { url = "https://files.pythonhosted.org/packages/2c/16/2e79106d5749bcaf3aee6d309123548e3276517cd7851faa8da213bc61bf/coverage-7.13.5-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5b13955d31d1633cf9376908089b7cebe7d15ddad7aeaabcbe969a595a97e95e", size = 263981 }, + { url = "https://files.pythonhosted.org/packages/29/c7/c29e0c59ffa6942030ae6f50b88ae49988e7e8da06de7ecdbf49c6d4feae/coverage-7.13.5-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:f70c9ab2595c56f81a89620e22899eea8b212a4041bd728ac6f4a28bf5d3ddd0", size = 261604 }, + { url = "https://files.pythonhosted.org/packages/40/48/097cdc3db342f34006a308ab41c3a7c11c3f0d84750d340f45d88a782e00/coverage-7.13.5-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:084b84a8c63e8d6fc7e3931b316a9bcafca1458d753c539db82d31ed20091a87", size = 265321 }, + { url = "https://files.pythonhosted.org/packages/bb/1f/4994af354689e14fd03a75f8ec85a9a68d94e0188bbdab3fc1516b55e512/coverage-7.13.5-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:ad14385487393e386e2ea988b09d62dd42c397662ac2dabc3832d71253eee479", size = 260502 }, + { url = "https://files.pythonhosted.org/packages/22/c6/9bb9ef55903e628033560885f5c31aa227e46878118b63ab15dc7ba87797/coverage-7.13.5-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:7f2c47b36fe7709a6e83bfadf4eefb90bd25fbe4014d715224c4316f808e59a2", size = 262688 }, + { url = "https://files.pythonhosted.org/packages/14/4f/f5df9007e50b15e53e01edea486814783a7f019893733d9e4d6caad75557/coverage-7.13.5-cp313-cp313t-win32.whl", hash = "sha256:67e9bc5449801fad0e5dff329499fb090ba4c5800b86805c80617b4e29809b2a", size = 222788 }, + { url = "https://files.pythonhosted.org/packages/e1/98/aa7fccaa97d0f3192bec013c4e6fd6d294a6ed44b640e6bb61f479e00ed5/coverage-7.13.5-cp313-cp313t-win_amd64.whl", hash = "sha256:da86cdcf10d2519e10cabb8ac2de03da1bcb6e4853790b7fbd48523332e3a819", size = 223851 }, + { url = "https://files.pythonhosted.org/packages/3d/8b/e5c469f7352651e5f013198e9e21f97510b23de957dd06a84071683b4b60/coverage-7.13.5-cp313-cp313t-win_arm64.whl", hash = "sha256:0ecf12ecb326fe2c339d93fc131816f3a7367d223db37817208905c89bded911", size = 222104 }, + { url = "https://files.pythonhosted.org/packages/8e/77/39703f0d1d4b478bfd30191d3c14f53caf596fac00efb3f8f6ee23646439/coverage-7.13.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fbabfaceaeb587e16f7008f7795cd80d20ec548dc7f94fbb0d4ec2e038ce563f", size = 219621 }, + { url = "https://files.pythonhosted.org/packages/e2/3e/51dff36d99ae14639a133d9b164d63e628532e2974d8b1edb99dd1ebc733/coverage-7.13.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:9bb2a28101a443669a423b665939381084412b81c3f8c0fcfbac57f4e30b5b8e", size = 219953 }, + { url = "https://files.pythonhosted.org/packages/6a/6c/1f1917b01eb647c2f2adc9962bd66c79eb978951cab61bdc1acab3290c07/coverage-7.13.5-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:bd3a2fbc1c6cccb3c5106140d87cc6a8715110373ef42b63cf5aea29df8c217a", size = 250992 }, + { url = "https://files.pythonhosted.org/packages/22/e5/06b1f88f42a5a99df42ce61208bdec3bddb3d261412874280a19796fc09c/coverage-7.13.5-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:6c36ddb64ed9d7e496028d1d00dfec3e428e0aabf4006583bb1839958d280510", size = 253503 }, + { url = "https://files.pythonhosted.org/packages/80/28/2a148a51e5907e504fa7b85490277734e6771d8844ebcc48764a15e28155/coverage-7.13.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:380e8e9084d8eb38db3a9176a1a4f3c0082c3806fa0dc882d1d87abc3c789247", size = 254852 }, + { url = "https://files.pythonhosted.org/packages/61/77/50e8d3d85cc0b7ebe09f30f151d670e302c7ff4a1bf6243f71dd8b0981fa/coverage-7.13.5-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e808af52a0513762df4d945ea164a24b37f2f518cbe97e03deaa0ee66139b4d6", size = 257161 }, + { url = "https://files.pythonhosted.org/packages/3b/c4/b5fd1d4b7bf8d0e75d997afd3925c59ba629fc8616f1b3aae7605132e256/coverage-7.13.5-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e301d30dd7e95ae068671d746ba8c34e945a82682e62918e41b2679acd2051a0", size = 251021 }, + { url = "https://files.pythonhosted.org/packages/f8/66/6ea21f910e92d69ef0b1c3346ea5922a51bad4446c9126db2ae96ee24c4c/coverage-7.13.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:800bc829053c80d240a687ceeb927a94fd108bbdc68dfbe505d0d75ab578a882", size = 252858 }, + { url = "https://files.pythonhosted.org/packages/9e/ea/879c83cb5d61aa2a35fb80e72715e92672daef8191b84911a643f533840c/coverage-7.13.5-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:0b67af5492adb31940ee418a5a655c28e48165da5afab8c7fa6fd72a142f8740", size = 250823 }, + { url = "https://files.pythonhosted.org/packages/8a/fb/616d95d3adb88b9803b275580bdeee8bd1b69a886d057652521f83d7322f/coverage-7.13.5-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:c9136ff29c3a91e25b1d1552b5308e53a1e0653a23e53b6366d7c2dcbbaf8a16", size = 255099 }, + { url = "https://files.pythonhosted.org/packages/1c/93/25e6917c90ec1c9a56b0b26f6cad6408e5f13bb6b35d484a0d75c9cf000d/coverage-7.13.5-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:cff784eef7f0b8f6cb28804fbddcfa99f89efe4cc35fb5627e3ac58f91ed3ac0", size = 250638 }, + { url = "https://files.pythonhosted.org/packages/fc/7b/dc1776b0464145a929deed214aef9fb1493f159b59ff3c7eeeedf91eddd0/coverage-7.13.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:68a4953be99b17ac3c23b6efbc8a38330d99680c9458927491d18700ef23ded0", size = 252295 }, + { url = "https://files.pythonhosted.org/packages/ea/fb/99cbbc56a26e07762a2740713f3c8f9f3f3106e3a3dd8cc4474954bccd34/coverage-7.13.5-cp314-cp314-win32.whl", hash = "sha256:35a31f2b1578185fbe6aa2e74cea1b1d0bbf4c552774247d9160d29b80ed56cc", size = 222360 }, + { url = "https://files.pythonhosted.org/packages/8d/b7/4758d4f73fb536347cc5e4ad63662f9d60ba9118cb6785e9616b2ce5d7fa/coverage-7.13.5-cp314-cp314-win_amd64.whl", hash = "sha256:2aa055ae1857258f9e0045be26a6d62bdb47a72448b62d7b55f4820f361a2633", size = 223174 }, + { url = "https://files.pythonhosted.org/packages/2c/f2/24d84e1dfe70f8ac9fdf30d338239860d0d1d5da0bda528959d0ebc9da28/coverage-7.13.5-cp314-cp314-win_arm64.whl", hash = "sha256:1b11eef33edeae9d142f9b4358edb76273b3bfd30bc3df9a4f95d0e49caf94e8", size = 221739 }, + { url = "https://files.pythonhosted.org/packages/60/5b/4a168591057b3668c2428bff25dd3ebc21b629d666d90bcdfa0217940e84/coverage-7.13.5-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:10a0c37f0b646eaff7cce1874c31d1f1ccb297688d4c747291f4f4c70741cc8b", size = 220351 }, + { url = "https://files.pythonhosted.org/packages/f5/21/1fd5c4dbfe4a58b6b99649125635df46decdfd4a784c3cd6d410d303e370/coverage-7.13.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b5db73ba3c41c7008037fa731ad5459fc3944cb7452fc0aa9f822ad3533c583c", size = 220612 }, + { url = "https://files.pythonhosted.org/packages/d6/fe/2a924b3055a5e7e4512655a9d4609781b0d62334fa0140c3e742926834e2/coverage-7.13.5-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:750db93a81e3e5a9831b534be7b1229df848b2e125a604fe6651e48aa070e5f9", size = 261985 }, + { url = "https://files.pythonhosted.org/packages/d7/0d/c8928f2bd518c45990fe1a2ab8db42e914ef9b726c975facc4282578c3eb/coverage-7.13.5-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9ddb4f4a5479f2539644be484da179b653273bca1a323947d48ab107b3ed1f29", size = 264107 }, + { url = "https://files.pythonhosted.org/packages/ef/ae/4ae35bbd9a0af9d820362751f0766582833c211224b38665c0f8de3d487f/coverage-7.13.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8a7a2049c14f413163e2bdabd37e41179b1d1ccb10ffc6ccc4b7a718429c607", size = 266513 }, + { url = "https://files.pythonhosted.org/packages/9c/20/d326174c55af36f74eac6ae781612d9492f060ce8244b570bb9d50d9d609/coverage-7.13.5-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e1c85e0b6c05c592ea6d8768a66a254bfb3874b53774b12d4c89c481eb78cb90", size = 267650 }, + { url = "https://files.pythonhosted.org/packages/7a/5e/31484d62cbd0eabd3412e30d74386ece4a0837d4f6c3040a653878bfc019/coverage-7.13.5-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:777c4d1eff1b67876139d24288aaf1817f6c03d6bae9c5cc8d27b83bcfe38fe3", size = 261089 }, + { url = "https://files.pythonhosted.org/packages/e9/d8/49a72d6de146eebb0b7e48cc0f4bc2c0dd858e3d4790ab2b39a2872b62bd/coverage-7.13.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:6697e29b93707167687543480a40f0db8f356e86d9f67ddf2e37e2dfd91a9dab", size = 263982 }, + { url = "https://files.pythonhosted.org/packages/06/3b/0351f1bd566e6e4dd39e978efe7958bde1d32f879e85589de147654f57bb/coverage-7.13.5-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:8fdf453a942c3e4d99bd80088141c4c6960bb232c409d9c3558e2dbaa3998562", size = 261579 }, + { url = "https://files.pythonhosted.org/packages/5d/ce/796a2a2f4017f554d7810f5c573449b35b1e46788424a548d4d19201b222/coverage-7.13.5-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:32ca0c0114c9834a43f045a87dcebd69d108d8ffb666957ea65aa132f50332e2", size = 265316 }, + { url = "https://files.pythonhosted.org/packages/3d/16/d5ae91455541d1a78bc90abf495be600588aff8f6db5c8b0dae739fa39c9/coverage-7.13.5-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:8769751c10f339021e2638cd354e13adeac54004d1941119b2c96fe5276d45ea", size = 260427 }, + { url = "https://files.pythonhosted.org/packages/48/11/07f413dba62db21fb3fad5d0de013a50e073cc4e2dc4306e770360f6dfc8/coverage-7.13.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cec2d83125531bd153175354055cdb7a09987af08a9430bd173c937c6d0fba2a", size = 262745 }, + { url = "https://files.pythonhosted.org/packages/91/15/d792371332eb4663115becf4bad47e047d16234b1aff687b1b18c58d60ae/coverage-7.13.5-cp314-cp314t-win32.whl", hash = "sha256:0cd9ed7a8b181775459296e402ca4fb27db1279740a24e93b3b41942ebe4b215", size = 223146 }, + { url = "https://files.pythonhosted.org/packages/db/51/37221f59a111dca5e85be7dbf09696323b5b9f13ff65e0641d535ed06ea8/coverage-7.13.5-cp314-cp314t-win_amd64.whl", hash = "sha256:301e3b7dfefecaca37c9f1aa6f0049b7d4ab8dd933742b607765d757aca77d43", size = 224254 }, + { url = "https://files.pythonhosted.org/packages/54/83/6acacc889de8987441aa7d5adfbdbf33d288dad28704a67e574f1df9bcbb/coverage-7.13.5-cp314-cp314t-win_arm64.whl", hash = "sha256:9dacc2ad679b292709e0f5fc1ac74a6d4d5562e424058962c7bb0c658ad25e45", size = 222276 }, + { url = "https://files.pythonhosted.org/packages/9e/ee/a4cf96b8ce1e566ed238f0659ac2d3f007ed1d14b181bcb684e19561a69a/coverage-7.13.5-py3-none-any.whl", hash = "sha256:34b02417cf070e173989b3db962f7ed56d2f644307b2cf9d5a0f258e13084a61", size = 211346 }, +] + +[package.optional-dependencies] +toml = [ + { name = "tomli", marker = "python_full_version >= '3.10' and python_full_version <= '3.11'" }, +] + +[[package]] +name = "debugpy" +version = "1.8.20" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/b7/cd8080344452e4874aae67c40d8940e2b4d47b01601a8fd9f44786c757c7/debugpy-1.8.20.tar.gz", hash = "sha256:55bc8701714969f1ab89a6d5f2f3d40c36f91b2cbe2f65d98bf8196f6a6a2c33", size = 1645207 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/be/8bd693a0b9d53d48c8978fa5d889e06f3b5b03e45fd1ea1e78267b4887cb/debugpy-1.8.20-cp310-cp310-macosx_15_0_x86_64.whl", hash = "sha256:157e96ffb7f80b3ad36d808646198c90acb46fdcfd8bb1999838f0b6f2b59c64", size = 2099192 }, + { url = "https://files.pythonhosted.org/packages/77/1b/85326d07432086a06361d493d2743edd0c4fc2ef62162be7f8618441ac37/debugpy-1.8.20-cp310-cp310-manylinux_2_34_x86_64.whl", hash = "sha256:c1178ae571aff42e61801a38b007af504ec8e05fde1c5c12e5a7efef21009642", size = 3088568 }, + { url = "https://files.pythonhosted.org/packages/e8/60/3e08462ee3eccd10998853eb35947c416e446bfe2bc37dbb886b9044586c/debugpy-1.8.20-cp310-cp310-win32.whl", hash = "sha256:c29dd9d656c0fbd77906a6e6a82ae4881514aa3294b94c903ff99303e789b4a2", size = 5284399 }, + { url = "https://files.pythonhosted.org/packages/72/43/09d49106e770fe558ced5e80df2e3c2ebee10e576eda155dcc5670473663/debugpy-1.8.20-cp310-cp310-win_amd64.whl", hash = "sha256:3ca85463f63b5dd0aa7aaa933d97cbc47c174896dcae8431695872969f981893", size = 5316388 }, + { url = "https://files.pythonhosted.org/packages/51/56/c3baf5cbe4dd77427fd9aef99fcdade259ad128feeb8a786c246adb838e5/debugpy-1.8.20-cp311-cp311-macosx_15_0_universal2.whl", hash = "sha256:eada6042ad88fa1571b74bd5402ee8b86eded7a8f7b827849761700aff171f1b", size = 2208318 }, + { url = "https://files.pythonhosted.org/packages/9a/7d/4fa79a57a8e69fe0d9763e98d1110320f9ecd7f1f362572e3aafd7417c9d/debugpy-1.8.20-cp311-cp311-manylinux_2_34_x86_64.whl", hash = "sha256:7de0b7dfeedc504421032afba845ae2a7bcc32ddfb07dae2c3ca5442f821c344", size = 3171493 }, + { url = "https://files.pythonhosted.org/packages/7d/f2/1e8f8affe51e12a26f3a8a8a4277d6e60aa89d0a66512f63b1e799d424a4/debugpy-1.8.20-cp311-cp311-win32.whl", hash = "sha256:773e839380cf459caf73cc533ea45ec2737a5cc184cf1b3b796cd4fd98504fec", size = 5209240 }, + { url = "https://files.pythonhosted.org/packages/d5/92/1cb532e88560cbee973396254b21bece8c5d7c2ece958a67afa08c9f10dc/debugpy-1.8.20-cp311-cp311-win_amd64.whl", hash = "sha256:1f7650546e0eded1902d0f6af28f787fa1f1dbdbc97ddabaf1cd963a405930cb", size = 5233481 }, + { url = "https://files.pythonhosted.org/packages/14/57/7f34f4736bfb6e00f2e4c96351b07805d83c9a7b33d28580ae01374430f7/debugpy-1.8.20-cp312-cp312-macosx_15_0_universal2.whl", hash = "sha256:4ae3135e2089905a916909ef31922b2d733d756f66d87345b3e5e52b7a55f13d", size = 2550686 }, + { url = "https://files.pythonhosted.org/packages/ab/78/b193a3975ca34458f6f0e24aaf5c3e3da72f5401f6054c0dfd004b41726f/debugpy-1.8.20-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:88f47850a4284b88bd2bfee1f26132147d5d504e4e86c22485dfa44b97e19b4b", size = 4310588 }, + { url = "https://files.pythonhosted.org/packages/c1/55/f14deb95eaf4f30f07ef4b90a8590fc05d9e04df85ee379712f6fb6736d7/debugpy-1.8.20-cp312-cp312-win32.whl", hash = "sha256:4057ac68f892064e5f98209ab582abfee3b543fb55d2e87610ddc133a954d390", size = 5331372 }, + { url = "https://files.pythonhosted.org/packages/a1/39/2bef246368bd42f9bd7cba99844542b74b84dacbdbea0833e610f384fee8/debugpy-1.8.20-cp312-cp312-win_amd64.whl", hash = "sha256:a1a8f851e7cf171330679ef6997e9c579ef6dd33c9098458bd9986a0f4ca52e3", size = 5372835 }, + { url = "https://files.pythonhosted.org/packages/15/e2/fc500524cc6f104a9d049abc85a0a8b3f0d14c0a39b9c140511c61e5b40b/debugpy-1.8.20-cp313-cp313-macosx_15_0_universal2.whl", hash = "sha256:5dff4bb27027821fdfcc9e8f87309a28988231165147c31730128b1c983e282a", size = 2539560 }, + { url = "https://files.pythonhosted.org/packages/90/83/fb33dcea789ed6018f8da20c5a9bc9d82adc65c0c990faed43f7c955da46/debugpy-1.8.20-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:84562982dd7cf5ebebfdea667ca20a064e096099997b175fe204e86817f64eaf", size = 4293272 }, + { url = "https://files.pythonhosted.org/packages/a6/25/b1e4a01bfb824d79a6af24b99ef291e24189080c93576dfd9b1a2815cd0f/debugpy-1.8.20-cp313-cp313-win32.whl", hash = "sha256:da11dea6447b2cadbf8ce2bec59ecea87cc18d2c574980f643f2d2dfe4862393", size = 5331208 }, + { url = "https://files.pythonhosted.org/packages/13/f7/a0b368ce54ffff9e9028c098bd2d28cfc5b54f9f6c186929083d4c60ba58/debugpy-1.8.20-cp313-cp313-win_amd64.whl", hash = "sha256:eb506e45943cab2efb7c6eafdd65b842f3ae779f020c82221f55aca9de135ed7", size = 5372930 }, + { url = "https://files.pythonhosted.org/packages/33/2e/f6cb9a8a13f5058f0a20fe09711a7b726232cd5a78c6a7c05b2ec726cff9/debugpy-1.8.20-cp314-cp314-macosx_15_0_universal2.whl", hash = "sha256:9c74df62fc064cd5e5eaca1353a3ef5a5d50da5eb8058fcef63106f7bebe6173", size = 2538066 }, + { url = "https://files.pythonhosted.org/packages/c5/56/6ddca50b53624e1ca3ce1d1e49ff22db46c47ea5fb4c0cc5c9b90a616364/debugpy-1.8.20-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:077a7447589ee9bc1ff0cdf443566d0ecf540ac8aa7333b775ebcb8ce9f4ecad", size = 4269425 }, + { url = "https://files.pythonhosted.org/packages/c5/d9/d64199c14a0d4c476df46c82470a3ce45c8d183a6796cfb5e66533b3663c/debugpy-1.8.20-cp314-cp314-win32.whl", hash = "sha256:352036a99dd35053b37b7803f748efc456076f929c6a895556932eaf2d23b07f", size = 5331407 }, + { url = "https://files.pythonhosted.org/packages/e0/d9/1f07395b54413432624d61524dfd98c1a7c7827d2abfdb8829ac92638205/debugpy-1.8.20-cp314-cp314-win_amd64.whl", hash = "sha256:a98eec61135465b062846112e5ecf2eebb855305acc1dfbae43b72903b8ab5be", size = 5372521 }, + { url = "https://files.pythonhosted.org/packages/2b/6b/668f21567e3250463beb6a401e7d598baa2a0907224000d7f68b9442c243/debugpy-1.8.20-cp39-cp39-macosx_15_0_x86_64.whl", hash = "sha256:bff8990f040dacb4c314864da95f7168c5a58a30a66e0eea0fb85e2586a92cd6", size = 2100484 }, + { url = "https://files.pythonhosted.org/packages/cf/49/223143d1da586b891f35a45515f152742ad85bfc10d2e02e697f65c83b32/debugpy-1.8.20-cp39-cp39-manylinux_2_34_x86_64.whl", hash = "sha256:70ad9ae09b98ac307b82c16c151d27ee9d68ae007a2e7843ba621b5ce65333b5", size = 3081272 }, + { url = "https://files.pythonhosted.org/packages/b1/24/9f219c9290fe8bee4f63f9af8ebac440c802e6181d7f39a79abcb5fdff2f/debugpy-1.8.20-cp39-cp39-win32.whl", hash = "sha256:9eeed9f953f9a23850c85d440bf51e3c56ed5d25f8560eeb29add815bd32f7ee", size = 5285196 }, + { url = "https://files.pythonhosted.org/packages/ba/f3/4a12d7b1b09e3b79ba6e3edfa0c677b8b8bdf110bc4b3607e0f29fb4e8b3/debugpy-1.8.20-cp39-cp39-win_amd64.whl", hash = "sha256:760813b4fff517c75bfe7923033c107104e76acfef7bda011ffea8736e9a66f8", size = 5317163 }, + { url = "https://files.pythonhosted.org/packages/e0/c3/7f67dea8ccf8fdcb9c99033bbe3e90b9e7395415843accb81428c441be2d/debugpy-1.8.20-py2.py3-none-any.whl", hash = "sha256:5be9bed9ae3be00665a06acaa48f8329d2b9632f15fd09f6a9a8c8d9907e54d7", size = 5337658 }, +] + +[[package]] +name = "decorator" +version = "5.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190 }, +] + +[[package]] +name = "defusedxml" +version = "0.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", size = 75520 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604 }, +] + +[[package]] +name = "distlib" +version = "0.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/96/8e/709914eb2b5749865801041647dc7f4e6d00b549cfe88b65ca192995f07c/distlib-0.4.0.tar.gz", hash = "sha256:feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d", size = 614605 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl", hash = "sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16", size = 469047 }, +] + +[[package]] +name = "docutils" +version = "0.21.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.10.*'", + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/ae/ed/aefcc8cd0ba62a0560c3c18c33925362d46c6075480bfa4df87b28e169a9/docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f", size = 2204444 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2", size = 587408 }, +] + +[[package]] +name = "docutils" +version = "0.22.4" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/ae/b6/03bb70946330e88ffec97aefd3ea75ba575cb2e762061e0e62a213befee8/docutils-0.22.4.tar.gz", hash = "sha256:4db53b1fde9abecbb74d91230d32ab626d94f6badfc575d6db9194a49df29968", size = 2291750 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl", hash = "sha256:d0013f540772d1420576855455d050a2180186c91c15779301ac2ccb3eeb68de", size = 633196 }, +] + +[[package]] +name = "exceptiongroup" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740 }, +] + +[[package]] +name = "executing" +version = "2.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cc/28/c14e053b6762b1044f34a13aab6859bbf40456d37d23aa286ac24cfd9a5d/executing-2.2.1.tar.gz", hash = "sha256:3632cc370565f6648cc328b32435bd120a1e4ebb20c77e3fdde9a13cd1e533c4", size = 1129488 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl", hash = "sha256:760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017", size = 28317 }, +] + +[[package]] +name = "fastjsonschema" +version = "2.21.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/b5/23b216d9d985a956623b6bd12d4086b60f0059b27799f23016af04a74ea1/fastjsonschema-2.21.2.tar.gz", hash = "sha256:b1eb43748041c880796cd077f1a07c3d94e93ae84bba5ed36800a33554ae05de", size = 374130 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl", hash = "sha256:1c797122d0a86c5cace2e54bf4e819c36223b552017172f32c5c024a6b77e463", size = 24024 }, +] + +[[package]] +name = "filelock" +version = "3.19.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/40/bb/0ab3e58d22305b6f5440629d20683af28959bf793d98d11950e305c1c326/filelock-3.19.1.tar.gz", hash = "sha256:66eda1888b0171c998b35be2bcc0f6d75c388a7ce20c3f3f37aa8e96c2dddf58", size = 17687 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/14/42b2651a2f46b022ccd948bca9f2d5af0fd8929c4eec235b8d6d844fbe67/filelock-3.19.1-py3-none-any.whl", hash = "sha256:d38e30481def20772f5baf097c122c3babc4fcdb7e14e57049eb9d88c6dc017d", size = 15988 }, +] + +[[package]] +name = "filelock" +version = "3.25.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/94/b8/00651a0f559862f3bb7d6f7477b192afe3f583cc5e26403b44e59a55ab34/filelock-3.25.2.tar.gz", hash = "sha256:b64ece2b38f4ca29dd3e810287aa8c48182bbecd1ae6e9ae126c9b35f1382694", size = 40480 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl", hash = "sha256:ca8afb0da15f229774c9ad1b455ed96e85a81373065fb10446672f64444ddf70", size = 26759 }, +] + +[[package]] +name = "fqdn" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/30/3e/a80a8c077fd798951169626cde3e239adeba7dab75deb3555716415bd9b0/fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f", size = 6015 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014", size = 9121 }, +] + +[[package]] +name = "h11" +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515 }, +] + +[[package]] +name = "httpcore" +version = "1.0.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784 }, +] + +[[package]] +name = "httpx" +version = "0.28.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio", version = "4.12.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "anyio", version = "4.13.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "certifi" }, + { name = "httpcore" }, + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517 }, +] + +[[package]] +name = "identify" +version = "2.6.15" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/ff/e7/685de97986c916a6d93b3876139e00eef26ad5bbbd61925d670ae8013449/identify-2.6.15.tar.gz", hash = "sha256:e4f4864b96c6557ef2a1e1c951771838f4edc9df3a72ec7118b338801b11c7bf", size = 99311 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/1c/e5fd8f973d4f375adb21565739498e2e9a1e54c858a97b9a8ccfdc81da9b/identify-2.6.15-py2.py3-none-any.whl", hash = "sha256:1181ef7608e00704db228516541eb83a88a9f94433a8c80bb9b5bd54b1d81757", size = 99183 }, +] + +[[package]] +name = "identify" +version = "2.6.18" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/46/c4/7fb4db12296cdb11893d61c92048fe617ee853f8523b9b296ac03b43757e/identify-2.6.18.tar.gz", hash = "sha256:873ac56a5e3fd63e7438a7ecbc4d91aca692eb3fefa4534db2b7913f3fc352fd", size = 99580 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/33/92ef41c6fad0233e41d3d84ba8e8ad18d1780f1e5d99b3c683e6d7f98b63/identify-2.6.18-py2.py3-none-any.whl", hash = "sha256:8db9d3c8ea9079db92cafb0ebf97abdc09d52e97f4dcf773a2e694048b7cd737", size = 99394 }, +] + +[[package]] +name = "idna" +version = "3.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008 }, +] + +[[package]] +name = "imagesize" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/cf/59/4b0dd64676aa6fb4986a755790cb6fc558559cf0084effad516820208ec3/imagesize-1.5.0.tar.gz", hash = "sha256:8bfc5363a7f2133a89f0098451e0bcb1cd71aba4dc02bbcecb39d99d40e1b94f", size = 1281127 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/b1/a0662b03103c66cf77101a187f396ea91167cd9b7d5d3a2e465ad2c7ee9b/imagesize-1.5.0-py2.py3-none-any.whl", hash = "sha256:32677681b3f434c2cb496f00e89c5a291247b35b1f527589909e008057da5899", size = 5763 }, +] + +[[package]] +name = "imagesize" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/6c/e6/7bf14eeb8f8b7251141944835abd42eb20a658d89084b7e1f3e5fe394090/imagesize-2.0.0.tar.gz", hash = "sha256:8e8358c4a05c304f1fccf7ff96f036e7243a189e9e42e90851993c558cfe9ee3", size = 1773045 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl", hash = "sha256:5667c5bbb57ab3f1fa4bc366f4fbc971db3d5ed011fd2715fd8001f782718d96", size = 9441 }, +] + +[[package]] +name = "importlib-metadata" +version = "8.7.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "zipp", marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f3/49/3b30cad09e7771a4982d9975a8cbf64f00d4a1ececb53297f1d9a7be1b10/importlib_metadata-8.7.1.tar.gz", hash = "sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb", size = 57107 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fa/5e/f8e9a1d23b9c20a551a8a02ea3637b4642e22c2626e3a13a9a29cdea99eb/importlib_metadata-8.7.1-py3-none-any.whl", hash = "sha256:5a1f80bf1daa489495071efbb095d75a634cf28a8bc299581244063b53176151", size = 27865 }, +] + +[[package]] +name = "iniconfig" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050 }, +] + +[[package]] +name = "iniconfig" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484 }, +] + +[[package]] +name = "ipykernel" +version = "6.31.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "appnope", marker = "python_full_version < '3.10' and sys_platform == 'darwin'" }, + { name = "comm", marker = "python_full_version < '3.10'" }, + { name = "debugpy", marker = "python_full_version < '3.10'" }, + { name = "ipython", version = "8.18.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "jupyter-client", version = "8.6.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "jupyter-core", version = "5.8.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "matplotlib-inline", marker = "python_full_version < '3.10'" }, + { name = "nest-asyncio", marker = "python_full_version < '3.10'" }, + { name = "packaging", marker = "python_full_version < '3.10'" }, + { name = "psutil", marker = "python_full_version < '3.10'" }, + { name = "pyzmq", marker = "python_full_version < '3.10'" }, + { name = "tornado", marker = "python_full_version < '3.10'" }, + { name = "traitlets", marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a5/1d/d5ba6edbfe6fae4c3105bca3a9c889563cc752c7f2de45e333164c7f4846/ipykernel-6.31.0.tar.gz", hash = "sha256:2372ce8bc1ff4f34e58cafed3a0feb2194b91fc7cad0fc72e79e47b45ee9e8f6", size = 167493 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f6/d8/502954a4ec0efcf264f99b65b41c3c54e65a647d9f0d6f62cd02227d242c/ipykernel-6.31.0-py3-none-any.whl", hash = "sha256:abe5386f6ced727a70e0eb0cf1da801fa7c5fa6ff82147747d5a0406cd8c94af", size = 117003 }, +] + +[[package]] +name = "ipykernel" +version = "7.2.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "appnope", marker = "python_full_version >= '3.10' and sys_platform == 'darwin'" }, + { name = "comm", marker = "python_full_version >= '3.10'" }, + { name = "debugpy", marker = "python_full_version >= '3.10'" }, + { name = "ipython", version = "8.39.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "ipython", version = "9.10.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, + { name = "ipython", version = "9.12.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "jupyter-client", version = "8.8.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "jupyter-core", version = "5.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "matplotlib-inline", marker = "python_full_version >= '3.10'" }, + { name = "nest-asyncio", marker = "python_full_version >= '3.10'" }, + { name = "packaging", marker = "python_full_version >= '3.10'" }, + { name = "psutil", marker = "python_full_version >= '3.10'" }, + { name = "pyzmq", marker = "python_full_version >= '3.10'" }, + { name = "tornado", marker = "python_full_version >= '3.10'" }, + { name = "traitlets", marker = "python_full_version >= '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ca/8d/b68b728e2d06b9e0051019640a40a9eb7a88fcd82c2e1b5ce70bef5ff044/ipykernel-7.2.0.tar.gz", hash = "sha256:18ed160b6dee2cbb16e5f3575858bc19d8f1fe6046a9a680c708494ce31d909e", size = 176046 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/82/b9/e73d5d9f405cba7706c539aa8b311b49d4c2f3d698d9c12f815231169c71/ipykernel-7.2.0-py3-none-any.whl", hash = "sha256:3bbd4420d2b3cc105cbdf3756bfc04500b1e52f090a90716851f3916c62e1661", size = 118788 }, +] + +[[package]] +name = "ipython" +version = "8.18.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "colorama", marker = "python_full_version < '3.10' and sys_platform == 'win32'" }, + { name = "decorator", marker = "python_full_version < '3.10'" }, + { name = "exceptiongroup", marker = "python_full_version < '3.10'" }, + { name = "jedi", marker = "python_full_version < '3.10'" }, + { name = "matplotlib-inline", marker = "python_full_version < '3.10'" }, + { name = "pexpect", marker = "python_full_version < '3.10' and sys_platform != 'win32'" }, + { name = "prompt-toolkit", marker = "python_full_version < '3.10'" }, + { name = "pygments", marker = "python_full_version < '3.10'" }, + { name = "stack-data", marker = "python_full_version < '3.10'" }, + { name = "traitlets", marker = "python_full_version < '3.10'" }, + { name = "typing-extensions", marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/b9/3ba6c45a6df813c09a48bac313c22ff83efa26cbb55011218d925a46e2ad/ipython-8.18.1.tar.gz", hash = "sha256:ca6f079bb33457c66e233e4580ebfc4128855b4cf6370dddd73842a9563e8a27", size = 5486330 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/47/6b/d9fdcdef2eb6a23f391251fde8781c38d42acd82abe84d054cb74f7863b0/ipython-8.18.1-py3-none-any.whl", hash = "sha256:e8267419d72d81955ec1177f8a29aaa90ac80ad647499201119e2f05e99aa397", size = 808161 }, +] + +[[package]] +name = "ipython" +version = "8.39.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "colorama", marker = "python_full_version == '3.10.*' and sys_platform == 'win32'" }, + { name = "decorator", marker = "python_full_version == '3.10.*'" }, + { name = "exceptiongroup", marker = "python_full_version == '3.10.*'" }, + { name = "jedi", marker = "python_full_version == '3.10.*'" }, + { name = "matplotlib-inline", marker = "python_full_version == '3.10.*'" }, + { name = "pexpect", marker = "python_full_version == '3.10.*' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit", marker = "python_full_version == '3.10.*'" }, + { name = "pygments", marker = "python_full_version == '3.10.*'" }, + { name = "stack-data", marker = "python_full_version == '3.10.*'" }, + { name = "traitlets", marker = "python_full_version == '3.10.*'" }, + { name = "typing-extensions", marker = "python_full_version == '3.10.*'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/40/18/f8598d287006885e7136451fdea0755af4ebcbfe342836f24deefaed1164/ipython-8.39.0.tar.gz", hash = "sha256:4110ae96012c379b8b6db898a07e186c40a2a1ef5d57a7fa83166047d9da7624", size = 5513971 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/56/4cc7fc9e9e3f38fd324f24f8afe0ad8bb5fa41283f37f1aaf9de0612c968/ipython-8.39.0-py3-none-any.whl", hash = "sha256:bb3c51c4fa8148ab1dea07a79584d1c854e234ea44aa1283bcb37bc75054651f", size = 831849 }, +] + +[[package]] +name = "ipython" +version = "9.10.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.11.*'", +] +dependencies = [ + { name = "colorama", marker = "python_full_version == '3.11.*' and sys_platform == 'win32'" }, + { name = "decorator", marker = "python_full_version == '3.11.*'" }, + { name = "ipython-pygments-lexers", marker = "python_full_version == '3.11.*'" }, + { name = "jedi", marker = "python_full_version == '3.11.*'" }, + { name = "matplotlib-inline", marker = "python_full_version == '3.11.*'" }, + { name = "pexpect", marker = "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit", marker = "python_full_version == '3.11.*'" }, + { name = "pygments", marker = "python_full_version == '3.11.*'" }, + { name = "stack-data", marker = "python_full_version == '3.11.*'" }, + { name = "traitlets", marker = "python_full_version == '3.11.*'" }, + { name = "typing-extensions", marker = "python_full_version == '3.11.*'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c5/25/daae0e764047b0a2480c7bbb25d48f4f509b5818636562eeac145d06dfee/ipython-9.10.1.tar.gz", hash = "sha256:e170e9b2a44312484415bdb750492699bf329233b03f2557a9692cce6466ada4", size = 4426663 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/01/09/ba70f8d662d5671687da55ad2cc0064cf795b15e1eea70907532202e7c97/ipython-9.10.1-py3-none-any.whl", hash = "sha256:82d18ae9fb9164ded080c71ef92a182ee35ee7db2395f67616034bebb020a232", size = 622827 }, +] + +[[package]] +name = "ipython" +version = "9.12.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", +] +dependencies = [ + { name = "colorama", marker = "python_full_version >= '3.12' and sys_platform == 'win32'" }, + { name = "decorator", marker = "python_full_version >= '3.12'" }, + { name = "ipython-pygments-lexers", marker = "python_full_version >= '3.12'" }, + { name = "jedi", marker = "python_full_version >= '3.12'" }, + { name = "matplotlib-inline", marker = "python_full_version >= '3.12'" }, + { name = "pexpect", marker = "python_full_version >= '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit", marker = "python_full_version >= '3.12'" }, + { name = "pygments", marker = "python_full_version >= '3.12'" }, + { name = "stack-data", marker = "python_full_version >= '3.12'" }, + { name = "traitlets", marker = "python_full_version >= '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3a/73/7114f80a8f9cabdb13c27732dce24af945b2923dcab80723602f7c8bc2d8/ipython-9.12.0.tar.gz", hash = "sha256:01daa83f504b693ba523b5a407246cabde4eb4513285a3c6acaff11a66735ee4", size = 4428879 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/59/22/906c8108974c673ebef6356c506cebb6870d48cedea3c41e949e2dd556bb/ipython-9.12.0-py3-none-any.whl", hash = "sha256:0f2701e8ee86e117e37f50563205d36feaa259d2e08d4a6bc6b6d74b18ce128d", size = 625661 }, +] + +[[package]] +name = "ipython-pygments-lexers" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pygments", marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074 }, +] + +[[package]] +name = "isoduration" +version = "20.11.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "arrow" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7c/1a/3c8edc664e06e6bd06cce40c6b22da5f1429aa4224d0c590f3be21c91ead/isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9", size = 11649 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042", size = 11321 }, +] + +[[package]] +name = "jedi" +version = "0.19.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "parso" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278 }, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899 }, +] + +[[package]] +name = "json5" +version = "0.14.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9c/4b/6f8906aaf67d501e259b0adab4d312945bb7211e8b8d4dcc77c92320edaa/json5-0.14.0.tar.gz", hash = "sha256:b3f492fad9f6cdbced8b7d40b28b9b1c9701c5f561bef0d33b81c2ff433fefcb", size = 52656 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b8/42/cf027b4ac873b076189d935b135397675dac80cb29acb13e1ab86ad6c631/json5-0.14.0-py3-none-any.whl", hash = "sha256:56cf861bab076b1178eb8c92e1311d273a9b9acea2ccc82c276abf839ebaef3a", size = 36271 }, +] + +[[package]] +name = "jsonpointer" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/6a/0a/eebeb1fa92507ea94016a2a790b93c2ae41a7e18778f85471dc54475ed25/jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef", size = 9114 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942", size = 7595 }, +] + +[[package]] +name = "jsonpointer" +version = "3.1.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/18/c7/af399a2e7a67fd18d63c40c5e62d3af4e67b836a2107468b6a5ea24c4304/jsonpointer-3.1.1.tar.gz", hash = "sha256:0b801c7db33a904024f6004d526dcc53bbb8a4a0f4e32bfd10beadf60adf1900", size = 9068 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/6a/a83720e953b1682d2d109d3c2dbb0bc9bf28cc1cbc205be4ef4be5da709d/jsonpointer-3.1.1-py3-none-any.whl", hash = "sha256:8ff8b95779d071ba472cf5bc913028df06031797532f08a7d5b602d8b2a488ca", size = 7659 }, +] + +[[package]] +name = "jsonschema" +version = "4.25.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "attrs", marker = "python_full_version < '3.10'" }, + { name = "jsonschema-specifications", marker = "python_full_version < '3.10'" }, + { name = "referencing", version = "0.36.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "rpds-py", version = "0.27.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/74/69/f7185de793a29082a9f3c7728268ffb31cb5095131a9c139a74078e27336/jsonschema-4.25.1.tar.gz", hash = "sha256:e4a9655ce0da0c0b67a085847e00a3a51449e1157f4f75e9fb5aa545e122eb85", size = 357342 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl", hash = "sha256:3fba0169e345c7175110351d456342c364814cfcf3b964ba4587f22915230a63", size = 90040 }, +] + +[package.optional-dependencies] +format-nongpl = [ + { name = "fqdn", marker = "python_full_version < '3.10'" }, + { name = "idna", marker = "python_full_version < '3.10'" }, + { name = "isoduration", marker = "python_full_version < '3.10'" }, + { name = "jsonpointer", version = "3.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "rfc3339-validator", marker = "python_full_version < '3.10'" }, + { name = "rfc3986-validator", marker = "python_full_version < '3.10'" }, + { name = "rfc3987-syntax", marker = "python_full_version < '3.10'" }, + { name = "uri-template", marker = "python_full_version < '3.10'" }, + { name = "webcolors", version = "24.11.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, +] + +[[package]] +name = "jsonschema" +version = "4.26.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "attrs", marker = "python_full_version >= '3.10'" }, + { name = "jsonschema-specifications", marker = "python_full_version >= '3.10'" }, + { name = "referencing", version = "0.37.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "rpds-py", version = "0.30.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b3/fc/e067678238fa451312d4c62bf6e6cf5ec56375422aee02f9cb5f909b3047/jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326", size = 366583 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl", hash = "sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce", size = 90630 }, +] + +[package.optional-dependencies] +format-nongpl = [ + { name = "fqdn", marker = "python_full_version >= '3.10'" }, + { name = "idna", marker = "python_full_version >= '3.10'" }, + { name = "isoduration", marker = "python_full_version >= '3.10'" }, + { name = "jsonpointer", version = "3.1.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "rfc3339-validator", marker = "python_full_version >= '3.10'" }, + { name = "rfc3986-validator", marker = "python_full_version >= '3.10'" }, + { name = "rfc3987-syntax", marker = "python_full_version >= '3.10'" }, + { name = "uri-template", marker = "python_full_version >= '3.10'" }, + { name = "webcolors", version = "25.10.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, +] + +[[package]] +name = "jsonschema-specifications" +version = "2025.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "referencing", version = "0.36.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "referencing", version = "0.37.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437 }, +] + +[[package]] +name = "jupyter-client" +version = "8.6.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, + { name = "jupyter-core", version = "5.8.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "python-dateutil", marker = "python_full_version < '3.10'" }, + { name = "pyzmq", marker = "python_full_version < '3.10'" }, + { name = "tornado", marker = "python_full_version < '3.10'" }, + { name = "traitlets", marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/71/22/bf9f12fdaeae18019a468b68952a60fe6dbab5d67cd2a103cac7659b41ca/jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419", size = 342019 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f", size = 106105 }, +] + +[[package]] +name = "jupyter-client" +version = "8.8.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "jupyter-core", version = "5.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "python-dateutil", marker = "python_full_version >= '3.10'" }, + { name = "pyzmq", marker = "python_full_version >= '3.10'" }, + { name = "tornado", marker = "python_full_version >= '3.10'" }, + { name = "traitlets", marker = "python_full_version >= '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/05/e4/ba649102a3bc3fbca54e7239fb924fd434c766f855693d86de0b1f2bec81/jupyter_client-8.8.0.tar.gz", hash = "sha256:d556811419a4f2d96c869af34e854e3f059b7cc2d6d01a9cd9c85c267691be3e", size = 348020 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2d/0b/ceb7694d864abc0a047649aec263878acb9f792e1fec3e676f22dc9015e3/jupyter_client-8.8.0-py3-none-any.whl", hash = "sha256:f93a5b99c5e23a507b773d3a1136bd6e16c67883ccdbd9a829b0bbdb98cd7d7a", size = 107371 }, +] + +[[package]] +name = "jupyter-core" +version = "5.8.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "platformdirs", version = "4.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "pywin32", marker = "python_full_version < '3.10' and platform_python_implementation != 'PyPy' and sys_platform == 'win32'" }, + { name = "traitlets", marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/99/1b/72906d554acfeb588332eaaa6f61577705e9ec752ddb486f302dafa292d9/jupyter_core-5.8.1.tar.gz", hash = "sha256:0a5f9706f70e64786b75acba995988915ebd4601c8a52e534a40b51c95f59941", size = 88923 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2f/57/6bffd4b20b88da3800c5d691e0337761576ee688eb01299eae865689d2df/jupyter_core-5.8.1-py3-none-any.whl", hash = "sha256:c28d268fc90fb53f1338ded2eb410704c5449a358406e8a948b75706e24863d0", size = 28880 }, +] + +[[package]] +name = "jupyter-core" +version = "5.9.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "platformdirs", version = "4.9.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "traitlets", marker = "python_full_version >= '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/02/49/9d1284d0dc65e2c757b74c6687b6d319b02f822ad039e5c512df9194d9dd/jupyter_core-5.9.1.tar.gz", hash = "sha256:4d09aaff303b9566c3ce657f580bd089ff5c91f5f89cf7d8846c3cdf465b5508", size = 89814 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl", hash = "sha256:ebf87fdc6073d142e114c72c9e29a9d7ca03fad818c5d300ce2adc1fb0743407", size = 29032 }, +] + +[[package]] +name = "jupyter-events" +version = "0.12.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jsonschema", version = "4.25.1", source = { registry = "https://pypi.org/simple" }, extra = ["format-nongpl"], marker = "python_full_version < '3.10'" }, + { name = "jsonschema", version = "4.26.0", source = { registry = "https://pypi.org/simple" }, extra = ["format-nongpl"], marker = "python_full_version >= '3.10'" }, + { name = "packaging" }, + { name = "python-json-logger", version = "4.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "python-json-logger", version = "4.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "pyyaml" }, + { name = "referencing", version = "0.36.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "referencing", version = "0.37.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "rfc3339-validator" }, + { name = "rfc3986-validator" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9d/c3/306d090461e4cf3cd91eceaff84bede12a8e52cd821c2d20c9a4fd728385/jupyter_events-0.12.0.tar.gz", hash = "sha256:fc3fce98865f6784c9cd0a56a20644fc6098f21c8c33834a8d9fe383c17e554b", size = 62196 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl", hash = "sha256:6464b2fa5ad10451c3d35fabc75eab39556ae1e2853ad0c0cc31b656731a97fb", size = 19430 }, +] + +[[package]] +name = "jupyter-lsp" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, + { name = "jupyter-server" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/5a/9066c9f8e94ee517133cd98dba393459a16cd48bba71a82f16a65415206c/jupyter_lsp-2.3.0.tar.gz", hash = "sha256:458aa59339dc868fb784d73364f17dbce8836e906cd75fd471a325cba02e0245", size = 54823 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-py3-none-any.whl", hash = "sha256:e914a3cb2addf48b1c7710914771aaf1819d46b2e5a79b0f917b5478ec93f34f", size = 76687 }, +] + +[[package]] +name = "jupyter-server" +version = "2.17.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio", version = "4.12.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "anyio", version = "4.13.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "argon2-cffi" }, + { name = "jinja2" }, + { name = "jupyter-client", version = "8.6.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "jupyter-client", version = "8.8.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "jupyter-core", version = "5.8.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "jupyter-core", version = "5.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "jupyter-events" }, + { name = "jupyter-server-terminals" }, + { name = "nbconvert" }, + { name = "nbformat" }, + { name = "overrides", marker = "python_full_version < '3.12'" }, + { name = "packaging" }, + { name = "prometheus-client" }, + { name = "pywinpty", marker = "os_name == 'nt'" }, + { name = "pyzmq" }, + { name = "send2trash" }, + { name = "terminado" }, + { name = "tornado" }, + { name = "traitlets" }, + { name = "websocket-client" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5b/ac/e040ec363d7b6b1f11304cc9f209dac4517ece5d5e01821366b924a64a50/jupyter_server-2.17.0.tar.gz", hash = "sha256:c38ea898566964c888b4772ae1ed58eca84592e88251d2cfc4d171f81f7e99d5", size = 731949 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl", hash = "sha256:e8cb9c7db4251f51ed307e329b81b72ccf2056ff82d50524debde1ee1870e13f", size = 388221 }, +] + +[[package]] +name = "jupyter-server-terminals" +version = "0.5.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pywinpty", marker = "os_name == 'nt'" }, + { name = "terminado" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f4/a7/bcd0a9b0cbba88986fe944aaaf91bfda603e5a50bda8ed15123f381a3b2f/jupyter_server_terminals-0.5.4.tar.gz", hash = "sha256:bbda128ed41d0be9020349f9f1f2a4ab9952a73ed5f5ac9f1419794761fb87f5", size = 31770 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl", hash = "sha256:55be353fc74a80bc7f3b20e6be50a55a61cd525626f578dcb66a5708e2007d14", size = 13704 }, +] + +[[package]] +name = "jupyterlab" +version = "4.5.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "async-lru", version = "2.0.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "async-lru", version = "2.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "httpx" }, + { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, + { name = "ipykernel", version = "6.31.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "ipykernel", version = "7.2.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "jinja2" }, + { name = "jupyter-core", version = "5.8.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "jupyter-core", version = "5.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "jupyter-lsp" }, + { name = "jupyter-server" }, + { name = "jupyterlab-server" }, + { name = "notebook-shim" }, + { name = "packaging" }, + { name = "setuptools" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "tornado" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ac/d5/730628e03fff2e8a8e8ccdaedde1489ab1309f9a4fa2536248884e30b7c7/jupyterlab-4.5.6.tar.gz", hash = "sha256:642fe2cfe7f0f5922a8a558ba7a0d246c7bc133b708dfe43f7b3a826d163cf42", size = 23970670 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/1b/dad6fdcc658ed7af26fdf3841e7394072c9549a8b896c381ab49dd11e2d9/jupyterlab-4.5.6-py3-none-any.whl", hash = "sha256:d6b3dac883aa4d9993348e0f8e95b24624f75099aed64eab6a4351a9cdd1e580", size = 12447124 }, +] + +[[package]] +name = "jupyterlab-pygments" +version = "0.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/90/51/9187be60d989df97f5f0aba133fa54e7300f17616e065d1ada7d7646b6d6/jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d", size = 512900 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780", size = 15884 }, +] + +[[package]] +name = "jupyterlab-server" +version = "2.28.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "babel" }, + { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, + { name = "jinja2" }, + { name = "json5" }, + { name = "jsonschema", version = "4.25.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "jsonschema", version = "4.26.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "jupyter-server" }, + { name = "packaging" }, + { name = "requests", version = "2.32.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "requests", version = "2.33.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d6/2c/90153f189e421e93c4bb4f9e3f59802a1f01abd2ac5cf40b152d7f735232/jupyterlab_server-2.28.0.tar.gz", hash = "sha256:35baa81898b15f93573e2deca50d11ac0ae407ebb688299d3a5213265033712c", size = 76996 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/07/a000fe835f76b7e1143242ab1122e6362ef1c03f23f83a045c38859c2ae0/jupyterlab_server-2.28.0-py3-none-any.whl", hash = "sha256:e4355b148fdcf34d312bbbc80f22467d6d20460e8b8736bf235577dd18506968", size = 59830 }, +] + +[[package]] +name = "lark" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/da/34/28fff3ab31ccff1fd4f6c7c7b0ceb2b6968d8ea4950663eadcb5720591a0/lark-1.3.1.tar.gz", hash = "sha256:b426a7a6d6d53189d318f2b6236ab5d6429eaf09259f1ca33eb716eed10d2905", size = 382732 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/82/3d/14ce75ef66813643812f3093ab17e46d3a206942ce7376d31ec2d36229e7/lark-1.3.1-py3-none-any.whl", hash = "sha256:c629b661023a014c37da873b4ff58a817398d12635d3bbb2c5a03be7fe5d1e12", size = 113151 }, +] + +[[package]] +name = "markupsafe" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e8/4b/3541d44f3937ba468b75da9eebcae497dcf67adb65caa16760b0a6807ebb/markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559", size = 11631 }, + { url = "https://files.pythonhosted.org/packages/98/1b/fbd8eed11021cabd9226c37342fa6ca4e8a98d8188a8d9b66740494960e4/markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419", size = 12057 }, + { url = "https://files.pythonhosted.org/packages/40/01/e560d658dc0bb8ab762670ece35281dec7b6c1b33f5fbc09ebb57a185519/markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695", size = 22050 }, + { url = "https://files.pythonhosted.org/packages/af/cd/ce6e848bbf2c32314c9b237839119c5a564a59725b53157c856e90937b7a/markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591", size = 20681 }, + { url = "https://files.pythonhosted.org/packages/c9/2a/b5c12c809f1c3045c4d580b035a743d12fcde53cf685dbc44660826308da/markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c", size = 20705 }, + { url = "https://files.pythonhosted.org/packages/cf/e3/9427a68c82728d0a88c50f890d0fc072a1484de2f3ac1ad0bfc1a7214fd5/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f", size = 21524 }, + { url = "https://files.pythonhosted.org/packages/bc/36/23578f29e9e582a4d0278e009b38081dbe363c5e7165113fad546918a232/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6", size = 20282 }, + { url = "https://files.pythonhosted.org/packages/56/21/dca11354e756ebd03e036bd8ad58d6d7168c80ce1fe5e75218e4945cbab7/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1", size = 20745 }, + { url = "https://files.pythonhosted.org/packages/87/99/faba9369a7ad6e4d10b6a5fbf71fa2a188fe4a593b15f0963b73859a1bbd/markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa", size = 14571 }, + { url = "https://files.pythonhosted.org/packages/d6/25/55dc3ab959917602c96985cb1253efaa4ff42f71194bddeb61eb7278b8be/markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8", size = 15056 }, + { url = "https://files.pythonhosted.org/packages/d0/9e/0a02226640c255d1da0b8d12e24ac2aa6734da68bff14c05dd53b94a0fc3/markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1", size = 13932 }, + { url = "https://files.pythonhosted.org/packages/08/db/fefacb2136439fc8dd20e797950e749aa1f4997ed584c62cfb8ef7c2be0e/markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad", size = 11631 }, + { url = "https://files.pythonhosted.org/packages/e1/2e/5898933336b61975ce9dc04decbc0a7f2fee78c30353c5efba7f2d6ff27a/markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a", size = 12058 }, + { url = "https://files.pythonhosted.org/packages/1d/09/adf2df3699d87d1d8184038df46a9c80d78c0148492323f4693df54e17bb/markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50", size = 24287 }, + { url = "https://files.pythonhosted.org/packages/30/ac/0273f6fcb5f42e314c6d8cd99effae6a5354604d461b8d392b5ec9530a54/markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf", size = 22940 }, + { url = "https://files.pythonhosted.org/packages/19/ae/31c1be199ef767124c042c6c3e904da327a2f7f0cd63a0337e1eca2967a8/markupsafe-3.0.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f", size = 21887 }, + { url = "https://files.pythonhosted.org/packages/b2/76/7edcab99d5349a4532a459e1fe64f0b0467a3365056ae550d3bcf3f79e1e/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a", size = 23692 }, + { url = "https://files.pythonhosted.org/packages/a4/28/6e74cdd26d7514849143d69f0bf2399f929c37dc2b31e6829fd2045b2765/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115", size = 21471 }, + { url = "https://files.pythonhosted.org/packages/62/7e/a145f36a5c2945673e590850a6f8014318d5577ed7e5920a4b3448e0865d/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a", size = 22923 }, + { url = "https://files.pythonhosted.org/packages/0f/62/d9c46a7f5c9adbeeeda52f5b8d802e1094e9717705a645efc71b0913a0a8/markupsafe-3.0.3-cp311-cp311-win32.whl", hash = "sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19", size = 14572 }, + { url = "https://files.pythonhosted.org/packages/83/8a/4414c03d3f891739326e1783338e48fb49781cc915b2e0ee052aa490d586/markupsafe-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01", size = 15077 }, + { url = "https://files.pythonhosted.org/packages/35/73/893072b42e6862f319b5207adc9ae06070f095b358655f077f69a35601f0/markupsafe-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c", size = 13876 }, + { url = "https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615 }, + { url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020 }, + { url = "https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", size = 24332 }, + { url = "https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d", size = 22947 }, + { url = "https://files.pythonhosted.org/packages/2c/54/887f3092a85238093a0b2154bd629c89444f395618842e8b0c41783898ea/markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a", size = 21962 }, + { url = "https://files.pythonhosted.org/packages/c9/2f/336b8c7b6f4a4d95e91119dc8521402461b74a485558d8f238a68312f11c/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b", size = 23760 }, + { url = "https://files.pythonhosted.org/packages/32/43/67935f2b7e4982ffb50a4d169b724d74b62a3964bc1a9a527f5ac4f1ee2b/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f", size = 21529 }, + { url = "https://files.pythonhosted.org/packages/89/e0/4486f11e51bbba8b0c041098859e869e304d1c261e59244baa3d295d47b7/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b", size = 23015 }, + { url = "https://files.pythonhosted.org/packages/2f/e1/78ee7a023dac597a5825441ebd17170785a9dab23de95d2c7508ade94e0e/markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d", size = 14540 }, + { url = "https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c", size = 15105 }, + { url = "https://files.pythonhosted.org/packages/e5/f1/216fc1bbfd74011693a4fd837e7026152e89c4bcf3e77b6692fba9923123/markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f", size = 13906 }, + { url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622 }, + { url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029 }, + { url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374 }, + { url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980 }, + { url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990 }, + { url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784 }, + { url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588 }, + { url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041 }, + { url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543 }, + { url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113 }, + { url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911 }, + { url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658 }, + { url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066 }, + { url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639 }, + { url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569 }, + { url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284 }, + { url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801 }, + { url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769 }, + { url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642 }, + { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612 }, + { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200 }, + { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973 }, + { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619 }, + { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029 }, + { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408 }, + { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005 }, + { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048 }, + { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821 }, + { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606 }, + { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043 }, + { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747 }, + { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341 }, + { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073 }, + { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661 }, + { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069 }, + { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670 }, + { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598 }, + { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261 }, + { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835 }, + { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733 }, + { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672 }, + { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819 }, + { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426 }, + { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146 }, + { url = "https://files.pythonhosted.org/packages/56/23/0d8c13a44bde9154821586520840643467aee574d8ce79a17da539ee7fed/markupsafe-3.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15d939a21d546304880945ca1ecb8a039db6b4dc49b2c5a400387cdae6a62e26", size = 11623 }, + { url = "https://files.pythonhosted.org/packages/fd/23/07a2cb9a8045d5f3f0890a8c3bc0859d7a47bfd9a560b563899bec7b72ed/markupsafe-3.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f71a396b3bf33ecaa1626c255855702aca4d3d9fea5e051b41ac59a9c1c41edc", size = 12049 }, + { url = "https://files.pythonhosted.org/packages/bc/e4/6be85eb81503f8e11b61c0b6369b6e077dcf0a74adbd9ebf6b349937b4e9/markupsafe-3.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f4b68347f8c5eab4a13419215bdfd7f8c9b19f2b25520968adfad23eb0ce60c", size = 21923 }, + { url = "https://files.pythonhosted.org/packages/6f/bc/4dc914ead3fe6ddaef035341fee0fc956949bbd27335b611829292b89ee2/markupsafe-3.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e8fc20152abba6b83724d7ff268c249fa196d8259ff481f3b1476383f8f24e42", size = 20543 }, + { url = "https://files.pythonhosted.org/packages/89/6e/5fe81fbcfba4aef4093d5f856e5c774ec2057946052d18d168219b7bd9f9/markupsafe-3.0.3-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:949b8d66bc381ee8b007cd945914c721d9aba8e27f71959d750a46f7c282b20b", size = 20585 }, + { url = "https://files.pythonhosted.org/packages/f6/f6/e0e5a3d3ae9c4020f696cd055f940ef86b64fe88de26f3a0308b9d3d048c/markupsafe-3.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:3537e01efc9d4dccdf77221fb1cb3b8e1a38d5428920e0657ce299b20324d758", size = 21387 }, + { url = "https://files.pythonhosted.org/packages/c8/25/651753ef4dea08ea790f4fbb65146a9a44a014986996ca40102e237aa49a/markupsafe-3.0.3-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:591ae9f2a647529ca990bc681daebdd52c8791ff06c2bfa05b65163e28102ef2", size = 20133 }, + { url = "https://files.pythonhosted.org/packages/dc/0a/c3cf2b4fef5f0426e8a6d7fce3cb966a17817c568ce59d76b92a233fdbec/markupsafe-3.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a320721ab5a1aba0a233739394eb907f8c8da5c98c9181d1161e77a0c8e36f2d", size = 20588 }, + { url = "https://files.pythonhosted.org/packages/cd/1b/a7782984844bd519ad4ffdbebbba2671ec5d0ebbeac34736c15fb86399e8/markupsafe-3.0.3-cp39-cp39-win32.whl", hash = "sha256:df2449253ef108a379b8b5d6b43f4b1a8e81a061d6537becd5582fba5f9196d7", size = 14566 }, + { url = "https://files.pythonhosted.org/packages/18/1f/8d9c20e1c9440e215a44be5ab64359e207fcb4f675543f1cf9a2a7f648d0/markupsafe-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:7c3fb7d25180895632e5d3148dbdc29ea38ccb7fd210aa27acbd1201a1902c6e", size = 15053 }, + { url = "https://files.pythonhosted.org/packages/4e/d3/fe08482b5cd995033556d45041a4f4e76e7f0521112a9c9991d40d39825f/markupsafe-3.0.3-cp39-cp39-win_arm64.whl", hash = "sha256:38664109c14ffc9e7437e86b4dceb442b0096dfe3541d7864d9cbe1da4cf36c8", size = 13928 }, +] + +[[package]] +name = "matplotlib-inline" +version = "0.2.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c7/74/97e72a36efd4ae2bccb3463284300f8953f199b5ffbc04cbbb0ec78f74b1/matplotlib_inline-0.2.1.tar.gz", hash = "sha256:e1ee949c340d771fc39e241ea75683deb94762c8fa5f2927ec57c83c4dffa9fe", size = 8110 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/af/33/ee4519fa02ed11a94aef9559552f3b17bb863f2ecfe1a35dc7f548cde231/matplotlib_inline-0.2.1-py3-none-any.whl", hash = "sha256:d56ce5156ba6085e00a9d54fead6ed29a9c47e215cd1bba2e976ef39f5710a76", size = 9516 }, +] + +[[package]] +name = "mistune" +version = "3.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9d/55/d01f0c4b45ade6536c51170b9043db8b2ec6ddf4a35c7ea3f5f559ac935b/mistune-3.2.0.tar.gz", hash = "sha256:708487c8a8cdd99c9d90eb3ed4c3ed961246ff78ac82f03418f5183ab70e398a", size = 95467 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9b/f7/4a5e785ec9fbd65146a27b6b70b6cdc161a66f2024e4b04ac06a67f5578b/mistune-3.2.0-py3-none-any.whl", hash = "sha256:febdc629a3c78616b94393c6580551e0e34cc289987ec6c35ed3f4be42d0eee1", size = 53598 }, +] + +[[package]] +name = "nbclient" +version = "0.10.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "jupyter-client", version = "8.6.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "jupyter-core", version = "5.8.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "nbformat", marker = "python_full_version < '3.10'" }, + { name = "traitlets", marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/87/66/7ffd18d58eae90d5721f9f39212327695b749e23ad44b3881744eaf4d9e8/nbclient-0.10.2.tar.gz", hash = "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193", size = 62424 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/6d/e7fa07f03a4a7b221d94b4d586edb754a9b0dc3c9e2c93353e9fa4e0d117/nbclient-0.10.2-py3-none-any.whl", hash = "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d", size = 25434 }, +] + +[[package]] +name = "nbclient" +version = "0.10.4" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "jupyter-client", version = "8.8.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "jupyter-core", version = "5.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "nbformat", marker = "python_full_version >= '3.10'" }, + { name = "traitlets", marker = "python_full_version >= '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/56/91/1c1d5a4b9a9ebba2b4e32b8c852c2975c872aec1fe42ab5e516b2cecd193/nbclient-0.10.4.tar.gz", hash = "sha256:1e54091b16e6da39e297b0ece3e10f6f29f4ac4e8ee515d29f8a7099bd6553c9", size = 62554 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/83/a0/5b0c2f11142ed1dddec842457d3f65eaf71a0080894eb6f018755b319c3a/nbclient-0.10.4-py3-none-any.whl", hash = "sha256:9162df5a7373d70d606527300a95a975a47c137776cd942e52d9c7e29ff83440", size = 25465 }, +] + +[[package]] +name = "nbconvert" +version = "7.17.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "beautifulsoup4" }, + { name = "bleach", version = "6.2.0", source = { registry = "https://pypi.org/simple" }, extra = ["css"], marker = "python_full_version < '3.10'" }, + { name = "bleach", version = "6.3.0", source = { registry = "https://pypi.org/simple" }, extra = ["css"], marker = "python_full_version >= '3.10'" }, + { name = "defusedxml" }, + { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, + { name = "jinja2" }, + { name = "jupyter-core", version = "5.8.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "jupyter-core", version = "5.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "jupyterlab-pygments" }, + { name = "markupsafe" }, + { name = "mistune" }, + { name = "nbclient", version = "0.10.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "nbclient", version = "0.10.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "nbformat" }, + { name = "packaging" }, + { name = "pandocfilters" }, + { name = "pygments" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/38/47/81f886b699450d0569f7bc551df2b1673d18df7ff25cc0c21ca36ed8a5ff/nbconvert-7.17.0.tar.gz", hash = "sha256:1b2696f1b5be12309f6c7d707c24af604b87dfaf6d950794c7b07acab96dda78", size = 862855 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/4b/8d5f796a792f8a25f6925a96032f098789f448571eb92011df1ae59e8ea8/nbconvert-7.17.0-py3-none-any.whl", hash = "sha256:4f99a63b337b9a23504347afdab24a11faa7d86b405e5c8f9881cd313336d518", size = 261510 }, +] + +[[package]] +name = "nbformat" +version = "5.10.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fastjsonschema" }, + { name = "jsonschema", version = "4.25.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "jsonschema", version = "4.26.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "jupyter-core", version = "5.8.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "jupyter-core", version = "5.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6d/fd/91545e604bc3dad7dca9ed03284086039b294c6b3d75c0d2fa45f9e9caf3/nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a", size = 142749 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b", size = 78454 }, +] + +[[package]] +name = "nest-asyncio" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195 }, +] + +[[package]] +name = "nodeenv" +version = "1.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/24/bf/d1bda4f6168e0b2e9e5958945e01910052158313224ada5ce1fb2e1113b8/nodeenv-1.10.0.tar.gz", hash = "sha256:996c191ad80897d076bdfba80a41994c2b47c68e224c542b48feba42ba00f8bb", size = 55611 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl", hash = "sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827", size = 23438 }, +] + +[[package]] +name = "notebook" +version = "7.5.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-server" }, + { name = "jupyterlab" }, + { name = "jupyterlab-server" }, + { name = "notebook-shim" }, + { name = "tornado" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1f/6d/41052c48d6f6349ca0a7c4d1f6a78464de135e6d18f5829ba2510e62184c/notebook-7.5.5.tar.gz", hash = "sha256:dc0bfab0f2372c8278c457423d3256c34154ac2cc76bf20e9925260c461013c3", size = 14169167 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f8/aa/cbd1deb9f07446241e88f8d5fecccd95b249bca0b4e5482214a4d1714c49/notebook-7.5.5-py3-none-any.whl", hash = "sha256:a7c14dbeefa6592e87f72290ca982e0c10f5bbf3786be2a600fda9da2764a2b8", size = 14578929 }, +] + +[[package]] +name = "notebook-shim" +version = "0.2.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-server" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/54/d2/92fa3243712b9a3e8bafaf60aac366da1cada3639ca767ff4b5b3654ec28/notebook_shim-0.2.4.tar.gz", hash = "sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb", size = 13167 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef", size = 13307 }, +] + +[[package]] +name = "numpy" +version = "2.0.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/a9/75/10dd1f8116a8b796cb2c737b674e02d02e80454bda953fa7e65d8c12b016/numpy-2.0.2.tar.gz", hash = "sha256:883c987dee1880e2a864ab0dc9892292582510604156762362d9326444636e78", size = 18902015 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/21/91/3495b3237510f79f5d81f2508f9f13fea78ebfdf07538fc7444badda173d/numpy-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:51129a29dbe56f9ca83438b706e2e69a39892b5eda6cedcb6b0c9fdc9b0d3ece", size = 21165245 }, + { url = "https://files.pythonhosted.org/packages/05/33/26178c7d437a87082d11019292dce6d3fe6f0e9026b7b2309cbf3e489b1d/numpy-2.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f15975dfec0cf2239224d80e32c3170b1d168335eaedee69da84fbe9f1f9cd04", size = 13738540 }, + { url = "https://files.pythonhosted.org/packages/ec/31/cc46e13bf07644efc7a4bf68df2df5fb2a1a88d0cd0da9ddc84dc0033e51/numpy-2.0.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:8c5713284ce4e282544c68d1c3b2c7161d38c256d2eefc93c1d683cf47683e66", size = 5300623 }, + { url = "https://files.pythonhosted.org/packages/6e/16/7bfcebf27bb4f9d7ec67332ffebee4d1bf085c84246552d52dbb548600e7/numpy-2.0.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:becfae3ddd30736fe1889a37f1f580e245ba79a5855bff5f2a29cb3ccc22dd7b", size = 6901774 }, + { url = "https://files.pythonhosted.org/packages/f9/a3/561c531c0e8bf082c5bef509d00d56f82e0ea7e1e3e3a7fc8fa78742a6e5/numpy-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2da5960c3cf0df7eafefd806d4e612c5e19358de82cb3c343631188991566ccd", size = 13907081 }, + { url = "https://files.pythonhosted.org/packages/fa/66/f7177ab331876200ac7563a580140643d1179c8b4b6a6b0fc9838de2a9b8/numpy-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:496f71341824ed9f3d2fd36cf3ac57ae2e0165c143b55c3a035ee219413f3318", size = 19523451 }, + { url = "https://files.pythonhosted.org/packages/25/7f/0b209498009ad6453e4efc2c65bcdf0ae08a182b2b7877d7ab38a92dc542/numpy-2.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a61ec659f68ae254e4d237816e33171497e978140353c0c2038d46e63282d0c8", size = 19927572 }, + { url = "https://files.pythonhosted.org/packages/3e/df/2619393b1e1b565cd2d4c4403bdd979621e2c4dea1f8532754b2598ed63b/numpy-2.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d731a1c6116ba289c1e9ee714b08a8ff882944d4ad631fd411106a30f083c326", size = 14400722 }, + { url = "https://files.pythonhosted.org/packages/22/ad/77e921b9f256d5da36424ffb711ae79ca3f451ff8489eeca544d0701d74a/numpy-2.0.2-cp310-cp310-win32.whl", hash = "sha256:984d96121c9f9616cd33fbd0618b7f08e0cfc9600a7ee1d6fd9b239186d19d97", size = 6472170 }, + { url = "https://files.pythonhosted.org/packages/10/05/3442317535028bc29cf0c0dd4c191a4481e8376e9f0db6bcf29703cadae6/numpy-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:c7b0be4ef08607dd04da4092faee0b86607f111d5ae68036f16cc787e250a131", size = 15905558 }, + { url = "https://files.pythonhosted.org/packages/8b/cf/034500fb83041aa0286e0fb16e7c76e5c8b67c0711bb6e9e9737a717d5fe/numpy-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:49ca4decb342d66018b01932139c0961a8f9ddc7589611158cb3c27cbcf76448", size = 21169137 }, + { url = "https://files.pythonhosted.org/packages/4a/d9/32de45561811a4b87fbdee23b5797394e3d1504b4a7cf40c10199848893e/numpy-2.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:11a76c372d1d37437857280aa142086476136a8c0f373b2e648ab2c8f18fb195", size = 13703552 }, + { url = "https://files.pythonhosted.org/packages/c1/ca/2f384720020c7b244d22508cb7ab23d95f179fcfff33c31a6eeba8d6c512/numpy-2.0.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:807ec44583fd708a21d4a11d94aedf2f4f3c3719035c76a2bbe1fe8e217bdc57", size = 5298957 }, + { url = "https://files.pythonhosted.org/packages/0e/78/a3e4f9fb6aa4e6fdca0c5428e8ba039408514388cf62d89651aade838269/numpy-2.0.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8cafab480740e22f8d833acefed5cc87ce276f4ece12fdaa2e8903db2f82897a", size = 6905573 }, + { url = "https://files.pythonhosted.org/packages/a0/72/cfc3a1beb2caf4efc9d0b38a15fe34025230da27e1c08cc2eb9bfb1c7231/numpy-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a15f476a45e6e5a3a79d8a14e62161d27ad897381fecfa4a09ed5322f2085669", size = 13914330 }, + { url = "https://files.pythonhosted.org/packages/ba/a8/c17acf65a931ce551fee11b72e8de63bf7e8a6f0e21add4c937c83563538/numpy-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13e689d772146140a252c3a28501da66dfecd77490b498b168b501835041f951", size = 19534895 }, + { url = "https://files.pythonhosted.org/packages/ba/86/8767f3d54f6ae0165749f84648da9dcc8cd78ab65d415494962c86fac80f/numpy-2.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9ea91dfb7c3d1c56a0e55657c0afb38cf1eeae4544c208dc465c3c9f3a7c09f9", size = 19937253 }, + { url = "https://files.pythonhosted.org/packages/df/87/f76450e6e1c14e5bb1eae6836478b1028e096fd02e85c1c37674606ab752/numpy-2.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c1c9307701fec8f3f7a1e6711f9089c06e6284b3afbbcd259f7791282d660a15", size = 14414074 }, + { url = "https://files.pythonhosted.org/packages/5c/ca/0f0f328e1e59f73754f06e1adfb909de43726d4f24c6a3f8805f34f2b0fa/numpy-2.0.2-cp311-cp311-win32.whl", hash = "sha256:a392a68bd329eafac5817e5aefeb39038c48b671afd242710b451e76090e81f4", size = 6470640 }, + { url = "https://files.pythonhosted.org/packages/eb/57/3a3f14d3a759dcf9bf6e9eda905794726b758819df4663f217d658a58695/numpy-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:286cd40ce2b7d652a6f22efdfc6d1edf879440e53e76a75955bc0c826c7e64dc", size = 15910230 }, + { url = "https://files.pythonhosted.org/packages/45/40/2e117be60ec50d98fa08c2f8c48e09b3edea93cfcabd5a9ff6925d54b1c2/numpy-2.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:df55d490dea7934f330006d0f81e8551ba6010a5bf035a249ef61a94f21c500b", size = 20895803 }, + { url = "https://files.pythonhosted.org/packages/46/92/1b8b8dee833f53cef3e0a3f69b2374467789e0bb7399689582314df02651/numpy-2.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8df823f570d9adf0978347d1f926b2a867d5608f434a7cff7f7908c6570dcf5e", size = 13471835 }, + { url = "https://files.pythonhosted.org/packages/7f/19/e2793bde475f1edaea6945be141aef6c8b4c669b90c90a300a8954d08f0a/numpy-2.0.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:9a92ae5c14811e390f3767053ff54eaee3bf84576d99a2456391401323f4ec2c", size = 5038499 }, + { url = "https://files.pythonhosted.org/packages/e3/ff/ddf6dac2ff0dd50a7327bcdba45cb0264d0e96bb44d33324853f781a8f3c/numpy-2.0.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:a842d573724391493a97a62ebbb8e731f8a5dcc5d285dfc99141ca15a3302d0c", size = 6633497 }, + { url = "https://files.pythonhosted.org/packages/72/21/67f36eac8e2d2cd652a2e69595a54128297cdcb1ff3931cfc87838874bd4/numpy-2.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05e238064fc0610c840d1cf6a13bf63d7e391717d247f1bf0318172e759e692", size = 13621158 }, + { url = "https://files.pythonhosted.org/packages/39/68/e9f1126d757653496dbc096cb429014347a36b228f5a991dae2c6b6cfd40/numpy-2.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0123ffdaa88fa4ab64835dcbde75dcdf89c453c922f18dced6e27c90d1d0ec5a", size = 19236173 }, + { url = "https://files.pythonhosted.org/packages/d1/e9/1f5333281e4ebf483ba1c888b1d61ba7e78d7e910fdd8e6499667041cc35/numpy-2.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:96a55f64139912d61de9137f11bf39a55ec8faec288c75a54f93dfd39f7eb40c", size = 19634174 }, + { url = "https://files.pythonhosted.org/packages/71/af/a469674070c8d8408384e3012e064299f7a2de540738a8e414dcfd639996/numpy-2.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ec9852fb39354b5a45a80bdab5ac02dd02b15f44b3804e9f00c556bf24b4bded", size = 14099701 }, + { url = "https://files.pythonhosted.org/packages/d0/3d/08ea9f239d0e0e939b6ca52ad403c84a2bce1bde301a8eb4888c1c1543f1/numpy-2.0.2-cp312-cp312-win32.whl", hash = "sha256:671bec6496f83202ed2d3c8fdc486a8fc86942f2e69ff0e986140339a63bcbe5", size = 6174313 }, + { url = "https://files.pythonhosted.org/packages/b2/b5/4ac39baebf1fdb2e72585c8352c56d063b6126be9fc95bd2bb5ef5770c20/numpy-2.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:cfd41e13fdc257aa5778496b8caa5e856dc4896d4ccf01841daee1d96465467a", size = 15606179 }, + { url = "https://files.pythonhosted.org/packages/43/c1/41c8f6df3162b0c6ffd4437d729115704bd43363de0090c7f913cfbc2d89/numpy-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9059e10581ce4093f735ed23f3b9d283b9d517ff46009ddd485f1747eb22653c", size = 21169942 }, + { url = "https://files.pythonhosted.org/packages/39/bc/fd298f308dcd232b56a4031fd6ddf11c43f9917fbc937e53762f7b5a3bb1/numpy-2.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:423e89b23490805d2a5a96fe40ec507407b8ee786d66f7328be214f9679df6dd", size = 13711512 }, + { url = "https://files.pythonhosted.org/packages/96/ff/06d1aa3eeb1c614eda245c1ba4fb88c483bee6520d361641331872ac4b82/numpy-2.0.2-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:2b2955fa6f11907cf7a70dab0d0755159bca87755e831e47932367fc8f2f2d0b", size = 5306976 }, + { url = "https://files.pythonhosted.org/packages/2d/98/121996dcfb10a6087a05e54453e28e58694a7db62c5a5a29cee14c6e047b/numpy-2.0.2-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:97032a27bd9d8988b9a97a8c4d2c9f2c15a81f61e2f21404d7e8ef00cb5be729", size = 6906494 }, + { url = "https://files.pythonhosted.org/packages/15/31/9dffc70da6b9bbf7968f6551967fc21156207366272c2a40b4ed6008dc9b/numpy-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e795a8be3ddbac43274f18588329c72939870a16cae810c2b73461c40718ab1", size = 13912596 }, + { url = "https://files.pythonhosted.org/packages/b9/14/78635daab4b07c0930c919d451b8bf8c164774e6a3413aed04a6d95758ce/numpy-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26b258c385842546006213344c50655ff1555a9338e2e5e02a0756dc3e803dd", size = 19526099 }, + { url = "https://files.pythonhosted.org/packages/26/4c/0eeca4614003077f68bfe7aac8b7496f04221865b3a5e7cb230c9d055afd/numpy-2.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5fec9451a7789926bcf7c2b8d187292c9f93ea30284802a0ab3f5be8ab36865d", size = 19932823 }, + { url = "https://files.pythonhosted.org/packages/f1/46/ea25b98b13dccaebddf1a803f8c748680d972e00507cd9bc6dcdb5aa2ac1/numpy-2.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9189427407d88ff25ecf8f12469d4d39d35bee1db5d39fc5c168c6f088a6956d", size = 14404424 }, + { url = "https://files.pythonhosted.org/packages/c8/a6/177dd88d95ecf07e722d21008b1b40e681a929eb9e329684d449c36586b2/numpy-2.0.2-cp39-cp39-win32.whl", hash = "sha256:905d16e0c60200656500c95b6b8dca5d109e23cb24abc701d41c02d74c6b3afa", size = 6476809 }, + { url = "https://files.pythonhosted.org/packages/ea/2b/7fc9f4e7ae5b507c1a3a21f0f15ed03e794c1242ea8a242ac158beb56034/numpy-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:a3f4ab0caa7f053f6797fcd4e1e25caee367db3112ef2b6ef82d749530768c73", size = 15911314 }, + { url = "https://files.pythonhosted.org/packages/8f/3b/df5a870ac6a3be3a86856ce195ef42eec7ae50d2a202be1f5a4b3b340e14/numpy-2.0.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7f0a0c6f12e07fa94133c8a67404322845220c06a9e80e85999afe727f7438b8", size = 21025288 }, + { url = "https://files.pythonhosted.org/packages/2c/97/51af92f18d6f6f2d9ad8b482a99fb74e142d71372da5d834b3a2747a446e/numpy-2.0.2-pp39-pypy39_pp73-macosx_14_0_x86_64.whl", hash = "sha256:312950fdd060354350ed123c0e25a71327d3711584beaef30cdaa93320c392d4", size = 6762793 }, + { url = "https://files.pythonhosted.org/packages/12/46/de1fbd0c1b5ccaa7f9a005b66761533e2f6a3e560096682683a223631fe9/numpy-2.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26df23238872200f63518dd2aa984cfca675d82469535dc7162dc2ee52d9dd5c", size = 19334885 }, + { url = "https://files.pythonhosted.org/packages/cc/dc/d330a6faefd92b446ec0f0dfea4c3207bb1fef3c4771d19cf4543efd2c78/numpy-2.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a46288ec55ebbd58947d31d72be2c63cbf839f0a63b49cb755022310792a3385", size = 15828784 }, +] + +[[package]] +name = "numpy" +version = "2.2.6" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245 }, + { url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048 }, + { url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542 }, + { url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301 }, + { url = "https://files.pythonhosted.org/packages/eb/17/96a3acd228cec142fcb8723bd3cc39c2a474f7dcf0a5d16731980bcafa95/numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83", size = 14297320 }, + { url = "https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915", size = 16801050 }, + { url = "https://files.pythonhosted.org/packages/07/b6/89d837eddef52b3d0cec5c6ba0456c1bf1b9ef6a6672fc2b7873c3ec4e2e/numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680", size = 15807034 }, + { url = "https://files.pythonhosted.org/packages/01/c8/dc6ae86e3c61cfec1f178e5c9f7858584049b6093f843bca541f94120920/numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289", size = 18614185 }, + { url = "https://files.pythonhosted.org/packages/5b/c5/0064b1b7e7c89137b471ccec1fd2282fceaae0ab3a9550f2568782d80357/numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d", size = 6527149 }, + { url = "https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3", size = 12904620 }, + { url = "https://files.pythonhosted.org/packages/da/a8/4f83e2aa666a9fbf56d6118faaaf5f1974d456b1823fda0a176eff722839/numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae", size = 21176963 }, + { url = "https://files.pythonhosted.org/packages/b3/2b/64e1affc7972decb74c9e29e5649fac940514910960ba25cd9af4488b66c/numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a", size = 14406743 }, + { url = "https://files.pythonhosted.org/packages/4a/9f/0121e375000b5e50ffdd8b25bf78d8e1a5aa4cca3f185d41265198c7b834/numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42", size = 5352616 }, + { url = "https://files.pythonhosted.org/packages/31/0d/b48c405c91693635fbe2dcd7bc84a33a602add5f63286e024d3b6741411c/numpy-2.2.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:481b49095335f8eed42e39e8041327c05b0f6f4780488f61286ed3c01368d491", size = 6889579 }, + { url = "https://files.pythonhosted.org/packages/52/b8/7f0554d49b565d0171eab6e99001846882000883998e7b7d9f0d98b1f934/numpy-2.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b64d8d4d17135e00c8e346e0a738deb17e754230d7e0810ac5012750bbd85a5a", size = 14312005 }, + { url = "https://files.pythonhosted.org/packages/b3/dd/2238b898e51bd6d389b7389ffb20d7f4c10066d80351187ec8e303a5a475/numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf", size = 16821570 }, + { url = "https://files.pythonhosted.org/packages/83/6c/44d0325722cf644f191042bf47eedad61c1e6df2432ed65cbe28509d404e/numpy-2.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd48227a919f1bafbdda0583705e547892342c26fb127219d60a5c36882609d1", size = 15818548 }, + { url = "https://files.pythonhosted.org/packages/ae/9d/81e8216030ce66be25279098789b665d49ff19eef08bfa8cb96d4957f422/numpy-2.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9551a499bf125c1d4f9e250377c1ee2eddd02e01eac6644c080162c0c51778ab", size = 18620521 }, + { url = "https://files.pythonhosted.org/packages/6a/fd/e19617b9530b031db51b0926eed5345ce8ddc669bb3bc0044b23e275ebe8/numpy-2.2.6-cp311-cp311-win32.whl", hash = "sha256:0678000bb9ac1475cd454c6b8c799206af8107e310843532b04d49649c717a47", size = 6525866 }, + { url = "https://files.pythonhosted.org/packages/31/0a/f354fb7176b81747d870f7991dc763e157a934c717b67b58456bc63da3df/numpy-2.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:e8213002e427c69c45a52bbd94163084025f533a55a59d6f9c5b820774ef3303", size = 12907455 }, + { url = "https://files.pythonhosted.org/packages/82/5d/c00588b6cf18e1da539b45d3598d3557084990dcc4331960c15ee776ee41/numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff", size = 20875348 }, + { url = "https://files.pythonhosted.org/packages/66/ee/560deadcdde6c2f90200450d5938f63a34b37e27ebff162810f716f6a230/numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c", size = 14119362 }, + { url = "https://files.pythonhosted.org/packages/3c/65/4baa99f1c53b30adf0acd9a5519078871ddde8d2339dc5a7fde80d9d87da/numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3", size = 5084103 }, + { url = "https://files.pythonhosted.org/packages/cc/89/e5a34c071a0570cc40c9a54eb472d113eea6d002e9ae12bb3a8407fb912e/numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282", size = 6625382 }, + { url = "https://files.pythonhosted.org/packages/f8/35/8c80729f1ff76b3921d5c9487c7ac3de9b2a103b1cd05e905b3090513510/numpy-2.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87", size = 14018462 }, + { url = "https://files.pythonhosted.org/packages/8c/3d/1e1db36cfd41f895d266b103df00ca5b3cbe965184df824dec5c08c6b803/numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249", size = 16527618 }, + { url = "https://files.pythonhosted.org/packages/61/c6/03ed30992602c85aa3cd95b9070a514f8b3c33e31124694438d88809ae36/numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49", size = 15505511 }, + { url = "https://files.pythonhosted.org/packages/b7/25/5761d832a81df431e260719ec45de696414266613c9ee268394dd5ad8236/numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de", size = 18313783 }, + { url = "https://files.pythonhosted.org/packages/57/0a/72d5a3527c5ebffcd47bde9162c39fae1f90138c961e5296491ce778e682/numpy-2.2.6-cp312-cp312-win32.whl", hash = "sha256:4eeaae00d789f66c7a25ac5f34b71a7035bb474e679f410e5e1a94deb24cf2d4", size = 6246506 }, + { url = "https://files.pythonhosted.org/packages/36/fa/8c9210162ca1b88529ab76b41ba02d433fd54fecaf6feb70ef9f124683f1/numpy-2.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2", size = 12614190 }, + { url = "https://files.pythonhosted.org/packages/f9/5c/6657823f4f594f72b5471f1db1ab12e26e890bb2e41897522d134d2a3e81/numpy-2.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84", size = 20867828 }, + { url = "https://files.pythonhosted.org/packages/dc/9e/14520dc3dadf3c803473bd07e9b2bd1b69bc583cb2497b47000fed2fa92f/numpy-2.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b", size = 14143006 }, + { url = "https://files.pythonhosted.org/packages/4f/06/7e96c57d90bebdce9918412087fc22ca9851cceaf5567a45c1f404480e9e/numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d", size = 5076765 }, + { url = "https://files.pythonhosted.org/packages/73/ed/63d920c23b4289fdac96ddbdd6132e9427790977d5457cd132f18e76eae0/numpy-2.2.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566", size = 6617736 }, + { url = "https://files.pythonhosted.org/packages/85/c5/e19c8f99d83fd377ec8c7e0cf627a8049746da54afc24ef0a0cb73d5dfb5/numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f", size = 14010719 }, + { url = "https://files.pythonhosted.org/packages/19/49/4df9123aafa7b539317bf6d342cb6d227e49f7a35b99c287a6109b13dd93/numpy-2.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f", size = 16526072 }, + { url = "https://files.pythonhosted.org/packages/b2/6c/04b5f47f4f32f7c2b0e7260442a8cbcf8168b0e1a41ff1495da42f42a14f/numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868", size = 15503213 }, + { url = "https://files.pythonhosted.org/packages/17/0a/5cd92e352c1307640d5b6fec1b2ffb06cd0dabe7d7b8227f97933d378422/numpy-2.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d", size = 18316632 }, + { url = "https://files.pythonhosted.org/packages/f0/3b/5cba2b1d88760ef86596ad0f3d484b1cbff7c115ae2429678465057c5155/numpy-2.2.6-cp313-cp313-win32.whl", hash = "sha256:5beb72339d9d4fa36522fc63802f469b13cdbe4fdab4a288f0c441b74272ebfd", size = 6244532 }, + { url = "https://files.pythonhosted.org/packages/cb/3b/d58c12eafcb298d4e6d0d40216866ab15f59e55d148a5658bb3132311fcf/numpy-2.2.6-cp313-cp313-win_amd64.whl", hash = "sha256:b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c", size = 12610885 }, + { url = "https://files.pythonhosted.org/packages/6b/9e/4bf918b818e516322db999ac25d00c75788ddfd2d2ade4fa66f1f38097e1/numpy-2.2.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6", size = 20963467 }, + { url = "https://files.pythonhosted.org/packages/61/66/d2de6b291507517ff2e438e13ff7b1e2cdbdb7cb40b3ed475377aece69f9/numpy-2.2.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda", size = 14225144 }, + { url = "https://files.pythonhosted.org/packages/e4/25/480387655407ead912e28ba3a820bc69af9adf13bcbe40b299d454ec011f/numpy-2.2.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40", size = 5200217 }, + { url = "https://files.pythonhosted.org/packages/aa/4a/6e313b5108f53dcbf3aca0c0f3e9c92f4c10ce57a0a721851f9785872895/numpy-2.2.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8", size = 6712014 }, + { url = "https://files.pythonhosted.org/packages/b7/30/172c2d5c4be71fdf476e9de553443cf8e25feddbe185e0bd88b096915bcc/numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f", size = 14077935 }, + { url = "https://files.pythonhosted.org/packages/12/fb/9e743f8d4e4d3c710902cf87af3512082ae3d43b945d5d16563f26ec251d/numpy-2.2.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa", size = 16600122 }, + { url = "https://files.pythonhosted.org/packages/12/75/ee20da0e58d3a66f204f38916757e01e33a9737d0b22373b3eb5a27358f9/numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571", size = 15586143 }, + { url = "https://files.pythonhosted.org/packages/76/95/bef5b37f29fc5e739947e9ce5179ad402875633308504a52d188302319c8/numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1", size = 18385260 }, + { url = "https://files.pythonhosted.org/packages/09/04/f2f83279d287407cf36a7a8053a5abe7be3622a4363337338f2585e4afda/numpy-2.2.6-cp313-cp313t-win32.whl", hash = "sha256:038613e9fb8c72b0a41f025a7e4c3f0b7a1b5d768ece4796b674c8f3fe13efff", size = 6377225 }, + { url = "https://files.pythonhosted.org/packages/67/0e/35082d13c09c02c011cf21570543d202ad929d961c02a147493cb0c2bdf5/numpy-2.2.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06", size = 12771374 }, + { url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391 }, + { url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754 }, + { url = "https://files.pythonhosted.org/packages/af/30/feba75f143bdc868a1cc3f44ccfa6c4b9ec522b36458e738cd00f67b573f/numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543", size = 16643476 }, + { url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666 }, +] + +[[package]] +name = "numpy" +version = "2.4.4" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/d7/9f/b8cef5bffa569759033adda9481211426f12f53299629b410340795c2514/numpy-2.4.4.tar.gz", hash = "sha256:2d390634c5182175533585cc89f3608a4682ccb173cc9bb940b2881c8d6f8fa0", size = 20731587 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/c6/4218570d8c8ecc9704b5157a3348e486e84ef4be0ed3e38218ab473c83d2/numpy-2.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f983334aea213c99992053ede6168500e5f086ce74fbc4acc3f2b00f5762e9db", size = 16976799 }, + { url = "https://files.pythonhosted.org/packages/dd/92/b4d922c4a5f5dab9ed44e6153908a5c665b71acf183a83b93b690996e39b/numpy-2.4.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:72944b19f2324114e9dc86a159787333b77874143efcf89a5167ef83cfee8af0", size = 14971552 }, + { url = "https://files.pythonhosted.org/packages/8a/dc/df98c095978fa6ee7b9a9387d1d58cbb3d232d0e69ad169a4ce784bde4fd/numpy-2.4.4-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:86b6f55f5a352b48d7fbfd2dbc3d5b780b2d79f4d3c121f33eb6efb22e9a2015", size = 5476566 }, + { url = "https://files.pythonhosted.org/packages/28/34/b3fdcec6e725409223dd27356bdf5a3c2cc2282e428218ecc9cb7acc9763/numpy-2.4.4-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:ba1f4fc670ed79f876f70082eff4f9583c15fb9a4b89d6188412de4d18ae2f40", size = 6806482 }, + { url = "https://files.pythonhosted.org/packages/68/62/63417c13aa35d57bee1337c67446761dc25ea6543130cf868eace6e8157b/numpy-2.4.4-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a87ec22c87be071b6bdbd27920b129b94f2fc964358ce38f3822635a3e2e03d", size = 15973376 }, + { url = "https://files.pythonhosted.org/packages/cf/c5/9fcb7e0e69cef59cf10c746b84f7d58b08bc66a6b7d459783c5a4f6101a6/numpy-2.4.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:df3775294accfdd75f32c74ae39fcba920c9a378a2fc18a12b6820aa8c1fb502", size = 16925137 }, + { url = "https://files.pythonhosted.org/packages/7e/43/80020edacb3f84b9efdd1591120a4296462c23fd8db0dde1666f6ef66f13/numpy-2.4.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0d4e437e295f18ec29bc79daf55e8a47a9113df44d66f702f02a293d93a2d6dd", size = 17329414 }, + { url = "https://files.pythonhosted.org/packages/fd/06/af0658593b18a5f73532d377188b964f239eb0894e664a6c12f484472f97/numpy-2.4.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6aa3236c78803afbcb255045fbef97a9e25a1f6c9888357d205ddc42f4d6eba5", size = 18658397 }, + { url = "https://files.pythonhosted.org/packages/e6/ce/13a09ed65f5d0ce5c7dd0669250374c6e379910f97af2c08c57b0608eee4/numpy-2.4.4-cp311-cp311-win32.whl", hash = "sha256:30caa73029a225b2d40d9fae193e008e24b2026b7ee1a867b7ee8d96ca1a448e", size = 6239499 }, + { url = "https://files.pythonhosted.org/packages/bd/63/05d193dbb4b5eec1eca73822d80da98b511f8328ad4ae3ca4caf0f4db91d/numpy-2.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:6bbe4eb67390b0a0265a2c25458f6b90a409d5d069f1041e6aff1e27e3d9a79e", size = 12614257 }, + { url = "https://files.pythonhosted.org/packages/87/c5/8168052f080c26fa984c413305012be54741c9d0d74abd7fbeeccae3889f/numpy-2.4.4-cp311-cp311-win_arm64.whl", hash = "sha256:fcfe2045fd2e8f3cb0ce9d4ba6dba6333b8fa05bb8a4939c908cd43322d14c7e", size = 10486775 }, + { url = "https://files.pythonhosted.org/packages/28/05/32396bec30fb2263770ee910142f49c1476d08e8ad41abf8403806b520ce/numpy-2.4.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:15716cfef24d3a9762e3acdf87e27f58dc823d1348f765bbea6bef8c639bfa1b", size = 16689272 }, + { url = "https://files.pythonhosted.org/packages/c5/f3/a983d28637bfcd763a9c7aafdb6d5c0ebf3d487d1e1459ffdb57e2f01117/numpy-2.4.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:23cbfd4c17357c81021f21540da84ee282b9c8fba38a03b7b9d09ba6b951421e", size = 14699573 }, + { url = "https://files.pythonhosted.org/packages/9b/fd/e5ecca1e78c05106d98028114f5c00d3eddb41207686b2b7de3e477b0e22/numpy-2.4.4-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:8b3b60bb7cba2c8c81837661c488637eee696f59a877788a396d33150c35d842", size = 5204782 }, + { url = "https://files.pythonhosted.org/packages/de/2f/702a4594413c1a8632092beae8aba00f1d67947389369b3777aed783fdca/numpy-2.4.4-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:e4a010c27ff6f210ff4c6ef34394cd61470d01014439b192ec22552ee867f2a8", size = 6552038 }, + { url = "https://files.pythonhosted.org/packages/7f/37/eed308a8f56cba4d1fdf467a4fc67ef4ff4bf1c888f5fc980481890104b1/numpy-2.4.4-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f9e75681b59ddaa5e659898085ae0eaea229d054f2ac0c7e563a62205a700121", size = 15670666 }, + { url = "https://files.pythonhosted.org/packages/0a/0d/0e3ecece05b7a7e87ab9fb587855548da437a061326fff64a223b6dcb78a/numpy-2.4.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:81f4a14bee47aec54f883e0cad2d73986640c1590eb9bfaaba7ad17394481e6e", size = 16645480 }, + { url = "https://files.pythonhosted.org/packages/34/49/f2312c154b82a286758ee2f1743336d50651f8b5195db18cdb63675ff649/numpy-2.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:62d6b0f03b694173f9fcb1fb317f7222fd0b0b103e784c6549f5e53a27718c44", size = 17020036 }, + { url = "https://files.pythonhosted.org/packages/7b/e9/736d17bd77f1b0ec4f9901aaec129c00d59f5d84d5e79bba540ef12c2330/numpy-2.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fbc356aae7adf9e6336d336b9c8111d390a05df88f1805573ebb0807bd06fd1d", size = 18368643 }, + { url = "https://files.pythonhosted.org/packages/63/f6/d417977c5f519b17c8a5c3bc9e8304b0908b0e21136fe43bf628a1343914/numpy-2.4.4-cp312-cp312-win32.whl", hash = "sha256:0d35aea54ad1d420c812bfa0385c71cd7cc5bcf7c65fed95fc2cd02fe8c79827", size = 5961117 }, + { url = "https://files.pythonhosted.org/packages/2d/5b/e1deebf88ff431b01b7406ca3583ab2bbb90972bbe1c568732e49c844f7e/numpy-2.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:b5f0362dc928a6ecd9db58868fca5e48485205e3855957bdedea308f8672ea4a", size = 12320584 }, + { url = "https://files.pythonhosted.org/packages/58/89/e4e856ac82a68c3ed64486a544977d0e7bdd18b8da75b78a577ca31c4395/numpy-2.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:846300f379b5b12cc769334464656bc882e0735d27d9726568bc932fdc49d5ec", size = 10221450 }, + { url = "https://files.pythonhosted.org/packages/14/1d/d0a583ce4fefcc3308806a749a536c201ed6b5ad6e1322e227ee4848979d/numpy-2.4.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:08f2e31ed5e6f04b118e49821397f12767934cfdd12a1ce86a058f91e004ee50", size = 16684933 }, + { url = "https://files.pythonhosted.org/packages/c1/62/2b7a48fbb745d344742c0277f01286dead15f3f68e4f359fbfcf7b48f70f/numpy-2.4.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e823b8b6edc81e747526f70f71a9c0a07ac4e7ad13020aa736bb7c9d67196115", size = 14694532 }, + { url = "https://files.pythonhosted.org/packages/e5/87/499737bfba066b4a3bebff24a8f1c5b2dee410b209bc6668c9be692580f0/numpy-2.4.4-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:4a19d9dba1a76618dd86b164d608566f393f8ec6ac7c44f0cc879011c45e65af", size = 5199661 }, + { url = "https://files.pythonhosted.org/packages/cd/da/464d551604320d1491bc345efed99b4b7034143a85787aab78d5691d5a0e/numpy-2.4.4-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:d2a8490669bfe99a233298348acc2d824d496dee0e66e31b66a6022c2ad74a5c", size = 6547539 }, + { url = "https://files.pythonhosted.org/packages/7d/90/8d23e3b0dafd024bf31bdec225b3bb5c2dbfa6912f8a53b8659f21216cbf/numpy-2.4.4-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:45dbed2ab436a9e826e302fcdcbe9133f9b0006e5af7168afb8963a6520da103", size = 15668806 }, + { url = "https://files.pythonhosted.org/packages/d1/73/a9d864e42a01896bb5974475438f16086be9ba1f0d19d0bb7a07427c4a8b/numpy-2.4.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c901b15172510173f5cb310eae652908340f8dede90fff9e3bf6c0d8dfd92f83", size = 16632682 }, + { url = "https://files.pythonhosted.org/packages/34/fb/14570d65c3bde4e202a031210475ae9cde9b7686a2e7dc97ee67d2833b35/numpy-2.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:99d838547ace2c4aace6c4f76e879ddfe02bb58a80c1549928477862b7a6d6ed", size = 17019810 }, + { url = "https://files.pythonhosted.org/packages/8a/77/2ba9d87081fd41f6d640c83f26fb7351e536b7ce6dd9061b6af5904e8e46/numpy-2.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0aec54fd785890ecca25a6003fd9a5aed47ad607bbac5cd64f836ad8666f4959", size = 18357394 }, + { url = "https://files.pythonhosted.org/packages/a2/23/52666c9a41708b0853fa3b1a12c90da38c507a3074883823126d4e9d5b30/numpy-2.4.4-cp313-cp313-win32.whl", hash = "sha256:07077278157d02f65c43b1b26a3886bce886f95d20aabd11f87932750dfb14ed", size = 5959556 }, + { url = "https://files.pythonhosted.org/packages/57/fb/48649b4971cde70d817cf97a2a2fdc0b4d8308569f1dd2f2611959d2e0cf/numpy-2.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:5c70f1cc1c4efbe316a572e2d8b9b9cc44e89b95f79ca3331553fbb63716e2bf", size = 12317311 }, + { url = "https://files.pythonhosted.org/packages/ba/d8/11490cddd564eb4de97b4579ef6bfe6a736cc07e94c1598590ae25415e01/numpy-2.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:ef4059d6e5152fa1a39f888e344c73fdc926e1b2dd58c771d67b0acfbf2aa67d", size = 10222060 }, + { url = "https://files.pythonhosted.org/packages/99/5d/dab4339177a905aad3e2221c915b35202f1ec30d750dd2e5e9d9a72b804b/numpy-2.4.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4bbc7f303d125971f60ec0aaad5e12c62d0d2c925f0ab1273debd0e4ba37aba5", size = 14822302 }, + { url = "https://files.pythonhosted.org/packages/eb/e4/0564a65e7d3d97562ed6f9b0fd0fb0a6f559ee444092f105938b50043876/numpy-2.4.4-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:4d6d57903571f86180eb98f8f0c839fa9ebbfb031356d87f1361be91e433f5b7", size = 5327407 }, + { url = "https://files.pythonhosted.org/packages/29/8d/35a3a6ce5ad371afa58b4700f1c820f8f279948cca32524e0a695b0ded83/numpy-2.4.4-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:4636de7fd195197b7535f231b5de9e4b36d2c440b6e566d2e4e4746e6af0ca93", size = 6647631 }, + { url = "https://files.pythonhosted.org/packages/f4/da/477731acbd5a58a946c736edfdabb2ac5b34c3d08d1ba1a7b437fa0884df/numpy-2.4.4-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ad2e2ef14e0b04e544ea2fa0a36463f847f113d314aa02e5b402fdf910ef309e", size = 15727691 }, + { url = "https://files.pythonhosted.org/packages/e6/db/338535d9b152beabeb511579598418ba0212ce77cf9718edd70262cc4370/numpy-2.4.4-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a285b3b96f951841799528cd1f4f01cd70e7e0204b4abebac9463eecfcf2a40", size = 16681241 }, + { url = "https://files.pythonhosted.org/packages/e2/a9/ad248e8f58beb7a0219b413c9c7d8151c5d285f7f946c3e26695bdbbe2df/numpy-2.4.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:f8474c4241bc18b750be2abea9d7a9ec84f46ef861dbacf86a4f6e043401f79e", size = 17085767 }, + { url = "https://files.pythonhosted.org/packages/b5/1a/3b88ccd3694681356f70da841630e4725a7264d6a885c8d442a697e1146b/numpy-2.4.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4e874c976154687c1f71715b034739b45c7711bec81db01914770373d125e392", size = 18403169 }, + { url = "https://files.pythonhosted.org/packages/c2/c9/fcfd5d0639222c6eac7f304829b04892ef51c96a75d479214d77e3ce6e33/numpy-2.4.4-cp313-cp313t-win32.whl", hash = "sha256:9c585a1790d5436a5374bac930dad6ed244c046ed91b2b2a3634eb2971d21008", size = 6083477 }, + { url = "https://files.pythonhosted.org/packages/d5/e3/3938a61d1c538aaec8ed6fd6323f57b0c2d2d2219512434c5c878db76553/numpy-2.4.4-cp313-cp313t-win_amd64.whl", hash = "sha256:93e15038125dc1e5345d9b5b68aa7f996ec33b98118d18c6ca0d0b7d6198b7e8", size = 12457487 }, + { url = "https://files.pythonhosted.org/packages/97/6a/7e345032cc60501721ef94e0e30b60f6b0bd601f9174ebd36389a2b86d40/numpy-2.4.4-cp313-cp313t-win_arm64.whl", hash = "sha256:0dfd3f9d3adbe2920b68b5cd3d51444e13a10792ec7154cd0a2f6e74d4ab3233", size = 10292002 }, + { url = "https://files.pythonhosted.org/packages/6e/06/c54062f85f673dd5c04cbe2f14c3acb8c8b95e3384869bb8cc9bff8cb9df/numpy-2.4.4-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:f169b9a863d34f5d11b8698ead99febeaa17a13ca044961aa8e2662a6c7766a0", size = 16684353 }, + { url = "https://files.pythonhosted.org/packages/4c/39/8a320264a84404c74cc7e79715de85d6130fa07a0898f67fb5cd5bd79908/numpy-2.4.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2483e4584a1cb3092da4470b38866634bafb223cbcd551ee047633fd2584599a", size = 14704914 }, + { url = "https://files.pythonhosted.org/packages/91/fb/287076b2614e1d1044235f50f03748f31fa287e3dbe6abeb35cdfa351eca/numpy-2.4.4-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:2d19e6e2095506d1736b7d80595e0f252d76b89f5e715c35e06e937679ea7d7a", size = 5210005 }, + { url = "https://files.pythonhosted.org/packages/63/eb/fcc338595309910de6ecabfcef2419a9ce24399680bfb149421fa2df1280/numpy-2.4.4-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:6a246d5914aa1c820c9443ddcee9c02bec3e203b0c080349533fae17727dfd1b", size = 6544974 }, + { url = "https://files.pythonhosted.org/packages/44/5d/e7e9044032a716cdfaa3fba27a8e874bf1c5f1912a1ddd4ed071bf8a14a6/numpy-2.4.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:989824e9faf85f96ec9c7761cd8d29c531ad857bfa1daa930cba85baaecf1a9a", size = 15684591 }, + { url = "https://files.pythonhosted.org/packages/98/7c/21252050676612625449b4807d6b695b9ce8a7c9e1c197ee6216c8a65c7c/numpy-2.4.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:27a8d92cd10f1382a67d7cf4db7ce18341b66438bdd9f691d7b0e48d104c2a9d", size = 16637700 }, + { url = "https://files.pythonhosted.org/packages/b1/29/56d2bbef9465db24ef25393383d761a1af4f446a1df9b8cded4fe3a5a5d7/numpy-2.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e44319a2953c738205bf3354537979eaa3998ed673395b964c1176083dd46252", size = 17035781 }, + { url = "https://files.pythonhosted.org/packages/e3/2b/a35a6d7589d21f44cea7d0a98de5ddcbb3d421b2622a5c96b1edf18707c3/numpy-2.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e892aff75639bbef0d2a2cfd55535510df26ff92f63c92cd84ef8d4ba5a5557f", size = 18362959 }, + { url = "https://files.pythonhosted.org/packages/64/c9/d52ec581f2390e0f5f85cbfd80fb83d965fc15e9f0e1aec2195faa142cde/numpy-2.4.4-cp314-cp314-win32.whl", hash = "sha256:1378871da56ca8943c2ba674530924bb8ca40cd228358a3b5f302ad60cf875fc", size = 6008768 }, + { url = "https://files.pythonhosted.org/packages/fa/22/4cc31a62a6c7b74a8730e31a4274c5dc80e005751e277a2ce38e675e4923/numpy-2.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:715d1c092715954784bc79e1174fc2a90093dc4dc84ea15eb14dad8abdcdeb74", size = 12449181 }, + { url = "https://files.pythonhosted.org/packages/70/2e/14cda6f4d8e396c612d1bf97f22958e92148801d7e4f110cabebdc0eef4b/numpy-2.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:2c194dd721e54ecad9ad387c1d35e63dce5c4450c6dc7dd5611283dda239aabb", size = 10496035 }, + { url = "https://files.pythonhosted.org/packages/b1/e8/8fed8c8d848d7ecea092dc3469643f9d10bc3a134a815a3b033da1d2039b/numpy-2.4.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2aa0613a5177c264ff5921051a5719d20095ea586ca88cc802c5c218d1c67d3e", size = 14824958 }, + { url = "https://files.pythonhosted.org/packages/05/1a/d8007a5138c179c2bf33ef44503e83d70434d2642877ee8fbb230e7c0548/numpy-2.4.4-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:42c16925aa5a02362f986765f9ebabf20de75cdefdca827d14315c568dcab113", size = 5330020 }, + { url = "https://files.pythonhosted.org/packages/99/64/ffb99ac6ae93faf117bcbd5c7ba48a7f45364a33e8e458545d3633615dda/numpy-2.4.4-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:874f200b2a981c647340f841730fc3a2b54c9d940566a3c4149099591e2c4c3d", size = 6650758 }, + { url = "https://files.pythonhosted.org/packages/6e/6e/795cc078b78a384052e73b2f6281ff7a700e9bf53bcce2ee579d4f6dd879/numpy-2.4.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c9b39d38a9bd2ae1becd7eac1303d031c5c110ad31f2b319c6e7d98b135c934d", size = 15729948 }, + { url = "https://files.pythonhosted.org/packages/5f/86/2acbda8cc2af5f3d7bfc791192863b9e3e19674da7b5e533fded124d1299/numpy-2.4.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b268594bccac7d7cf5844c7732e3f20c50921d94e36d7ec9b79e9857694b1b2f", size = 16679325 }, + { url = "https://files.pythonhosted.org/packages/bc/59/cafd83018f4aa55e0ac6fa92aa066c0a1877b77a615ceff1711c260ffae8/numpy-2.4.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ac6b31e35612a26483e20750126d30d0941f949426974cace8e6b5c58a3657b0", size = 17084883 }, + { url = "https://files.pythonhosted.org/packages/f0/85/a42548db84e65ece46ab2caea3d3f78b416a47af387fcbb47ec28e660dc2/numpy-2.4.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:8e3ed142f2728df44263aaf5fb1f5b0b99f4070c553a0d7f033be65338329150", size = 18403474 }, + { url = "https://files.pythonhosted.org/packages/ed/ad/483d9e262f4b831000062e5d8a45e342166ec8aaa1195264982bca267e62/numpy-2.4.4-cp314-cp314t-win32.whl", hash = "sha256:dddbbd259598d7240b18c9d87c56a9d2fb3b02fe266f49a7c101532e78c1d871", size = 6155500 }, + { url = "https://files.pythonhosted.org/packages/c7/03/2fc4e14c7bd4ff2964b74ba90ecb8552540b6315f201df70f137faa5c589/numpy-2.4.4-cp314-cp314t-win_amd64.whl", hash = "sha256:a7164afb23be6e37ad90b2f10426149fd75aee07ca55653d2aa41e66c4ef697e", size = 12637755 }, + { url = "https://files.pythonhosted.org/packages/58/78/548fb8e07b1a341746bfbecb32f2c268470f45fa028aacdbd10d9bc73aab/numpy-2.4.4-cp314-cp314t-win_arm64.whl", hash = "sha256:ba203255017337d39f89bdd58417f03c4426f12beed0440cfd933cb15f8669c7", size = 10566643 }, + { url = "https://files.pythonhosted.org/packages/6b/33/8fae8f964a4f63ed528264ddf25d2b683d0b663e3cba26961eb838a7c1bd/numpy-2.4.4-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:58c8b5929fcb8287cbd6f0a3fae19c6e03a5c48402ae792962ac465224a629a4", size = 16854491 }, + { url = "https://files.pythonhosted.org/packages/bc/d0/1aabee441380b981cf8cdda3ae7a46aa827d1b5a8cce84d14598bc94d6d9/numpy-2.4.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:eea7ac5d2dce4189771cedb559c738a71512768210dc4e4753b107a2048b3d0e", size = 14895830 }, + { url = "https://files.pythonhosted.org/packages/a5/b8/aafb0d1065416894fccf4df6b49ef22b8db045187949545bced89c034b8e/numpy-2.4.4-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:51fc224f7ca4d92656d5a5eb315f12eb5fe2c97a66249aa7b5f562528a3be38c", size = 5400927 }, + { url = "https://files.pythonhosted.org/packages/d6/77/063baa20b08b431038c7f9ff5435540c7b7265c78cf56012a483019ca72d/numpy-2.4.4-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:28a650663f7314afc3e6ec620f44f333c386aad9f6fc472030865dc0ebb26ee3", size = 6715557 }, + { url = "https://files.pythonhosted.org/packages/c7/a8/379542d45a14f149444c5c4c4e7714707239ce9cc1de8c2803958889da14/numpy-2.4.4-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:19710a9ca9992d7174e9c52f643d4272dcd1558c5f7af7f6f8190f633bd651a7", size = 15804253 }, + { url = "https://files.pythonhosted.org/packages/a2/c8/f0a45426d6d21e7ea3310a15cf90c43a14d9232c31a837702dba437f3373/numpy-2.4.4-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9b2aec6af35c113b05695ebb5749a787acd63cafc83086a05771d1e1cd1e555f", size = 16753552 }, + { url = "https://files.pythonhosted.org/packages/04/74/f4c001f4714c3ad9ce037e18cf2b9c64871a84951eaa0baf683a9ca9301c/numpy-2.4.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:f2cf083b324a467e1ab358c105f6cad5ea950f50524668a80c486ff1db24e119", size = 12509075 }, +] + +[[package]] +name = "overrides" +version = "7.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/36/86/b585f53236dec60aba864e050778b25045f857e17f6e5ea0ae95fe80edd2/overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a", size = 22812 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/ab/fc8290c6a4c722e5514d80f62b2dc4c4df1a68a41d1364e625c35990fcf3/overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49", size = 17832 }, +] + +[[package]] +name = "packaging" +version = "26.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/65/ee/299d360cdc32edc7d2cf530f3accf79c4fca01e96ffc950d8a52213bd8e4/packaging-26.0.tar.gz", hash = "sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4", size = 143416 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl", hash = "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529", size = 74366 }, +] + +[[package]] +name = "pandocfilters" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/70/6f/3dd4940bbe001c06a65f88e36bad298bc7a0de5036115639926b0c5c0458/pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e", size = 8454 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/af/4fbc8cab944db5d21b7e2a5b8e9211a03a79852b1157e2c102fcc61ac440/pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc", size = 8663 }, +] + +[[package]] +name = "parso" +version = "0.8.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/81/76/a1e769043c0c0c9fe391b702539d594731a4362334cdf4dc25d0c09761e7/parso-0.8.6.tar.gz", hash = "sha256:2b9a0332696df97d454fa67b81618fd69c35a7b90327cbe6ba5c92d2c68a7bfd", size = 401621 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b6/61/fae042894f4296ec49e3f193aff5d7c18440da9e48102c3315e1bc4519a7/parso-0.8.6-py2.py3-none-any.whl", hash = "sha256:2c549f800b70a5c4952197248825584cb00f033b29c692671d3bf08bf380baff", size = 106894 }, +] + +[[package]] +name = "pexpect" +version = "4.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ptyprocess" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772 }, +] + +[[package]] +name = "platformdirs" +version = "4.4.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/23/e8/21db9c9987b0e728855bd57bff6984f67952bea55d6f75e055c46b5383e8/platformdirs-4.4.0.tar.gz", hash = "sha256:ca753cf4d81dc309bc67b0ea38fd15dc97bc30ce419a7f58d13eb3bf14c4febf", size = 21634 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/4b/2028861e724d3bd36227adfa20d3fd24c3fc6d52032f4a93c133be5d17ce/platformdirs-4.4.0-py3-none-any.whl", hash = "sha256:abd01743f24e5287cd7a5db3752faf1a2d65353f38ec26d98e25a6db65958c85", size = 18654 }, +] + +[[package]] +name = "platformdirs" +version = "4.9.4" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/19/56/8d4c30c8a1d07013911a8fdbd8f89440ef9f08d07a1b50ab8ca8be5a20f9/platformdirs-4.9.4.tar.gz", hash = "sha256:1ec356301b7dc906d83f371c8f487070e99d3ccf9e501686456394622a01a934", size = 28737 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/d7/97f7e3a6abb67d8080dd406fd4df842c2be0efaf712d1c899c32a075027c/platformdirs-4.9.4-py3-none-any.whl", hash = "sha256:68a9a4619a666ea6439f2ff250c12a853cd1cbd5158d258bd824a7df6be2f868", size = 21216 }, +] + +[[package]] +name = "pluggy" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538 }, +] + +[[package]] +name = "pre-commit" +version = "4.3.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "cfgv", version = "3.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "identify", version = "2.6.15", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "nodeenv", marker = "python_full_version < '3.10'" }, + { name = "pyyaml", marker = "python_full_version < '3.10'" }, + { name = "virtualenv", marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ff/29/7cf5bbc236333876e4b41f56e06857a87937ce4bf91e117a6991a2dbb02a/pre_commit-4.3.0.tar.gz", hash = "sha256:499fe450cc9d42e9d58e606262795ecb64dd05438943c62b66f6a8673da30b16", size = 193792 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5b/a5/987a405322d78a73b66e39e4a90e4ef156fd7141bf71df987e50717c321b/pre_commit-4.3.0-py2.py3-none-any.whl", hash = "sha256:2b0747ad7e6e967169136edffee14c16e148a778a54e4f967921aa1ebf2308d8", size = 220965 }, +] + +[[package]] +name = "pre-commit" +version = "4.5.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "cfgv", version = "3.5.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "identify", version = "2.6.18", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "nodeenv", marker = "python_full_version >= '3.10'" }, + { name = "pyyaml", marker = "python_full_version >= '3.10'" }, + { name = "virtualenv", marker = "python_full_version >= '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/40/f1/6d86a29246dfd2e9b6237f0b5823717f60cad94d47ddc26afa916d21f525/pre_commit-4.5.1.tar.gz", hash = "sha256:eb545fcff725875197837263e977ea257a402056661f09dae08e4b149b030a61", size = 198232 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl", hash = "sha256:3b3afd891e97337708c1674210f8eba659b52a38ea5f822ff142d10786221f77", size = 226437 }, +] + +[[package]] +name = "prometheus-client" +version = "0.24.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f0/58/a794d23feb6b00fc0c72787d7e87d872a6730dd9ed7c7b3e954637d8f280/prometheus_client-0.24.1.tar.gz", hash = "sha256:7e0ced7fbbd40f7b84962d5d2ab6f17ef88a72504dcf7c0b40737b43b2a461f9", size = 85616 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/74/c3/24a2f845e3917201628ecaba4f18bab4d18a337834c1df2a159ee9d22a42/prometheus_client-0.24.1-py3-none-any.whl", hash = "sha256:150db128af71a5c2482b36e588fc8a6b95e498750da4b17065947c16070f4055", size = 64057 }, +] + +[[package]] +name = "prompt-toolkit" +version = "3.0.52" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "wcwidth" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a1/96/06e01a7b38dce6fe1db213e061a4602dd6032a8a97ef6c1a862537732421/prompt_toolkit-3.0.52.tar.gz", hash = "sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855", size = 434198 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl", hash = "sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955", size = 391431 }, +] + +[[package]] +name = "psutil" +version = "7.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/c6/d1ddf4abb55e93cebc4f2ed8b5d6dbad109ecb8d63748dd2b20ab5e57ebe/psutil-7.2.2.tar.gz", hash = "sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372", size = 493740 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/08/510cbdb69c25a96f4ae523f733cdc963ae654904e8db864c07585ef99875/psutil-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b", size = 130595 }, + { url = "https://files.pythonhosted.org/packages/d6/f5/97baea3fe7a5a9af7436301f85490905379b1c6f2dd51fe3ecf24b4c5fbf/psutil-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea", size = 131082 }, + { url = "https://files.pythonhosted.org/packages/37/d6/246513fbf9fa174af531f28412297dd05241d97a75911ac8febefa1a53c6/psutil-7.2.2-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63", size = 181476 }, + { url = "https://files.pythonhosted.org/packages/b8/b5/9182c9af3836cca61696dabe4fd1304e17bc56cb62f17439e1154f225dd3/psutil-7.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312", size = 184062 }, + { url = "https://files.pythonhosted.org/packages/16/ba/0756dca669f5a9300d0cbcbfae9a4c30e446dfc7440ffe43ded5724bfd93/psutil-7.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b", size = 139893 }, + { url = "https://files.pythonhosted.org/packages/1c/61/8fa0e26f33623b49949346de05ec1ddaad02ed8ba64af45f40a147dbfa97/psutil-7.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9", size = 135589 }, + { url = "https://files.pythonhosted.org/packages/81/69/ef179ab5ca24f32acc1dac0c247fd6a13b501fd5534dbae0e05a1c48b66d/psutil-7.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00", size = 130664 }, + { url = "https://files.pythonhosted.org/packages/7b/64/665248b557a236d3fa9efc378d60d95ef56dd0a490c2cd37dafc7660d4a9/psutil-7.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9", size = 131087 }, + { url = "https://files.pythonhosted.org/packages/d5/2e/e6782744700d6759ebce3043dcfa661fb61e2fb752b91cdeae9af12c2178/psutil-7.2.2-cp314-cp314t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a", size = 182383 }, + { url = "https://files.pythonhosted.org/packages/57/49/0a41cefd10cb7505cdc04dab3eacf24c0c2cb158a998b8c7b1d27ee2c1f5/psutil-7.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf", size = 185210 }, + { url = "https://files.pythonhosted.org/packages/dd/2c/ff9bfb544f283ba5f83ba725a3c5fec6d6b10b8f27ac1dc641c473dc390d/psutil-7.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1", size = 141228 }, + { url = "https://files.pythonhosted.org/packages/f2/fc/f8d9c31db14fcec13748d373e668bc3bed94d9077dbc17fb0eebc073233c/psutil-7.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841", size = 136284 }, + { url = "https://files.pythonhosted.org/packages/e7/36/5ee6e05c9bd427237b11b3937ad82bb8ad2752d72c6969314590dd0c2f6e/psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486", size = 129090 }, + { url = "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979", size = 129859 }, + { url = "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9", size = 155560 }, + { url = "https://files.pythonhosted.org/packages/63/65/37648c0c158dc222aba51c089eb3bdfa238e621674dc42d48706e639204f/psutil-7.2.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e", size = 156997 }, + { url = "https://files.pythonhosted.org/packages/8e/13/125093eadae863ce03c6ffdbae9929430d116a246ef69866dad94da3bfbc/psutil-7.2.2-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8", size = 148972 }, + { url = "https://files.pythonhosted.org/packages/04/78/0acd37ca84ce3ddffaa92ef0f571e073faa6d8ff1f0559ab1272188ea2be/psutil-7.2.2-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc", size = 148266 }, + { url = "https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl", hash = "sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988", size = 137737 }, + { url = "https://files.pythonhosted.org/packages/8c/c7/7bb2e321574b10df20cbde462a94e2b71d05f9bbda251ef27d104668306a/psutil-7.2.2-cp37-abi3-win_arm64.whl", hash = "sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee", size = 134617 }, +] + +[[package]] +name = "ptyprocess" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993 }, +] + +[[package]] +name = "pure-eval" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842 }, +] + +[[package]] +name = "pyamapping" +source = { editable = "." } +dependencies = [ + { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "numpy", version = "2.4.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "scipy", version = "1.13.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] + +[package.optional-dependencies] +example-notebooks = [ + { name = "notebook" }, +] + +[package.dev-dependencies] +dev = [ + { name = "pre-commit", version = "4.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "pre-commit", version = "4.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "pytest", version = "8.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "pytest", version = "9.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "pytest-cov" }, + { name = "sphinx", version = "7.4.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, + { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "tox", version = "4.30.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "tox", version = "4.52.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, +] + +[package.metadata] +requires-dist = [ + { name = "notebook", marker = "extra == 'example-notebooks'" }, + { name = "numpy" }, + { name = "scipy" }, +] +provides-extras = ["example-notebooks"] + +[package.metadata.requires-dev] +dev = [ + { name = "pre-commit" }, + { name = "pytest" }, + { name = "pytest-cov" }, + { name = "sphinx" }, + { name = "tox" }, +] + +[[package]] +name = "pycparser" +version = "2.23" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/fe/cf/d2d3b9f5699fb1e4615c8e32ff220203e43b248e1dfcc6736ad9057731ca/pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2", size = 173734 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934", size = 118140 }, +] + +[[package]] +name = "pycparser" +version = "3.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", size = 103492 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172 }, +] + +[[package]] +name = "pygments" +version = "2.20.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151 }, +] + +[[package]] +name = "pyproject-api" +version = "1.9.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "packaging", marker = "python_full_version < '3.10'" }, + { name = "tomli", marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/fd/437901c891f58a7b9096511750247535e891d2d5a5a6eefbc9386a2b41d5/pyproject_api-1.9.1.tar.gz", hash = "sha256:43c9918f49daab37e302038fc1aed54a8c7a91a9fa935d00b9a485f37e0f5335", size = 22710 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/e6/c293c06695d4a3ab0260ef124a74ebadba5f4c511ce3a4259e976902c00b/pyproject_api-1.9.1-py3-none-any.whl", hash = "sha256:7d6238d92f8962773dd75b5f0c4a6a27cce092a14b623b811dba656f3b628948", size = 13158 }, +] + +[[package]] +name = "pyproject-api" +version = "1.10.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "packaging", marker = "python_full_version >= '3.10'" }, + { name = "tomli", marker = "python_full_version == '3.10.*'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/45/7b/c0e1333b61d41c69e59e5366e727b18c4992688caf0de1be10b3e5265f6b/pyproject_api-1.10.0.tar.gz", hash = "sha256:40c6f2d82eebdc4afee61c773ed208c04c19db4c4a60d97f8d7be3ebc0bbb330", size = 22785 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/cc/cecf97be298bee2b2a37dd360618c819a2a7fd95251d8e480c1f0eb88f3b/pyproject_api-1.10.0-py3-none-any.whl", hash = "sha256:8757c41a79c0f4ab71b99abed52b97ecf66bd20b04fa59da43b5840bac105a09", size = 13218 }, +] + +[[package]] +name = "pytest" +version = "8.4.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "colorama", marker = "python_full_version < '3.10' and sys_platform == 'win32'" }, + { name = "exceptiongroup", marker = "python_full_version < '3.10'" }, + { name = "iniconfig", version = "2.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "packaging", marker = "python_full_version < '3.10'" }, + { name = "pluggy", marker = "python_full_version < '3.10'" }, + { name = "pygments", marker = "python_full_version < '3.10'" }, + { name = "tomli", marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a3/5c/00a0e072241553e1a7496d638deababa67c5058571567b92a7eaa258397c/pytest-8.4.2.tar.gz", hash = "sha256:86c0d0b93306b961d58d62a4db4879f27fe25513d4b969df351abdddb3c30e01", size = 1519618 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a8/a4/20da314d277121d6534b3a980b29035dcd51e6744bd79075a6ce8fa4eb8d/pytest-8.4.2-py3-none-any.whl", hash = "sha256:872f880de3fc3a5bdc88a11b39c9710c3497a547cfa9320bc3c5e62fbf272e79", size = 365750 }, +] + +[[package]] +name = "pytest" +version = "9.0.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "colorama", marker = "python_full_version >= '3.10' and sys_platform == 'win32'" }, + { name = "exceptiongroup", marker = "python_full_version == '3.10.*'" }, + { name = "iniconfig", version = "2.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "packaging", marker = "python_full_version >= '3.10'" }, + { name = "pluggy", marker = "python_full_version >= '3.10'" }, + { name = "pygments", marker = "python_full_version >= '3.10'" }, + { name = "tomli", marker = "python_full_version == '3.10.*'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d1/db/7ef3487e0fb0049ddb5ce41d3a49c235bf9ad299b6a25d5780a89f19230f/pytest-9.0.2.tar.gz", hash = "sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11", size = 1568901 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl", hash = "sha256:711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b", size = 374801 }, +] + +[[package]] +name = "pytest-cov" +version = "7.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "coverage", version = "7.10.7", source = { registry = "https://pypi.org/simple" }, extra = ["toml"], marker = "python_full_version < '3.10'" }, + { name = "coverage", version = "7.13.5", source = { registry = "https://pypi.org/simple" }, extra = ["toml"], marker = "python_full_version >= '3.10'" }, + { name = "pluggy" }, + { name = "pytest", version = "8.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "pytest", version = "9.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/51/a849f96e117386044471c8ec2bd6cfebacda285da9525c9106aeb28da671/pytest_cov-7.1.0.tar.gz", hash = "sha256:30674f2b5f6351aa09702a9c8c364f6a01c27aae0c1366ae8016160d1efc56b2", size = 55592 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl", hash = "sha256:a0461110b7865f9a271aa1b51e516c9a95de9d696734a2f71e3e78f46e1d4678", size = 22876 }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 }, +] + +[[package]] +name = "python-discovery" +version = "1.2.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "filelock", version = "3.19.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "platformdirs", version = "4.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b9/88/815e53084c5079a59df912825a279f41dd2e0df82281770eadc732f5352c/python_discovery-1.2.1.tar.gz", hash = "sha256:180c4d114bff1c32462537eac5d6a332b768242b76b69c0259c7d14b1b680c9e", size = 58457 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/0f/019d3949a40280f6193b62bc010177d4ce702d0fce424322286488569cd3/python_discovery-1.2.1-py3-none-any.whl", hash = "sha256:b6a957b24c1cd79252484d3566d1b49527581d46e789aaf43181005e56201502", size = 31674 }, +] + +[[package]] +name = "python-discovery" +version = "1.2.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "filelock", version = "3.25.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "platformdirs", version = "4.9.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/de/ef/3bae0e537cfe91e8431efcba4434463d2c5a65f5a89edd47c6cf2f03c55f/python_discovery-1.2.2.tar.gz", hash = "sha256:876e9c57139eb757cb5878cbdd9ae5379e5d96266c99ef731119e04fffe533bb", size = 58872 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d8/db/795879cc3ddfe338599bddea6388cc5100b088db0a4caf6e6c1af1c27e04/python_discovery-1.2.2-py3-none-any.whl", hash = "sha256:e1ae95d9af875e78f15e19aed0c6137ab1bb49c200f21f5061786490c9585c7a", size = 31894 }, +] + +[[package]] +name = "python-json-logger" +version = "4.0.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/29/bf/eca6a3d43db1dae7070f70e160ab20b807627ba953663ba07928cdd3dc58/python_json_logger-4.0.0.tar.gz", hash = "sha256:f58e68eb46e1faed27e0f574a55a0455eecd7b8a5b88b85a784519ba3cff047f", size = 17683 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.0-py3-none-any.whl", hash = "sha256:af09c9daf6a813aa4cc7180395f50f2a9e5fa056034c9953aec92e381c5ba1e2", size = 15548 }, +] + +[[package]] +name = "python-json-logger" +version = "4.1.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/f7/ff/3cc9165fd44106973cd7ac9facb674a65ed853494592541d339bdc9a30eb/python_json_logger-4.1.0.tar.gz", hash = "sha256:b396b9e3ed782b09ff9d6e4f1683d46c83ad0d35d2e407c09a9ebbf038f88195", size = 17573 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/be/0631a861af4d1c875f096c07d34e9a63639560a717130e7a87cbc82b7e3f/python_json_logger-4.1.0-py3-none-any.whl", hash = "sha256:132994765cf75bf44554be9aa49b06ef2345d23661a96720262716438141b6b2", size = 15021 }, +] + +[[package]] +name = "pywin32" +version = "311" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/40/44efbb0dfbd33aca6a6483191dae0716070ed99e2ecb0c53683f400a0b4f/pywin32-311-cp310-cp310-win32.whl", hash = "sha256:d03ff496d2a0cd4a5893504789d4a15399133fe82517455e78bad62efbb7f0a3", size = 8760432 }, + { url = "https://files.pythonhosted.org/packages/5e/bf/360243b1e953bd254a82f12653974be395ba880e7ec23e3731d9f73921cc/pywin32-311-cp310-cp310-win_amd64.whl", hash = "sha256:797c2772017851984b97180b0bebe4b620bb86328e8a884bb626156295a63b3b", size = 9590103 }, + { url = "https://files.pythonhosted.org/packages/57/38/d290720e6f138086fb3d5ffe0b6caa019a791dd57866940c82e4eeaf2012/pywin32-311-cp310-cp310-win_arm64.whl", hash = "sha256:0502d1facf1fed4839a9a51ccbcc63d952cf318f78ffc00a7e78528ac27d7a2b", size = 8778557 }, + { url = "https://files.pythonhosted.org/packages/7c/af/449a6a91e5d6db51420875c54f6aff7c97a86a3b13a0b4f1a5c13b988de3/pywin32-311-cp311-cp311-win32.whl", hash = "sha256:184eb5e436dea364dcd3d2316d577d625c0351bf237c4e9a5fabbcfa5a58b151", size = 8697031 }, + { url = "https://files.pythonhosted.org/packages/51/8f/9bb81dd5bb77d22243d33c8397f09377056d5c687aa6d4042bea7fbf8364/pywin32-311-cp311-cp311-win_amd64.whl", hash = "sha256:3ce80b34b22b17ccbd937a6e78e7225d80c52f5ab9940fe0506a1a16f3dab503", size = 9508308 }, + { url = "https://files.pythonhosted.org/packages/44/7b/9c2ab54f74a138c491aba1b1cd0795ba61f144c711daea84a88b63dc0f6c/pywin32-311-cp311-cp311-win_arm64.whl", hash = "sha256:a733f1388e1a842abb67ffa8e7aad0e70ac519e09b0f6a784e65a136ec7cefd2", size = 8703930 }, + { url = "https://files.pythonhosted.org/packages/e7/ab/01ea1943d4eba0f850c3c61e78e8dd59757ff815ff3ccd0a84de5f541f42/pywin32-311-cp312-cp312-win32.whl", hash = "sha256:750ec6e621af2b948540032557b10a2d43b0cee2ae9758c54154d711cc852d31", size = 8706543 }, + { url = "https://files.pythonhosted.org/packages/d1/a8/a0e8d07d4d051ec7502cd58b291ec98dcc0c3fff027caad0470b72cfcc2f/pywin32-311-cp312-cp312-win_amd64.whl", hash = "sha256:b8c095edad5c211ff31c05223658e71bf7116daa0ecf3ad85f3201ea3190d067", size = 9495040 }, + { url = "https://files.pythonhosted.org/packages/ba/3a/2ae996277b4b50f17d61f0603efd8253cb2d79cc7ae159468007b586396d/pywin32-311-cp312-cp312-win_arm64.whl", hash = "sha256:e286f46a9a39c4a18b319c28f59b61de793654af2f395c102b4f819e584b5852", size = 8710102 }, + { url = "https://files.pythonhosted.org/packages/a5/be/3fd5de0979fcb3994bfee0d65ed8ca9506a8a1260651b86174f6a86f52b3/pywin32-311-cp313-cp313-win32.whl", hash = "sha256:f95ba5a847cba10dd8c4d8fefa9f2a6cf283b8b88ed6178fa8a6c1ab16054d0d", size = 8705700 }, + { url = "https://files.pythonhosted.org/packages/e3/28/e0a1909523c6890208295a29e05c2adb2126364e289826c0a8bc7297bd5c/pywin32-311-cp313-cp313-win_amd64.whl", hash = "sha256:718a38f7e5b058e76aee1c56ddd06908116d35147e133427e59a3983f703a20d", size = 9494700 }, + { url = "https://files.pythonhosted.org/packages/04/bf/90339ac0f55726dce7d794e6d79a18a91265bdf3aa70b6b9ca52f35e022a/pywin32-311-cp313-cp313-win_arm64.whl", hash = "sha256:7b4075d959648406202d92a2310cb990fea19b535c7f4a78d3f5e10b926eeb8a", size = 8709318 }, + { url = "https://files.pythonhosted.org/packages/c9/31/097f2e132c4f16d99a22bfb777e0fd88bd8e1c634304e102f313af69ace5/pywin32-311-cp314-cp314-win32.whl", hash = "sha256:b7a2c10b93f8986666d0c803ee19b5990885872a7de910fc460f9b0c2fbf92ee", size = 8840714 }, + { url = "https://files.pythonhosted.org/packages/90/4b/07c77d8ba0e01349358082713400435347df8426208171ce297da32c313d/pywin32-311-cp314-cp314-win_amd64.whl", hash = "sha256:3aca44c046bd2ed8c90de9cb8427f581c479e594e99b5c0bb19b29c10fd6cb87", size = 9656800 }, + { url = "https://files.pythonhosted.org/packages/c0/d2/21af5c535501a7233e734b8af901574572da66fcc254cb35d0609c9080dd/pywin32-311-cp314-cp314-win_arm64.whl", hash = "sha256:a508e2d9025764a8270f93111a970e1d0fbfc33f4153b388bb649b7eec4f9b42", size = 8932540 }, + { url = "https://files.pythonhosted.org/packages/59/42/b86689aac0cdaee7ae1c58d464b0ff04ca909c19bb6502d4973cdd9f9544/pywin32-311-cp39-cp39-win32.whl", hash = "sha256:aba8f82d551a942cb20d4a83413ccbac30790b50efb89a75e4f586ac0bb8056b", size = 8760837 }, + { url = "https://files.pythonhosted.org/packages/9f/8a/1403d0353f8c5a2f0829d2b1c4becbf9da2f0a4d040886404fc4a5431e4d/pywin32-311-cp39-cp39-win_amd64.whl", hash = "sha256:e0c4cfb0621281fe40387df582097fd796e80430597cb9944f0ae70447bacd91", size = 9590187 }, + { url = "https://files.pythonhosted.org/packages/60/22/e0e8d802f124772cec9c75430b01a212f86f9de7546bda715e54140d5aeb/pywin32-311-cp39-cp39-win_arm64.whl", hash = "sha256:62ea666235135fee79bb154e695f3ff67370afefd71bd7fea7512fc70ef31e3d", size = 8778162 }, +] + +[[package]] +name = "pywinpty" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f7/54/37c7370ba91f579235049dc26cd2c5e657d2a943e01820844ffc81f32176/pywinpty-3.0.3.tar.gz", hash = "sha256:523441dc34d231fb361b4b00f8c99d3f16de02f5005fd544a0183112bcc22412", size = 31309 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/28/a652709bd76ca7533cd1c443b03add9f5051fdf71bc6bdb8801dddd4e7a3/pywinpty-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:ff05f12d775b142b11c6fe085129bdd759b61cf7d41da6c745e78e3a1ef5bf40", size = 2114320 }, + { url = "https://files.pythonhosted.org/packages/b2/13/a0181cc5c2d5635d3dbc3802b97bc8e3ad4fa7502ccef576651a5e08e54c/pywinpty-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:340ccacb4d74278a631923794ccd758471cfc8eeeeee4610b280420a17ad1e82", size = 235670 }, + { url = "https://files.pythonhosted.org/packages/79/c3/3e75075c7f71735f22b66fab0481f2c98e3a4d58cba55cb50ba29114bcf6/pywinpty-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:dff25a9a6435f527d7c65608a7e62783fc12076e7d44487a4911ee91be5a8ac8", size = 2114430 }, + { url = "https://files.pythonhosted.org/packages/8d/1e/8a54166a8c5e4f5cb516514bdf4090be4d51a71e8d9f6d98c0aa00fe45d4/pywinpty-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:fbc1e230e5b193eef4431cba3f39996a288f9958f9c9f092c8a961d930ee8f68", size = 236191 }, + { url = "https://files.pythonhosted.org/packages/7c/d4/aeb5e1784d2c5bff6e189138a9ca91a090117459cea0c30378e1f2db3d54/pywinpty-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:c9081df0e49ffa86d15db4a6ba61530630e48707f987df42c9d3313537e81fc0", size = 2113098 }, + { url = "https://files.pythonhosted.org/packages/b9/53/7278223c493ccfe4883239cf06c823c56460a8010e0fc778eef67858dc14/pywinpty-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:15e79d870e18b678fb8a5a6105fd38496b55697c66e6fc0378236026bc4d59e9", size = 234901 }, + { url = "https://files.pythonhosted.org/packages/e5/cb/58d6ed3fd429c96a90ef01ac9a617af10a6d41469219c25e7dc162abbb71/pywinpty-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9c91dbb026050c77bdcef964e63a4f10f01a639113c4d3658332614544c467ab", size = 2112686 }, + { url = "https://files.pythonhosted.org/packages/fd/50/724ed5c38c504d4e58a88a072776a1e880d970789deaeb2b9f7bd9a5141a/pywinpty-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:fe1f7911805127c94cf51f89ab14096c6f91ffdcacf993d2da6082b2142a2523", size = 234591 }, + { url = "https://files.pythonhosted.org/packages/f7/ad/90a110538696b12b39fd8758a06d70ded899308198ad2305ac68e361126e/pywinpty-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:3f07a6cf1c1d470d284e614733c3d0f726d2c85e78508ea10a403140c3c0c18a", size = 2112360 }, + { url = "https://files.pythonhosted.org/packages/44/0f/7ffa221757a220402bc79fda44044c3f2cc57338d878ab7d622add6f4581/pywinpty-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:15c7c0b6f8e9d87aabbaff76468dabf6e6121332c40fc1d83548d02a9d6a3759", size = 233107 }, + { url = "https://files.pythonhosted.org/packages/28/88/2ff917caff61e55f38bcdb27de06ee30597881b2cae44fbba7627be015c4/pywinpty-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:d4b6b7b0fe0cdcd02e956bd57cfe9f4e5a06514eecf3b5ae174da4f951b58be9", size = 2113282 }, + { url = "https://files.pythonhosted.org/packages/63/32/40a775343ace542cc43ece3f1d1fce454021521ecac41c4c4573081c2336/pywinpty-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:34789d685fc0d547ce0c8a65e5a70e56f77d732fa6e03c8f74fefb8cbb252019", size = 234207 }, + { url = "https://files.pythonhosted.org/packages/8d/54/5d5e52f4cb75028104ca6faf36c10f9692389b1986d34471663b4ebebd6d/pywinpty-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:0c37e224a47a971d1a6e08649a1714dac4f63c11920780977829ed5c8cadead1", size = 2112910 }, + { url = "https://files.pythonhosted.org/packages/0a/44/dcd184824e21d4620b06c7db9fbb15c3ad0a0f1fa2e6de79969fb82647ec/pywinpty-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:c4e9c3dff7d86ba81937438d5819f19f385a39d8f592d4e8af67148ceb4f6ab5", size = 233425 }, + { url = "https://files.pythonhosted.org/packages/d7/48/57c3d4e63aa93280ad1b1c2b3a5412d9d1fdee9955fa0aef43a84518d31b/pywinpty-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:0f10e81d52d7f2c4d927f645f247028e64eaf205a3ed9e64dbd998122108a218", size = 2116037 }, +] + +[[package]] +name = "pyyaml" +version = "6.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227 }, + { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019 }, + { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646 }, + { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793 }, + { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293 }, + { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872 }, + { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828 }, + { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415 }, + { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561 }, + { url = "https://files.pythonhosted.org/packages/6d/16/a95b6757765b7b031c9374925bb718d55e0a9ba8a1b6a12d25962ea44347/pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e", size = 185826 }, + { url = "https://files.pythonhosted.org/packages/16/19/13de8e4377ed53079ee996e1ab0a9c33ec2faf808a4647b7b4c0d46dd239/pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824", size = 175577 }, + { url = "https://files.pythonhosted.org/packages/0c/62/d2eb46264d4b157dae1275b573017abec435397aa59cbcdab6fc978a8af4/pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c", size = 775556 }, + { url = "https://files.pythonhosted.org/packages/10/cb/16c3f2cf3266edd25aaa00d6c4350381c8b012ed6f5276675b9eba8d9ff4/pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00", size = 882114 }, + { url = "https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d", size = 806638 }, + { url = "https://files.pythonhosted.org/packages/dd/6f/529b0f316a9fd167281a6c3826b5583e6192dba792dd55e3203d3f8e655a/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a", size = 767463 }, + { url = "https://files.pythonhosted.org/packages/f2/6a/b627b4e0c1dd03718543519ffb2f1deea4a1e6d42fbab8021936a4d22589/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4", size = 794986 }, + { url = "https://files.pythonhosted.org/packages/45/91/47a6e1c42d9ee337c4839208f30d9f09caa9f720ec7582917b264defc875/pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b", size = 142543 }, + { url = "https://files.pythonhosted.org/packages/da/e3/ea007450a105ae919a72393cb06f122f288ef60bba2dc64b26e2646fa315/pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf", size = 158763 }, + { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063 }, + { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973 }, + { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116 }, + { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011 }, + { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870 }, + { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089 }, + { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181 }, + { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658 }, + { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003 }, + { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344 }, + { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669 }, + { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252 }, + { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081 }, + { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159 }, + { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626 }, + { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613 }, + { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115 }, + { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427 }, + { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090 }, + { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246 }, + { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814 }, + { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809 }, + { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454 }, + { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355 }, + { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175 }, + { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228 }, + { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194 }, + { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429 }, + { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912 }, + { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108 }, + { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641 }, + { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901 }, + { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132 }, + { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261 }, + { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272 }, + { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923 }, + { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062 }, + { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341 }, + { url = "https://files.pythonhosted.org/packages/9f/62/67fc8e68a75f738c9200422bf65693fb79a4cd0dc5b23310e5202e978090/pyyaml-6.0.3-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:b865addae83924361678b652338317d1bd7e79b1f4596f96b96c77a5a34b34da", size = 184450 }, + { url = "https://files.pythonhosted.org/packages/ae/92/861f152ce87c452b11b9d0977952259aa7df792d71c1053365cc7b09cc08/pyyaml-6.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c3355370a2c156cffb25e876646f149d5d68f5e0a3ce86a5084dd0b64a994917", size = 174319 }, + { url = "https://files.pythonhosted.org/packages/d0/cd/f0cfc8c74f8a030017a2b9c771b7f47e5dd702c3e28e5b2071374bda2948/pyyaml-6.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3c5677e12444c15717b902a5798264fa7909e41153cdf9ef7ad571b704a63dd9", size = 737631 }, + { url = "https://files.pythonhosted.org/packages/ef/b2/18f2bd28cd2055a79a46c9b0895c0b3d987ce40ee471cecf58a1a0199805/pyyaml-6.0.3-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5ed875a24292240029e4483f9d4a4b8a1ae08843b9c54f43fcc11e404532a8a5", size = 836795 }, + { url = "https://files.pythonhosted.org/packages/73/b9/793686b2d54b531203c160ef12bec60228a0109c79bae6c1277961026770/pyyaml-6.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0150219816b6a1fa26fb4699fb7daa9caf09eb1999f3b70fb6e786805e80375a", size = 750767 }, + { url = "https://files.pythonhosted.org/packages/a9/86/a137b39a611def2ed78b0e66ce2fe13ee701a07c07aebe55c340ed2a050e/pyyaml-6.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fa160448684b4e94d80416c0fa4aac48967a969efe22931448d853ada8baf926", size = 727982 }, + { url = "https://files.pythonhosted.org/packages/dd/62/71c27c94f457cf4418ef8ccc71735324c549f7e3ea9d34aba50874563561/pyyaml-6.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:27c0abcb4a5dac13684a37f76e701e054692a9b2d3064b70f5e4eb54810553d7", size = 755677 }, + { url = "https://files.pythonhosted.org/packages/29/3d/6f5e0d58bd924fb0d06c3a6bad00effbdae2de5adb5cda5648006ffbd8d3/pyyaml-6.0.3-cp39-cp39-win32.whl", hash = "sha256:1ebe39cb5fc479422b83de611d14e2c0d3bb2a18bbcb01f229ab3cfbd8fee7a0", size = 142592 }, + { url = "https://files.pythonhosted.org/packages/f0/0c/25113e0b5e103d7f1490c0e947e303fe4a696c10b501dea7a9f49d4e876c/pyyaml-6.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:2e71d11abed7344e42a8849600193d15b6def118602c4c176f748e4583246007", size = 158777 }, +] + +[[package]] +name = "pyzmq" +version = "27.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "implementation_name == 'pypy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/04/0b/3c9baedbdf613ecaa7aa07027780b8867f57b6293b6ee50de316c9f3222b/pyzmq-27.1.0.tar.gz", hash = "sha256:ac0765e3d44455adb6ddbf4417dcce460fc40a05978c08efdf2948072f6db540", size = 281750 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/b9/52aa9ec2867528b54f1e60846728d8b4d84726630874fee3a91e66c7df81/pyzmq-27.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:508e23ec9bc44c0005c4946ea013d9317ae00ac67778bd47519fdf5a0e930ff4", size = 1329850 }, + { url = "https://files.pythonhosted.org/packages/99/64/5653e7b7425b169f994835a2b2abf9486264401fdef18df91ddae47ce2cc/pyzmq-27.1.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:507b6f430bdcf0ee48c0d30e734ea89ce5567fd7b8a0f0044a369c176aa44556", size = 906380 }, + { url = "https://files.pythonhosted.org/packages/73/78/7d713284dbe022f6440e391bd1f3c48d9185673878034cfb3939cdf333b2/pyzmq-27.1.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf7b38f9fd7b81cb6d9391b2946382c8237fd814075c6aa9c3b746d53076023b", size = 666421 }, + { url = "https://files.pythonhosted.org/packages/30/76/8f099f9d6482450428b17c4d6b241281af7ce6a9de8149ca8c1c649f6792/pyzmq-27.1.0-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:03ff0b279b40d687691a6217c12242ee71f0fba28bf8626ff50e3ef0f4410e1e", size = 854149 }, + { url = "https://files.pythonhosted.org/packages/59/f0/37fbfff06c68016019043897e4c969ceab18bde46cd2aca89821fcf4fb2e/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:677e744fee605753eac48198b15a2124016c009a11056f93807000ab11ce6526", size = 1655070 }, + { url = "https://files.pythonhosted.org/packages/47/14/7254be73f7a8edc3587609554fcaa7bfd30649bf89cd260e4487ca70fdaa/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dd2fec2b13137416a1c5648b7009499bcc8fea78154cd888855fa32514f3dad1", size = 2033441 }, + { url = "https://files.pythonhosted.org/packages/22/dc/49f2be26c6f86f347e796a4d99b19167fc94503f0af3fd010ad262158822/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:08e90bb4b57603b84eab1d0ca05b3bbb10f60c1839dc471fc1c9e1507bef3386", size = 1891529 }, + { url = "https://files.pythonhosted.org/packages/a3/3e/154fb963ae25be70c0064ce97776c937ecc7d8b0259f22858154a9999769/pyzmq-27.1.0-cp310-cp310-win32.whl", hash = "sha256:a5b42d7a0658b515319148875fcb782bbf118dd41c671b62dae33666c2213bda", size = 567276 }, + { url = "https://files.pythonhosted.org/packages/62/b2/f4ab56c8c595abcb26b2be5fd9fa9e6899c1e5ad54964e93ae8bb35482be/pyzmq-27.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:c0bb87227430ee3aefcc0ade2088100e528d5d3298a0a715a64f3d04c60ba02f", size = 632208 }, + { url = "https://files.pythonhosted.org/packages/3b/e3/be2cc7ab8332bdac0522fdb64c17b1b6241a795bee02e0196636ec5beb79/pyzmq-27.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:9a916f76c2ab8d045b19f2286851a38e9ac94ea91faf65bd64735924522a8b32", size = 559766 }, + { url = "https://files.pythonhosted.org/packages/06/5d/305323ba86b284e6fcb0d842d6adaa2999035f70f8c38a9b6d21ad28c3d4/pyzmq-27.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:226b091818d461a3bef763805e75685e478ac17e9008f49fce2d3e52b3d58b86", size = 1333328 }, + { url = "https://files.pythonhosted.org/packages/bd/a0/fc7e78a23748ad5443ac3275943457e8452da67fda347e05260261108cbc/pyzmq-27.1.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:0790a0161c281ca9723f804871b4027f2e8b5a528d357c8952d08cd1a9c15581", size = 908803 }, + { url = "https://files.pythonhosted.org/packages/7e/22/37d15eb05f3bdfa4abea6f6d96eb3bb58585fbd3e4e0ded4e743bc650c97/pyzmq-27.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c895a6f35476b0c3a54e3eb6ccf41bf3018de937016e6e18748317f25d4e925f", size = 668836 }, + { url = "https://files.pythonhosted.org/packages/b1/c4/2a6fe5111a01005fc7af3878259ce17684fabb8852815eda6225620f3c59/pyzmq-27.1.0-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5bbf8d3630bf96550b3be8e1fc0fea5cbdc8d5466c1192887bd94869da17a63e", size = 857038 }, + { url = "https://files.pythonhosted.org/packages/cb/eb/bfdcb41d0db9cd233d6fb22dc131583774135505ada800ebf14dfb0a7c40/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:15c8bd0fe0dabf808e2d7a681398c4e5ded70a551ab47482067a572c054c8e2e", size = 1657531 }, + { url = "https://files.pythonhosted.org/packages/ab/21/e3180ca269ed4a0de5c34417dfe71a8ae80421198be83ee619a8a485b0c7/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:bafcb3dd171b4ae9f19ee6380dfc71ce0390fefaf26b504c0e5f628d7c8c54f2", size = 2034786 }, + { url = "https://files.pythonhosted.org/packages/3b/b1/5e21d0b517434b7f33588ff76c177c5a167858cc38ef740608898cd329f2/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e829529fcaa09937189178115c49c504e69289abd39967cd8a4c215761373394", size = 1894220 }, + { url = "https://files.pythonhosted.org/packages/03/f2/44913a6ff6941905efc24a1acf3d3cb6146b636c546c7406c38c49c403d4/pyzmq-27.1.0-cp311-cp311-win32.whl", hash = "sha256:6df079c47d5902af6db298ec92151db82ecb557af663098b92f2508c398bb54f", size = 567155 }, + { url = "https://files.pythonhosted.org/packages/23/6d/d8d92a0eb270a925c9b4dd039c0b4dc10abc2fcbc48331788824ef113935/pyzmq-27.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:190cbf120fbc0fc4957b56866830def56628934a9d112aec0e2507aa6a032b97", size = 633428 }, + { url = "https://files.pythonhosted.org/packages/ae/14/01afebc96c5abbbd713ecfc7469cfb1bc801c819a74ed5c9fad9a48801cb/pyzmq-27.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:eca6b47df11a132d1745eb3b5b5e557a7dae2c303277aa0e69c6ba91b8736e07", size = 559497 }, + { url = "https://files.pythonhosted.org/packages/92/e7/038aab64a946d535901103da16b953c8c9cc9c961dadcbf3609ed6428d23/pyzmq-27.1.0-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:452631b640340c928fa343801b0d07eb0c3789a5ffa843f6e1a9cee0ba4eb4fc", size = 1306279 }, + { url = "https://files.pythonhosted.org/packages/e8/5e/c3c49fdd0f535ef45eefcc16934648e9e59dace4a37ee88fc53f6cd8e641/pyzmq-27.1.0-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1c179799b118e554b66da67d88ed66cd37a169f1f23b5d9f0a231b4e8d44a113", size = 895645 }, + { url = "https://files.pythonhosted.org/packages/f8/e5/b0b2504cb4e903a74dcf1ebae157f9e20ebb6ea76095f6cfffea28c42ecd/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3837439b7f99e60312f0c926a6ad437b067356dc2bc2ec96eb395fd0fe804233", size = 652574 }, + { url = "https://files.pythonhosted.org/packages/f8/9b/c108cdb55560eaf253f0cbdb61b29971e9fb34d9c3499b0e96e4e60ed8a5/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43ad9a73e3da1fab5b0e7e13402f0b2fb934ae1c876c51d0afff0e7c052eca31", size = 840995 }, + { url = "https://files.pythonhosted.org/packages/c2/bb/b79798ca177b9eb0825b4c9998c6af8cd2a7f15a6a1a4272c1d1a21d382f/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0de3028d69d4cdc475bfe47a6128eb38d8bc0e8f4d69646adfbcd840facbac28", size = 1642070 }, + { url = "https://files.pythonhosted.org/packages/9c/80/2df2e7977c4ede24c79ae39dcef3899bfc5f34d1ca7a5b24f182c9b7a9ca/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:cf44a7763aea9298c0aa7dbf859f87ed7012de8bda0f3977b6fb1d96745df856", size = 2021121 }, + { url = "https://files.pythonhosted.org/packages/46/bd/2d45ad24f5f5ae7e8d01525eb76786fa7557136555cac7d929880519e33a/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f30f395a9e6fbca195400ce833c731e7b64c3919aa481af4d88c3759e0cb7496", size = 1878550 }, + { url = "https://files.pythonhosted.org/packages/e6/2f/104c0a3c778d7c2ab8190e9db4f62f0b6957b53c9d87db77c284b69f33ea/pyzmq-27.1.0-cp312-abi3-win32.whl", hash = "sha256:250e5436a4ba13885494412b3da5d518cd0d3a278a1ae640e113c073a5f88edd", size = 559184 }, + { url = "https://files.pythonhosted.org/packages/fc/7f/a21b20d577e4100c6a41795842028235998a643b1ad406a6d4163ea8f53e/pyzmq-27.1.0-cp312-abi3-win_amd64.whl", hash = "sha256:9ce490cf1d2ca2ad84733aa1d69ce6855372cb5ce9223802450c9b2a7cba0ccf", size = 619480 }, + { url = "https://files.pythonhosted.org/packages/78/c2/c012beae5f76b72f007a9e91ee9401cb88c51d0f83c6257a03e785c81cc2/pyzmq-27.1.0-cp312-abi3-win_arm64.whl", hash = "sha256:75a2f36223f0d535a0c919e23615fc85a1e23b71f40c7eb43d7b1dedb4d8f15f", size = 552993 }, + { url = "https://files.pythonhosted.org/packages/60/cb/84a13459c51da6cec1b7b1dc1a47e6db6da50b77ad7fd9c145842750a011/pyzmq-27.1.0-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:93ad4b0855a664229559e45c8d23797ceac03183c7b6f5b4428152a6b06684a5", size = 1122436 }, + { url = "https://files.pythonhosted.org/packages/dc/b6/94414759a69a26c3dd674570a81813c46a078767d931a6c70ad29fc585cb/pyzmq-27.1.0-cp313-cp313-android_24_x86_64.whl", hash = "sha256:fbb4f2400bfda24f12f009cba62ad5734148569ff4949b1b6ec3b519444342e6", size = 1156301 }, + { url = "https://files.pythonhosted.org/packages/a5/ad/15906493fd40c316377fd8a8f6b1f93104f97a752667763c9b9c1b71d42d/pyzmq-27.1.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:e343d067f7b151cfe4eb3bb796a7752c9d369eed007b91231e817071d2c2fec7", size = 1341197 }, + { url = "https://files.pythonhosted.org/packages/14/1d/d343f3ce13db53a54cb8946594e567410b2125394dafcc0268d8dda027e0/pyzmq-27.1.0-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:08363b2011dec81c354d694bdecaef4770e0ae96b9afea70b3f47b973655cc05", size = 897275 }, + { url = "https://files.pythonhosted.org/packages/69/2d/d83dd6d7ca929a2fc67d2c3005415cdf322af7751d773524809f9e585129/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d54530c8c8b5b8ddb3318f481297441af102517602b569146185fa10b63f4fa9", size = 660469 }, + { url = "https://files.pythonhosted.org/packages/3e/cd/9822a7af117f4bc0f1952dbe9ef8358eb50a24928efd5edf54210b850259/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f3afa12c392f0a44a2414056d730eebc33ec0926aae92b5ad5cf26ebb6cc128", size = 847961 }, + { url = "https://files.pythonhosted.org/packages/9a/12/f003e824a19ed73be15542f172fd0ec4ad0b60cf37436652c93b9df7c585/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c65047adafe573ff023b3187bb93faa583151627bc9c51fc4fb2c561ed689d39", size = 1650282 }, + { url = "https://files.pythonhosted.org/packages/d5/4a/e82d788ed58e9a23995cee70dbc20c9aded3d13a92d30d57ec2291f1e8a3/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:90e6e9441c946a8b0a667356f7078d96411391a3b8f80980315455574177ec97", size = 2024468 }, + { url = "https://files.pythonhosted.org/packages/d9/94/2da0a60841f757481e402b34bf4c8bf57fa54a5466b965de791b1e6f747d/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:add071b2d25f84e8189aaf0882d39a285b42fa3853016ebab234a5e78c7a43db", size = 1885394 }, + { url = "https://files.pythonhosted.org/packages/4f/6f/55c10e2e49ad52d080dc24e37adb215e5b0d64990b57598abc2e3f01725b/pyzmq-27.1.0-cp313-cp313t-win32.whl", hash = "sha256:7ccc0700cfdf7bd487bea8d850ec38f204478681ea02a582a8da8171b7f90a1c", size = 574964 }, + { url = "https://files.pythonhosted.org/packages/87/4d/2534970ba63dd7c522d8ca80fb92777f362c0f321900667c615e2067cb29/pyzmq-27.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:8085a9fba668216b9b4323be338ee5437a235fe275b9d1610e422ccc279733e2", size = 641029 }, + { url = "https://files.pythonhosted.org/packages/f6/fa/f8aea7a28b0641f31d40dea42d7ef003fded31e184ef47db696bc74cd610/pyzmq-27.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:6bb54ca21bcfe361e445256c15eedf083f153811c37be87e0514934d6913061e", size = 561541 }, + { url = "https://files.pythonhosted.org/packages/87/45/19efbb3000956e82d0331bafca5d9ac19ea2857722fa2caacefb6042f39d/pyzmq-27.1.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:ce980af330231615756acd5154f29813d553ea555485ae712c491cd483df6b7a", size = 1341197 }, + { url = "https://files.pythonhosted.org/packages/48/43/d72ccdbf0d73d1343936296665826350cb1e825f92f2db9db3e61c2162a2/pyzmq-27.1.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1779be8c549e54a1c38f805e56d2a2e5c009d26de10921d7d51cfd1c8d4632ea", size = 897175 }, + { url = "https://files.pythonhosted.org/packages/2f/2e/a483f73a10b65a9ef0161e817321d39a770b2acf8bcf3004a28d90d14a94/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7200bb0f03345515df50d99d3db206a0a6bee1955fbb8c453c76f5bf0e08fb96", size = 660427 }, + { url = "https://files.pythonhosted.org/packages/f5/d2/5f36552c2d3e5685abe60dfa56f91169f7a2d99bbaf67c5271022ab40863/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01c0e07d558b06a60773744ea6251f769cd79a41a97d11b8bf4ab8f034b0424d", size = 847929 }, + { url = "https://files.pythonhosted.org/packages/c4/2a/404b331f2b7bf3198e9945f75c4c521f0c6a3a23b51f7a4a401b94a13833/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:80d834abee71f65253c91540445d37c4c561e293ba6e741b992f20a105d69146", size = 1650193 }, + { url = "https://files.pythonhosted.org/packages/1c/0b/f4107e33f62a5acf60e3ded67ed33d79b4ce18de432625ce2fc5093d6388/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:544b4e3b7198dde4a62b8ff6685e9802a9a1ebf47e77478a5eb88eca2a82f2fd", size = 2024388 }, + { url = "https://files.pythonhosted.org/packages/0d/01/add31fe76512642fd6e40e3a3bd21f4b47e242c8ba33efb6809e37076d9b/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cedc4c68178e59a4046f97eca31b148ddcf51e88677de1ef4e78cf06c5376c9a", size = 1885316 }, + { url = "https://files.pythonhosted.org/packages/c4/59/a5f38970f9bf07cee96128de79590bb354917914a9be11272cfc7ff26af0/pyzmq-27.1.0-cp314-cp314t-win32.whl", hash = "sha256:1f0b2a577fd770aa6f053211a55d1c47901f4d537389a034c690291485e5fe92", size = 587472 }, + { url = "https://files.pythonhosted.org/packages/70/d8/78b1bad170f93fcf5e3536e70e8fadac55030002275c9a29e8f5719185de/pyzmq-27.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:19c9468ae0437f8074af379e986c5d3d7d7bfe033506af442e8c879732bedbe0", size = 661401 }, + { url = "https://files.pythonhosted.org/packages/81/d6/4bfbb40c9a0b42fc53c7cf442f6385db70b40f74a783130c5d0a5aa62228/pyzmq-27.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:dc5dbf68a7857b59473f7df42650c621d7e8923fb03fa74a526890f4d33cc4d7", size = 575170 }, + { url = "https://files.pythonhosted.org/packages/ac/4e/782eb6df91b6a9d9afa96c2dcfc5cac62562a68eb62a02210101f886014d/pyzmq-27.1.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:96c71c32fff75957db6ae33cd961439f386505c6e6b377370af9b24a1ef9eafb", size = 1330426 }, + { url = "https://files.pythonhosted.org/packages/8d/ca/2b8693d06b1db4e0c084871e4c9d7842b561d0a6ff9d780640f5e3e9eb55/pyzmq-27.1.0-cp39-cp39-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:49d3980544447f6bd2968b6ac913ab963a49dcaa2d4a2990041f16057b04c429", size = 906559 }, + { url = "https://files.pythonhosted.org/packages/6a/b3/b99b39e2cfdcebd512959780e4d299447fd7f46010b1d88d63324e2481ec/pyzmq-27.1.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:849ca054d81aa1c175c49484afaaa5db0622092b5eccb2055f9f3bb8f703782d", size = 863816 }, + { url = "https://files.pythonhosted.org/packages/61/b2/018fa8e8eefb34a625b1a45e2effcbc9885645b22cdd0a68283f758351e7/pyzmq-27.1.0-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3970778e74cb7f85934d2b926b9900e92bfe597e62267d7499acc39c9c28e345", size = 666735 }, + { url = "https://files.pythonhosted.org/packages/01/05/8ae778f7cd7c94030731ae2305e6a38f3a333b6825f56c0c03f2134ccf1b/pyzmq-27.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:da96ecdcf7d3919c3be2de91a8c513c186f6762aa6cf7c01087ed74fad7f0968", size = 1655425 }, + { url = "https://files.pythonhosted.org/packages/ad/ad/d69478a97a3f3142f9dbbbd9daa4fcf42541913a85567c36d4cfc19b2218/pyzmq-27.1.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:9541c444cfe1b1c0156c5c86ece2bb926c7079a18e7b47b0b1b3b1b875e5d098", size = 2033729 }, + { url = "https://files.pythonhosted.org/packages/9a/6d/e3c6ad05bc1cddd25094e66cc15ae8924e15c67e231e93ed2955c401007e/pyzmq-27.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e30a74a39b93e2e1591b58eb1acef4902be27c957a8720b0e368f579b82dc22f", size = 1891803 }, + { url = "https://files.pythonhosted.org/packages/7f/a7/97e8be0daaca157511563160b67a13d4fe76b195e3fa6873cb554ad46be3/pyzmq-27.1.0-cp39-cp39-win32.whl", hash = "sha256:b1267823d72d1e40701dcba7edc45fd17f71be1285557b7fe668887150a14b78", size = 567627 }, + { url = "https://files.pythonhosted.org/packages/5c/91/70bbf3a7c5b04c904261ef5ba224d8a76315f6c23454251bf5f55573a8a1/pyzmq-27.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:0c996ded912812a2fcd7ab6574f4ad3edc27cb6510349431e4930d4196ade7db", size = 632315 }, + { url = "https://files.pythonhosted.org/packages/cc/b5/a4173a83c7fd37f6bdb5a800ea338bc25603284e9ef8681377cec006ede4/pyzmq-27.1.0-cp39-cp39-win_arm64.whl", hash = "sha256:346e9ba4198177a07e7706050f35d733e08c1c1f8ceacd5eb6389d653579ffbc", size = 559833 }, + { url = "https://files.pythonhosted.org/packages/f3/81/a65e71c1552f74dec9dff91d95bafb6e0d33338a8dfefbc88aa562a20c92/pyzmq-27.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c17e03cbc9312bee223864f1a2b13a99522e0dc9f7c5df0177cd45210ac286e6", size = 836266 }, + { url = "https://files.pythonhosted.org/packages/58/ed/0202ca350f4f2b69faa95c6d931e3c05c3a397c184cacb84cb4f8f42f287/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:f328d01128373cb6763823b2b4e7f73bdf767834268c565151eacb3b7a392f90", size = 800206 }, + { url = "https://files.pythonhosted.org/packages/47/42/1ff831fa87fe8f0a840ddb399054ca0009605d820e2b44ea43114f5459f4/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c1790386614232e1b3a40a958454bdd42c6d1811837b15ddbb052a032a43f62", size = 567747 }, + { url = "https://files.pythonhosted.org/packages/d1/db/5c4d6807434751e3f21231bee98109aa57b9b9b55e058e450d0aef59b70f/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:448f9cb54eb0cee4732b46584f2710c8bc178b0e5371d9e4fc8125201e413a74", size = 747371 }, + { url = "https://files.pythonhosted.org/packages/26/af/78ce193dbf03567eb8c0dc30e3df2b9e56f12a670bf7eb20f9fb532c7e8a/pyzmq-27.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:05b12f2d32112bf8c95ef2e74ec4f1d4beb01f8b5e703b38537f8849f92cb9ba", size = 544862 }, + { url = "https://files.pythonhosted.org/packages/4c/c6/c4dcdecdbaa70969ee1fdced6d7b8f60cfabe64d25361f27ac4665a70620/pyzmq-27.1.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:18770c8d3563715387139060d37859c02ce40718d1faf299abddcdcc6a649066", size = 836265 }, + { url = "https://files.pythonhosted.org/packages/3e/79/f38c92eeaeb03a2ccc2ba9866f0439593bb08c5e3b714ac1d553e5c96e25/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:ac25465d42f92e990f8d8b0546b01c391ad431c3bf447683fdc40565941d0604", size = 800208 }, + { url = "https://files.pythonhosted.org/packages/49/0e/3f0d0d335c6b3abb9b7b723776d0b21fa7f3a6c819a0db6097059aada160/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53b40f8ae006f2734ee7608d59ed661419f087521edbfc2149c3932e9c14808c", size = 567747 }, + { url = "https://files.pythonhosted.org/packages/a1/cf/f2b3784d536250ffd4be70e049f3b60981235d70c6e8ce7e3ef21e1adb25/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f605d884e7c8be8fe1aa94e0a783bf3f591b84c24e4bc4f3e7564c82ac25e271", size = 747371 }, + { url = "https://files.pythonhosted.org/packages/01/1b/5dbe84eefc86f48473947e2f41711aded97eecef1231f4558f1f02713c12/pyzmq-27.1.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c9f7f6e13dff2e44a6afeaf2cf54cee5929ad64afaf4d40b50f93c58fc687355", size = 544862 }, + { url = "https://files.pythonhosted.org/packages/57/f4/c2e978cf6b833708bad7d6396c3a20c19750585a1775af3ff13c435e1912/pyzmq-27.1.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:722ea791aa233ac0a819fc2c475e1292c76930b31f1d828cb61073e2fe5e208f", size = 836257 }, + { url = "https://files.pythonhosted.org/packages/5f/5f/4e10c7f57a4c92ab0fbb2396297aa8d618e6f5b9b8f8e9756d56f3e6fc52/pyzmq-27.1.0-pp39-pypy39_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:01f9437501886d3a1dd4b02ef59fb8cc384fa718ce066d52f175ee49dd5b7ed8", size = 800203 }, + { url = "https://files.pythonhosted.org/packages/19/72/a74a007cd636f903448c6ab66628104b1fc5f2ba018733d5eabb94a0a6fb/pyzmq-27.1.0-pp39-pypy39_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4a19387a3dddcc762bfd2f570d14e2395b2c9701329b266f83dd87a2b3cbd381", size = 758756 }, + { url = "https://files.pythonhosted.org/packages/a9/d4/30c25b91f2b4786026372f5ef454134d7f576fcf4ac58539ad7dd5de4762/pyzmq-27.1.0-pp39-pypy39_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c618fbcd069e3a29dcd221739cacde52edcc681f041907867e0f5cc7e85f172", size = 567742 }, + { url = "https://files.pythonhosted.org/packages/92/aa/ee86edad943438cd0316964020c4b6d09854414f9f945f8e289ea6fcc019/pyzmq-27.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ff8d114d14ac671d88c89b9224c63d6c4e5a613fe8acd5594ce53d752a3aafe9", size = 544857 }, +] + +[[package]] +name = "referencing" +version = "0.36.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "attrs", marker = "python_full_version < '3.10'" }, + { name = "rpds-py", version = "0.27.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "typing-extensions", marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2f/db/98b5c277be99dd18bfd91dd04e1b759cad18d1a338188c936e92f921c7e2/referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa", size = 74744 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775 }, +] + +[[package]] +name = "referencing" +version = "0.37.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "attrs", marker = "python_full_version >= '3.10'" }, + { name = "rpds-py", version = "0.30.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "typing-extensions", marker = "python_full_version >= '3.10' and python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8", size = 78036 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231", size = 26766 }, +] + +[[package]] +name = "requests" +version = "2.32.5" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "certifi", marker = "python_full_version < '3.10'" }, + { name = "charset-normalizer", marker = "python_full_version < '3.10'" }, + { name = "idna", marker = "python_full_version < '3.10'" }, + { name = "urllib3", marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738 }, +] + +[[package]] +name = "requests" +version = "2.33.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "certifi", marker = "python_full_version >= '3.10'" }, + { name = "charset-normalizer", marker = "python_full_version >= '3.10'" }, + { name = "idna", marker = "python_full_version >= '3.10'" }, + { name = "urllib3", marker = "python_full_version >= '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5f/a4/98b9c7c6428a668bf7e42ebb7c79d576a1c3c1e3ae2d47e674b468388871/requests-2.33.1.tar.gz", hash = "sha256:18817f8c57c6263968bc123d237e3b8b08ac046f5456bd1e307ee8f4250d3517", size = 134120 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl", hash = "sha256:4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a", size = 64947 }, +] + +[[package]] +name = "rfc3339-validator" +version = "0.1.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/ea/a9387748e2d111c3c2b275ba970b735e04e15cdb1eb30693b6b5708c4dbd/rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b", size = 5513 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa", size = 3490 }, +] + +[[package]] +name = "rfc3986-validator" +version = "0.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/da/88/f270de456dd7d11dcc808abfa291ecdd3f45ff44e3b549ffa01b126464d0/rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055", size = 6760 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9", size = 4242 }, +] + +[[package]] +name = "rfc3987-syntax" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "lark" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2c/06/37c1a5557acf449e8e406a830a05bf885ac47d33270aec454ef78675008d/rfc3987_syntax-1.1.0.tar.gz", hash = "sha256:717a62cbf33cffdd16dfa3a497d81ce48a660ea691b1ddd7be710c22f00b4a0d", size = 14239 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/71/44ce230e1b7fadd372515a97e32a83011f906ddded8d03e3c6aafbdedbb7/rfc3987_syntax-1.1.0-py3-none-any.whl", hash = "sha256:6c3d97604e4c5ce9f714898e05401a0445a641cfa276432b0a648c80856f6a3f", size = 8046 }, +] + +[[package]] +name = "roman-numerals" +version = "4.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ae/f9/41dc953bbeb056c17d5f7a519f50fdf010bd0553be2d630bc69d1e022703/roman_numerals-4.1.0.tar.gz", hash = "sha256:1af8b147eb1405d5839e78aeb93131690495fe9da5c91856cb33ad55a7f1e5b2", size = 9077 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl", hash = "sha256:647ba99caddc2cc1e55a51e4360689115551bf4476d90e8162cf8c345fe233c7", size = 7676 }, +] + +[[package]] +name = "rpds-py" +version = "0.27.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/e9/dd/2c0cbe774744272b0ae725f44032c77bdcab6e8bcf544bffa3b6e70c8dba/rpds_py-0.27.1.tar.gz", hash = "sha256:26a1c73171d10b7acccbded82bf6a586ab8203601e565badc74bbbf8bc5a10f8", size = 27479 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a5/ed/3aef893e2dd30e77e35d20d4ddb45ca459db59cead748cad9796ad479411/rpds_py-0.27.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:68afeec26d42ab3b47e541b272166a0b4400313946871cba3ed3a4fc0cab1cef", size = 371606 }, + { url = "https://files.pythonhosted.org/packages/6d/82/9818b443e5d3eb4c83c3994561387f116aae9833b35c484474769c4a8faf/rpds_py-0.27.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:74e5b2f7bb6fa38b1b10546d27acbacf2a022a8b5543efb06cfebc72a59c85be", size = 353452 }, + { url = "https://files.pythonhosted.org/packages/99/c7/d2a110ffaaa397fc6793a83c7bd3545d9ab22658b7cdff05a24a4535cc45/rpds_py-0.27.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9024de74731df54546fab0bfbcdb49fae19159ecaecfc8f37c18d2c7e2c0bd61", size = 381519 }, + { url = "https://files.pythonhosted.org/packages/5a/bc/e89581d1f9d1be7d0247eaef602566869fdc0d084008ba139e27e775366c/rpds_py-0.27.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:31d3ebadefcd73b73928ed0b2fd696f7fefda8629229f81929ac9c1854d0cffb", size = 394424 }, + { url = "https://files.pythonhosted.org/packages/ac/2e/36a6861f797530e74bb6ed53495f8741f1ef95939eed01d761e73d559067/rpds_py-0.27.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2e7f8f169d775dd9092a1743768d771f1d1300453ddfe6325ae3ab5332b4657", size = 523467 }, + { url = "https://files.pythonhosted.org/packages/c4/59/c1bc2be32564fa499f988f0a5c6505c2f4746ef96e58e4d7de5cf923d77e/rpds_py-0.27.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d905d16f77eb6ab2e324e09bfa277b4c8e5e6b8a78a3e7ff8f3cdf773b4c013", size = 402660 }, + { url = "https://files.pythonhosted.org/packages/0a/ec/ef8bf895f0628dd0a59e54d81caed6891663cb9c54a0f4bb7da918cb88cf/rpds_py-0.27.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50c946f048209e6362e22576baea09193809f87687a95a8db24e5fbdb307b93a", size = 384062 }, + { url = "https://files.pythonhosted.org/packages/69/f7/f47ff154be8d9a5e691c083a920bba89cef88d5247c241c10b9898f595a1/rpds_py-0.27.1-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:3deab27804d65cd8289eb814c2c0e807c4b9d9916c9225e363cb0cf875eb67c1", size = 401289 }, + { url = "https://files.pythonhosted.org/packages/3b/d9/ca410363efd0615814ae579f6829cafb39225cd63e5ea5ed1404cb345293/rpds_py-0.27.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8b61097f7488de4be8244c89915da8ed212832ccf1e7c7753a25a394bf9b1f10", size = 417718 }, + { url = "https://files.pythonhosted.org/packages/e3/a0/8cb5c2ff38340f221cc067cc093d1270e10658ba4e8d263df923daa18e86/rpds_py-0.27.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8a3f29aba6e2d7d90528d3c792555a93497fe6538aa65eb675b44505be747808", size = 558333 }, + { url = "https://files.pythonhosted.org/packages/6f/8c/1b0de79177c5d5103843774ce12b84caa7164dfc6cd66378768d37db11bf/rpds_py-0.27.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dd6cd0485b7d347304067153a6dc1d73f7d4fd995a396ef32a24d24b8ac63ac8", size = 589127 }, + { url = "https://files.pythonhosted.org/packages/c8/5e/26abb098d5e01266b0f3a2488d299d19ccc26849735d9d2b95c39397e945/rpds_py-0.27.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6f4461bf931108c9fa226ffb0e257c1b18dc2d44cd72b125bec50ee0ab1248a9", size = 554899 }, + { url = "https://files.pythonhosted.org/packages/de/41/905cc90ced13550db017f8f20c6d8e8470066c5738ba480d7ba63e3d136b/rpds_py-0.27.1-cp310-cp310-win32.whl", hash = "sha256:ee5422d7fb21f6a00c1901bf6559c49fee13a5159d0288320737bbf6585bd3e4", size = 217450 }, + { url = "https://files.pythonhosted.org/packages/75/3d/6bef47b0e253616ccdf67c283e25f2d16e18ccddd38f92af81d5a3420206/rpds_py-0.27.1-cp310-cp310-win_amd64.whl", hash = "sha256:3e039aabf6d5f83c745d5f9a0a381d031e9ed871967c0a5c38d201aca41f3ba1", size = 228447 }, + { url = "https://files.pythonhosted.org/packages/b5/c1/7907329fbef97cbd49db6f7303893bd1dd5a4a3eae415839ffdfb0762cae/rpds_py-0.27.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:be898f271f851f68b318872ce6ebebbc62f303b654e43bf72683dbdc25b7c881", size = 371063 }, + { url = "https://files.pythonhosted.org/packages/11/94/2aab4bc86228bcf7c48760990273653a4900de89c7537ffe1b0d6097ed39/rpds_py-0.27.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:62ac3d4e3e07b58ee0ddecd71d6ce3b1637de2d373501412df395a0ec5f9beb5", size = 353210 }, + { url = "https://files.pythonhosted.org/packages/3a/57/f5eb3ecf434342f4f1a46009530e93fd201a0b5b83379034ebdb1d7c1a58/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4708c5c0ceb2d034f9991623631d3d23cb16e65c83736ea020cdbe28d57c0a0e", size = 381636 }, + { url = "https://files.pythonhosted.org/packages/ae/f4/ef95c5945e2ceb5119571b184dd5a1cc4b8541bbdf67461998cfeac9cb1e/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:abfa1171a9952d2e0002aba2ad3780820b00cc3d9c98c6630f2e93271501f66c", size = 394341 }, + { url = "https://files.pythonhosted.org/packages/5a/7e/4bd610754bf492d398b61725eb9598ddd5eb86b07d7d9483dbcd810e20bc/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b507d19f817ebaca79574b16eb2ae412e5c0835542c93fe9983f1e432aca195", size = 523428 }, + { url = "https://files.pythonhosted.org/packages/9f/e5/059b9f65a8c9149361a8b75094864ab83b94718344db511fd6117936ed2a/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:168b025f8fd8d8d10957405f3fdcef3dc20f5982d398f90851f4abc58c566c52", size = 402923 }, + { url = "https://files.pythonhosted.org/packages/f5/48/64cabb7daced2968dd08e8a1b7988bf358d7bd5bcd5dc89a652f4668543c/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb56c6210ef77caa58e16e8c17d35c63fe3f5b60fd9ba9d424470c3400bcf9ed", size = 384094 }, + { url = "https://files.pythonhosted.org/packages/ae/e1/dc9094d6ff566bff87add8a510c89b9e158ad2ecd97ee26e677da29a9e1b/rpds_py-0.27.1-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:d252f2d8ca0195faa707f8eb9368955760880b2b42a8ee16d382bf5dd807f89a", size = 401093 }, + { url = "https://files.pythonhosted.org/packages/37/8e/ac8577e3ecdd5593e283d46907d7011618994e1d7ab992711ae0f78b9937/rpds_py-0.27.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6e5e54da1e74b91dbc7996b56640f79b195d5925c2b78efaa8c5d53e1d88edde", size = 417969 }, + { url = "https://files.pythonhosted.org/packages/66/6d/87507430a8f74a93556fe55c6485ba9c259949a853ce407b1e23fea5ba31/rpds_py-0.27.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ffce0481cc6e95e5b3f0a47ee17ffbd234399e6d532f394c8dce320c3b089c21", size = 558302 }, + { url = "https://files.pythonhosted.org/packages/3a/bb/1db4781ce1dda3eecc735e3152659a27b90a02ca62bfeea17aee45cc0fbc/rpds_py-0.27.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:a205fdfe55c90c2cd8e540ca9ceba65cbe6629b443bc05db1f590a3db8189ff9", size = 589259 }, + { url = "https://files.pythonhosted.org/packages/7b/0e/ae1c8943d11a814d01b482e1f8da903f88047a962dff9bbdadf3bd6e6fd1/rpds_py-0.27.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:689fb5200a749db0415b092972e8eba85847c23885c8543a8b0f5c009b1a5948", size = 554983 }, + { url = "https://files.pythonhosted.org/packages/b2/d5/0b2a55415931db4f112bdab072443ff76131b5ac4f4dc98d10d2d357eb03/rpds_py-0.27.1-cp311-cp311-win32.whl", hash = "sha256:3182af66048c00a075010bc7f4860f33913528a4b6fc09094a6e7598e462fe39", size = 217154 }, + { url = "https://files.pythonhosted.org/packages/24/75/3b7ffe0d50dc86a6a964af0d1cc3a4a2cdf437cb7b099a4747bbb96d1819/rpds_py-0.27.1-cp311-cp311-win_amd64.whl", hash = "sha256:b4938466c6b257b2f5c4ff98acd8128ec36b5059e5c8f8372d79316b1c36bb15", size = 228627 }, + { url = "https://files.pythonhosted.org/packages/8d/3f/4fd04c32abc02c710f09a72a30c9a55ea3cc154ef8099078fd50a0596f8e/rpds_py-0.27.1-cp311-cp311-win_arm64.whl", hash = "sha256:2f57af9b4d0793e53266ee4325535a31ba48e2f875da81a9177c9926dfa60746", size = 220998 }, + { url = "https://files.pythonhosted.org/packages/bd/fe/38de28dee5df58b8198c743fe2bea0c785c6d40941b9950bac4cdb71a014/rpds_py-0.27.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ae2775c1973e3c30316892737b91f9283f9908e3cc7625b9331271eaaed7dc90", size = 361887 }, + { url = "https://files.pythonhosted.org/packages/7c/9a/4b6c7eedc7dd90986bf0fab6ea2a091ec11c01b15f8ba0a14d3f80450468/rpds_py-0.27.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2643400120f55c8a96f7c9d858f7be0c88d383cd4653ae2cf0d0c88f668073e5", size = 345795 }, + { url = "https://files.pythonhosted.org/packages/6f/0e/e650e1b81922847a09cca820237b0edee69416a01268b7754d506ade11ad/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16323f674c089b0360674a4abd28d5042947d54ba620f72514d69be4ff64845e", size = 385121 }, + { url = "https://files.pythonhosted.org/packages/1b/ea/b306067a712988e2bff00dcc7c8f31d26c29b6d5931b461aa4b60a013e33/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a1f4814b65eacac94a00fc9a526e3fdafd78e439469644032032d0d63de4881", size = 398976 }, + { url = "https://files.pythonhosted.org/packages/2c/0a/26dc43c8840cb8fe239fe12dbc8d8de40f2365e838f3d395835dde72f0e5/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ba32c16b064267b22f1850a34051121d423b6f7338a12b9459550eb2096e7ec", size = 525953 }, + { url = "https://files.pythonhosted.org/packages/22/14/c85e8127b573aaf3a0cbd7fbb8c9c99e735a4a02180c84da2a463b766e9e/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5c20f33fd10485b80f65e800bbe5f6785af510b9f4056c5a3c612ebc83ba6cb", size = 407915 }, + { url = "https://files.pythonhosted.org/packages/ed/7b/8f4fee9ba1fb5ec856eb22d725a4efa3deb47f769597c809e03578b0f9d9/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:466bfe65bd932da36ff279ddd92de56b042f2266d752719beb97b08526268ec5", size = 386883 }, + { url = "https://files.pythonhosted.org/packages/86/47/28fa6d60f8b74fcdceba81b272f8d9836ac0340570f68f5df6b41838547b/rpds_py-0.27.1-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:41e532bbdcb57c92ba3be62c42e9f096431b4cf478da9bc3bc6ce5c38ab7ba7a", size = 405699 }, + { url = "https://files.pythonhosted.org/packages/d0/fd/c5987b5e054548df56953a21fe2ebed51fc1ec7c8f24fd41c067b68c4a0a/rpds_py-0.27.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f149826d742b406579466283769a8ea448eed82a789af0ed17b0cd5770433444", size = 423713 }, + { url = "https://files.pythonhosted.org/packages/ac/ba/3c4978b54a73ed19a7d74531be37a8bcc542d917c770e14d372b8daea186/rpds_py-0.27.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:80c60cfb5310677bd67cb1e85a1e8eb52e12529545441b43e6f14d90b878775a", size = 562324 }, + { url = "https://files.pythonhosted.org/packages/b5/6c/6943a91768fec16db09a42b08644b960cff540c66aab89b74be6d4a144ba/rpds_py-0.27.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:7ee6521b9baf06085f62ba9c7a3e5becffbc32480d2f1b351559c001c38ce4c1", size = 593646 }, + { url = "https://files.pythonhosted.org/packages/11/73/9d7a8f4be5f4396f011a6bb7a19fe26303a0dac9064462f5651ced2f572f/rpds_py-0.27.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a512c8263249a9d68cac08b05dd59d2b3f2061d99b322813cbcc14c3c7421998", size = 558137 }, + { url = "https://files.pythonhosted.org/packages/6e/96/6772cbfa0e2485bcceef8071de7821f81aeac8bb45fbfd5542a3e8108165/rpds_py-0.27.1-cp312-cp312-win32.whl", hash = "sha256:819064fa048ba01b6dadc5116f3ac48610435ac9a0058bbde98e569f9e785c39", size = 221343 }, + { url = "https://files.pythonhosted.org/packages/67/b6/c82f0faa9af1c6a64669f73a17ee0eeef25aff30bb9a1c318509efe45d84/rpds_py-0.27.1-cp312-cp312-win_amd64.whl", hash = "sha256:d9199717881f13c32c4046a15f024971a3b78ad4ea029e8da6b86e5aa9cf4594", size = 232497 }, + { url = "https://files.pythonhosted.org/packages/e1/96/2817b44bd2ed11aebacc9251da03689d56109b9aba5e311297b6902136e2/rpds_py-0.27.1-cp312-cp312-win_arm64.whl", hash = "sha256:33aa65b97826a0e885ef6e278fbd934e98cdcfed80b63946025f01e2f5b29502", size = 222790 }, + { url = "https://files.pythonhosted.org/packages/cc/77/610aeee8d41e39080c7e14afa5387138e3c9fa9756ab893d09d99e7d8e98/rpds_py-0.27.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:e4b9fcfbc021633863a37e92571d6f91851fa656f0180246e84cbd8b3f6b329b", size = 361741 }, + { url = "https://files.pythonhosted.org/packages/3a/fc/c43765f201c6a1c60be2043cbdb664013def52460a4c7adace89d6682bf4/rpds_py-0.27.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1441811a96eadca93c517d08df75de45e5ffe68aa3089924f963c782c4b898cf", size = 345574 }, + { url = "https://files.pythonhosted.org/packages/20/42/ee2b2ca114294cd9847d0ef9c26d2b0851b2e7e00bf14cc4c0b581df0fc3/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55266dafa22e672f5a4f65019015f90336ed31c6383bd53f5e7826d21a0e0b83", size = 385051 }, + { url = "https://files.pythonhosted.org/packages/fd/e8/1e430fe311e4799e02e2d1af7c765f024e95e17d651612425b226705f910/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d78827d7ac08627ea2c8e02c9e5b41180ea5ea1f747e9db0915e3adf36b62dcf", size = 398395 }, + { url = "https://files.pythonhosted.org/packages/82/95/9dc227d441ff2670651c27a739acb2535ccaf8b351a88d78c088965e5996/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae92443798a40a92dc5f0b01d8a7c93adde0c4dc965310a29ae7c64d72b9fad2", size = 524334 }, + { url = "https://files.pythonhosted.org/packages/87/01/a670c232f401d9ad461d9a332aa4080cd3cb1d1df18213dbd0d2a6a7ab51/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c46c9dd2403b66a2a3b9720ec4b74d4ab49d4fabf9f03dfdce2d42af913fe8d0", size = 407691 }, + { url = "https://files.pythonhosted.org/packages/03/36/0a14aebbaa26fe7fab4780c76f2239e76cc95a0090bdb25e31d95c492fcd/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2efe4eb1d01b7f5f1939f4ef30ecea6c6b3521eec451fb93191bf84b2a522418", size = 386868 }, + { url = "https://files.pythonhosted.org/packages/3b/03/8c897fb8b5347ff6c1cc31239b9611c5bf79d78c984430887a353e1409a1/rpds_py-0.27.1-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:15d3b4d83582d10c601f481eca29c3f138d44c92187d197aff663a269197c02d", size = 405469 }, + { url = "https://files.pythonhosted.org/packages/da/07/88c60edc2df74850d496d78a1fdcdc7b54360a7f610a4d50008309d41b94/rpds_py-0.27.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4ed2e16abbc982a169d30d1a420274a709949e2cbdef119fe2ec9d870b42f274", size = 422125 }, + { url = "https://files.pythonhosted.org/packages/6b/86/5f4c707603e41b05f191a749984f390dabcbc467cf833769b47bf14ba04f/rpds_py-0.27.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a75f305c9b013289121ec0f1181931975df78738cdf650093e6b86d74aa7d8dd", size = 562341 }, + { url = "https://files.pythonhosted.org/packages/b2/92/3c0cb2492094e3cd9baf9e49bbb7befeceb584ea0c1a8b5939dca4da12e5/rpds_py-0.27.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:67ce7620704745881a3d4b0ada80ab4d99df390838839921f99e63c474f82cf2", size = 592511 }, + { url = "https://files.pythonhosted.org/packages/10/bb/82e64fbb0047c46a168faa28d0d45a7851cd0582f850b966811d30f67ad8/rpds_py-0.27.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9d992ac10eb86d9b6f369647b6a3f412fc0075cfd5d799530e84d335e440a002", size = 557736 }, + { url = "https://files.pythonhosted.org/packages/00/95/3c863973d409210da7fb41958172c6b7dbe7fc34e04d3cc1f10bb85e979f/rpds_py-0.27.1-cp313-cp313-win32.whl", hash = "sha256:4f75e4bd8ab8db624e02c8e2fc4063021b58becdbe6df793a8111d9343aec1e3", size = 221462 }, + { url = "https://files.pythonhosted.org/packages/ce/2c/5867b14a81dc217b56d95a9f2a40fdbc56a1ab0181b80132beeecbd4b2d6/rpds_py-0.27.1-cp313-cp313-win_amd64.whl", hash = "sha256:f9025faafc62ed0b75a53e541895ca272815bec18abe2249ff6501c8f2e12b83", size = 232034 }, + { url = "https://files.pythonhosted.org/packages/c7/78/3958f3f018c01923823f1e47f1cc338e398814b92d83cd278364446fac66/rpds_py-0.27.1-cp313-cp313-win_arm64.whl", hash = "sha256:ed10dc32829e7d222b7d3b93136d25a406ba9788f6a7ebf6809092da1f4d279d", size = 222392 }, + { url = "https://files.pythonhosted.org/packages/01/76/1cdf1f91aed5c3a7bf2eba1f1c4e4d6f57832d73003919a20118870ea659/rpds_py-0.27.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:92022bbbad0d4426e616815b16bc4127f83c9a74940e1ccf3cfe0b387aba0228", size = 358355 }, + { url = "https://files.pythonhosted.org/packages/c3/6f/bf142541229374287604caf3bb2a4ae17f0a580798fd72d3b009b532db4e/rpds_py-0.27.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:47162fdab9407ec3f160805ac3e154df042e577dd53341745fc7fb3f625e6d92", size = 342138 }, + { url = "https://files.pythonhosted.org/packages/1a/77/355b1c041d6be40886c44ff5e798b4e2769e497b790f0f7fd1e78d17e9a8/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb89bec23fddc489e5d78b550a7b773557c9ab58b7946154a10a6f7a214a48b2", size = 380247 }, + { url = "https://files.pythonhosted.org/packages/d6/a4/d9cef5c3946ea271ce2243c51481971cd6e34f21925af2783dd17b26e815/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e48af21883ded2b3e9eb48cb7880ad8598b31ab752ff3be6457001d78f416723", size = 390699 }, + { url = "https://files.pythonhosted.org/packages/3a/06/005106a7b8c6c1a7e91b73169e49870f4af5256119d34a361ae5240a0c1d/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6f5b7bd8e219ed50299e58551a410b64daafb5017d54bbe822e003856f06a802", size = 521852 }, + { url = "https://files.pythonhosted.org/packages/e5/3e/50fb1dac0948e17a02eb05c24510a8fe12d5ce8561c6b7b7d1339ab7ab9c/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08f1e20bccf73b08d12d804d6e1c22ca5530e71659e6673bce31a6bb71c1e73f", size = 402582 }, + { url = "https://files.pythonhosted.org/packages/cb/b0/f4e224090dc5b0ec15f31a02d746ab24101dd430847c4d99123798661bfc/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dc5dceeaefcc96dc192e3a80bbe1d6c410c469e97bdd47494a7d930987f18b2", size = 384126 }, + { url = "https://files.pythonhosted.org/packages/54/77/ac339d5f82b6afff1df8f0fe0d2145cc827992cb5f8eeb90fc9f31ef7a63/rpds_py-0.27.1-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:d76f9cc8665acdc0c9177043746775aa7babbf479b5520b78ae4002d889f5c21", size = 399486 }, + { url = "https://files.pythonhosted.org/packages/d6/29/3e1c255eee6ac358c056a57d6d6869baa00a62fa32eea5ee0632039c50a3/rpds_py-0.27.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:134fae0e36022edad8290a6661edf40c023562964efea0cc0ec7f5d392d2aaef", size = 414832 }, + { url = "https://files.pythonhosted.org/packages/3f/db/6d498b844342deb3fa1d030598db93937a9964fcf5cb4da4feb5f17be34b/rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:eb11a4f1b2b63337cfd3b4d110af778a59aae51c81d195768e353d8b52f88081", size = 557249 }, + { url = "https://files.pythonhosted.org/packages/60/f3/690dd38e2310b6f68858a331399b4d6dbb9132c3e8ef8b4333b96caf403d/rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:13e608ac9f50a0ed4faec0e90ece76ae33b34c0e8656e3dceb9a7db994c692cd", size = 587356 }, + { url = "https://files.pythonhosted.org/packages/86/e3/84507781cccd0145f35b1dc32c72675200c5ce8d5b30f813e49424ef68fc/rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dd2135527aa40f061350c3f8f89da2644de26cd73e4de458e79606384f4f68e7", size = 555300 }, + { url = "https://files.pythonhosted.org/packages/e5/ee/375469849e6b429b3516206b4580a79e9ef3eb12920ddbd4492b56eaacbe/rpds_py-0.27.1-cp313-cp313t-win32.whl", hash = "sha256:3020724ade63fe320a972e2ffd93b5623227e684315adce194941167fee02688", size = 216714 }, + { url = "https://files.pythonhosted.org/packages/21/87/3fc94e47c9bd0742660e84706c311a860dcae4374cf4a03c477e23ce605a/rpds_py-0.27.1-cp313-cp313t-win_amd64.whl", hash = "sha256:8ee50c3e41739886606388ba3ab3ee2aae9f35fb23f833091833255a31740797", size = 228943 }, + { url = "https://files.pythonhosted.org/packages/70/36/b6e6066520a07cf029d385de869729a895917b411e777ab1cde878100a1d/rpds_py-0.27.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:acb9aafccaae278f449d9c713b64a9e68662e7799dbd5859e2c6b3c67b56d334", size = 362472 }, + { url = "https://files.pythonhosted.org/packages/af/07/b4646032e0dcec0df9c73a3bd52f63bc6c5f9cda992f06bd0e73fe3fbebd/rpds_py-0.27.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:b7fb801aa7f845ddf601c49630deeeccde7ce10065561d92729bfe81bd21fb33", size = 345676 }, + { url = "https://files.pythonhosted.org/packages/b0/16/2f1003ee5d0af4bcb13c0cf894957984c32a6751ed7206db2aee7379a55e/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe0dd05afb46597b9a2e11c351e5e4283c741237e7f617ffb3252780cca9336a", size = 385313 }, + { url = "https://files.pythonhosted.org/packages/05/cd/7eb6dd7b232e7f2654d03fa07f1414d7dfc980e82ba71e40a7c46fd95484/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b6dfb0e058adb12d8b1d1b25f686e94ffa65d9995a5157afe99743bf7369d62b", size = 399080 }, + { url = "https://files.pythonhosted.org/packages/20/51/5829afd5000ec1cb60f304711f02572d619040aa3ec033d8226817d1e571/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed090ccd235f6fa8bb5861684567f0a83e04f52dfc2e5c05f2e4b1309fcf85e7", size = 523868 }, + { url = "https://files.pythonhosted.org/packages/05/2c/30eebca20d5db95720ab4d2faec1b5e4c1025c473f703738c371241476a2/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf876e79763eecf3e7356f157540d6a093cef395b65514f17a356f62af6cc136", size = 408750 }, + { url = "https://files.pythonhosted.org/packages/90/1a/cdb5083f043597c4d4276eae4e4c70c55ab5accec078da8611f24575a367/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:12ed005216a51b1d6e2b02a7bd31885fe317e45897de81d86dcce7d74618ffff", size = 387688 }, + { url = "https://files.pythonhosted.org/packages/7c/92/cf786a15320e173f945d205ab31585cc43969743bb1a48b6888f7a2b0a2d/rpds_py-0.27.1-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:ee4308f409a40e50593c7e3bb8cbe0b4d4c66d1674a316324f0c2f5383b486f9", size = 407225 }, + { url = "https://files.pythonhosted.org/packages/33/5c/85ee16df5b65063ef26017bef33096557a4c83fbe56218ac7cd8c235f16d/rpds_py-0.27.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0b08d152555acf1f455154d498ca855618c1378ec810646fcd7c76416ac6dc60", size = 423361 }, + { url = "https://files.pythonhosted.org/packages/4b/8e/1c2741307fcabd1a334ecf008e92c4f47bb6f848712cf15c923becfe82bb/rpds_py-0.27.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:dce51c828941973a5684d458214d3a36fcd28da3e1875d659388f4f9f12cc33e", size = 562493 }, + { url = "https://files.pythonhosted.org/packages/04/03/5159321baae9b2222442a70c1f988cbbd66b9be0675dd3936461269be360/rpds_py-0.27.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:c1476d6f29eb81aa4151c9a31219b03f1f798dc43d8af1250a870735516a1212", size = 592623 }, + { url = "https://files.pythonhosted.org/packages/ff/39/c09fd1ad28b85bc1d4554a8710233c9f4cefd03d7717a1b8fbfd171d1167/rpds_py-0.27.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:3ce0cac322b0d69b63c9cdb895ee1b65805ec9ffad37639f291dd79467bee675", size = 558800 }, + { url = "https://files.pythonhosted.org/packages/c5/d6/99228e6bbcf4baa764b18258f519a9035131d91b538d4e0e294313462a98/rpds_py-0.27.1-cp314-cp314-win32.whl", hash = "sha256:dfbfac137d2a3d0725758cd141f878bf4329ba25e34979797c89474a89a8a3a3", size = 221943 }, + { url = "https://files.pythonhosted.org/packages/be/07/c802bc6b8e95be83b79bdf23d1aa61d68324cb1006e245d6c58e959e314d/rpds_py-0.27.1-cp314-cp314-win_amd64.whl", hash = "sha256:a6e57b0abfe7cc513450fcf529eb486b6e4d3f8aee83e92eb5f1ef848218d456", size = 233739 }, + { url = "https://files.pythonhosted.org/packages/c8/89/3e1b1c16d4c2d547c5717377a8df99aee8099ff050f87c45cb4d5fa70891/rpds_py-0.27.1-cp314-cp314-win_arm64.whl", hash = "sha256:faf8d146f3d476abfee026c4ae3bdd9ca14236ae4e4c310cbd1cf75ba33d24a3", size = 223120 }, + { url = "https://files.pythonhosted.org/packages/62/7e/dc7931dc2fa4a6e46b2a4fa744a9fe5c548efd70e0ba74f40b39fa4a8c10/rpds_py-0.27.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:ba81d2b56b6d4911ce735aad0a1d4495e808b8ee4dc58715998741a26874e7c2", size = 358944 }, + { url = "https://files.pythonhosted.org/packages/e6/22/4af76ac4e9f336bfb1a5f240d18a33c6b2fcaadb7472ac7680576512b49a/rpds_py-0.27.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:84f7d509870098de0e864cad0102711c1e24e9b1a50ee713b65928adb22269e4", size = 342283 }, + { url = "https://files.pythonhosted.org/packages/1c/15/2a7c619b3c2272ea9feb9ade67a45c40b3eeb500d503ad4c28c395dc51b4/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9e960fc78fecd1100539f14132425e1d5fe44ecb9239f8f27f079962021523e", size = 380320 }, + { url = "https://files.pythonhosted.org/packages/a2/7d/4c6d243ba4a3057e994bb5bedd01b5c963c12fe38dde707a52acdb3849e7/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:62f85b665cedab1a503747617393573995dac4600ff51869d69ad2f39eb5e817", size = 391760 }, + { url = "https://files.pythonhosted.org/packages/b4/71/b19401a909b83bcd67f90221330bc1ef11bc486fe4e04c24388d28a618ae/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fed467af29776f6556250c9ed85ea5a4dd121ab56a5f8b206e3e7a4c551e48ec", size = 522476 }, + { url = "https://files.pythonhosted.org/packages/e4/44/1a3b9715c0455d2e2f0f6df5ee6d6f5afdc423d0773a8a682ed2b43c566c/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2729615f9d430af0ae6b36cf042cb55c0936408d543fb691e1a9e36648fd35a", size = 403418 }, + { url = "https://files.pythonhosted.org/packages/1c/4b/fb6c4f14984eb56673bc868a66536f53417ddb13ed44b391998100a06a96/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b207d881a9aef7ba753d69c123a35d96ca7cb808056998f6b9e8747321f03b8", size = 384771 }, + { url = "https://files.pythonhosted.org/packages/c0/56/d5265d2d28b7420d7b4d4d85cad8ef891760f5135102e60d5c970b976e41/rpds_py-0.27.1-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:639fd5efec029f99b79ae47e5d7e00ad8a773da899b6309f6786ecaf22948c48", size = 400022 }, + { url = "https://files.pythonhosted.org/packages/8f/e9/9f5fc70164a569bdd6ed9046486c3568d6926e3a49bdefeeccfb18655875/rpds_py-0.27.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fecc80cb2a90e28af8a9b366edacf33d7a91cbfe4c2c4544ea1246e949cfebeb", size = 416787 }, + { url = "https://files.pythonhosted.org/packages/d4/64/56dd03430ba491db943a81dcdef115a985aac5f44f565cd39a00c766d45c/rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:42a89282d711711d0a62d6f57d81aa43a1368686c45bc1c46b7f079d55692734", size = 557538 }, + { url = "https://files.pythonhosted.org/packages/3f/36/92cc885a3129993b1d963a2a42ecf64e6a8e129d2c7cc980dbeba84e55fb/rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:cf9931f14223de59551ab9d38ed18d92f14f055a5f78c1d8ad6493f735021bbb", size = 588512 }, + { url = "https://files.pythonhosted.org/packages/dd/10/6b283707780a81919f71625351182b4f98932ac89a09023cb61865136244/rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f39f58a27cc6e59f432b568ed8429c7e1641324fbe38131de852cd77b2d534b0", size = 555813 }, + { url = "https://files.pythonhosted.org/packages/04/2e/30b5ea18c01379da6272a92825dd7e53dc9d15c88a19e97932d35d430ef7/rpds_py-0.27.1-cp314-cp314t-win32.whl", hash = "sha256:d5fa0ee122dc09e23607a28e6d7b150da16c662e66409bbe85230e4c85bb528a", size = 217385 }, + { url = "https://files.pythonhosted.org/packages/32/7d/97119da51cb1dd3f2f3c0805f155a3aa4a95fa44fe7d78ae15e69edf4f34/rpds_py-0.27.1-cp314-cp314t-win_amd64.whl", hash = "sha256:6567d2bb951e21232c2f660c24cf3470bb96de56cdcb3f071a83feeaff8a2772", size = 230097 }, + { url = "https://files.pythonhosted.org/packages/7f/6c/252e83e1ce7583c81f26d1d884b2074d40a13977e1b6c9c50bbf9a7f1f5a/rpds_py-0.27.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c918c65ec2e42c2a78d19f18c553d77319119bf43aa9e2edf7fb78d624355527", size = 372140 }, + { url = "https://files.pythonhosted.org/packages/9d/71/949c195d927c5aeb0d0629d329a20de43a64c423a6aa53836290609ef7ec/rpds_py-0.27.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1fea2b1a922c47c51fd07d656324531adc787e415c8b116530a1d29c0516c62d", size = 354086 }, + { url = "https://files.pythonhosted.org/packages/9f/02/e43e332ad8ce4f6c4342d151a471a7f2900ed1d76901da62eb3762663a71/rpds_py-0.27.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbf94c58e8e0cd6b6f38d8de67acae41b3a515c26169366ab58bdca4a6883bb8", size = 382117 }, + { url = "https://files.pythonhosted.org/packages/d0/05/b0fdeb5b577197ad72812bbdfb72f9a08fa1e64539cc3940b1b781cd3596/rpds_py-0.27.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c2a8fed130ce946d5c585eddc7c8eeef0051f58ac80a8ee43bd17835c144c2cc", size = 394520 }, + { url = "https://files.pythonhosted.org/packages/67/1f/4cfef98b2349a7585181e99294fa2a13f0af06902048a5d70f431a66d0b9/rpds_py-0.27.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:037a2361db72ee98d829bc2c5b7cc55598ae0a5e0ec1823a56ea99374cfd73c1", size = 522657 }, + { url = "https://files.pythonhosted.org/packages/44/55/ccf37ddc4c6dce7437b335088b5ca18da864b334890e2fe9aa6ddc3f79a9/rpds_py-0.27.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5281ed1cc1d49882f9997981c88df1a22e140ab41df19071222f7e5fc4e72125", size = 402967 }, + { url = "https://files.pythonhosted.org/packages/74/e5/5903f92e41e293b07707d5bf00ef39a0eb2af7190aff4beaf581a6591510/rpds_py-0.27.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fd50659a069c15eef8aa3d64bbef0d69fd27bb4a50c9ab4f17f83a16cbf8905", size = 384372 }, + { url = "https://files.pythonhosted.org/packages/8f/e3/fbb409e18aeefc01e49f5922ac63d2d914328430e295c12183ce56ebf76b/rpds_py-0.27.1-cp39-cp39-manylinux_2_31_riscv64.whl", hash = "sha256:c4b676c4ae3921649a15d28ed10025548e9b561ded473aa413af749503c6737e", size = 401264 }, + { url = "https://files.pythonhosted.org/packages/55/79/529ad07794e05cb0f38e2f965fc5bb20853d523976719400acecc447ec9d/rpds_py-0.27.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:079bc583a26db831a985c5257797b2b5d3affb0386e7ff886256762f82113b5e", size = 418691 }, + { url = "https://files.pythonhosted.org/packages/33/39/6554a7fd6d9906fda2521c6d52f5d723dca123529fb719a5b5e074c15e01/rpds_py-0.27.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4e44099bd522cba71a2c6b97f68e19f40e7d85399de899d66cdb67b32d7cb786", size = 558989 }, + { url = "https://files.pythonhosted.org/packages/19/b2/76fa15173b6f9f445e5ef15120871b945fb8dd9044b6b8c7abe87e938416/rpds_py-0.27.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:e202e6d4188e53c6661af813b46c37ca2c45e497fc558bacc1a7630ec2695aec", size = 589835 }, + { url = "https://files.pythonhosted.org/packages/ee/9e/5560a4b39bab780405bed8a88ee85b30178061d189558a86003548dea045/rpds_py-0.27.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f41f814b8eaa48768d1bb551591f6ba45f87ac76899453e8ccd41dba1289b04b", size = 555227 }, + { url = "https://files.pythonhosted.org/packages/52/d7/cd9c36215111aa65724c132bf709c6f35175973e90b32115dedc4ced09cb/rpds_py-0.27.1-cp39-cp39-win32.whl", hash = "sha256:9e71f5a087ead99563c11fdaceee83ee982fd39cf67601f4fd66cb386336ee52", size = 217899 }, + { url = "https://files.pythonhosted.org/packages/5b/e0/d75ab7b4dd8ba777f6b365adbdfc7614bbfe7c5f05703031dfa4b61c3d6c/rpds_py-0.27.1-cp39-cp39-win_amd64.whl", hash = "sha256:71108900c9c3c8590697244b9519017a400d9ba26a36c48381b3f64743a44aab", size = 228725 }, + { url = "https://files.pythonhosted.org/packages/d5/63/b7cc415c345625d5e62f694ea356c58fb964861409008118f1245f8c3347/rpds_py-0.27.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7ba22cb9693df986033b91ae1d7a979bc399237d45fccf875b76f62bb9e52ddf", size = 371360 }, + { url = "https://files.pythonhosted.org/packages/e5/8c/12e1b24b560cf378b8ffbdb9dc73abd529e1adcfcf82727dfd29c4a7b88d/rpds_py-0.27.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5b640501be9288c77738b5492b3fd3abc4ba95c50c2e41273c8a1459f08298d3", size = 353933 }, + { url = "https://files.pythonhosted.org/packages/9b/85/1bb2210c1f7a1b99e91fea486b9f0f894aa5da3a5ec7097cbad7dec6d40f/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb08b65b93e0c6dd70aac7f7890a9c0938d5ec71d5cb32d45cf844fb8ae47636", size = 382962 }, + { url = "https://files.pythonhosted.org/packages/cc/c9/a839b9f219cf80ed65f27a7f5ddbb2809c1b85c966020ae2dff490e0b18e/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d7ff07d696a7a38152ebdb8212ca9e5baab56656749f3d6004b34ab726b550b8", size = 394412 }, + { url = "https://files.pythonhosted.org/packages/02/2d/b1d7f928b0b1f4fc2e0133e8051d199b01d7384875adc63b6ddadf3de7e5/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fb7c72262deae25366e3b6c0c0ba46007967aea15d1eea746e44ddba8ec58dcc", size = 523972 }, + { url = "https://files.pythonhosted.org/packages/a9/af/2cbf56edd2d07716df1aec8a726b3159deb47cb5c27e1e42b71d705a7c2f/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7b002cab05d6339716b03a4a3a2ce26737f6231d7b523f339fa061d53368c9d8", size = 403273 }, + { url = "https://files.pythonhosted.org/packages/c0/93/425e32200158d44ff01da5d9612c3b6711fe69f606f06e3895511f17473b/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23f6b69d1c26c4704fec01311963a41d7de3ee0570a84ebde4d544e5a1859ffc", size = 385278 }, + { url = "https://files.pythonhosted.org/packages/eb/1a/1a04a915ecd0551bfa9e77b7672d1937b4b72a0fc204a17deef76001cfb2/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:530064db9146b247351f2a0250b8f00b289accea4596a033e94be2389977de71", size = 402084 }, + { url = "https://files.pythonhosted.org/packages/51/f7/66585c0fe5714368b62951d2513b684e5215beaceab2c6629549ddb15036/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7b90b0496570bd6b0321724a330d8b545827c4df2034b6ddfc5f5275f55da2ad", size = 419041 }, + { url = "https://files.pythonhosted.org/packages/8e/7e/83a508f6b8e219bba2d4af077c35ba0e0cdd35a751a3be6a7cba5a55ad71/rpds_py-0.27.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:879b0e14a2da6a1102a3fc8af580fc1ead37e6d6692a781bd8c83da37429b5ab", size = 560084 }, + { url = "https://files.pythonhosted.org/packages/66/66/bb945683b958a1b19eb0fe715594630d0f36396ebdef4d9b89c2fa09aa56/rpds_py-0.27.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:0d807710df3b5faa66c731afa162ea29717ab3be17bdc15f90f2d9f183da4059", size = 590115 }, + { url = "https://files.pythonhosted.org/packages/12/00/ccfaafaf7db7e7adace915e5c2f2c2410e16402561801e9c7f96683002d3/rpds_py-0.27.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:3adc388fc3afb6540aec081fa59e6e0d3908722771aa1e37ffe22b220a436f0b", size = 556561 }, + { url = "https://files.pythonhosted.org/packages/e1/b7/92b6ed9aad103bfe1c45df98453dfae40969eef2cb6c6239c58d7e96f1b3/rpds_py-0.27.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c796c0c1cc68cb08b0284db4229f5af76168172670c74908fdbd4b7d7f515819", size = 229125 }, + { url = "https://files.pythonhosted.org/packages/0c/ed/e1fba02de17f4f76318b834425257c8ea297e415e12c68b4361f63e8ae92/rpds_py-0.27.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cdfe4bb2f9fe7458b7453ad3c33e726d6d1c7c0a72960bcc23800d77384e42df", size = 371402 }, + { url = "https://files.pythonhosted.org/packages/af/7c/e16b959b316048b55585a697e94add55a4ae0d984434d279ea83442e460d/rpds_py-0.27.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:8fabb8fd848a5f75a2324e4a84501ee3a5e3c78d8603f83475441866e60b94a3", size = 354084 }, + { url = "https://files.pythonhosted.org/packages/de/c1/ade645f55de76799fdd08682d51ae6724cb46f318573f18be49b1e040428/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eda8719d598f2f7f3e0f885cba8646644b55a187762bec091fa14a2b819746a9", size = 383090 }, + { url = "https://files.pythonhosted.org/packages/1f/27/89070ca9b856e52960da1472efcb6c20ba27cfe902f4f23ed095b9cfc61d/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3c64d07e95606ec402a0a1c511fe003873fa6af630bda59bac77fac8b4318ebc", size = 394519 }, + { url = "https://files.pythonhosted.org/packages/b3/28/be120586874ef906aa5aeeae95ae8df4184bc757e5b6bd1c729ccff45ed5/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:93a2ed40de81bcff59aabebb626562d48332f3d028ca2036f1d23cbb52750be4", size = 523817 }, + { url = "https://files.pythonhosted.org/packages/a8/ef/70cc197bc11cfcde02a86f36ac1eed15c56667c2ebddbdb76a47e90306da/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:387ce8c44ae94e0ec50532d9cb0edce17311024c9794eb196b90e1058aadeb66", size = 403240 }, + { url = "https://files.pythonhosted.org/packages/cf/35/46936cca449f7f518f2f4996e0e8344db4b57e2081e752441154089d2a5f/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aaf94f812c95b5e60ebaf8bfb1898a7d7cb9c1af5744d4a67fa47796e0465d4e", size = 385194 }, + { url = "https://files.pythonhosted.org/packages/e1/62/29c0d3e5125c3270b51415af7cbff1ec587379c84f55a5761cc9efa8cd06/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:4848ca84d6ded9b58e474dfdbad4b8bfb450344c0551ddc8d958bf4b36aa837c", size = 402086 }, + { url = "https://files.pythonhosted.org/packages/8f/66/03e1087679227785474466fdd04157fb793b3b76e3fcf01cbf4c693c1949/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2bde09cbcf2248b73c7c323be49b280180ff39fadcfe04e7b6f54a678d02a7cf", size = 419272 }, + { url = "https://files.pythonhosted.org/packages/6a/24/e3e72d265121e00b063aef3e3501e5b2473cf1b23511d56e529531acf01e/rpds_py-0.27.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:94c44ee01fd21c9058f124d2d4f0c9dc7634bec93cd4b38eefc385dabe71acbf", size = 560003 }, + { url = "https://files.pythonhosted.org/packages/26/ca/f5a344c534214cc2d41118c0699fffbdc2c1bc7046f2a2b9609765ab9c92/rpds_py-0.27.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:df8b74962e35c9249425d90144e721eed198e6555a0e22a563d29fe4486b51f6", size = 590482 }, + { url = "https://files.pythonhosted.org/packages/ce/08/4349bdd5c64d9d193c360aa9db89adeee6f6682ab8825dca0a3f535f434f/rpds_py-0.27.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:dc23e6820e3b40847e2f4a7726462ba0cf53089512abe9ee16318c366494c17a", size = 556523 }, + { url = "https://files.pythonhosted.org/packages/4e/ea/5463cd5048a7a2fcdae308b6e96432802132c141bfb9420260142632a0f1/rpds_py-0.27.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:aa8933159edc50be265ed22b401125c9eebff3171f570258854dbce3ecd55475", size = 371778 }, + { url = "https://files.pythonhosted.org/packages/0d/c8/f38c099db07f5114029c1467649d308543906933eebbc226d4527a5f4693/rpds_py-0.27.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a50431bf02583e21bf273c71b89d710e7a710ad5e39c725b14e685610555926f", size = 354394 }, + { url = "https://files.pythonhosted.org/packages/7d/79/b76f97704d9dd8ddbd76fed4c4048153a847c5d6003afe20a6b5c3339065/rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78af06ddc7fe5cc0e967085a9115accee665fb912c22a3f54bad70cc65b05fe6", size = 382348 }, + { url = "https://files.pythonhosted.org/packages/8a/3f/ef23d3c1be1b837b648a3016d5bbe7cfe711422ad110b4081c0a90ef5a53/rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:70d0738ef8fee13c003b100c2fbd667ec4f133468109b3472d249231108283a3", size = 394159 }, + { url = "https://files.pythonhosted.org/packages/74/8a/9e62693af1a34fd28b1a190d463d12407bd7cf561748cb4745845d9548d3/rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2f6fd8a1cea5bbe599b6e78a6e5ee08db434fc8ffea51ff201c8765679698b3", size = 522775 }, + { url = "https://files.pythonhosted.org/packages/36/0d/8d5bb122bf7a60976b54c5c99a739a3819f49f02d69df3ea2ca2aff47d5c/rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8177002868d1426305bb5de1e138161c2ec9eb2d939be38291d7c431c4712df8", size = 402633 }, + { url = "https://files.pythonhosted.org/packages/0f/0e/237948c1f425e23e0cf5a566d702652a6e55c6f8fbd332a1792eb7043daf/rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:008b839781d6c9bf3b6a8984d1d8e56f0ec46dc56df61fd669c49b58ae800400", size = 384867 }, + { url = "https://files.pythonhosted.org/packages/d6/0a/da0813efcd998d260cbe876d97f55b0f469ada8ba9cbc47490a132554540/rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:a55b9132bb1ade6c734ddd2759c8dc132aa63687d259e725221f106b83a0e485", size = 401791 }, + { url = "https://files.pythonhosted.org/packages/51/78/c6c9e8a8aaca416a6f0d1b6b4a6ee35b88fe2c5401d02235d0a056eceed2/rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a46fdec0083a26415f11d5f236b79fa1291c32aaa4a17684d82f7017a1f818b1", size = 419525 }, + { url = "https://files.pythonhosted.org/packages/a3/69/5af37e1d71487cf6d56dd1420dc7e0c2732c1b6ff612aa7a88374061c0a8/rpds_py-0.27.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:8a63b640a7845f2bdd232eb0d0a4a2dd939bcdd6c57e6bb134526487f3160ec5", size = 559255 }, + { url = "https://files.pythonhosted.org/packages/40/7f/8b7b136069ef7ac3960eda25d832639bdb163018a34c960ed042dd1707c8/rpds_py-0.27.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:7e32721e5d4922deaaf963469d795d5bde6093207c52fec719bd22e5d1bedbc4", size = 590384 }, + { url = "https://files.pythonhosted.org/packages/d8/06/c316d3f6ff03f43ccb0eba7de61376f8ec4ea850067dddfafe98274ae13c/rpds_py-0.27.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:2c426b99a068601b5f4623573df7a7c3d72e87533a2dd2253353a03e7502566c", size = 555959 }, + { url = "https://files.pythonhosted.org/packages/60/94/384cf54c430b9dac742bbd2ec26c23feb78ded0d43d6d78563a281aec017/rpds_py-0.27.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4fc9b7fe29478824361ead6e14e4f5aed570d477e06088826537e202d25fe859", size = 228784 }, +] + +[[package]] +name = "rpds-py" +version = "0.30.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/20/af/3f2f423103f1113b36230496629986e0ef7e199d2aa8392452b484b38ced/rpds_py-0.30.0.tar.gz", hash = "sha256:dd8ff7cf90014af0c0f787eea34794ebf6415242ee1d6fa91eaba725cc441e84", size = 69469 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/06/0c/0c411a0ec64ccb6d104dcabe0e713e05e153a9a2c3c2bd2b32ce412166fe/rpds_py-0.30.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:679ae98e00c0e8d68a7fda324e16b90fd5260945b45d3b824c892cec9eea3288", size = 370490 }, + { url = "https://files.pythonhosted.org/packages/19/6a/4ba3d0fb7297ebae71171822554abe48d7cab29c28b8f9f2c04b79988c05/rpds_py-0.30.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4cc2206b76b4f576934f0ed374b10d7ca5f457858b157ca52064bdfc26b9fc00", size = 359751 }, + { url = "https://files.pythonhosted.org/packages/cd/7c/e4933565ef7f7a0818985d87c15d9d273f1a649afa6a52ea35ad011195ea/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:389a2d49eded1896c3d48b0136ead37c48e221b391c052fba3f4055c367f60a6", size = 389696 }, + { url = "https://files.pythonhosted.org/packages/5e/01/6271a2511ad0815f00f7ed4390cf2567bec1d4b1da39e2c27a41e6e3b4de/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:32c8528634e1bf7121f3de08fa85b138f4e0dc47657866630611b03967f041d7", size = 403136 }, + { url = "https://files.pythonhosted.org/packages/55/64/c857eb7cd7541e9b4eee9d49c196e833128a55b89a9850a9c9ac33ccf897/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f207f69853edd6f6700b86efb84999651baf3789e78a466431df1331608e5324", size = 524699 }, + { url = "https://files.pythonhosted.org/packages/9c/ed/94816543404078af9ab26159c44f9e98e20fe47e2126d5d32c9d9948d10a/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:67b02ec25ba7a9e8fa74c63b6ca44cf5707f2fbfadae3ee8e7494297d56aa9df", size = 412022 }, + { url = "https://files.pythonhosted.org/packages/61/b5/707f6cf0066a6412aacc11d17920ea2e19e5b2f04081c64526eb35b5c6e7/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0e95f6819a19965ff420f65578bacb0b00f251fefe2c8b23347c37174271f3", size = 390522 }, + { url = "https://files.pythonhosted.org/packages/13/4e/57a85fda37a229ff4226f8cbcf09f2a455d1ed20e802ce5b2b4a7f5ed053/rpds_py-0.30.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:a452763cc5198f2f98898eb98f7569649fe5da666c2dc6b5ddb10fde5a574221", size = 404579 }, + { url = "https://files.pythonhosted.org/packages/f9/da/c9339293513ec680a721e0e16bf2bac3db6e5d7e922488de471308349bba/rpds_py-0.30.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e0b65193a413ccc930671c55153a03ee57cecb49e6227204b04fae512eb657a7", size = 421305 }, + { url = "https://files.pythonhosted.org/packages/f9/be/522cb84751114f4ad9d822ff5a1aa3c98006341895d5f084779b99596e5c/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:858738e9c32147f78b3ac24dc0edb6610000e56dc0f700fd5f651d0a0f0eb9ff", size = 572503 }, + { url = "https://files.pythonhosted.org/packages/a2/9b/de879f7e7ceddc973ea6e4629e9b380213a6938a249e94b0cdbcc325bb66/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:da279aa314f00acbb803da1e76fa18666778e8a8f83484fba94526da5de2cba7", size = 598322 }, + { url = "https://files.pythonhosted.org/packages/48/ac/f01fc22efec3f37d8a914fc1b2fb9bcafd56a299edbe96406f3053edea5a/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c64d38fb49b6cdeda16ab49e35fe0da2e1e9b34bc38bd78386530f218b37139", size = 560792 }, + { url = "https://files.pythonhosted.org/packages/e2/da/4e2b19d0f131f35b6146425f846563d0ce036763e38913d917187307a671/rpds_py-0.30.0-cp310-cp310-win32.whl", hash = "sha256:6de2a32a1665b93233cde140ff8b3467bdb9e2af2b91079f0333a0974d12d464", size = 221901 }, + { url = "https://files.pythonhosted.org/packages/96/cb/156d7a5cf4f78a7cc571465d8aec7a3c447c94f6749c5123f08438bcf7bc/rpds_py-0.30.0-cp310-cp310-win_amd64.whl", hash = "sha256:1726859cd0de969f88dc8673bdd954185b9104e05806be64bcd87badbe313169", size = 235823 }, + { url = "https://files.pythonhosted.org/packages/4d/6e/f964e88b3d2abee2a82c1ac8366da848fce1c6d834dc2132c3fda3970290/rpds_py-0.30.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a2bffea6a4ca9f01b3f8e548302470306689684e61602aa3d141e34da06cf425", size = 370157 }, + { url = "https://files.pythonhosted.org/packages/94/ba/24e5ebb7c1c82e74c4e4f33b2112a5573ddc703915b13a073737b59b86e0/rpds_py-0.30.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dc4f992dfe1e2bc3ebc7444f6c7051b4bc13cd8e33e43511e8ffd13bf407010d", size = 359676 }, + { url = "https://files.pythonhosted.org/packages/84/86/04dbba1b087227747d64d80c3b74df946b986c57af0a9f0c98726d4d7a3b/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:422c3cb9856d80b09d30d2eb255d0754b23e090034e1deb4083f8004bd0761e4", size = 389938 }, + { url = "https://files.pythonhosted.org/packages/42/bb/1463f0b1722b7f45431bdd468301991d1328b16cffe0b1c2918eba2c4eee/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07ae8a593e1c3c6b82ca3292efbe73c30b61332fd612e05abee07c79359f292f", size = 402932 }, + { url = "https://files.pythonhosted.org/packages/99/ee/2520700a5c1f2d76631f948b0736cdf9b0acb25abd0ca8e889b5c62ac2e3/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12f90dd7557b6bd57f40abe7747e81e0c0b119bef015ea7726e69fe550e394a4", size = 525830 }, + { url = "https://files.pythonhosted.org/packages/e0/ad/bd0331f740f5705cc555a5e17fdf334671262160270962e69a2bdef3bf76/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99b47d6ad9a6da00bec6aabe5a6279ecd3c06a329d4aa4771034a21e335c3a97", size = 412033 }, + { url = "https://files.pythonhosted.org/packages/f8/1e/372195d326549bb51f0ba0f2ecb9874579906b97e08880e7a65c3bef1a99/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33f559f3104504506a44bb666b93a33f5d33133765b0c216a5bf2f1e1503af89", size = 390828 }, + { url = "https://files.pythonhosted.org/packages/ab/2b/d88bb33294e3e0c76bc8f351a3721212713629ffca1700fa94979cb3eae8/rpds_py-0.30.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:946fe926af6e44f3697abbc305ea168c2c31d3e3ef1058cf68f379bf0335a78d", size = 404683 }, + { url = "https://files.pythonhosted.org/packages/50/32/c759a8d42bcb5289c1fac697cd92f6fe01a018dd937e62ae77e0e7f15702/rpds_py-0.30.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:495aeca4b93d465efde585977365187149e75383ad2684f81519f504f5c13038", size = 421583 }, + { url = "https://files.pythonhosted.org/packages/2b/81/e729761dbd55ddf5d84ec4ff1f47857f4374b0f19bdabfcf929164da3e24/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9a0ca5da0386dee0655b4ccdf46119df60e0f10da268d04fe7cc87886872ba7", size = 572496 }, + { url = "https://files.pythonhosted.org/packages/14/f6/69066a924c3557c9c30baa6ec3a0aa07526305684c6f86c696b08860726c/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8d6d1cc13664ec13c1b84241204ff3b12f9bb82464b8ad6e7a5d3486975c2eed", size = 598669 }, + { url = "https://files.pythonhosted.org/packages/5f/48/905896b1eb8a05630d20333d1d8ffd162394127b74ce0b0784ae04498d32/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3896fa1be39912cf0757753826bc8bdc8ca331a28a7c4ae46b7a21280b06bb85", size = 561011 }, + { url = "https://files.pythonhosted.org/packages/22/16/cd3027c7e279d22e5eb431dd3c0fbc677bed58797fe7581e148f3f68818b/rpds_py-0.30.0-cp311-cp311-win32.whl", hash = "sha256:55f66022632205940f1827effeff17c4fa7ae1953d2b74a8581baaefb7d16f8c", size = 221406 }, + { url = "https://files.pythonhosted.org/packages/fa/5b/e7b7aa136f28462b344e652ee010d4de26ee9fd16f1bfd5811f5153ccf89/rpds_py-0.30.0-cp311-cp311-win_amd64.whl", hash = "sha256:a51033ff701fca756439d641c0ad09a41d9242fa69121c7d8769604a0a629825", size = 236024 }, + { url = "https://files.pythonhosted.org/packages/14/a6/364bba985e4c13658edb156640608f2c9e1d3ea3c81b27aa9d889fff0e31/rpds_py-0.30.0-cp311-cp311-win_arm64.whl", hash = "sha256:47b0ef6231c58f506ef0b74d44e330405caa8428e770fec25329ed2cb971a229", size = 229069 }, + { url = "https://files.pythonhosted.org/packages/03/e7/98a2f4ac921d82f33e03f3835f5bf3a4a40aa1bfdc57975e74a97b2b4bdd/rpds_py-0.30.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a161f20d9a43006833cd7068375a94d035714d73a172b681d8881820600abfad", size = 375086 }, + { url = "https://files.pythonhosted.org/packages/4d/a1/bca7fd3d452b272e13335db8d6b0b3ecde0f90ad6f16f3328c6fb150c889/rpds_py-0.30.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6abc8880d9d036ecaafe709079969f56e876fcf107f7a8e9920ba6d5a3878d05", size = 359053 }, + { url = "https://files.pythonhosted.org/packages/65/1c/ae157e83a6357eceff62ba7e52113e3ec4834a84cfe07fa4b0757a7d105f/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca28829ae5f5d569bb62a79512c842a03a12576375d5ece7d2cadf8abe96ec28", size = 390763 }, + { url = "https://files.pythonhosted.org/packages/d4/36/eb2eb8515e2ad24c0bd43c3ee9cd74c33f7ca6430755ccdb240fd3144c44/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a1010ed9524c73b94d15919ca4d41d8780980e1765babf85f9a2f90d247153dd", size = 408951 }, + { url = "https://files.pythonhosted.org/packages/d6/65/ad8dc1784a331fabbd740ef6f71ce2198c7ed0890dab595adb9ea2d775a1/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8d1736cfb49381ba528cd5baa46f82fdc65c06e843dab24dd70b63d09121b3f", size = 514622 }, + { url = "https://files.pythonhosted.org/packages/63/8e/0cfa7ae158e15e143fe03993b5bcd743a59f541f5952e1546b1ac1b5fd45/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d948b135c4693daff7bc2dcfc4ec57237a29bd37e60c2fabf5aff2bbacf3e2f1", size = 414492 }, + { url = "https://files.pythonhosted.org/packages/60/1b/6f8f29f3f995c7ffdde46a626ddccd7c63aefc0efae881dc13b6e5d5bb16/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47f236970bccb2233267d89173d3ad2703cd36a0e2a6e92d0560d333871a3d23", size = 394080 }, + { url = "https://files.pythonhosted.org/packages/6d/d5/a266341051a7a3ca2f4b750a3aa4abc986378431fc2da508c5034d081b70/rpds_py-0.30.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:2e6ecb5a5bcacf59c3f912155044479af1d0b6681280048b338b28e364aca1f6", size = 408680 }, + { url = "https://files.pythonhosted.org/packages/10/3b/71b725851df9ab7a7a4e33cf36d241933da66040d195a84781f49c50490c/rpds_py-0.30.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a8fa71a2e078c527c3e9dc9fc5a98c9db40bcc8a92b4e8858e36d329f8684b51", size = 423589 }, + { url = "https://files.pythonhosted.org/packages/00/2b/e59e58c544dc9bd8bd8384ecdb8ea91f6727f0e37a7131baeff8d6f51661/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:73c67f2db7bc334e518d097c6d1e6fed021bbc9b7d678d6cc433478365d1d5f5", size = 573289 }, + { url = "https://files.pythonhosted.org/packages/da/3e/a18e6f5b460893172a7d6a680e86d3b6bc87a54c1f0b03446a3c8c7b588f/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5ba103fb455be00f3b1c2076c9d4264bfcb037c976167a6047ed82f23153f02e", size = 599737 }, + { url = "https://files.pythonhosted.org/packages/5c/e2/714694e4b87b85a18e2c243614974413c60aa107fd815b8cbc42b873d1d7/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7cee9c752c0364588353e627da8a7e808a66873672bcb5f52890c33fd965b394", size = 563120 }, + { url = "https://files.pythonhosted.org/packages/6f/ab/d5d5e3bcedb0a77f4f613706b750e50a5a3ba1c15ccd3665ecc636c968fd/rpds_py-0.30.0-cp312-cp312-win32.whl", hash = "sha256:1ab5b83dbcf55acc8b08fc62b796ef672c457b17dbd7820a11d6c52c06839bdf", size = 223782 }, + { url = "https://files.pythonhosted.org/packages/39/3b/f786af9957306fdc38a74cef405b7b93180f481fb48453a114bb6465744a/rpds_py-0.30.0-cp312-cp312-win_amd64.whl", hash = "sha256:a090322ca841abd453d43456ac34db46e8b05fd9b3b4ac0c78bcde8b089f959b", size = 240463 }, + { url = "https://files.pythonhosted.org/packages/f3/d2/b91dc748126c1559042cfe41990deb92c4ee3e2b415f6b5234969ffaf0cc/rpds_py-0.30.0-cp312-cp312-win_arm64.whl", hash = "sha256:669b1805bd639dd2989b281be2cfd951c6121b65e729d9b843e9639ef1fd555e", size = 230868 }, + { url = "https://files.pythonhosted.org/packages/ed/dc/d61221eb88ff410de3c49143407f6f3147acf2538c86f2ab7ce65ae7d5f9/rpds_py-0.30.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f83424d738204d9770830d35290ff3273fbb02b41f919870479fab14b9d303b2", size = 374887 }, + { url = "https://files.pythonhosted.org/packages/fd/32/55fb50ae104061dbc564ef15cc43c013dc4a9f4527a1f4d99baddf56fe5f/rpds_py-0.30.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e7536cd91353c5273434b4e003cbda89034d67e7710eab8761fd918ec6c69cf8", size = 358904 }, + { url = "https://files.pythonhosted.org/packages/58/70/faed8186300e3b9bdd138d0273109784eea2396c68458ed580f885dfe7ad/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2771c6c15973347f50fece41fc447c054b7ac2ae0502388ce3b6738cd366e3d4", size = 389945 }, + { url = "https://files.pythonhosted.org/packages/bd/a8/073cac3ed2c6387df38f71296d002ab43496a96b92c823e76f46b8af0543/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0a59119fc6e3f460315fe9d08149f8102aa322299deaa5cab5b40092345c2136", size = 407783 }, + { url = "https://files.pythonhosted.org/packages/77/57/5999eb8c58671f1c11eba084115e77a8899d6e694d2a18f69f0ba471ec8b/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76fec018282b4ead0364022e3c54b60bf368b9d926877957a8624b58419169b7", size = 515021 }, + { url = "https://files.pythonhosted.org/packages/e0/af/5ab4833eadc36c0a8ed2bc5c0de0493c04f6c06de223170bd0798ff98ced/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:692bef75a5525db97318e8cd061542b5a79812d711ea03dbc1f6f8dbb0c5f0d2", size = 414589 }, + { url = "https://files.pythonhosted.org/packages/b7/de/f7192e12b21b9e9a68a6d0f249b4af3fdcdff8418be0767a627564afa1f1/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9027da1ce107104c50c81383cae773ef5c24d296dd11c99e2629dbd7967a20c6", size = 394025 }, + { url = "https://files.pythonhosted.org/packages/91/c4/fc70cd0249496493500e7cc2de87504f5aa6509de1e88623431fec76d4b6/rpds_py-0.30.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:9cf69cdda1f5968a30a359aba2f7f9aa648a9ce4b580d6826437f2b291cfc86e", size = 408895 }, + { url = "https://files.pythonhosted.org/packages/58/95/d9275b05ab96556fefff73a385813eb66032e4c99f411d0795372d9abcea/rpds_py-0.30.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a4796a717bf12b9da9d3ad002519a86063dcac8988b030e405704ef7d74d2d9d", size = 422799 }, + { url = "https://files.pythonhosted.org/packages/06/c1/3088fc04b6624eb12a57eb814f0d4997a44b0d208d6cace713033ff1a6ba/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5d4c2aa7c50ad4728a094ebd5eb46c452e9cb7edbfdb18f9e1221f597a73e1e7", size = 572731 }, + { url = "https://files.pythonhosted.org/packages/d8/42/c612a833183b39774e8ac8fecae81263a68b9583ee343db33ab571a7ce55/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ba81a9203d07805435eb06f536d95a266c21e5b2dfbf6517748ca40c98d19e31", size = 599027 }, + { url = "https://files.pythonhosted.org/packages/5f/60/525a50f45b01d70005403ae0e25f43c0384369ad24ffe46e8d9068b50086/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:945dccface01af02675628334f7cf49c2af4c1c904748efc5cf7bbdf0b579f95", size = 563020 }, + { url = "https://files.pythonhosted.org/packages/0b/5d/47c4655e9bcd5ca907148535c10e7d489044243cc9941c16ed7cd53be91d/rpds_py-0.30.0-cp313-cp313-win32.whl", hash = "sha256:b40fb160a2db369a194cb27943582b38f79fc4887291417685f3ad693c5a1d5d", size = 223139 }, + { url = "https://files.pythonhosted.org/packages/f2/e1/485132437d20aa4d3e1d8b3fb5a5e65aa8139f1e097080c2a8443201742c/rpds_py-0.30.0-cp313-cp313-win_amd64.whl", hash = "sha256:806f36b1b605e2d6a72716f321f20036b9489d29c51c91f4dd29a3e3afb73b15", size = 240224 }, + { url = "https://files.pythonhosted.org/packages/24/95/ffd128ed1146a153d928617b0ef673960130be0009c77d8fbf0abe306713/rpds_py-0.30.0-cp313-cp313-win_arm64.whl", hash = "sha256:d96c2086587c7c30d44f31f42eae4eac89b60dabbac18c7669be3700f13c3ce1", size = 230645 }, + { url = "https://files.pythonhosted.org/packages/ff/1b/b10de890a0def2a319a2626334a7f0ae388215eb60914dbac8a3bae54435/rpds_py-0.30.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:eb0b93f2e5c2189ee831ee43f156ed34e2a89a78a66b98cadad955972548be5a", size = 364443 }, + { url = "https://files.pythonhosted.org/packages/0d/bf/27e39f5971dc4f305a4fb9c672ca06f290f7c4e261c568f3dea16a410d47/rpds_py-0.30.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:922e10f31f303c7c920da8981051ff6d8c1a56207dbdf330d9047f6d30b70e5e", size = 353375 }, + { url = "https://files.pythonhosted.org/packages/40/58/442ada3bba6e8e6615fc00483135c14a7538d2ffac30e2d933ccf6852232/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdc62c8286ba9bf7f47befdcea13ea0e26bf294bda99758fd90535cbaf408000", size = 383850 }, + { url = "https://files.pythonhosted.org/packages/14/14/f59b0127409a33c6ef6f5c1ebd5ad8e32d7861c9c7adfa9a624fc3889f6c/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:47f9a91efc418b54fb8190a6b4aa7813a23fb79c51f4bb84e418f5476c38b8db", size = 392812 }, + { url = "https://files.pythonhosted.org/packages/b3/66/e0be3e162ac299b3a22527e8913767d869e6cc75c46bd844aa43fb81ab62/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f3587eb9b17f3789ad50824084fa6f81921bbf9a795826570bda82cb3ed91f2", size = 517841 }, + { url = "https://files.pythonhosted.org/packages/3d/55/fa3b9cf31d0c963ecf1ba777f7cf4b2a2c976795ac430d24a1f43d25a6ba/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39c02563fc592411c2c61d26b6c5fe1e51eaa44a75aa2c8735ca88b0d9599daa", size = 408149 }, + { url = "https://files.pythonhosted.org/packages/60/ca/780cf3b1a32b18c0f05c441958d3758f02544f1d613abf9488cd78876378/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51a1234d8febafdfd33a42d97da7a43f5dcb120c1060e352a3fbc0c6d36e2083", size = 383843 }, + { url = "https://files.pythonhosted.org/packages/82/86/d5f2e04f2aa6247c613da0c1dd87fcd08fa17107e858193566048a1e2f0a/rpds_py-0.30.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:eb2c4071ab598733724c08221091e8d80e89064cd472819285a9ab0f24bcedb9", size = 396507 }, + { url = "https://files.pythonhosted.org/packages/4b/9a/453255d2f769fe44e07ea9785c8347edaf867f7026872e76c1ad9f7bed92/rpds_py-0.30.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6bdfdb946967d816e6adf9a3d8201bfad269c67efe6cefd7093ef959683c8de0", size = 414949 }, + { url = "https://files.pythonhosted.org/packages/a3/31/622a86cdc0c45d6df0e9ccb6becdba5074735e7033c20e401a6d9d0e2ca0/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c77afbd5f5250bf27bf516c7c4a016813eb2d3e116139aed0096940c5982da94", size = 565790 }, + { url = "https://files.pythonhosted.org/packages/1c/5d/15bbf0fb4a3f58a3b1c67855ec1efcc4ceaef4e86644665fff03e1b66d8d/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:61046904275472a76c8c90c9ccee9013d70a6d0f73eecefd38c1ae7c39045a08", size = 590217 }, + { url = "https://files.pythonhosted.org/packages/6d/61/21b8c41f68e60c8cc3b2e25644f0e3681926020f11d06ab0b78e3c6bbff1/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c5f36a861bc4b7da6516dbdf302c55313afa09b81931e8280361a4f6c9a2d27", size = 555806 }, + { url = "https://files.pythonhosted.org/packages/f9/39/7e067bb06c31de48de3eb200f9fc7c58982a4d3db44b07e73963e10d3be9/rpds_py-0.30.0-cp313-cp313t-win32.whl", hash = "sha256:3d4a69de7a3e50ffc214ae16d79d8fbb0922972da0356dcf4d0fdca2878559c6", size = 211341 }, + { url = "https://files.pythonhosted.org/packages/0a/4d/222ef0b46443cf4cf46764d9c630f3fe4abaa7245be9417e56e9f52b8f65/rpds_py-0.30.0-cp313-cp313t-win_amd64.whl", hash = "sha256:f14fc5df50a716f7ece6a80b6c78bb35ea2ca47c499e422aa4463455dd96d56d", size = 225768 }, + { url = "https://files.pythonhosted.org/packages/86/81/dad16382ebbd3d0e0328776d8fd7ca94220e4fa0798d1dc5e7da48cb3201/rpds_py-0.30.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:68f19c879420aa08f61203801423f6cd5ac5f0ac4ac82a2368a9fcd6a9a075e0", size = 362099 }, + { url = "https://files.pythonhosted.org/packages/2b/60/19f7884db5d5603edf3c6bce35408f45ad3e97e10007df0e17dd57af18f8/rpds_py-0.30.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ec7c4490c672c1a0389d319b3a9cfcd098dcdc4783991553c332a15acf7249be", size = 353192 }, + { url = "https://files.pythonhosted.org/packages/bf/c4/76eb0e1e72d1a9c4703c69607cec123c29028bff28ce41588792417098ac/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f251c812357a3fed308d684a5079ddfb9d933860fc6de89f2b7ab00da481e65f", size = 384080 }, + { url = "https://files.pythonhosted.org/packages/72/87/87ea665e92f3298d1b26d78814721dc39ed8d2c74b86e83348d6b48a6f31/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac98b175585ecf4c0348fd7b29c3864bda53b805c773cbf7bfdaffc8070c976f", size = 394841 }, + { url = "https://files.pythonhosted.org/packages/77/ad/7783a89ca0587c15dcbf139b4a8364a872a25f861bdb88ed99f9b0dec985/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3e62880792319dbeb7eb866547f2e35973289e7d5696c6e295476448f5b63c87", size = 516670 }, + { url = "https://files.pythonhosted.org/packages/5b/3c/2882bdac942bd2172f3da574eab16f309ae10a3925644e969536553cb4ee/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e7fc54e0900ab35d041b0601431b0a0eb495f0851a0639b6ef90f7741b39a18", size = 408005 }, + { url = "https://files.pythonhosted.org/packages/ce/81/9a91c0111ce1758c92516a3e44776920b579d9a7c09b2b06b642d4de3f0f/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47e77dc9822d3ad616c3d5759ea5631a75e5809d5a28707744ef79d7a1bcfcad", size = 382112 }, + { url = "https://files.pythonhosted.org/packages/cf/8e/1da49d4a107027e5fbc64daeab96a0706361a2918da10cb41769244b805d/rpds_py-0.30.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b4dc1a6ff022ff85ecafef7979a2c6eb423430e05f1165d6688234e62ba99a07", size = 399049 }, + { url = "https://files.pythonhosted.org/packages/df/5a/7ee239b1aa48a127570ec03becbb29c9d5a9eb092febbd1699d567cae859/rpds_py-0.30.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4559c972db3a360808309e06a74628b95eaccbf961c335c8fe0d590cf587456f", size = 415661 }, + { url = "https://files.pythonhosted.org/packages/70/ea/caa143cf6b772f823bc7929a45da1fa83569ee49b11d18d0ada7f5ee6fd6/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0ed177ed9bded28f8deb6ab40c183cd1192aa0de40c12f38be4d59cd33cb5c65", size = 565606 }, + { url = "https://files.pythonhosted.org/packages/64/91/ac20ba2d69303f961ad8cf55bf7dbdb4763f627291ba3d0d7d67333cced9/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ad1fa8db769b76ea911cb4e10f049d80bf518c104f15b3edb2371cc65375c46f", size = 591126 }, + { url = "https://files.pythonhosted.org/packages/21/20/7ff5f3c8b00c8a95f75985128c26ba44503fb35b8e0259d812766ea966c7/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:46e83c697b1f1c72b50e5ee5adb4353eef7406fb3f2043d64c33f20ad1c2fc53", size = 553371 }, + { url = "https://files.pythonhosted.org/packages/72/c7/81dadd7b27c8ee391c132a6b192111ca58d866577ce2d9b0ca157552cce0/rpds_py-0.30.0-cp314-cp314-win32.whl", hash = "sha256:ee454b2a007d57363c2dfd5b6ca4a5d7e2c518938f8ed3b706e37e5d470801ed", size = 215298 }, + { url = "https://files.pythonhosted.org/packages/3e/d2/1aaac33287e8cfb07aab2e6b8ac1deca62f6f65411344f1433c55e6f3eb8/rpds_py-0.30.0-cp314-cp314-win_amd64.whl", hash = "sha256:95f0802447ac2d10bcc69f6dc28fe95fdf17940367b21d34e34c737870758950", size = 228604 }, + { url = "https://files.pythonhosted.org/packages/e8/95/ab005315818cc519ad074cb7784dae60d939163108bd2b394e60dc7b5461/rpds_py-0.30.0-cp314-cp314-win_arm64.whl", hash = "sha256:613aa4771c99f03346e54c3f038e4cc574ac09a3ddfb0e8878487335e96dead6", size = 222391 }, + { url = "https://files.pythonhosted.org/packages/9e/68/154fe0194d83b973cdedcdcc88947a2752411165930182ae41d983dcefa6/rpds_py-0.30.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:7e6ecfcb62edfd632e56983964e6884851786443739dbfe3582947e87274f7cb", size = 364868 }, + { url = "https://files.pythonhosted.org/packages/83/69/8bbc8b07ec854d92a8b75668c24d2abcb1719ebf890f5604c61c9369a16f/rpds_py-0.30.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a1d0bc22a7cdc173fedebb73ef81e07faef93692b8c1ad3733b67e31e1b6e1b8", size = 353747 }, + { url = "https://files.pythonhosted.org/packages/ab/00/ba2e50183dbd9abcce9497fa5149c62b4ff3e22d338a30d690f9af970561/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d08f00679177226c4cb8c5265012eea897c8ca3b93f429e546600c971bcbae7", size = 383795 }, + { url = "https://files.pythonhosted.org/packages/05/6f/86f0272b84926bcb0e4c972262f54223e8ecc556b3224d281e6598fc9268/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5965af57d5848192c13534f90f9dd16464f3c37aaf166cc1da1cae1fd5a34898", size = 393330 }, + { url = "https://files.pythonhosted.org/packages/cb/e9/0e02bb2e6dc63d212641da45df2b0bf29699d01715913e0d0f017ee29438/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a4e86e34e9ab6b667c27f3211ca48f73dba7cd3d90f8d5b11be56e5dbc3fb4e", size = 518194 }, + { url = "https://files.pythonhosted.org/packages/ee/ca/be7bca14cf21513bdf9c0606aba17d1f389ea2b6987035eb4f62bd923f25/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d3e6b26f2c785d65cc25ef1e5267ccbe1b069c5c21b8cc724efee290554419", size = 408340 }, + { url = "https://files.pythonhosted.org/packages/c2/c7/736e00ebf39ed81d75544c0da6ef7b0998f8201b369acf842f9a90dc8fce/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:626a7433c34566535b6e56a1b39a7b17ba961e97ce3b80ec62e6f1312c025551", size = 383765 }, + { url = "https://files.pythonhosted.org/packages/4a/3f/da50dfde9956aaf365c4adc9533b100008ed31aea635f2b8d7b627e25b49/rpds_py-0.30.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:acd7eb3f4471577b9b5a41baf02a978e8bdeb08b4b355273994f8b87032000a8", size = 396834 }, + { url = "https://files.pythonhosted.org/packages/4e/00/34bcc2565b6020eab2623349efbdec810676ad571995911f1abdae62a3a0/rpds_py-0.30.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe5fa731a1fa8a0a56b0977413f8cacac1768dad38d16b3a296712709476fbd5", size = 415470 }, + { url = "https://files.pythonhosted.org/packages/8c/28/882e72b5b3e6f718d5453bd4d0d9cf8df36fddeb4ddbbab17869d5868616/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:74a3243a411126362712ee1524dfc90c650a503502f135d54d1b352bd01f2404", size = 565630 }, + { url = "https://files.pythonhosted.org/packages/3b/97/04a65539c17692de5b85c6e293520fd01317fd878ea1995f0367d4532fb1/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:3e8eeb0544f2eb0d2581774be4c3410356eba189529a6b3e36bbbf9696175856", size = 591148 }, + { url = "https://files.pythonhosted.org/packages/85/70/92482ccffb96f5441aab93e26c4d66489eb599efdcf96fad90c14bbfb976/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:dbd936cde57abfee19ab3213cf9c26be06d60750e60a8e4dd85d1ab12c8b1f40", size = 556030 }, + { url = "https://files.pythonhosted.org/packages/20/53/7c7e784abfa500a2b6b583b147ee4bb5a2b3747a9166bab52fec4b5b5e7d/rpds_py-0.30.0-cp314-cp314t-win32.whl", hash = "sha256:dc824125c72246d924f7f796b4f63c1e9dc810c7d9e2355864b3c3a73d59ade0", size = 211570 }, + { url = "https://files.pythonhosted.org/packages/d0/02/fa464cdfbe6b26e0600b62c528b72d8608f5cc49f96b8d6e38c95d60c676/rpds_py-0.30.0-cp314-cp314t-win_amd64.whl", hash = "sha256:27f4b0e92de5bfbc6f86e43959e6edd1425c33b5e69aab0984a72047f2bcf1e3", size = 226532 }, + { url = "https://files.pythonhosted.org/packages/69/71/3f34339ee70521864411f8b6992e7ab13ac30d8e4e3309e07c7361767d91/rpds_py-0.30.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c2262bdba0ad4fc6fb5545660673925c2d2a5d9e2e0fb603aad545427be0fc58", size = 372292 }, + { url = "https://files.pythonhosted.org/packages/57/09/f183df9b8f2d66720d2ef71075c59f7e1b336bec7ee4c48f0a2b06857653/rpds_py-0.30.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ee6af14263f25eedc3bb918a3c04245106a42dfd4f5c2285ea6f997b1fc3f89a", size = 362128 }, + { url = "https://files.pythonhosted.org/packages/7a/68/5c2594e937253457342e078f0cc1ded3dd7b2ad59afdbf2d354869110a02/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3adbb8179ce342d235c31ab8ec511e66c73faa27a47e076ccc92421add53e2bb", size = 391542 }, + { url = "https://files.pythonhosted.org/packages/49/5c/31ef1afd70b4b4fbdb2800249f34c57c64beb687495b10aec0365f53dfc4/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:250fa00e9543ac9b97ac258bd37367ff5256666122c2d0f2bc97577c60a1818c", size = 404004 }, + { url = "https://files.pythonhosted.org/packages/e3/63/0cfbea38d05756f3440ce6534d51a491d26176ac045e2707adc99bb6e60a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9854cf4f488b3d57b9aaeb105f06d78e5529d3145b1e4a41750167e8c213c6d3", size = 527063 }, + { url = "https://files.pythonhosted.org/packages/42/e6/01e1f72a2456678b0f618fc9a1a13f882061690893c192fcad9f2926553a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:993914b8e560023bc0a8bf742c5f303551992dcb85e247b1e5c7f4a7d145bda5", size = 413099 }, + { url = "https://files.pythonhosted.org/packages/b8/25/8df56677f209003dcbb180765520c544525e3ef21ea72279c98b9aa7c7fb/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58edca431fb9b29950807e301826586e5bbf24163677732429770a697ffe6738", size = 392177 }, + { url = "https://files.pythonhosted.org/packages/4a/b4/0a771378c5f16f8115f796d1f437950158679bcd2a7c68cf251cfb00ed5b/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:dea5b552272a944763b34394d04577cf0f9bd013207bc32323b5a89a53cf9c2f", size = 406015 }, + { url = "https://files.pythonhosted.org/packages/36/d8/456dbba0af75049dc6f63ff295a2f92766b9d521fa00de67a2bd6427d57a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ba3af48635eb83d03f6c9735dfb21785303e73d22ad03d489e88adae6eab8877", size = 423736 }, + { url = "https://files.pythonhosted.org/packages/13/64/b4d76f227d5c45a7e0b796c674fd81b0a6c4fbd48dc29271857d8219571c/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:dff13836529b921e22f15cb099751209a60009731a68519630a24d61f0b1b30a", size = 573981 }, + { url = "https://files.pythonhosted.org/packages/20/91/092bacadeda3edf92bf743cc96a7be133e13a39cdbfd7b5082e7ab638406/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:1b151685b23929ab7beec71080a8889d4d6d9fa9a983d213f07121205d48e2c4", size = 599782 }, + { url = "https://files.pythonhosted.org/packages/d1/b7/b95708304cd49b7b6f82fdd039f1748b66ec2b21d6a45180910802f1abf1/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ac37f9f516c51e5753f27dfdef11a88330f04de2d564be3991384b2f3535d02e", size = 562191 }, +] + +[[package]] +name = "scipy" +version = "1.13.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ae/00/48c2f661e2816ccf2ecd77982f6605b2950afe60f60a52b4cbbc2504aa8f/scipy-1.13.1.tar.gz", hash = "sha256:095a87a0312b08dfd6a6155cbbd310a8c51800fc931b8c0b84003014b874ed3c", size = 57210720 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/33/59/41b2529908c002ade869623b87eecff3e11e3ce62e996d0bdcb536984187/scipy-1.13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:20335853b85e9a49ff7572ab453794298bcf0354d8068c5f6775a0eabf350aca", size = 39328076 }, + { url = "https://files.pythonhosted.org/packages/d5/33/f1307601f492f764062ce7dd471a14750f3360e33cd0f8c614dae208492c/scipy-1.13.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d605e9c23906d1994f55ace80e0125c587f96c020037ea6aa98d01b4bd2e222f", size = 30306232 }, + { url = "https://files.pythonhosted.org/packages/c0/66/9cd4f501dd5ea03e4a4572ecd874936d0da296bd04d1c45ae1a4a75d9c3a/scipy-1.13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfa31f1def5c819b19ecc3a8b52d28ffdcc7ed52bb20c9a7589669dd3c250989", size = 33743202 }, + { url = "https://files.pythonhosted.org/packages/a3/ba/7255e5dc82a65adbe83771c72f384d99c43063648456796436c9a5585ec3/scipy-1.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26264b282b9da0952a024ae34710c2aff7d27480ee91a2e82b7b7073c24722f", size = 38577335 }, + { url = "https://files.pythonhosted.org/packages/49/a5/bb9ded8326e9f0cdfdc412eeda1054b914dfea952bda2097d174f8832cc0/scipy-1.13.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:eccfa1906eacc02de42d70ef4aecea45415f5be17e72b61bafcfd329bdc52e94", size = 38820728 }, + { url = "https://files.pythonhosted.org/packages/12/30/df7a8fcc08f9b4a83f5f27cfaaa7d43f9a2d2ad0b6562cced433e5b04e31/scipy-1.13.1-cp310-cp310-win_amd64.whl", hash = "sha256:2831f0dc9c5ea9edd6e51e6e769b655f08ec6db6e2e10f86ef39bd32eb11da54", size = 46210588 }, + { url = "https://files.pythonhosted.org/packages/b4/15/4a4bb1b15bbd2cd2786c4f46e76b871b28799b67891f23f455323a0cdcfb/scipy-1.13.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:27e52b09c0d3a1d5b63e1105f24177e544a222b43611aaf5bc44d4a0979e32f9", size = 39333805 }, + { url = "https://files.pythonhosted.org/packages/ba/92/42476de1af309c27710004f5cdebc27bec62c204db42e05b23a302cb0c9a/scipy-1.13.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:54f430b00f0133e2224c3ba42b805bfd0086fe488835effa33fa291561932326", size = 30317687 }, + { url = "https://files.pythonhosted.org/packages/80/ba/8be64fe225360a4beb6840f3cbee494c107c0887f33350d0a47d55400b01/scipy-1.13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e89369d27f9e7b0884ae559a3a956e77c02114cc60a6058b4e5011572eea9299", size = 33694638 }, + { url = "https://files.pythonhosted.org/packages/36/07/035d22ff9795129c5a847c64cb43c1fa9188826b59344fee28a3ab02e283/scipy-1.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a78b4b3345f1b6f68a763c6e25c0c9a23a9fd0f39f5f3d200efe8feda560a5fa", size = 38569931 }, + { url = "https://files.pythonhosted.org/packages/d9/10/f9b43de37e5ed91facc0cfff31d45ed0104f359e4f9a68416cbf4e790241/scipy-1.13.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45484bee6d65633752c490404513b9ef02475b4284c4cfab0ef946def50b3f59", size = 38838145 }, + { url = "https://files.pythonhosted.org/packages/4a/48/4513a1a5623a23e95f94abd675ed91cfb19989c58e9f6f7d03990f6caf3d/scipy-1.13.1-cp311-cp311-win_amd64.whl", hash = "sha256:5713f62f781eebd8d597eb3f88b8bf9274e79eeabf63afb4a737abc6c84ad37b", size = 46196227 }, + { url = "https://files.pythonhosted.org/packages/f2/7b/fb6b46fbee30fc7051913068758414f2721003a89dd9a707ad49174e3843/scipy-1.13.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5d72782f39716b2b3509cd7c33cdc08c96f2f4d2b06d51e52fb45a19ca0c86a1", size = 39357301 }, + { url = "https://files.pythonhosted.org/packages/dc/5a/2043a3bde1443d94014aaa41e0b50c39d046dda8360abd3b2a1d3f79907d/scipy-1.13.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:017367484ce5498445aade74b1d5ab377acdc65e27095155e448c88497755a5d", size = 30363348 }, + { url = "https://files.pythonhosted.org/packages/e7/cb/26e4a47364bbfdb3b7fb3363be6d8a1c543bcd70a7753ab397350f5f189a/scipy-1.13.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:949ae67db5fa78a86e8fa644b9a6b07252f449dcf74247108c50e1d20d2b4627", size = 33406062 }, + { url = "https://files.pythonhosted.org/packages/88/ab/6ecdc526d509d33814835447bbbeedbebdec7cca46ef495a61b00a35b4bf/scipy-1.13.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de3ade0e53bc1f21358aa74ff4830235d716211d7d077e340c7349bc3542e884", size = 38218311 }, + { url = "https://files.pythonhosted.org/packages/0b/00/9f54554f0f8318100a71515122d8f4f503b1a2c4b4cfab3b4b68c0eb08fa/scipy-1.13.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2ac65fb503dad64218c228e2dc2d0a0193f7904747db43014645ae139c8fad16", size = 38442493 }, + { url = "https://files.pythonhosted.org/packages/3e/df/963384e90733e08eac978cd103c34df181d1fec424de383cdc443f418dd4/scipy-1.13.1-cp312-cp312-win_amd64.whl", hash = "sha256:cdd7dacfb95fea358916410ec61bbc20440f7860333aee6d882bb8046264e949", size = 45910955 }, + { url = "https://files.pythonhosted.org/packages/7f/29/c2ea58c9731b9ecb30b6738113a95d147e83922986b34c685b8f6eefde21/scipy-1.13.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:436bbb42a94a8aeef855d755ce5a465479c721e9d684de76bf61a62e7c2b81d5", size = 39352927 }, + { url = "https://files.pythonhosted.org/packages/5c/c0/e71b94b20ccf9effb38d7147c0064c08c622309fd487b1b677771a97d18c/scipy-1.13.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:8335549ebbca860c52bf3d02f80784e91a004b71b059e3eea9678ba994796a24", size = 30324538 }, + { url = "https://files.pythonhosted.org/packages/6d/0f/aaa55b06d474817cea311e7b10aab2ea1fd5d43bc6a2861ccc9caec9f418/scipy-1.13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d533654b7d221a6a97304ab63c41c96473ff04459e404b83275b60aa8f4b7004", size = 33732190 }, + { url = "https://files.pythonhosted.org/packages/35/f5/d0ad1a96f80962ba65e2ce1de6a1e59edecd1f0a7b55990ed208848012e0/scipy-1.13.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637e98dcf185ba7f8e663e122ebf908c4702420477ae52a04f9908707456ba4d", size = 38612244 }, + { url = "https://files.pythonhosted.org/packages/8d/02/1165905f14962174e6569076bcc3315809ae1291ed14de6448cc151eedfd/scipy-1.13.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a014c2b3697bde71724244f63de2476925596c24285c7a637364761f8710891c", size = 38845637 }, + { url = "https://files.pythonhosted.org/packages/3e/77/dab54fe647a08ee4253963bcd8f9cf17509c8ca64d6335141422fe2e2114/scipy-1.13.1-cp39-cp39-win_amd64.whl", hash = "sha256:392e4ec766654852c25ebad4f64e4e584cf19820b980bc04960bca0b0cd6eaa2", size = 46227440 }, +] + +[[package]] +name = "scipy" +version = "1.15.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0f/37/6964b830433e654ec7485e45a00fc9a27cf868d622838f6b6d9c5ec0d532/scipy-1.15.3.tar.gz", hash = "sha256:eae3cf522bc7df64b42cad3925c876e1b0b6c35c1337c93e12c0f366f55b0eaf", size = 59419214 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/2f/4966032c5f8cc7e6a60f1b2e0ad686293b9474b65246b0c642e3ef3badd0/scipy-1.15.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:a345928c86d535060c9c2b25e71e87c39ab2f22fc96e9636bd74d1dbf9de448c", size = 38702770 }, + { url = "https://files.pythonhosted.org/packages/a0/6e/0c3bf90fae0e910c274db43304ebe25a6b391327f3f10b5dcc638c090795/scipy-1.15.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:ad3432cb0f9ed87477a8d97f03b763fd1d57709f1bbde3c9369b1dff5503b253", size = 30094511 }, + { url = "https://files.pythonhosted.org/packages/ea/b1/4deb37252311c1acff7f101f6453f0440794f51b6eacb1aad4459a134081/scipy-1.15.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:aef683a9ae6eb00728a542b796f52a5477b78252edede72b8327a886ab63293f", size = 22368151 }, + { url = "https://files.pythonhosted.org/packages/38/7d/f457626e3cd3c29b3a49ca115a304cebb8cc6f31b04678f03b216899d3c6/scipy-1.15.3-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:1c832e1bd78dea67d5c16f786681b28dd695a8cb1fb90af2e27580d3d0967e92", size = 25121732 }, + { url = "https://files.pythonhosted.org/packages/db/0a/92b1de4a7adc7a15dcf5bddc6e191f6f29ee663b30511ce20467ef9b82e4/scipy-1.15.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:263961f658ce2165bbd7b99fa5135195c3a12d9bef045345016b8b50c315cb82", size = 35547617 }, + { url = "https://files.pythonhosted.org/packages/8e/6d/41991e503e51fc1134502694c5fa7a1671501a17ffa12716a4a9151af3df/scipy-1.15.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e2abc762b0811e09a0d3258abee2d98e0c703eee49464ce0069590846f31d40", size = 37662964 }, + { url = "https://files.pythonhosted.org/packages/25/e1/3df8f83cb15f3500478c889be8fb18700813b95e9e087328230b98d547ff/scipy-1.15.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ed7284b21a7a0c8f1b6e5977ac05396c0d008b89e05498c8b7e8f4a1423bba0e", size = 37238749 }, + { url = "https://files.pythonhosted.org/packages/93/3e/b3257cf446f2a3533ed7809757039016b74cd6f38271de91682aa844cfc5/scipy-1.15.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5380741e53df2c566f4d234b100a484b420af85deb39ea35a1cc1be84ff53a5c", size = 40022383 }, + { url = "https://files.pythonhosted.org/packages/d1/84/55bc4881973d3f79b479a5a2e2df61c8c9a04fcb986a213ac9c02cfb659b/scipy-1.15.3-cp310-cp310-win_amd64.whl", hash = "sha256:9d61e97b186a57350f6d6fd72640f9e99d5a4a2b8fbf4b9ee9a841eab327dc13", size = 41259201 }, + { url = "https://files.pythonhosted.org/packages/96/ab/5cc9f80f28f6a7dff646c5756e559823614a42b1939d86dd0ed550470210/scipy-1.15.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:993439ce220d25e3696d1b23b233dd010169b62f6456488567e830654ee37a6b", size = 38714255 }, + { url = "https://files.pythonhosted.org/packages/4a/4a/66ba30abe5ad1a3ad15bfb0b59d22174012e8056ff448cb1644deccbfed2/scipy-1.15.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:34716e281f181a02341ddeaad584205bd2fd3c242063bd3423d61ac259ca7eba", size = 30111035 }, + { url = "https://files.pythonhosted.org/packages/4b/fa/a7e5b95afd80d24313307f03624acc65801846fa75599034f8ceb9e2cbf6/scipy-1.15.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3b0334816afb8b91dab859281b1b9786934392aa3d527cd847e41bb6f45bee65", size = 22384499 }, + { url = "https://files.pythonhosted.org/packages/17/99/f3aaddccf3588bb4aea70ba35328c204cadd89517a1612ecfda5b2dd9d7a/scipy-1.15.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:6db907c7368e3092e24919b5e31c76998b0ce1684d51a90943cb0ed1b4ffd6c1", size = 25152602 }, + { url = "https://files.pythonhosted.org/packages/56/c5/1032cdb565f146109212153339f9cb8b993701e9fe56b1c97699eee12586/scipy-1.15.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:721d6b4ef5dc82ca8968c25b111e307083d7ca9091bc38163fb89243e85e3889", size = 35503415 }, + { url = "https://files.pythonhosted.org/packages/bd/37/89f19c8c05505d0601ed5650156e50eb881ae3918786c8fd7262b4ee66d3/scipy-1.15.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39cb9c62e471b1bb3750066ecc3a3f3052b37751c7c3dfd0fd7e48900ed52982", size = 37652622 }, + { url = "https://files.pythonhosted.org/packages/7e/31/be59513aa9695519b18e1851bb9e487de66f2d31f835201f1b42f5d4d475/scipy-1.15.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:795c46999bae845966368a3c013e0e00947932d68e235702b5c3f6ea799aa8c9", size = 37244796 }, + { url = "https://files.pythonhosted.org/packages/10/c0/4f5f3eeccc235632aab79b27a74a9130c6c35df358129f7ac8b29f562ac7/scipy-1.15.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:18aaacb735ab38b38db42cb01f6b92a2d0d4b6aabefeb07f02849e47f8fb3594", size = 40047684 }, + { url = "https://files.pythonhosted.org/packages/ab/a7/0ddaf514ce8a8714f6ed243a2b391b41dbb65251affe21ee3077ec45ea9a/scipy-1.15.3-cp311-cp311-win_amd64.whl", hash = "sha256:ae48a786a28412d744c62fd7816a4118ef97e5be0bee968ce8f0a2fba7acf3bb", size = 41246504 }, + { url = "https://files.pythonhosted.org/packages/37/4b/683aa044c4162e10ed7a7ea30527f2cbd92e6999c10a8ed8edb253836e9c/scipy-1.15.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6ac6310fdbfb7aa6612408bd2f07295bcbd3fda00d2d702178434751fe48e019", size = 38766735 }, + { url = "https://files.pythonhosted.org/packages/7b/7e/f30be3d03de07f25dc0ec926d1681fed5c732d759ac8f51079708c79e680/scipy-1.15.3-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:185cd3d6d05ca4b44a8f1595af87f9c372bb6acf9c808e99aa3e9aa03bd98cf6", size = 30173284 }, + { url = "https://files.pythonhosted.org/packages/07/9c/0ddb0d0abdabe0d181c1793db51f02cd59e4901da6f9f7848e1f96759f0d/scipy-1.15.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:05dc6abcd105e1a29f95eada46d4a3f251743cfd7d3ae8ddb4088047f24ea477", size = 22446958 }, + { url = "https://files.pythonhosted.org/packages/af/43/0bce905a965f36c58ff80d8bea33f1f9351b05fad4beaad4eae34699b7a1/scipy-1.15.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:06efcba926324df1696931a57a176c80848ccd67ce6ad020c810736bfd58eb1c", size = 25242454 }, + { url = "https://files.pythonhosted.org/packages/56/30/a6f08f84ee5b7b28b4c597aca4cbe545535c39fe911845a96414700b64ba/scipy-1.15.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05045d8b9bfd807ee1b9f38761993297b10b245f012b11b13b91ba8945f7e45", size = 35210199 }, + { url = "https://files.pythonhosted.org/packages/0b/1f/03f52c282437a168ee2c7c14a1a0d0781a9a4a8962d84ac05c06b4c5b555/scipy-1.15.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:271e3713e645149ea5ea3e97b57fdab61ce61333f97cfae392c28ba786f9bb49", size = 37309455 }, + { url = "https://files.pythonhosted.org/packages/89/b1/fbb53137f42c4bf630b1ffdfc2151a62d1d1b903b249f030d2b1c0280af8/scipy-1.15.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6cfd56fc1a8e53f6e89ba3a7a7251f7396412d655bca2aa5611c8ec9a6784a1e", size = 36885140 }, + { url = "https://files.pythonhosted.org/packages/2e/2e/025e39e339f5090df1ff266d021892694dbb7e63568edcfe43f892fa381d/scipy-1.15.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0ff17c0bb1cb32952c09217d8d1eed9b53d1463e5f1dd6052c7857f83127d539", size = 39710549 }, + { url = "https://files.pythonhosted.org/packages/e6/eb/3bf6ea8ab7f1503dca3a10df2e4b9c3f6b3316df07f6c0ded94b281c7101/scipy-1.15.3-cp312-cp312-win_amd64.whl", hash = "sha256:52092bc0472cfd17df49ff17e70624345efece4e1a12b23783a1ac59a1b728ed", size = 40966184 }, + { url = "https://files.pythonhosted.org/packages/73/18/ec27848c9baae6e0d6573eda6e01a602e5649ee72c27c3a8aad673ebecfd/scipy-1.15.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2c620736bcc334782e24d173c0fdbb7590a0a436d2fdf39310a8902505008759", size = 38728256 }, + { url = "https://files.pythonhosted.org/packages/74/cd/1aef2184948728b4b6e21267d53b3339762c285a46a274ebb7863c9e4742/scipy-1.15.3-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:7e11270a000969409d37ed399585ee530b9ef6aa99d50c019de4cb01e8e54e62", size = 30109540 }, + { url = "https://files.pythonhosted.org/packages/5b/d8/59e452c0a255ec352bd0a833537a3bc1bfb679944c4938ab375b0a6b3a3e/scipy-1.15.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8c9ed3ba2c8a2ce098163a9bdb26f891746d02136995df25227a20e71c396ebb", size = 22383115 }, + { url = "https://files.pythonhosted.org/packages/08/f5/456f56bbbfccf696263b47095291040655e3cbaf05d063bdc7c7517f32ac/scipy-1.15.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:0bdd905264c0c9cfa74a4772cdb2070171790381a5c4d312c973382fc6eaf730", size = 25163884 }, + { url = "https://files.pythonhosted.org/packages/a2/66/a9618b6a435a0f0c0b8a6d0a2efb32d4ec5a85f023c2b79d39512040355b/scipy-1.15.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79167bba085c31f38603e11a267d862957cbb3ce018d8b38f79ac043bc92d825", size = 35174018 }, + { url = "https://files.pythonhosted.org/packages/b5/09/c5b6734a50ad4882432b6bb7c02baf757f5b2f256041da5df242e2d7e6b6/scipy-1.15.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9deabd6d547aee2c9a81dee6cc96c6d7e9a9b1953f74850c179f91fdc729cb7", size = 37269716 }, + { url = "https://files.pythonhosted.org/packages/77/0a/eac00ff741f23bcabd352731ed9b8995a0a60ef57f5fd788d611d43d69a1/scipy-1.15.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dde4fc32993071ac0c7dd2d82569e544f0bdaff66269cb475e0f369adad13f11", size = 36872342 }, + { url = "https://files.pythonhosted.org/packages/fe/54/4379be86dd74b6ad81551689107360d9a3e18f24d20767a2d5b9253a3f0a/scipy-1.15.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f77f853d584e72e874d87357ad70f44b437331507d1c311457bed8ed2b956126", size = 39670869 }, + { url = "https://files.pythonhosted.org/packages/87/2e/892ad2862ba54f084ffe8cc4a22667eaf9c2bcec6d2bff1d15713c6c0703/scipy-1.15.3-cp313-cp313-win_amd64.whl", hash = "sha256:b90ab29d0c37ec9bf55424c064312930ca5f4bde15ee8619ee44e69319aab163", size = 40988851 }, + { url = "https://files.pythonhosted.org/packages/1b/e9/7a879c137f7e55b30d75d90ce3eb468197646bc7b443ac036ae3fe109055/scipy-1.15.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3ac07623267feb3ae308487c260ac684b32ea35fd81e12845039952f558047b8", size = 38863011 }, + { url = "https://files.pythonhosted.org/packages/51/d1/226a806bbd69f62ce5ef5f3ffadc35286e9fbc802f606a07eb83bf2359de/scipy-1.15.3-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:6487aa99c2a3d509a5227d9a5e889ff05830a06b2ce08ec30df6d79db5fcd5c5", size = 30266407 }, + { url = "https://files.pythonhosted.org/packages/e5/9b/f32d1d6093ab9eeabbd839b0f7619c62e46cc4b7b6dbf05b6e615bbd4400/scipy-1.15.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:50f9e62461c95d933d5c5ef4a1f2ebf9a2b4e83b0db374cb3f1de104d935922e", size = 22540030 }, + { url = "https://files.pythonhosted.org/packages/e7/29/c278f699b095c1a884f29fda126340fcc201461ee8bfea5c8bdb1c7c958b/scipy-1.15.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:14ed70039d182f411ffc74789a16df3835e05dc469b898233a245cdfd7f162cb", size = 25218709 }, + { url = "https://files.pythonhosted.org/packages/24/18/9e5374b617aba742a990581373cd6b68a2945d65cc588482749ef2e64467/scipy-1.15.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a769105537aa07a69468a0eefcd121be52006db61cdd8cac8a0e68980bbb723", size = 34809045 }, + { url = "https://files.pythonhosted.org/packages/e1/fe/9c4361e7ba2927074360856db6135ef4904d505e9b3afbbcb073c4008328/scipy-1.15.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9db984639887e3dffb3928d118145ffe40eff2fa40cb241a306ec57c219ebbbb", size = 36703062 }, + { url = "https://files.pythonhosted.org/packages/b7/8e/038ccfe29d272b30086b25a4960f757f97122cb2ec42e62b460d02fe98e9/scipy-1.15.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:40e54d5c7e7ebf1aa596c374c49fa3135f04648a0caabcb66c52884b943f02b4", size = 36393132 }, + { url = "https://files.pythonhosted.org/packages/10/7e/5c12285452970be5bdbe8352c619250b97ebf7917d7a9a9e96b8a8140f17/scipy-1.15.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5e721fed53187e71d0ccf382b6bf977644c533e506c4d33c3fb24de89f5c3ed5", size = 38979503 }, + { url = "https://files.pythonhosted.org/packages/81/06/0a5e5349474e1cbc5757975b21bd4fad0e72ebf138c5592f191646154e06/scipy-1.15.3-cp313-cp313t-win_amd64.whl", hash = "sha256:76ad1fb5f8752eabf0fa02e4cc0336b4e8f021e2d5f061ed37d6d264db35e3ca", size = 40308097 }, +] + +[[package]] +name = "scipy" +version = "1.17.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", +] +dependencies = [ + { name = "numpy", version = "2.4.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7a/97/5a3609c4f8d58b039179648e62dd220f89864f56f7357f5d4f45c29eb2cc/scipy-1.17.1.tar.gz", hash = "sha256:95d8e012d8cb8816c226aef832200b1d45109ed4464303e997c5b13122b297c0", size = 30573822 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/75/b4ce781849931fef6fd529afa6b63711d5a733065722d0c3e2724af9e40a/scipy-1.17.1-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:1f95b894f13729334fb990162e911c9e5dc1ab390c58aa6cbecb389c5b5e28ec", size = 31613675 }, + { url = "https://files.pythonhosted.org/packages/f7/58/bccc2861b305abdd1b8663d6130c0b3d7cc22e8d86663edbc8401bfd40d4/scipy-1.17.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:e18f12c6b0bc5a592ed23d3f7b891f68fd7f8241d69b7883769eb5d5dfb52696", size = 28162057 }, + { url = "https://files.pythonhosted.org/packages/6d/ee/18146b7757ed4976276b9c9819108adbc73c5aad636e5353e20746b73069/scipy-1.17.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:a3472cfbca0a54177d0faa68f697d8ba4c80bbdc19908c3465556d9f7efce9ee", size = 20334032 }, + { url = "https://files.pythonhosted.org/packages/ec/e6/cef1cf3557f0c54954198554a10016b6a03b2ec9e22a4e1df734936bd99c/scipy-1.17.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:766e0dc5a616d026a3a1cffa379af959671729083882f50307e18175797b3dfd", size = 22709533 }, + { url = "https://files.pythonhosted.org/packages/4d/60/8804678875fc59362b0fb759ab3ecce1f09c10a735680318ac30da8cd76b/scipy-1.17.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:744b2bf3640d907b79f3fd7874efe432d1cf171ee721243e350f55234b4cec4c", size = 33062057 }, + { url = "https://files.pythonhosted.org/packages/09/7d/af933f0f6e0767995b4e2d705a0665e454d1c19402aa7e895de3951ebb04/scipy-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43af8d1f3bea642559019edfe64e9b11192a8978efbd1539d7bc2aaa23d92de4", size = 35349300 }, + { url = "https://files.pythonhosted.org/packages/b4/3d/7ccbbdcbb54c8fdc20d3b6930137c782a163fa626f0aef920349873421ba/scipy-1.17.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cd96a1898c0a47be4520327e01f874acfd61fb48a9420f8aa9f6483412ffa444", size = 35127333 }, + { url = "https://files.pythonhosted.org/packages/e8/19/f926cb11c42b15ba08e3a71e376d816ac08614f769b4f47e06c3580c836a/scipy-1.17.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4eb6c25dd62ee8d5edf68a8e1c171dd71c292fdae95d8aeb3dd7d7de4c364082", size = 37741314 }, + { url = "https://files.pythonhosted.org/packages/95/da/0d1df507cf574b3f224ccc3d45244c9a1d732c81dcb26b1e8a766ae271a8/scipy-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:d30e57c72013c2a4fe441c2fcb8e77b14e152ad48b5464858e07e2ad9fbfceff", size = 36607512 }, + { url = "https://files.pythonhosted.org/packages/68/7f/bdd79ceaad24b671543ffe0ef61ed8e659440eb683b66f033454dcee90eb/scipy-1.17.1-cp311-cp311-win_arm64.whl", hash = "sha256:9ecb4efb1cd6e8c4afea0daa91a87fbddbce1b99d2895d151596716c0b2e859d", size = 24599248 }, + { url = "https://files.pythonhosted.org/packages/35/48/b992b488d6f299dbe3f11a20b24d3dda3d46f1a635ede1c46b5b17a7b163/scipy-1.17.1-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:35c3a56d2ef83efc372eaec584314bd0ef2e2f0d2adb21c55e6ad5b344c0dcb8", size = 31610954 }, + { url = "https://files.pythonhosted.org/packages/b2/02/cf107b01494c19dc100f1d0b7ac3cc08666e96ba2d64db7626066cee895e/scipy-1.17.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:fcb310ddb270a06114bb64bbe53c94926b943f5b7f0842194d585c65eb4edd76", size = 28172662 }, + { url = "https://files.pythonhosted.org/packages/cf/a9/599c28631bad314d219cf9ffd40e985b24d603fc8a2f4ccc5ae8419a535b/scipy-1.17.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:cc90d2e9c7e5c7f1a482c9875007c095c3194b1cfedca3c2f3291cdc2bc7c086", size = 20344366 }, + { url = "https://files.pythonhosted.org/packages/35/f5/906eda513271c8deb5af284e5ef0206d17a96239af79f9fa0aebfe0e36b4/scipy-1.17.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:c80be5ede8f3f8eded4eff73cc99a25c388ce98e555b17d31da05287015ffa5b", size = 22704017 }, + { url = "https://files.pythonhosted.org/packages/da/34/16f10e3042d2f1d6b66e0428308ab52224b6a23049cb2f5c1756f713815f/scipy-1.17.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e19ebea31758fac5893a2ac360fedd00116cbb7628e650842a6691ba7ca28a21", size = 32927842 }, + { url = "https://files.pythonhosted.org/packages/01/8e/1e35281b8ab6d5d72ebe9911edcdffa3f36b04ed9d51dec6dd140396e220/scipy-1.17.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:02ae3b274fde71c5e92ac4d54bc06c42d80e399fec704383dcd99b301df37458", size = 35235890 }, + { url = "https://files.pythonhosted.org/packages/c5/5c/9d7f4c88bea6e0d5a4f1bc0506a53a00e9fcb198de372bfe4d3652cef482/scipy-1.17.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8a604bae87c6195d8b1045eddece0514d041604b14f2727bbc2b3020172045eb", size = 35003557 }, + { url = "https://files.pythonhosted.org/packages/65/94/7698add8f276dbab7a9de9fb6b0e02fc13ee61d51c7c3f85ac28b65e1239/scipy-1.17.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f590cd684941912d10becc07325a3eeb77886fe981415660d9265c4c418d0bea", size = 37625856 }, + { url = "https://files.pythonhosted.org/packages/a2/84/dc08d77fbf3d87d3ee27f6a0c6dcce1de5829a64f2eae85a0ecc1f0daa73/scipy-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:41b71f4a3a4cab9d366cd9065b288efc4d4f3c0b37a91a8e0947fb5bd7f31d87", size = 36549682 }, + { url = "https://files.pythonhosted.org/packages/bc/98/fe9ae9ffb3b54b62559f52dedaebe204b408db8109a8c66fdd04869e6424/scipy-1.17.1-cp312-cp312-win_arm64.whl", hash = "sha256:f4115102802df98b2b0db3cce5cb9b92572633a1197c77b7553e5203f284a5b3", size = 24547340 }, + { url = "https://files.pythonhosted.org/packages/76/27/07ee1b57b65e92645f219b37148a7e7928b82e2b5dbeccecb4dff7c64f0b/scipy-1.17.1-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:5e3c5c011904115f88a39308379c17f91546f77c1667cea98739fe0fccea804c", size = 31590199 }, + { url = "https://files.pythonhosted.org/packages/ec/ae/db19f8ab842e9b724bf5dbb7db29302a91f1e55bc4d04b1025d6d605a2c5/scipy-1.17.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:6fac755ca3d2c3edcb22f479fceaa241704111414831ddd3bc6056e18516892f", size = 28154001 }, + { url = "https://files.pythonhosted.org/packages/5b/58/3ce96251560107b381cbd6e8413c483bbb1228a6b919fa8652b0d4090e7f/scipy-1.17.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:7ff200bf9d24f2e4d5dc6ee8c3ac64d739d3a89e2326ba68aaf6c4a2b838fd7d", size = 20325719 }, + { url = "https://files.pythonhosted.org/packages/b2/83/15087d945e0e4d48ce2377498abf5ad171ae013232ae31d06f336e64c999/scipy-1.17.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4b400bdc6f79fa02a4d86640310dde87a21fba0c979efff5248908c6f15fad1b", size = 22683595 }, + { url = "https://files.pythonhosted.org/packages/b4/e0/e58fbde4a1a594c8be8114eb4aac1a55bcd6587047efc18a61eb1f5c0d30/scipy-1.17.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2b64ca7d4aee0102a97f3ba22124052b4bd2152522355073580bf4845e2550b6", size = 32896429 }, + { url = "https://files.pythonhosted.org/packages/f5/5f/f17563f28ff03c7b6799c50d01d5d856a1d55f2676f537ca8d28c7f627cd/scipy-1.17.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:581b2264fc0aa555f3f435a5944da7504ea3a065d7029ad60e7c3d1ae09c5464", size = 35203952 }, + { url = "https://files.pythonhosted.org/packages/8d/a5/9afd17de24f657fdfe4df9a3f1ea049b39aef7c06000c13db1530d81ccca/scipy-1.17.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:beeda3d4ae615106d7094f7e7cef6218392e4465cc95d25f900bebabfded0950", size = 34979063 }, + { url = "https://files.pythonhosted.org/packages/8b/13/88b1d2384b424bf7c924f2038c1c409f8d88bb2a8d49d097861dd64a57b2/scipy-1.17.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6609bc224e9568f65064cfa72edc0f24ee6655b47575954ec6339534b2798369", size = 37598449 }, + { url = "https://files.pythonhosted.org/packages/35/e5/d6d0e51fc888f692a35134336866341c08655d92614f492c6860dc45bb2c/scipy-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:37425bc9175607b0268f493d79a292c39f9d001a357bebb6b88fdfaff13f6448", size = 36510943 }, + { url = "https://files.pythonhosted.org/packages/2a/fd/3be73c564e2a01e690e19cc618811540ba5354c67c8680dce3281123fb79/scipy-1.17.1-cp313-cp313-win_arm64.whl", hash = "sha256:5cf36e801231b6a2059bf354720274b7558746f3b1a4efb43fcf557ccd484a87", size = 24545621 }, + { url = "https://files.pythonhosted.org/packages/6f/6b/17787db8b8114933a66f9dcc479a8272e4b4da75fe03b0c282f7b0ade8cd/scipy-1.17.1-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:d59c30000a16d8edc7e64152e30220bfbd724c9bbb08368c054e24c651314f0a", size = 31936708 }, + { url = "https://files.pythonhosted.org/packages/38/2e/524405c2b6392765ab1e2b722a41d5da33dc5c7b7278184a8ad29b6cb206/scipy-1.17.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:010f4333c96c9bb1a4516269e33cb5917b08ef2166d5556ca2fd9f082a9e6ea0", size = 28570135 }, + { url = "https://files.pythonhosted.org/packages/fd/c3/5bd7199f4ea8556c0c8e39f04ccb014ac37d1468e6cfa6a95c6b3562b76e/scipy-1.17.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:2ceb2d3e01c5f1d83c4189737a42d9cb2fc38a6eeed225e7515eef71ad301dce", size = 20741977 }, + { url = "https://files.pythonhosted.org/packages/d9/b8/8ccd9b766ad14c78386599708eb745f6b44f08400a5fd0ade7cf89b6fc93/scipy-1.17.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:844e165636711ef41f80b4103ed234181646b98a53c8f05da12ca5ca289134f6", size = 23029601 }, + { url = "https://files.pythonhosted.org/packages/6d/a0/3cb6f4d2fb3e17428ad2880333cac878909ad1a89f678527b5328b93c1d4/scipy-1.17.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:158dd96d2207e21c966063e1635b1063cd7787b627b6f07305315dd73d9c679e", size = 33019667 }, + { url = "https://files.pythonhosted.org/packages/f3/c3/2d834a5ac7bf3a0c806ad1508efc02dda3c8c61472a56132d7894c312dea/scipy-1.17.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:74cbb80d93260fe2ffa334efa24cb8f2f0f622a9b9febf8b483c0b865bfb3475", size = 35264159 }, + { url = "https://files.pythonhosted.org/packages/4d/77/d3ed4becfdbd217c52062fafe35a72388d1bd82c2d0ba5ca19d6fcc93e11/scipy-1.17.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:dbc12c9f3d185f5c737d801da555fb74b3dcfa1a50b66a1a93e09190f41fab50", size = 35102771 }, + { url = "https://files.pythonhosted.org/packages/bd/12/d19da97efde68ca1ee5538bb261d5d2c062f0c055575128f11a2730e3ac1/scipy-1.17.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:94055a11dfebe37c656e70317e1996dc197e1a15bbcc351bcdd4610e128fe1ca", size = 37665910 }, + { url = "https://files.pythonhosted.org/packages/06/1c/1172a88d507a4baaf72c5a09bb6c018fe2ae0ab622e5830b703a46cc9e44/scipy-1.17.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e30bdeaa5deed6bc27b4cc490823cd0347d7dae09119b8803ae576ea0ce52e4c", size = 36562980 }, + { url = "https://files.pythonhosted.org/packages/70/b0/eb757336e5a76dfa7911f63252e3b7d1de00935d7705cf772db5b45ec238/scipy-1.17.1-cp313-cp313t-win_arm64.whl", hash = "sha256:a720477885a9d2411f94a93d16f9d89bad0f28ca23c3f8daa521e2dcc3f44d49", size = 24856543 }, + { url = "https://files.pythonhosted.org/packages/cf/83/333afb452af6f0fd70414dc04f898647ee1423979ce02efa75c3b0f2c28e/scipy-1.17.1-cp314-cp314-macosx_10_14_x86_64.whl", hash = "sha256:a48a72c77a310327f6a3a920092fa2b8fd03d7deaa60f093038f22d98e096717", size = 31584510 }, + { url = "https://files.pythonhosted.org/packages/ed/a6/d05a85fd51daeb2e4ea71d102f15b34fedca8e931af02594193ae4fd25f7/scipy-1.17.1-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:45abad819184f07240d8a696117a7aacd39787af9e0b719d00285549ed19a1e9", size = 28170131 }, + { url = "https://files.pythonhosted.org/packages/db/7b/8624a203326675d7746a254083a187398090a179335b2e4a20e2ddc46e83/scipy-1.17.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:3fd1fcdab3ea951b610dc4cef356d416d5802991e7e32b5254828d342f7b7e0b", size = 20342032 }, + { url = "https://files.pythonhosted.org/packages/c9/35/2c342897c00775d688d8ff3987aced3426858fd89d5a0e26e020b660b301/scipy-1.17.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:7bdf2da170b67fdf10bca777614b1c7d96ae3ca5794fd9587dce41eb2966e866", size = 22678766 }, + { url = "https://files.pythonhosted.org/packages/ef/f2/7cdb8eb308a1a6ae1e19f945913c82c23c0c442a462a46480ce487fdc0ac/scipy-1.17.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:adb2642e060a6549c343603a3851ba76ef0b74cc8c079a9a58121c7ec9fe2350", size = 32957007 }, + { url = "https://files.pythonhosted.org/packages/0b/2e/7eea398450457ecb54e18e9d10110993fa65561c4f3add5e8eccd2b9cd41/scipy-1.17.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eee2cfda04c00a857206a4330f0c5e3e56535494e30ca445eb19ec624ae75118", size = 35221333 }, + { url = "https://files.pythonhosted.org/packages/d9/77/5b8509d03b77f093a0d52e606d3c4f79e8b06d1d38c441dacb1e26cacf46/scipy-1.17.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d2650c1fb97e184d12d8ba010493ee7b322864f7d3d00d3f9bb97d9c21de4068", size = 35042066 }, + { url = "https://files.pythonhosted.org/packages/f9/df/18f80fb99df40b4070328d5ae5c596f2f00fffb50167e31439e932f29e7d/scipy-1.17.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:08b900519463543aa604a06bec02461558a6e1cef8fdbb8098f77a48a83c8118", size = 37612763 }, + { url = "https://files.pythonhosted.org/packages/4b/39/f0e8ea762a764a9dc52aa7dabcfad51a354819de1f0d4652b6a1122424d6/scipy-1.17.1-cp314-cp314-win_amd64.whl", hash = "sha256:3877ac408e14da24a6196de0ddcace62092bfc12a83823e92e49e40747e52c19", size = 37290984 }, + { url = "https://files.pythonhosted.org/packages/7c/56/fe201e3b0f93d1a8bcf75d3379affd228a63d7e2d80ab45467a74b494947/scipy-1.17.1-cp314-cp314-win_arm64.whl", hash = "sha256:f8885db0bc2bffa59d5c1b72fad7a6a92d3e80e7257f967dd81abb553a90d293", size = 25192877 }, + { url = "https://files.pythonhosted.org/packages/96/ad/f8c414e121f82e02d76f310f16db9899c4fcde36710329502a6b2a3c0392/scipy-1.17.1-cp314-cp314t-macosx_10_14_x86_64.whl", hash = "sha256:1cc682cea2ae55524432f3cdff9e9a3be743d52a7443d0cba9017c23c87ae2f6", size = 31949750 }, + { url = "https://files.pythonhosted.org/packages/7c/b0/c741e8865d61b67c81e255f4f0a832846c064e426636cd7de84e74d209be/scipy-1.17.1-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:2040ad4d1795a0ae89bfc7e8429677f365d45aa9fd5e4587cf1ea737f927b4a1", size = 28585858 }, + { url = "https://files.pythonhosted.org/packages/ed/1b/3985219c6177866628fa7c2595bfd23f193ceebbe472c98a08824b9466ff/scipy-1.17.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:131f5aaea57602008f9822e2115029b55d4b5f7c070287699fe45c661d051e39", size = 20757723 }, + { url = "https://files.pythonhosted.org/packages/c0/19/2a04aa25050d656d6f7b9e7b685cc83d6957fb101665bfd9369ca6534563/scipy-1.17.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:9cdc1a2fcfd5c52cfb3045feb399f7b3ce822abdde3a193a6b9a60b3cb5854ca", size = 23043098 }, + { url = "https://files.pythonhosted.org/packages/86/f1/3383beb9b5d0dbddd030335bf8a8b32d4317185efe495374f134d8be6cce/scipy-1.17.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e3dcd57ab780c741fde8dc68619de988b966db759a3c3152e8e9142c26295ad", size = 33030397 }, + { url = "https://files.pythonhosted.org/packages/41/68/8f21e8a65a5a03f25a79165ec9d2b28c00e66dc80546cf5eb803aeeff35b/scipy-1.17.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a9956e4d4f4a301ebf6cde39850333a6b6110799d470dbbb1e25326ac447f52a", size = 35281163 }, + { url = "https://files.pythonhosted.org/packages/84/8d/c8a5e19479554007a5632ed7529e665c315ae7492b4f946b0deb39870e39/scipy-1.17.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:a4328d245944d09fd639771de275701ccadf5f781ba0ff092ad141e017eccda4", size = 35116291 }, + { url = "https://files.pythonhosted.org/packages/52/52/e57eceff0e342a1f50e274264ed47497b59e6a4e3118808ee58ddda7b74a/scipy-1.17.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a77cbd07b940d326d39a1d1b37817e2ee4d79cb30e7338f3d0cddffae70fcaa2", size = 37682317 }, + { url = "https://files.pythonhosted.org/packages/11/2f/b29eafe4a3fbc3d6de9662b36e028d5f039e72d345e05c250e121a230dd4/scipy-1.17.1-cp314-cp314t-win_amd64.whl", hash = "sha256:eb092099205ef62cd1782b006658db09e2fed75bffcae7cc0d44052d8aa0f484", size = 37345327 }, + { url = "https://files.pythonhosted.org/packages/07/39/338d9219c4e87f3e708f18857ecd24d22a0c3094752393319553096b98af/scipy-1.17.1-cp314-cp314t-win_arm64.whl", hash = "sha256:200e1050faffacc162be6a486a984a0497866ec54149a01270adc8a59b7c7d21", size = 25489165 }, +] + +[[package]] +name = "send2trash" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c5/f0/184b4b5f8d00f2a92cf96eec8967a3d550b52cf94362dad1100df9e48d57/send2trash-2.1.0.tar.gz", hash = "sha256:1c72b39f09457db3c05ce1d19158c2cbef4c32b8bedd02c155e49282b7ea7459", size = 17255 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1c/78/504fdd027da3b84ff1aecd9f6957e65f35134534ccc6da8628eb71e76d3f/send2trash-2.1.0-py3-none-any.whl", hash = "sha256:0da2f112e6d6bb22de6aa6daa7e144831a4febf2a87261451c4ad849fe9a873c", size = 17610 }, +] + +[[package]] +name = "setuptools" +version = "82.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4f/db/cfac1baf10650ab4d1c111714410d2fbb77ac5a616db26775db562c8fab2/setuptools-82.0.1.tar.gz", hash = "sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9", size = 1152316 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl", hash = "sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb", size = 1006223 }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 }, +] + +[[package]] +name = "snowballstemmer" +version = "3.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/75/a7/9810d872919697c9d01295633f5d574fb416d47e535f258272ca1f01f447/snowballstemmer-3.0.1.tar.gz", hash = "sha256:6d5eeeec8e9f84d4d56b847692bacf79bc2c8e90c7f80ca4444ff8b6f2e52895", size = 105575 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl", hash = "sha256:6cd7b3897da8d6c9ffb968a6781fa6532dce9c3618a4b127d920dab764a19064", size = 103274 }, +] + +[[package]] +name = "soupsieve" +version = "2.8.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7b/ae/2d9c981590ed9999a0d91755b47fc74f74de286b0f5cee14c9269041e6c4/soupsieve-2.8.3.tar.gz", hash = "sha256:3267f1eeea4251fb42728b6dfb746edc9acaffc4a45b27e19450b676586e8349", size = 118627 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl", hash = "sha256:ed64f2ba4eebeab06cc4962affce381647455978ffc1e36bb79a545b91f45a95", size = 37016 }, +] + +[[package]] +name = "sphinx" +version = "7.4.7" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "alabaster", version = "0.7.16", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "babel", marker = "python_full_version < '3.10'" }, + { name = "colorama", marker = "python_full_version < '3.10' and sys_platform == 'win32'" }, + { name = "docutils", version = "0.21.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "imagesize", version = "1.5.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, + { name = "jinja2", marker = "python_full_version < '3.10'" }, + { name = "packaging", marker = "python_full_version < '3.10'" }, + { name = "pygments", marker = "python_full_version < '3.10'" }, + { name = "requests", version = "2.32.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "snowballstemmer", marker = "python_full_version < '3.10'" }, + { name = "sphinxcontrib-applehelp", marker = "python_full_version < '3.10'" }, + { name = "sphinxcontrib-devhelp", marker = "python_full_version < '3.10'" }, + { name = "sphinxcontrib-htmlhelp", marker = "python_full_version < '3.10'" }, + { name = "sphinxcontrib-jsmath", marker = "python_full_version < '3.10'" }, + { name = "sphinxcontrib-qthelp", marker = "python_full_version < '3.10'" }, + { name = "sphinxcontrib-serializinghtml", marker = "python_full_version < '3.10'" }, + { name = "tomli", marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5b/be/50e50cb4f2eff47df05673d361095cafd95521d2a22521b920c67a372dcb/sphinx-7.4.7.tar.gz", hash = "sha256:242f92a7ea7e6c5b406fdc2615413890ba9f699114a9c09192d7dfead2ee9cfe", size = 8067911 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/ef/153f6803c5d5f8917dbb7f7fcf6d34a871ede3296fa89c2c703f5f8a6c8e/sphinx-7.4.7-py3-none-any.whl", hash = "sha256:c2419e2135d11f1951cd994d6eb18a1835bd8fdd8429f9ca375dc1f3281bd239", size = 3401624 }, +] + +[[package]] +name = "sphinx" +version = "8.1.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "alabaster", version = "1.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "babel", marker = "python_full_version == '3.10.*'" }, + { name = "colorama", marker = "python_full_version == '3.10.*' and sys_platform == 'win32'" }, + { name = "docutils", version = "0.21.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "imagesize", version = "2.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "jinja2", marker = "python_full_version == '3.10.*'" }, + { name = "packaging", marker = "python_full_version == '3.10.*'" }, + { name = "pygments", marker = "python_full_version == '3.10.*'" }, + { name = "requests", version = "2.33.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "snowballstemmer", marker = "python_full_version == '3.10.*'" }, + { name = "sphinxcontrib-applehelp", marker = "python_full_version == '3.10.*'" }, + { name = "sphinxcontrib-devhelp", marker = "python_full_version == '3.10.*'" }, + { name = "sphinxcontrib-htmlhelp", marker = "python_full_version == '3.10.*'" }, + { name = "sphinxcontrib-jsmath", marker = "python_full_version == '3.10.*'" }, + { name = "sphinxcontrib-qthelp", marker = "python_full_version == '3.10.*'" }, + { name = "sphinxcontrib-serializinghtml", marker = "python_full_version == '3.10.*'" }, + { name = "tomli", marker = "python_full_version == '3.10.*'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/be0b61178fe2cdcb67e2a92fc9ebb488e3c51c4f74a36a7824c0adf23425/sphinx-8.1.3.tar.gz", hash = "sha256:43c1911eecb0d3e161ad78611bc905d1ad0e523e4ddc202a58a821773dc4c927", size = 8184611 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/26/60/1ddff83a56d33aaf6f10ec8ce84b4c007d9368b21008876fceda7e7381ef/sphinx-8.1.3-py3-none-any.whl", hash = "sha256:09719015511837b76bf6e03e42eb7595ac8c2e41eeb9c29c5b755c6b677992a2", size = 3487125 }, +] + +[[package]] +name = "sphinx" +version = "9.0.4" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.11.*'", +] +dependencies = [ + { name = "alabaster", version = "1.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, + { name = "babel", marker = "python_full_version == '3.11.*'" }, + { name = "colorama", marker = "python_full_version == '3.11.*' and sys_platform == 'win32'" }, + { name = "docutils", version = "0.22.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, + { name = "imagesize", version = "2.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, + { name = "jinja2", marker = "python_full_version == '3.11.*'" }, + { name = "packaging", marker = "python_full_version == '3.11.*'" }, + { name = "pygments", marker = "python_full_version == '3.11.*'" }, + { name = "requests", version = "2.33.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, + { name = "roman-numerals", marker = "python_full_version == '3.11.*'" }, + { name = "snowballstemmer", marker = "python_full_version == '3.11.*'" }, + { name = "sphinxcontrib-applehelp", marker = "python_full_version == '3.11.*'" }, + { name = "sphinxcontrib-devhelp", marker = "python_full_version == '3.11.*'" }, + { name = "sphinxcontrib-htmlhelp", marker = "python_full_version == '3.11.*'" }, + { name = "sphinxcontrib-jsmath", marker = "python_full_version == '3.11.*'" }, + { name = "sphinxcontrib-qthelp", marker = "python_full_version == '3.11.*'" }, + { name = "sphinxcontrib-serializinghtml", marker = "python_full_version == '3.11.*'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/50/a8c6ccc36d5eacdfd7913ddccd15a9cee03ecafc5ee2bc40e1f168d85022/sphinx-9.0.4.tar.gz", hash = "sha256:594ef59d042972abbc581d8baa577404abe4e6c3b04ef61bd7fc2acbd51f3fa3", size = 8710502 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl", hash = "sha256:5bebc595a5e943ea248b99c13814c1c5e10b3ece718976824ffa7959ff95fffb", size = 3917713 }, +] + +[[package]] +name = "sphinx" +version = "9.1.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", +] +dependencies = [ + { name = "alabaster", version = "1.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "babel", marker = "python_full_version >= '3.12'" }, + { name = "colorama", marker = "python_full_version >= '3.12' and sys_platform == 'win32'" }, + { name = "docutils", version = "0.22.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "imagesize", version = "2.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "jinja2", marker = "python_full_version >= '3.12'" }, + { name = "packaging", marker = "python_full_version >= '3.12'" }, + { name = "pygments", marker = "python_full_version >= '3.12'" }, + { name = "requests", version = "2.33.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "roman-numerals", marker = "python_full_version >= '3.12'" }, + { name = "snowballstemmer", marker = "python_full_version >= '3.12'" }, + { name = "sphinxcontrib-applehelp", marker = "python_full_version >= '3.12'" }, + { name = "sphinxcontrib-devhelp", marker = "python_full_version >= '3.12'" }, + { name = "sphinxcontrib-htmlhelp", marker = "python_full_version >= '3.12'" }, + { name = "sphinxcontrib-jsmath", marker = "python_full_version >= '3.12'" }, + { name = "sphinxcontrib-qthelp", marker = "python_full_version >= '3.12'" }, + { name = "sphinxcontrib-serializinghtml", marker = "python_full_version >= '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cd/bd/f08eb0f4eed5c83f1ba2a3bd18f7745a2b1525fad70660a1c00224ec468a/sphinx-9.1.0.tar.gz", hash = "sha256:7741722357dd75f8190766926071fed3bdc211c74dd2d7d4df5404da95930ddb", size = 8718324 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl", hash = "sha256:c84fdd4e782504495fe4f2c0b3413d6c2bf388589bb352d439b2a3bb99991978", size = 3921742 }, +] + +[[package]] +name = "sphinxcontrib-applehelp" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ba/6e/b837e84a1a704953c62ef8776d45c3e8d759876b4a84fe14eba2859106fe/sphinxcontrib_applehelp-2.0.0.tar.gz", hash = "sha256:2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1", size = 20053 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl", hash = "sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5", size = 119300 }, +] + +[[package]] +name = "sphinxcontrib-devhelp" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/d2/5beee64d3e4e747f316bae86b55943f51e82bb86ecd325883ef65741e7da/sphinxcontrib_devhelp-2.0.0.tar.gz", hash = "sha256:411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad", size = 12967 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl", hash = "sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2", size = 82530 }, +] + +[[package]] +name = "sphinxcontrib-htmlhelp" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/93/983afd9aa001e5201eab16b5a444ed5b9b0a7a010541e0ddfbbfd0b2470c/sphinxcontrib_htmlhelp-2.1.0.tar.gz", hash = "sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9", size = 22617 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", hash = "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8", size = 98705 }, +] + +[[package]] +name = "sphinxcontrib-jsmath" +version = "1.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/e8/9ed3830aeed71f17c026a07a5097edcf44b692850ef215b161b8ad875729/sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8", size = 5787 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178", size = 5071 }, +] + +[[package]] +name = "sphinxcontrib-qthelp" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/68/bc/9104308fc285eb3e0b31b67688235db556cd5b0ef31d96f30e45f2e51cae/sphinxcontrib_qthelp-2.0.0.tar.gz", hash = "sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab", size = 17165 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl", hash = "sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb", size = 88743 }, +] + +[[package]] +name = "sphinxcontrib-serializinghtml" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3b/44/6716b257b0aa6bfd51a1b31665d1c205fb12cb5ad56de752dfa15657de2f/sphinxcontrib_serializinghtml-2.0.0.tar.gz", hash = "sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d", size = 16080 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", hash = "sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331", size = 92072 }, +] + +[[package]] +name = "stack-data" +version = "0.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "asttokens" }, + { name = "executing" }, + { name = "pure-eval" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521 }, +] + +[[package]] +name = "terminado" +version = "0.18.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ptyprocess", marker = "os_name != 'nt'" }, + { name = "pywinpty", marker = "os_name == 'nt'" }, + { name = "tornado" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8a/11/965c6fd8e5cc254f1fe142d547387da17a8ebfd75a3455f637c663fb38a0/terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e", size = 32701 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/9e/2064975477fdc887e47ad42157e214526dcad8f317a948dee17e1659a62f/terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0", size = 14154 }, +] + +[[package]] +name = "tinycss2" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "webencodings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7a/fd/7a5ee21fd08ff70d3d33a5781c255cbe779659bd03278feb98b19ee550f4/tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7", size = 87085 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289", size = 26610 }, +] + +[[package]] +name = "tomli" +version = "2.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/11/db3d5885d8528263d8adc260bb2d28ebf1270b96e98f0e0268d32b8d9900/tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30", size = 154704 }, + { url = "https://files.pythonhosted.org/packages/6d/f7/675db52c7e46064a9aa928885a9b20f4124ecb9bc2e1ce74c9106648d202/tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a", size = 149454 }, + { url = "https://files.pythonhosted.org/packages/61/71/81c50943cf953efa35bce7646caab3cf457a7d8c030b27cfb40d7235f9ee/tomli-2.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076", size = 237561 }, + { url = "https://files.pythonhosted.org/packages/48/c1/f41d9cb618acccca7df82aaf682f9b49013c9397212cb9f53219e3abac37/tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9", size = 243824 }, + { url = "https://files.pythonhosted.org/packages/22/e4/5a816ecdd1f8ca51fb756ef684b90f2780afc52fc67f987e3c61d800a46d/tomli-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c", size = 242227 }, + { url = "https://files.pythonhosted.org/packages/6b/49/2b2a0ef529aa6eec245d25f0c703e020a73955ad7edf73e7f54ddc608aa5/tomli-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc", size = 247859 }, + { url = "https://files.pythonhosted.org/packages/83/bd/6c1a630eaca337e1e78c5903104f831bda934c426f9231429396ce3c3467/tomli-2.4.1-cp311-cp311-win32.whl", hash = "sha256:ff2983983d34813c1aeb0fa89091e76c3a22889ee83ab27c5eeb45100560c049", size = 97204 }, + { url = "https://files.pythonhosted.org/packages/42/59/71461df1a885647e10b6bb7802d0b8e66480c61f3f43079e0dcd315b3954/tomli-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e", size = 108084 }, + { url = "https://files.pythonhosted.org/packages/b8/83/dceca96142499c069475b790e7913b1044c1a4337e700751f48ed723f883/tomli-2.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:c2541745709bad0264b7d4705ad453b76ccd191e64aa6f0fc66b69a293a45ece", size = 95285 }, + { url = "https://files.pythonhosted.org/packages/c1/ba/42f134a3fe2b370f555f44b1d72feebb94debcab01676bf918d0cb70e9aa/tomli-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c742f741d58a28940ce01d58f0ab2ea3ced8b12402f162f4d534dfe18ba1cd6a", size = 155924 }, + { url = "https://files.pythonhosted.org/packages/dc/c7/62d7a17c26487ade21c5422b646110f2162f1fcc95980ef7f63e73c68f14/tomli-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7f86fd587c4ed9dd76f318225e7d9b29cfc5a9d43de44e5754db8d1128487085", size = 150018 }, + { url = "https://files.pythonhosted.org/packages/5c/05/79d13d7c15f13bdef410bdd49a6485b1c37d28968314eabee452c22a7fda/tomli-2.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff18e6a727ee0ab0388507b89d1bc6a22b138d1e2fa56d1ad494586d61d2eae9", size = 244948 }, + { url = "https://files.pythonhosted.org/packages/10/90/d62ce007a1c80d0b2c93e02cab211224756240884751b94ca72df8a875ca/tomli-2.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:136443dbd7e1dee43c68ac2694fde36b2849865fa258d39bf822c10e8068eac5", size = 253341 }, + { url = "https://files.pythonhosted.org/packages/1a/7e/caf6496d60152ad4ed09282c1885cca4eea150bfd007da84aea07bcc0a3e/tomli-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e262d41726bc187e69af7825504c933b6794dc3fbd5945e41a79bb14c31f585", size = 248159 }, + { url = "https://files.pythonhosted.org/packages/99/e7/c6f69c3120de34bbd882c6fba7975f3d7a746e9218e56ab46a1bc4b42552/tomli-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5cb41aa38891e073ee49d55fbc7839cfdb2bc0e600add13874d048c94aadddd1", size = 253290 }, + { url = "https://files.pythonhosted.org/packages/d6/2f/4a3c322f22c5c66c4b836ec58211641a4067364f5dcdd7b974b4c5da300c/tomli-2.4.1-cp312-cp312-win32.whl", hash = "sha256:da25dc3563bff5965356133435b757a795a17b17d01dbc0f42fb32447ddfd917", size = 98141 }, + { url = "https://files.pythonhosted.org/packages/24/22/4daacd05391b92c55759d55eaee21e1dfaea86ce5c571f10083360adf534/tomli-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:52c8ef851d9a240f11a88c003eacb03c31fc1c9c4ec64a99a0f922b93874fda9", size = 108847 }, + { url = "https://files.pythonhosted.org/packages/68/fd/70e768887666ddd9e9f5d85129e84910f2db2796f9096aa02b721a53098d/tomli-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:f758f1b9299d059cc3f6546ae2af89670cb1c4d48ea29c3cacc4fe7de3058257", size = 95088 }, + { url = "https://files.pythonhosted.org/packages/07/06/b823a7e818c756d9a7123ba2cda7d07bc2dd32835648d1a7b7b7a05d848d/tomli-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:36d2bd2ad5fb9eaddba5226aa02c8ec3fa4f192631e347b3ed28186d43be6b54", size = 155866 }, + { url = "https://files.pythonhosted.org/packages/14/6f/12645cf7f08e1a20c7eb8c297c6f11d31c1b50f316a7e7e1e1de6e2e7b7e/tomli-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eb0dc4e38e6a1fd579e5d50369aa2e10acfc9cace504579b2faabb478e76941a", size = 149887 }, + { url = "https://files.pythonhosted.org/packages/5c/e0/90637574e5e7212c09099c67ad349b04ec4d6020324539297b634a0192b0/tomli-2.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7f2c7f2b9ca6bdeef8f0fa897f8e05085923eb091721675170254cbc5b02897", size = 243704 }, + { url = "https://files.pythonhosted.org/packages/10/8f/d3ddb16c5a4befdf31a23307f72828686ab2096f068eaf56631e136c1fdd/tomli-2.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3c6818a1a86dd6dca7ddcaaf76947d5ba31aecc28cb1b67009a5877c9a64f3f", size = 251628 }, + { url = "https://files.pythonhosted.org/packages/e3/f1/dbeeb9116715abee2485bf0a12d07a8f31af94d71608c171c45f64c0469d/tomli-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d312ef37c91508b0ab2cee7da26ec0b3ed2f03ce12bd87a588d771ae15dcf82d", size = 247180 }, + { url = "https://files.pythonhosted.org/packages/d3/74/16336ffd19ed4da28a70959f92f506233bd7cfc2332b20bdb01591e8b1d1/tomli-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51529d40e3ca50046d7606fa99ce3956a617f9b36380da3b7f0dd3dd28e68cb5", size = 251674 }, + { url = "https://files.pythonhosted.org/packages/16/f9/229fa3434c590ddf6c0aa9af64d3af4b752540686cace29e6281e3458469/tomli-2.4.1-cp313-cp313-win32.whl", hash = "sha256:2190f2e9dd7508d2a90ded5ed369255980a1bcdd58e52f7fe24b8162bf9fedbd", size = 97976 }, + { url = "https://files.pythonhosted.org/packages/6a/1e/71dfd96bcc1c775420cb8befe7a9d35f2e5b1309798f009dca17b7708c1e/tomli-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d65a2fbf9d2f8352685bc1364177ee3923d6baf5e7f43ea4959d7d8bc326a36", size = 108755 }, + { url = "https://files.pythonhosted.org/packages/83/7a/d34f422a021d62420b78f5c538e5b102f62bea616d1d75a13f0a88acb04a/tomli-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:4b605484e43cdc43f0954ddae319fb75f04cc10dd80d830540060ee7cd0243cd", size = 95265 }, + { url = "https://files.pythonhosted.org/packages/3c/fb/9a5c8d27dbab540869f7c1f8eb0abb3244189ce780ba9cd73f3770662072/tomli-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fd0409a3653af6c147209d267a0e4243f0ae46b011aa978b1080359fddc9b6cf", size = 155726 }, + { url = "https://files.pythonhosted.org/packages/62/05/d2f816630cc771ad836af54f5001f47a6f611d2d39535364f148b6a92d6b/tomli-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a120733b01c45e9a0c34aeef92bf0cf1d56cfe81ed9d47d562f9ed591a9828ac", size = 149859 }, + { url = "https://files.pythonhosted.org/packages/ce/48/66341bdb858ad9bd0ceab5a86f90eddab127cf8b046418009f2125630ecb/tomli-2.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:559db847dc486944896521f68d8190be1c9e719fced785720d2216fe7022b662", size = 244713 }, + { url = "https://files.pythonhosted.org/packages/df/6d/c5fad00d82b3c7a3ab6189bd4b10e60466f22cfe8a08a9394185c8a8111c/tomli-2.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01f520d4f53ef97964a240a035ec2a869fe1a37dde002b57ebc4417a27ccd853", size = 252084 }, + { url = "https://files.pythonhosted.org/packages/00/71/3a69e86f3eafe8c7a59d008d245888051005bd657760e96d5fbfb0b740c2/tomli-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7f94b27a62cfad8496c8d2513e1a222dd446f095fca8987fceef261225538a15", size = 247973 }, + { url = "https://files.pythonhosted.org/packages/67/50/361e986652847fec4bd5e4a0208752fbe64689c603c7ae5ea7cb16b1c0ca/tomli-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ede3e6487c5ef5d28634ba3f31f989030ad6af71edfb0055cbbd14189ff240ba", size = 256223 }, + { url = "https://files.pythonhosted.org/packages/8c/9a/b4173689a9203472e5467217e0154b00e260621caa227b6fa01feab16998/tomli-2.4.1-cp314-cp314-win32.whl", hash = "sha256:3d48a93ee1c9b79c04bb38772ee1b64dcf18ff43085896ea460ca8dec96f35f6", size = 98973 }, + { url = "https://files.pythonhosted.org/packages/14/58/640ac93bf230cd27d002462c9af0d837779f8773bc03dee06b5835208214/tomli-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:88dceee75c2c63af144e456745e10101eb67361050196b0b6af5d717254dddf7", size = 109082 }, + { url = "https://files.pythonhosted.org/packages/d5/2f/702d5e05b227401c1068f0d386d79a589bb12bf64c3d2c72ce0631e3bc49/tomli-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:b8c198f8c1805dc42708689ed6864951fd2494f924149d3e4bce7710f8eb5232", size = 96490 }, + { url = "https://files.pythonhosted.org/packages/45/4b/b877b05c8ba62927d9865dd980e34a755de541eb65fffba52b4cc495d4d2/tomli-2.4.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d4d8fe59808a54658fcc0160ecfb1b30f9089906c50b23bcb4c69eddc19ec2b4", size = 164263 }, + { url = "https://files.pythonhosted.org/packages/24/79/6ab420d37a270b89f7195dec5448f79400d9e9c1826df982f3f8e97b24fd/tomli-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7008df2e7655c495dd12d2a4ad038ff878d4ca4b81fccaf82b714e07eae4402c", size = 160736 }, + { url = "https://files.pythonhosted.org/packages/02/e0/3630057d8eb170310785723ed5adcdfb7d50cb7e6455f85ba8a3deed642b/tomli-2.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d8591993e228b0c930c4bb0db464bdad97b3289fb981255d6c9a41aedc84b2d", size = 270717 }, + { url = "https://files.pythonhosted.org/packages/7a/b4/1613716072e544d1a7891f548d8f9ec6ce2faf42ca65acae01d76ea06bb0/tomli-2.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:734e20b57ba95624ecf1841e72b53f6e186355e216e5412de414e3c51e5e3c41", size = 278461 }, + { url = "https://files.pythonhosted.org/packages/05/38/30f541baf6a3f6df77b3df16b01ba319221389e2da59427e221ef417ac0c/tomli-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8a650c2dbafa08d42e51ba0b62740dae4ecb9338eefa093aa5c78ceb546fcd5c", size = 274855 }, + { url = "https://files.pythonhosted.org/packages/77/a3/ec9dd4fd2c38e98de34223b995a3b34813e6bdadf86c75314c928350ed14/tomli-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:504aa796fe0569bb43171066009ead363de03675276d2d121ac1a4572397870f", size = 283144 }, + { url = "https://files.pythonhosted.org/packages/ef/be/605a6261cac79fba2ec0c9827e986e00323a1945700969b8ee0b30d85453/tomli-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:b1d22e6e9387bf4739fbe23bfa80e93f6b0373a7f1b96c6227c32bef95a4d7a8", size = 108683 }, + { url = "https://files.pythonhosted.org/packages/12/64/da524626d3b9cc40c168a13da8335fe1c51be12c0a63685cc6db7308daae/tomli-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2c1c351919aca02858f740c6d33adea0c5deea37f9ecca1cc1ef9e884a619d26", size = 121196 }, + { url = "https://files.pythonhosted.org/packages/5a/cd/e80b62269fc78fc36c9af5a6b89c835baa8af28ff5ad28c7028d60860320/tomli-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:eab21f45c7f66c13f2a9e0e1535309cee140182a9cdae1e041d02e47291e8396", size = 100393 }, + { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583 }, +] + +[[package]] +name = "tomli-w" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/19/75/241269d1da26b624c0d5e110e8149093c759b7a286138f4efd61a60e75fe/tomli_w-1.2.0.tar.gz", hash = "sha256:2dd14fac5a47c27be9cd4c976af5a12d87fb1f0b4512f81d69cce3b35ae25021", size = 7184 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/18/c86eb8e0202e32dd3df50d43d7ff9854f8e0603945ff398974c1d91ac1ef/tomli_w-1.2.0-py3-none-any.whl", hash = "sha256:188306098d013b691fcadc011abd66727d3c414c571bb01b1a174ba8c983cf90", size = 6675 }, +] + +[[package]] +name = "tornado" +version = "6.5.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f8/f1/3173dfa4a18db4a9b03e5d55325559dab51ee653763bb8745a75af491286/tornado-6.5.5.tar.gz", hash = "sha256:192b8f3ea91bd7f1f50c06955416ed76c6b72f96779b962f07f911b91e8d30e9", size = 516006 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/59/8c/77f5097695f4dd8255ecbd08b2a1ed8ba8b953d337804dd7080f199e12bf/tornado-6.5.5-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:487dc9cc380e29f58c7ab88f9e27cdeef04b2140862e5076a66fb6bb68bb1bfa", size = 445983 }, + { url = "https://files.pythonhosted.org/packages/ab/5e/7625b76cd10f98f1516c36ce0346de62061156352353ef2da44e5c21523c/tornado-6.5.5-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:65a7f1d46d4bb41df1ac99f5fcb685fb25c7e61613742d5108b010975a9a6521", size = 444246 }, + { url = "https://files.pythonhosted.org/packages/b2/04/7b5705d5b3c0fab088f434f9c83edac1573830ca49ccf29fb83bf7178eec/tornado-6.5.5-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e74c92e8e65086b338fd56333fb9a68b9f6f2fe7ad532645a290a464bcf46be5", size = 447229 }, + { url = "https://files.pythonhosted.org/packages/34/01/74e034a30ef59afb4097ef8659515e96a39d910b712a89af76f5e4e1f93c/tornado-6.5.5-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:435319e9e340276428bbdb4e7fa732c2d399386d1de5686cb331ec8eee754f07", size = 448192 }, + { url = "https://files.pythonhosted.org/packages/be/00/fe9e02c5a96429fce1a1d15a517f5d8444f9c412e0bb9eadfbe3b0fc55bf/tornado-6.5.5-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3f54aa540bdbfee7b9eb268ead60e7d199de5021facd276819c193c0fb28ea4e", size = 448039 }, + { url = "https://files.pythonhosted.org/packages/82/9e/656ee4cec0398b1d18d0f1eb6372c41c6b889722641d84948351ae19556d/tornado-6.5.5-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:36abed1754faeb80fbd6e64db2758091e1320f6bba74a4cf8c09cd18ccce8aca", size = 447445 }, + { url = "https://files.pythonhosted.org/packages/5a/76/4921c00511f88af86a33de770d64141170f1cfd9c00311aea689949e274e/tornado-6.5.5-cp39-abi3-win32.whl", hash = "sha256:dd3eafaaeec1c7f2f8fdcd5f964e8907ad788fe8a5a32c4426fbbdda621223b7", size = 448582 }, + { url = "https://files.pythonhosted.org/packages/2c/23/f6c6112a04d28eed765e374435fb1a9198f73e1ec4b4024184f21faeb1ad/tornado-6.5.5-cp39-abi3-win_amd64.whl", hash = "sha256:6443a794ba961a9f619b1ae926a2e900ac20c34483eea67be4ed8f1e58d3ef7b", size = 448990 }, + { url = "https://files.pythonhosted.org/packages/b7/c8/876602cbc96469911f0939f703453c1157b0c826ecb05bdd32e023397d4e/tornado-6.5.5-cp39-abi3-win_arm64.whl", hash = "sha256:2c9a876e094109333f888539ddb2de4361743e5d21eece20688e3e351e4990a6", size = 448016 }, +] + +[[package]] +name = "tox" +version = "4.30.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "cachetools", version = "6.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "chardet", marker = "python_full_version < '3.10'" }, + { name = "colorama", marker = "python_full_version < '3.10'" }, + { name = "filelock", version = "3.19.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "packaging", marker = "python_full_version < '3.10'" }, + { name = "platformdirs", version = "4.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "pluggy", marker = "python_full_version < '3.10'" }, + { name = "pyproject-api", version = "1.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "tomli", marker = "python_full_version < '3.10'" }, + { name = "typing-extensions", marker = "python_full_version < '3.10'" }, + { name = "virtualenv", marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/51/b2/cee55172e5e10ce030b087cd3ac06641e47d08a3dc8d76c17b157dba7558/tox-4.30.3.tar.gz", hash = "sha256:f3dd0735f1cd4e8fbea5a3661b77f517456b5f0031a6256432533900e34b90bf", size = 202799 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e2/e4/8bb9ce952820df4165eb34610af347665d6cb436898a234db9d84d093ce6/tox-4.30.3-py3-none-any.whl", hash = "sha256:a9f17b4b2d0f74fe0d76207236925a119095011e5c2e661a133115a8061178c9", size = 175512 }, +] + +[[package]] +name = "tox" +version = "4.52.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "cachetools", version = "7.0.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "colorama", marker = "python_full_version >= '3.10'" }, + { name = "filelock", version = "3.25.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "packaging", marker = "python_full_version >= '3.10'" }, + { name = "platformdirs", version = "4.9.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "pluggy", marker = "python_full_version >= '3.10'" }, + { name = "pyproject-api", version = "1.10.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "python-discovery", version = "1.2.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "tomli", marker = "python_full_version == '3.10.*'" }, + { name = "tomli-w", marker = "python_full_version >= '3.10'" }, + { name = "typing-extensions", marker = "python_full_version == '3.10.*'" }, + { name = "virtualenv", marker = "python_full_version >= '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bc/fb/d7d634eb513f741ffd40f4c262b7feea19d5c616882eb554045c620670a6/tox-4.52.1.tar.gz", hash = "sha256:297e71ea0ae4ef3acc45cb5fdf080b74537e6ecb5eea7d4646fa7322ca10473e", size = 273730 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/70/0d4fb1eefa05a24ca2f58272b4c4718090dd5ed7e38b54b9a7e757bfafc8/tox-4.52.1-py3-none-any.whl", hash = "sha256:3c4eef0a64f319df0b67dacdb7edcfeda87c8cc722581af5d98dd54f3ffdd8ef", size = 212179 }, +] + +[[package]] +name = "traitlets" +version = "5.14.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359 }, +] + +[[package]] +name = "typing-extensions" +version = "4.15.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614 }, +] + +[[package]] +name = "tzdata" +version = "2025.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/a7/c202b344c5ca7daf398f3b8a477eeb205cf3b6f32e7ec3a6bac0629ca975/tzdata-2025.3.tar.gz", hash = "sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7", size = 196772 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl", hash = "sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1", size = 348521 }, +] + +[[package]] +name = "uri-template" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/31/c7/0336f2bd0bcbada6ccef7aaa25e443c118a704f828a0620c6fa0207c1b64/uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7", size = 21678 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363", size = 11140 }, +] + +[[package]] +name = "urllib3" +version = "2.6.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 435556 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584 }, +] + +[[package]] +name = "virtualenv" +version = "21.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "distlib" }, + { name = "filelock", version = "3.19.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "filelock", version = "3.25.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "platformdirs", version = "4.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "platformdirs", version = "4.9.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "python-discovery", version = "1.2.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "python-discovery", version = "1.2.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/aa/92/58199fe10049f9703c2666e809c4f686c54ef0a68b0f6afccf518c0b1eb9/virtualenv-21.2.0.tar.gz", hash = "sha256:1720dc3a62ef5b443092e3f499228599045d7fea4c79199770499df8becf9098", size = 5840618 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl", hash = "sha256:1bd755b504931164a5a496d217c014d098426cddc79363ad66ac78125f9d908f", size = 5825084 }, +] + +[[package]] +name = "wcwidth" +version = "0.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/35/a2/8e3becb46433538a38726c948d3399905a4c7cabd0df578ede5dc51f0ec2/wcwidth-0.6.0.tar.gz", hash = "sha256:cdc4e4262d6ef9a1a57e018384cbeb1208d8abbc64176027e2c2455c81313159", size = 159684 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/68/5a/199c59e0a824a3db2b89c5d2dade7ab5f9624dbf6448dc291b46d5ec94d3/wcwidth-0.6.0-py3-none-any.whl", hash = "sha256:1a3a1e510b553315f8e146c54764f4fb6264ffad731b3d78088cdb1478ffbdad", size = 94189 }, +] + +[[package]] +name = "webcolors" +version = "24.11.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/7b/29/061ec845fb58521848f3739e466efd8250b4b7b98c1b6c5bf4d40b419b7e/webcolors-24.11.1.tar.gz", hash = "sha256:ecb3d768f32202af770477b8b65f318fa4f566c22948673a977b00d589dd80f6", size = 45064 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/e8/c0e05e4684d13459f93d312077a9a2efbe04d59c393bc2b8802248c908d4/webcolors-24.11.1-py3-none-any.whl", hash = "sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9", size = 14934 }, +] + +[[package]] +name = "webcolors" +version = "25.10.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/1d/7a/eb316761ec35664ea5174709a68bbd3389de60d4a1ebab8808bfc264ed67/webcolors-25.10.0.tar.gz", hash = "sha256:62abae86504f66d0f6364c2a8520de4a0c47b80c03fc3a5f1815fedbef7c19bf", size = 53491 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl", hash = "sha256:032c727334856fc0b968f63daa252a1ac93d33db2f5267756623c210e57a4f1d", size = 14905 }, +] + +[[package]] +name = "webencodings" +version = "0.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/02/ae6ceac1baeda530866a85075641cec12989bd8d31af6d5ab4a3e8c92f47/webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923", size = 9721 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", size = 11774 }, +] + +[[package]] +name = "websocket-client" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2c/41/aa4bf9664e4cda14c3b39865b12251e8e7d239f4cd0e3cc1b6c2ccde25c1/websocket_client-1.9.0.tar.gz", hash = "sha256:9e813624b6eb619999a97dc7958469217c3176312b3a16a4bd1bc7e08a46ec98", size = 70576 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/db/b10e48aa8fff7407e67470363eac595018441cf32d5e1001567a7aeba5d2/websocket_client-1.9.0-py3-none-any.whl", hash = "sha256:af248a825037ef591efbf6ed20cc5faa03d3b47b9e5a2230a529eeee1c1fc3ef", size = 82616 }, +] + +[[package]] +name = "zipp" +version = "3.23.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e3/02/0f2892c661036d50ede074e376733dca2ae7c6eb617489437771209d4180/zipp-3.23.0.tar.gz", hash = "sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166", size = 25547 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl", hash = "sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e", size = 10276 }, +] From cf75d3a4826dd551f946bad808e75b4c11a8adf9 Mon Sep 17 00:00:00 2001 From: Fabian Hommel Date: Tue, 14 Apr 2026 12:23:21 +0200 Subject: [PATCH 73/87] Repaired uv.lock --- .pre-commit-config.yaml | 2 + uv.lock | 3874 --------------------------------------- 2 files changed, 2 insertions(+), 3874 deletions(-) delete mode 100644 uv.lock diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a6cdff3..c7c5a42 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -12,7 +12,9 @@ repos: - id: check-xml - id: check-yaml - id: end-of-file-fixer + exclude: "uv.lock" - id: mixed-line-ending + exclude: "uv.lock" args: ['--fix=auto'] # replace 'auto' with 'lf' to enforce Linux/Mac line endings or 'crlf' for Windows - repo: https://github.com/astral-sh/ruff-pre-commit diff --git a/uv.lock b/uv.lock deleted file mode 100644 index 9b9e760..0000000 --- a/uv.lock +++ /dev/null @@ -1,3874 +0,0 @@ -version = 1 -revision = 1 -requires-python = ">=3.9" -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", - "python_full_version < '3.10'", -] - -[[package]] -name = "alabaster" -version = "0.7.16" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/c9/3e/13dd8e5ed9094e734ac430b5d0eb4f2bb001708a8b7856cbf8e084e001ba/alabaster-0.7.16.tar.gz", hash = "sha256:75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65", size = 23776 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/32/34/d4e1c02d3bee589efb5dfa17f88ea08bdb3e3eac12bc475462aec52ed223/alabaster-0.7.16-py3-none-any.whl", hash = "sha256:b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92", size = 13511 }, -] - -[[package]] -name = "alabaster" -version = "1.0.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] -sdist = { url = "https://files.pythonhosted.org/packages/a6/f8/d9c74d0daf3f742840fd818d69cfae176fa332022fd44e3469487d5a9420/alabaster-1.0.0.tar.gz", hash = "sha256:c00dca57bca26fa62a6d7d0a9fcce65f3e026e9bfe33e9c538fd3fbb2144fd9e", size = 24210 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl", hash = "sha256:fc6786402dc3fcb2de3cabd5fe455a2db534b371124f1f21de8731783dec828b", size = 13929 }, -] - -[[package]] -name = "anyio" -version = "4.12.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "exceptiongroup", marker = "python_full_version < '3.10'" }, - { name = "idna", marker = "python_full_version < '3.10'" }, - { name = "typing-extensions", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/96/f0/5eb65b2bb0d09ac6776f2eb54adee6abe8228ea05b20a5ad0e4945de8aac/anyio-4.12.1.tar.gz", hash = "sha256:41cfcc3a4c85d3f05c932da7c26d0201ac36f72abd4435ba90d0464a3ffed703", size = 228685 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl", hash = "sha256:d405828884fc140aa80a3c667b8beed277f1dfedec42ba031bd6ac3db606ab6c", size = 113592 }, -] - -[[package]] -name = "anyio" -version = "4.13.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] -dependencies = [ - { name = "exceptiongroup", marker = "python_full_version == '3.10.*'" }, - { name = "idna", marker = "python_full_version >= '3.10'" }, - { name = "typing-extensions", marker = "python_full_version >= '3.10' and python_full_version < '3.13'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/19/14/2c5dd9f512b66549ae92767a9c7b330ae88e1932ca57876909410251fe13/anyio-4.13.0.tar.gz", hash = "sha256:334b70e641fd2221c1505b3890c69882fe4a2df910cba14d97019b90b24439dc", size = 231622 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/da/42/e921fccf5015463e32a3cf6ee7f980a6ed0f395ceeaa45060b61d86486c2/anyio-4.13.0-py3-none-any.whl", hash = "sha256:08b310f9e24a9594186fd75b4f73f4a4152069e3853f1ed8bfbf58369f4ad708", size = 114353 }, -] - -[[package]] -name = "appnope" -version = "0.1.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321 }, -] - -[[package]] -name = "argon2-cffi" -version = "25.1.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "argon2-cffi-bindings" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/0e/89/ce5af8a7d472a67cc819d5d998aa8c82c5d860608c4db9f46f1162d7dab9/argon2_cffi-25.1.0.tar.gz", hash = "sha256:694ae5cc8a42f4c4e2bf2ca0e64e51e23a040c6a517a85074683d3959e1346c1", size = 45706 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4f/d3/a8b22fa575b297cd6e3e3b0155c7e25db170edf1c74783d6a31a2490b8d9/argon2_cffi-25.1.0-py3-none-any.whl", hash = "sha256:fdc8b074db390fccb6eb4a3604ae7231f219aa669a2652e0f20e16ba513d5741", size = 14657 }, -] - -[[package]] -name = "argon2-cffi-bindings" -version = "25.1.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cffi" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/5c/2d/db8af0df73c1cf454f71b2bbe5e356b8c1f8041c979f505b3d3186e520a9/argon2_cffi_bindings-25.1.0.tar.gz", hash = "sha256:b957f3e6ea4d55d820e40ff76f450952807013d361a65d7f28acc0acbf29229d", size = 1783441 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/60/97/3c0a35f46e52108d4707c44b95cfe2afcafc50800b5450c197454569b776/argon2_cffi_bindings-25.1.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:3d3f05610594151994ca9ccb3c771115bdb4daef161976a266f0dd8aa9996b8f", size = 54393 }, - { url = "https://files.pythonhosted.org/packages/9d/f4/98bbd6ee89febd4f212696f13c03ca302b8552e7dbf9c8efa11ea4a388c3/argon2_cffi_bindings-25.1.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:8b8efee945193e667a396cbc7b4fb7d357297d6234d30a489905d96caabde56b", size = 29328 }, - { url = "https://files.pythonhosted.org/packages/43/24/90a01c0ef12ac91a6be05969f29944643bc1e5e461155ae6559befa8f00b/argon2_cffi_bindings-25.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:3c6702abc36bf3ccba3f802b799505def420a1b7039862014a65db3205967f5a", size = 31269 }, - { url = "https://files.pythonhosted.org/packages/d4/d3/942aa10782b2697eee7af5e12eeff5ebb325ccfb86dd8abda54174e377e4/argon2_cffi_bindings-25.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a1c70058c6ab1e352304ac7e3b52554daadacd8d453c1752e547c76e9c99ac44", size = 86558 }, - { url = "https://files.pythonhosted.org/packages/0d/82/b484f702fec5536e71836fc2dbc8c5267b3f6e78d2d539b4eaa6f0db8bf8/argon2_cffi_bindings-25.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e2fd3bfbff3c5d74fef31a722f729bf93500910db650c925c2d6ef879a7e51cb", size = 92364 }, - { url = "https://files.pythonhosted.org/packages/c9/c1/a606ff83b3f1735f3759ad0f2cd9e038a0ad11a3de3b6c673aa41c24bb7b/argon2_cffi_bindings-25.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c4f9665de60b1b0e99bcd6be4f17d90339698ce954cfd8d9cf4f91c995165a92", size = 85637 }, - { url = "https://files.pythonhosted.org/packages/44/b4/678503f12aceb0262f84fa201f6027ed77d71c5019ae03b399b97caa2f19/argon2_cffi_bindings-25.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ba92837e4a9aa6a508c8d2d7883ed5a8f6c308c89a4790e1e447a220deb79a85", size = 91934 }, - { url = "https://files.pythonhosted.org/packages/f0/c7/f36bd08ef9bd9f0a9cff9428406651f5937ce27b6c5b07b92d41f91ae541/argon2_cffi_bindings-25.1.0-cp314-cp314t-win32.whl", hash = "sha256:84a461d4d84ae1295871329b346a97f68eade8c53b6ed9a7ca2d7467f3c8ff6f", size = 28158 }, - { url = "https://files.pythonhosted.org/packages/b3/80/0106a7448abb24a2c467bf7d527fe5413b7fdfa4ad6d6a96a43a62ef3988/argon2_cffi_bindings-25.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b55aec3565b65f56455eebc9b9f34130440404f27fe21c3b375bf1ea4d8fbae6", size = 32597 }, - { url = "https://files.pythonhosted.org/packages/05/b8/d663c9caea07e9180b2cb662772865230715cbd573ba3b5e81793d580316/argon2_cffi_bindings-25.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:87c33a52407e4c41f3b70a9c2d3f6056d88b10dad7695be708c5021673f55623", size = 28231 }, - { url = "https://files.pythonhosted.org/packages/1d/57/96b8b9f93166147826da5f90376e784a10582dd39a393c99bb62cfcf52f0/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:aecba1723ae35330a008418a91ea6cfcedf6d31e5fbaa056a166462ff066d500", size = 54121 }, - { url = "https://files.pythonhosted.org/packages/0a/08/a9bebdb2e0e602dde230bdde8021b29f71f7841bd54801bcfd514acb5dcf/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:2630b6240b495dfab90aebe159ff784d08ea999aa4b0d17efa734055a07d2f44", size = 29177 }, - { url = "https://files.pythonhosted.org/packages/b6/02/d297943bcacf05e4f2a94ab6f462831dc20158614e5d067c35d4e63b9acb/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:7aef0c91e2c0fbca6fc68e7555aa60ef7008a739cbe045541e438373bc54d2b0", size = 31090 }, - { url = "https://files.pythonhosted.org/packages/c1/93/44365f3d75053e53893ec6d733e4a5e3147502663554b4d864587c7828a7/argon2_cffi_bindings-25.1.0-cp39-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1e021e87faa76ae0d413b619fe2b65ab9a037f24c60a1e6cc43457ae20de6dc6", size = 81246 }, - { url = "https://files.pythonhosted.org/packages/09/52/94108adfdd6e2ddf58be64f959a0b9c7d4ef2fa71086c38356d22dc501ea/argon2_cffi_bindings-25.1.0-cp39-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d3e924cfc503018a714f94a49a149fdc0b644eaead5d1f089330399134fa028a", size = 87126 }, - { url = "https://files.pythonhosted.org/packages/72/70/7a2993a12b0ffa2a9271259b79cc616e2389ed1a4d93842fac5a1f923ffd/argon2_cffi_bindings-25.1.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:c87b72589133f0346a1cb8d5ecca4b933e3c9b64656c9d175270a000e73b288d", size = 80343 }, - { url = "https://files.pythonhosted.org/packages/78/9a/4e5157d893ffc712b74dbd868c7f62365618266982b64accab26bab01edc/argon2_cffi_bindings-25.1.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1db89609c06afa1a214a69a462ea741cf735b29a57530478c06eb81dd403de99", size = 86777 }, - { url = "https://files.pythonhosted.org/packages/74/cd/15777dfde1c29d96de7f18edf4cc94c385646852e7c7b0320aa91ccca583/argon2_cffi_bindings-25.1.0-cp39-abi3-win32.whl", hash = "sha256:473bcb5f82924b1becbb637b63303ec8d10e84c8d241119419897a26116515d2", size = 27180 }, - { url = "https://files.pythonhosted.org/packages/e2/c6/a759ece8f1829d1f162261226fbfd2c6832b3ff7657384045286d2afa384/argon2_cffi_bindings-25.1.0-cp39-abi3-win_amd64.whl", hash = "sha256:a98cd7d17e9f7ce244c0803cad3c23a7d379c301ba618a5fa76a67d116618b98", size = 31715 }, - { url = "https://files.pythonhosted.org/packages/42/b9/f8d6fa329ab25128b7e98fd83a3cb34d9db5b059a9847eddb840a0af45dd/argon2_cffi_bindings-25.1.0-cp39-abi3-win_arm64.whl", hash = "sha256:b0fdbcf513833809c882823f98dc2f931cf659d9a1429616ac3adebb49f5db94", size = 27149 }, - { url = "https://files.pythonhosted.org/packages/11/2d/ba4e4ca8d149f8dcc0d952ac0967089e1d759c7e5fcf0865a317eb680fbb/argon2_cffi_bindings-25.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:6dca33a9859abf613e22733131fc9194091c1fa7cb3e131c143056b4856aa47e", size = 24549 }, - { url = "https://files.pythonhosted.org/packages/5c/82/9b2386cc75ac0bd3210e12a44bfc7fd1632065ed8b80d573036eecb10442/argon2_cffi_bindings-25.1.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:21378b40e1b8d1655dd5310c84a40fc19a9aa5e6366e835ceb8576bf0fea716d", size = 25539 }, - { url = "https://files.pythonhosted.org/packages/31/db/740de99a37aa727623730c90d92c22c9e12585b3c98c54b7960f7810289f/argon2_cffi_bindings-25.1.0-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d588dec224e2a83edbdc785a5e6f3c6cd736f46bfd4b441bbb5aa1f5085e584", size = 28467 }, - { url = "https://files.pythonhosted.org/packages/71/7a/47c4509ea18d755f44e2b92b7178914f0c113946d11e16e626df8eaa2b0b/argon2_cffi_bindings-25.1.0-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5acb4e41090d53f17ca1110c3427f0a130f944b896fc8c83973219c97f57b690", size = 27355 }, - { url = "https://files.pythonhosted.org/packages/ee/82/82745642d3c46e7cea25e1885b014b033f4693346ce46b7f47483cf5d448/argon2_cffi_bindings-25.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:da0c79c23a63723aa5d782250fbf51b768abca630285262fb5144ba5ae01e520", size = 29187 }, -] - -[[package]] -name = "arrow" -version = "1.4.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "python-dateutil" }, - { name = "tzdata" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b9/33/032cdc44182491aa708d06a68b62434140d8c50820a087fac7af37703357/arrow-1.4.0.tar.gz", hash = "sha256:ed0cc050e98001b8779e84d461b0098c4ac597e88704a655582b21d116e526d7", size = 152931 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl", hash = "sha256:749f0769958ebdc79c173ff0b0670d59051a535fa26e8eba02953dc19eb43205", size = 68797 }, -] - -[[package]] -name = "asttokens" -version = "3.0.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/be/a5/8e3f9b6771b0b408517c82d97aed8f2036509bc247d46114925e32fe33f0/asttokens-3.0.1.tar.gz", hash = "sha256:71a4ee5de0bde6a31d64f6b13f2293ac190344478f081c3d1bccfcf5eacb0cb7", size = 62308 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d2/39/e7eaf1799466a4aef85b6a4fe7bd175ad2b1c6345066aa33f1f58d4b18d0/asttokens-3.0.1-py3-none-any.whl", hash = "sha256:15a3ebc0f43c2d0a50eeafea25e19046c68398e487b9f1f5b517f7c0f40f976a", size = 27047 }, -] - -[[package]] -name = "async-lru" -version = "2.0.5" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b2/4d/71ec4d3939dc755264f680f6c2b4906423a304c3d18e96853f0a595dfe97/async_lru-2.0.5.tar.gz", hash = "sha256:481d52ccdd27275f42c43a928b4a50c3bfb2d67af4e78b170e3e0bb39c66e5bb", size = 10380 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/03/49/d10027df9fce941cb8184e78a02857af36360d33e1721df81c5ed2179a1a/async_lru-2.0.5-py3-none-any.whl", hash = "sha256:ab95404d8d2605310d345932697371a5f40def0487c03d6d0ad9138de52c9943", size = 6069 }, -] - -[[package]] -name = "async-lru" -version = "2.3.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] -dependencies = [ - { name = "typing-extensions", marker = "python_full_version == '3.10.*'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/e8/1f/989ecfef8e64109a489fff357450cb73fa73a865a92bd8c272170a6922c2/async_lru-2.3.0.tar.gz", hash = "sha256:89bdb258a0140d7313cf8f4031d816a042202faa61d0ab310a0a538baa1c24b6", size = 16332 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/e2/c2e3abf398f80732e58b03be77bde9022550d221dd8781bf586bd4d97cc1/async_lru-2.3.0-py3-none-any.whl", hash = "sha256:eea27b01841909316f2cc739807acea1c623df2be8c5cfad7583286397bb8315", size = 8403 }, -] - -[[package]] -name = "attrs" -version = "26.1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/82a0fe20a541c03148528be8cac2408564a6c9a0cc7e9171802bc1d26985/attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32", size = 952055 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548 }, -] - -[[package]] -name = "babel" -version = "2.18.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7d/b2/51899539b6ceeeb420d40ed3cd4b7a40519404f9baf3d4ac99dc413a834b/babel-2.18.0.tar.gz", hash = "sha256:b80b99a14bd085fcacfa15c9165f651fbb3406e66cc603abf11c5750937c992d", size = 9959554 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl", hash = "sha256:e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35", size = 10196845 }, -] - -[[package]] -name = "beautifulsoup4" -version = "4.14.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "soupsieve" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/c3/b0/1c6a16426d389813b48d95e26898aff79abbde42ad353958ad95cc8c9b21/beautifulsoup4-4.14.3.tar.gz", hash = "sha256:6292b1c5186d356bba669ef9f7f051757099565ad9ada5dd630bd9de5fa7fb86", size = 627737 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl", hash = "sha256:0918bfe44902e6ad8d57732ba310582e98da931428d231a5ecb9e7c703a735bb", size = 107721 }, -] - -[[package]] -name = "bleach" -version = "6.2.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "webencodings", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/76/9a/0e33f5054c54d349ea62c277191c020c2d6ef1d65ab2cb1993f91ec846d1/bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f", size = 203083 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fc/55/96142937f66150805c25c4d0f31ee4132fd33497753400734f9dfdcbdc66/bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e", size = 163406 }, -] - -[package.optional-dependencies] -css = [ - { name = "tinycss2", marker = "python_full_version < '3.10'" }, -] - -[[package]] -name = "bleach" -version = "6.3.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] -dependencies = [ - { name = "webencodings", marker = "python_full_version >= '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/07/18/3c8523962314be6bf4c8989c79ad9531c825210dd13a8669f6b84336e8bd/bleach-6.3.0.tar.gz", hash = "sha256:6f3b91b1c0a02bb9a78b5a454c92506aa0fdf197e1d5e114d2e00c6f64306d22", size = 203533 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/cd/3a/577b549de0cc09d95f11087ee63c739bba856cd3952697eec4c4bb91350a/bleach-6.3.0-py3-none-any.whl", hash = "sha256:fe10ec77c93ddf3d13a73b035abaac7a9f5e436513864ccdad516693213c65d6", size = 164437 }, -] - -[package.optional-dependencies] -css = [ - { name = "tinycss2", marker = "python_full_version >= '3.10'" }, -] - -[[package]] -name = "cachetools" -version = "6.2.6" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/39/91/d9ae9a66b01102a18cd16db0cf4cd54187ffe10f0865cc80071a4104fbb3/cachetools-6.2.6.tar.gz", hash = "sha256:16c33e1f276b9a9c0b49ab5782d901e3ad3de0dd6da9bf9bcd29ac5672f2f9e6", size = 32363 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/90/45/f458fa2c388e79dd9d8b9b0c99f1d31b568f27388f2fdba7bb66bbc0c6ed/cachetools-6.2.6-py3-none-any.whl", hash = "sha256:8c9717235b3c651603fff0076db52d6acbfd1b338b8ed50256092f7ce9c85bda", size = 11668 }, -] - -[[package]] -name = "cachetools" -version = "7.0.5" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] -sdist = { url = "https://files.pythonhosted.org/packages/af/dd/57fe3fdb6e65b25a5987fd2cdc7e22db0aef508b91634d2e57d22928d41b/cachetools-7.0.5.tar.gz", hash = "sha256:0cd042c24377200c1dcd225f8b7b12b0ca53cc2c961b43757e774ebe190fd990", size = 37367 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/06/f3/39cf3367b8107baa44f861dc802cbf16263c945b62d8265d36034fc07bea/cachetools-7.0.5-py3-none-any.whl", hash = "sha256:46bc8ebefbe485407621d0a4264b23c080cedd913921bad7ac3ed2f26c183114", size = 13918 }, -] - -[[package]] -name = "certifi" -version = "2026.2.25" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/af/2d/7bf41579a8986e348fa033a31cdd0e4121114f6bce2457e8876010b092dd/certifi-2026.2.25.tar.gz", hash = "sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7", size = 155029 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl", hash = "sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa", size = 153684 }, -] - -[[package]] -name = "cffi" -version = "2.0.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pycparser", version = "2.23", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' and implementation_name != 'PyPy'" }, - { name = "pycparser", version = "3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10' and implementation_name != 'PyPy'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/93/d7/516d984057745a6cd96575eea814fe1edd6646ee6efd552fb7b0921dec83/cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44", size = 184283 }, - { url = "https://files.pythonhosted.org/packages/9e/84/ad6a0b408daa859246f57c03efd28e5dd1b33c21737c2db84cae8c237aa5/cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49", size = 180504 }, - { url = "https://files.pythonhosted.org/packages/50/bd/b1a6362b80628111e6653c961f987faa55262b4002fcec42308cad1db680/cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c", size = 208811 }, - { url = "https://files.pythonhosted.org/packages/4f/27/6933a8b2562d7bd1fb595074cf99cc81fc3789f6a6c05cdabb46284a3188/cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb", size = 216402 }, - { url = "https://files.pythonhosted.org/packages/05/eb/b86f2a2645b62adcfff53b0dd97e8dfafb5c8aa864bd0d9a2c2049a0d551/cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0", size = 203217 }, - { url = "https://files.pythonhosted.org/packages/9f/e0/6cbe77a53acf5acc7c08cc186c9928864bd7c005f9efd0d126884858a5fe/cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4", size = 203079 }, - { url = "https://files.pythonhosted.org/packages/98/29/9b366e70e243eb3d14a5cb488dfd3a0b6b2f1fb001a203f653b93ccfac88/cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453", size = 216475 }, - { url = "https://files.pythonhosted.org/packages/21/7a/13b24e70d2f90a322f2900c5d8e1f14fa7e2a6b3332b7309ba7b2ba51a5a/cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495", size = 218829 }, - { url = "https://files.pythonhosted.org/packages/60/99/c9dc110974c59cc981b1f5b66e1d8af8af764e00f0293266824d9c4254bc/cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5", size = 211211 }, - { url = "https://files.pythonhosted.org/packages/49/72/ff2d12dbf21aca1b32a40ed792ee6b40f6dc3a9cf1644bd7ef6e95e0ac5e/cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb", size = 218036 }, - { url = "https://files.pythonhosted.org/packages/e2/cc/027d7fb82e58c48ea717149b03bcadcbdc293553edb283af792bd4bcbb3f/cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a", size = 172184 }, - { url = "https://files.pythonhosted.org/packages/33/fa/072dd15ae27fbb4e06b437eb6e944e75b068deb09e2a2826039e49ee2045/cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739", size = 182790 }, - { url = "https://files.pythonhosted.org/packages/12/4a/3dfd5f7850cbf0d06dc84ba9aa00db766b52ca38d8b86e3a38314d52498c/cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe", size = 184344 }, - { url = "https://files.pythonhosted.org/packages/4f/8b/f0e4c441227ba756aafbe78f117485b25bb26b1c059d01f137fa6d14896b/cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c", size = 180560 }, - { url = "https://files.pythonhosted.org/packages/b1/b7/1200d354378ef52ec227395d95c2576330fd22a869f7a70e88e1447eb234/cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92", size = 209613 }, - { url = "https://files.pythonhosted.org/packages/b8/56/6033f5e86e8cc9bb629f0077ba71679508bdf54a9a5e112a3c0b91870332/cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93", size = 216476 }, - { url = "https://files.pythonhosted.org/packages/dc/7f/55fecd70f7ece178db2f26128ec41430d8720f2d12ca97bf8f0a628207d5/cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5", size = 203374 }, - { url = "https://files.pythonhosted.org/packages/84/ef/a7b77c8bdc0f77adc3b46888f1ad54be8f3b7821697a7b89126e829e676a/cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664", size = 202597 }, - { url = "https://files.pythonhosted.org/packages/d7/91/500d892b2bf36529a75b77958edfcd5ad8e2ce4064ce2ecfeab2125d72d1/cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26", size = 215574 }, - { url = "https://files.pythonhosted.org/packages/44/64/58f6255b62b101093d5df22dcb752596066c7e89dd725e0afaed242a61be/cffi-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9", size = 218971 }, - { url = "https://files.pythonhosted.org/packages/ab/49/fa72cebe2fd8a55fbe14956f9970fe8eb1ac59e5df042f603ef7c8ba0adc/cffi-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414", size = 211972 }, - { url = "https://files.pythonhosted.org/packages/0b/28/dd0967a76aab36731b6ebfe64dec4e981aff7e0608f60c2d46b46982607d/cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743", size = 217078 }, - { url = "https://files.pythonhosted.org/packages/2b/c0/015b25184413d7ab0a410775fdb4a50fca20f5589b5dab1dbbfa3baad8ce/cffi-2.0.0-cp311-cp311-win32.whl", hash = "sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5", size = 172076 }, - { url = "https://files.pythonhosted.org/packages/ae/8f/dc5531155e7070361eb1b7e4c1a9d896d0cb21c49f807a6c03fd63fc877e/cffi-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5", size = 182820 }, - { url = "https://files.pythonhosted.org/packages/95/5c/1b493356429f9aecfd56bc171285a4c4ac8697f76e9bbbbb105e537853a1/cffi-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d", size = 177635 }, - { url = "https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d", size = 185271 }, - { url = "https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c", size = 181048 }, - { url = "https://files.pythonhosted.org/packages/ff/df/a4f0fbd47331ceeba3d37c2e51e9dfc9722498becbeec2bd8bc856c9538a/cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe", size = 212529 }, - { url = "https://files.pythonhosted.org/packages/d5/72/12b5f8d3865bf0f87cf1404d8c374e7487dcf097a1c91c436e72e6badd83/cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062", size = 220097 }, - { url = "https://files.pythonhosted.org/packages/c2/95/7a135d52a50dfa7c882ab0ac17e8dc11cec9d55d2c18dda414c051c5e69e/cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e", size = 207983 }, - { url = "https://files.pythonhosted.org/packages/3a/c8/15cb9ada8895957ea171c62dc78ff3e99159ee7adb13c0123c001a2546c1/cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037", size = 206519 }, - { url = "https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba", size = 219572 }, - { url = "https://files.pythonhosted.org/packages/07/e0/267e57e387b4ca276b90f0434ff88b2c2241ad72b16d31836adddfd6031b/cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94", size = 222963 }, - { url = "https://files.pythonhosted.org/packages/b6/75/1f2747525e06f53efbd878f4d03bac5b859cbc11c633d0fb81432d98a795/cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187", size = 221361 }, - { url = "https://files.pythonhosted.org/packages/7b/2b/2b6435f76bfeb6bbf055596976da087377ede68df465419d192acf00c437/cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18", size = 172932 }, - { url = "https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5", size = 183557 }, - { url = "https://files.pythonhosted.org/packages/95/31/9f7f93ad2f8eff1dbc1c3656d7ca5bfd8fb52c9d786b4dcf19b2d02217fa/cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6", size = 177762 }, - { url = "https://files.pythonhosted.org/packages/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb", size = 185230 }, - { url = "https://files.pythonhosted.org/packages/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca", size = 181043 }, - { url = "https://files.pythonhosted.org/packages/b0/1e/d22cc63332bd59b06481ceaac49d6c507598642e2230f201649058a7e704/cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b", size = 212446 }, - { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", size = 220101 }, - { url = "https://files.pythonhosted.org/packages/f2/7f/e6647792fc5850d634695bc0e6ab4111ae88e89981d35ac269956605feba/cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2", size = 207948 }, - { url = "https://files.pythonhosted.org/packages/cb/1e/a5a1bd6f1fb30f22573f76533de12a00bf274abcdc55c8edab639078abb6/cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3", size = 206422 }, - { url = "https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26", size = 219499 }, - { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", size = 222928 }, - { url = "https://files.pythonhosted.org/packages/36/54/0362578dd2c9e557a28ac77698ed67323ed5b9775ca9d3fe73fe191bb5d8/cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b", size = 221302 }, - { url = "https://files.pythonhosted.org/packages/eb/6d/bf9bda840d5f1dfdbf0feca87fbdb64a918a69bca42cfa0ba7b137c48cb8/cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27", size = 172909 }, - { url = "https://files.pythonhosted.org/packages/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75", size = 183402 }, - { url = "https://files.pythonhosted.org/packages/cb/0e/02ceeec9a7d6ee63bb596121c2c8e9b3a9e150936f4fbef6ca1943e6137c/cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91", size = 177780 }, - { url = "https://files.pythonhosted.org/packages/92/c4/3ce07396253a83250ee98564f8d7e9789fab8e58858f35d07a9a2c78de9f/cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5", size = 185320 }, - { url = "https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13", size = 181487 }, - { url = "https://files.pythonhosted.org/packages/d6/43/0e822876f87ea8a4ef95442c3d766a06a51fc5298823f884ef87aaad168c/cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b", size = 220049 }, - { url = "https://files.pythonhosted.org/packages/b4/89/76799151d9c2d2d1ead63c2429da9ea9d7aac304603de0c6e8764e6e8e70/cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c", size = 207793 }, - { url = "https://files.pythonhosted.org/packages/bb/dd/3465b14bb9e24ee24cb88c9e3730f6de63111fffe513492bf8c808a3547e/cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef", size = 206300 }, - { url = "https://files.pythonhosted.org/packages/47/d9/d83e293854571c877a92da46fdec39158f8d7e68da75bf73581225d28e90/cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775", size = 219244 }, - { url = "https://files.pythonhosted.org/packages/2b/0f/1f177e3683aead2bb00f7679a16451d302c436b5cbf2505f0ea8146ef59e/cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205", size = 222828 }, - { url = "https://files.pythonhosted.org/packages/c6/0f/cafacebd4b040e3119dcb32fed8bdef8dfe94da653155f9d0b9dc660166e/cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1", size = 220926 }, - { url = "https://files.pythonhosted.org/packages/3e/aa/df335faa45b395396fcbc03de2dfcab242cd61a9900e914fe682a59170b1/cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f", size = 175328 }, - { url = "https://files.pythonhosted.org/packages/bb/92/882c2d30831744296ce713f0feb4c1cd30f346ef747b530b5318715cc367/cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25", size = 185650 }, - { url = "https://files.pythonhosted.org/packages/9f/2c/98ece204b9d35a7366b5b2c6539c350313ca13932143e79dc133ba757104/cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad", size = 180687 }, - { url = "https://files.pythonhosted.org/packages/3e/61/c768e4d548bfa607abcda77423448df8c471f25dbe64fb2ef6d555eae006/cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9", size = 188773 }, - { url = "https://files.pythonhosted.org/packages/2c/ea/5f76bce7cf6fcd0ab1a1058b5af899bfbef198bea4d5686da88471ea0336/cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d", size = 185013 }, - { url = "https://files.pythonhosted.org/packages/be/b4/c56878d0d1755cf9caa54ba71e5d049479c52f9e4afc230f06822162ab2f/cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c", size = 221593 }, - { url = "https://files.pythonhosted.org/packages/e0/0d/eb704606dfe8033e7128df5e90fee946bbcb64a04fcdaa97321309004000/cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8", size = 209354 }, - { url = "https://files.pythonhosted.org/packages/d8/19/3c435d727b368ca475fb8742ab97c9cb13a0de600ce86f62eab7fa3eea60/cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc", size = 208480 }, - { url = "https://files.pythonhosted.org/packages/d0/44/681604464ed9541673e486521497406fadcc15b5217c3e326b061696899a/cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592", size = 221584 }, - { url = "https://files.pythonhosted.org/packages/25/8e/342a504ff018a2825d395d44d63a767dd8ebc927ebda557fecdaca3ac33a/cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512", size = 224443 }, - { url = "https://files.pythonhosted.org/packages/e1/5e/b666bacbbc60fbf415ba9988324a132c9a7a0448a9a8f125074671c0f2c3/cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4", size = 223437 }, - { url = "https://files.pythonhosted.org/packages/a0/1d/ec1a60bd1a10daa292d3cd6bb0b359a81607154fb8165f3ec95fe003b85c/cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e", size = 180487 }, - { url = "https://files.pythonhosted.org/packages/bf/41/4c1168c74fac325c0c8156f04b6749c8b6a8f405bbf91413ba088359f60d/cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6", size = 191726 }, - { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195 }, - { url = "https://files.pythonhosted.org/packages/c0/cc/08ed5a43f2996a16b462f64a7055c6e962803534924b9b2f1371d8c00b7b/cffi-2.0.0-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf", size = 184288 }, - { url = "https://files.pythonhosted.org/packages/3d/de/38d9726324e127f727b4ecc376bc85e505bfe61ef130eaf3f290c6847dd4/cffi-2.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:de8dad4425a6ca6e4e5e297b27b5c824ecc7581910bf9aee86cb6835e6812aa7", size = 180509 }, - { url = "https://files.pythonhosted.org/packages/9b/13/c92e36358fbcc39cf0962e83223c9522154ee8630e1df7c0b3a39a8124e2/cffi-2.0.0-cp39-cp39-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:4647afc2f90d1ddd33441e5b0e85b16b12ddec4fca55f0d9671fef036ecca27c", size = 208813 }, - { url = "https://files.pythonhosted.org/packages/15/12/a7a79bd0df4c3bff744b2d7e52cc1b68d5e7e427b384252c42366dc1ecbc/cffi-2.0.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3f4d46d8b35698056ec29bca21546e1551a205058ae1a181d871e278b0b28165", size = 216498 }, - { url = "https://files.pythonhosted.org/packages/a3/ad/5c51c1c7600bdd7ed9a24a203ec255dccdd0ebf4527f7b922a0bde2fb6ed/cffi-2.0.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:e6e73b9e02893c764e7e8d5bb5ce277f1a009cd5243f8228f75f842bf937c534", size = 203243 }, - { url = "https://files.pythonhosted.org/packages/32/f2/81b63e288295928739d715d00952c8c6034cb6c6a516b17d37e0c8be5600/cffi-2.0.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:cb527a79772e5ef98fb1d700678fe031e353e765d1ca2d409c92263c6d43e09f", size = 203158 }, - { url = "https://files.pythonhosted.org/packages/1f/74/cc4096ce66f5939042ae094e2e96f53426a979864aa1f96a621ad128be27/cffi-2.0.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:61d028e90346df14fedc3d1e5441df818d095f3b87d286825dfcbd6459b7ef63", size = 216548 }, - { url = "https://files.pythonhosted.org/packages/e8/be/f6424d1dc46b1091ffcc8964fa7c0ab0cd36839dd2761b49c90481a6ba1b/cffi-2.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0f6084a0ea23d05d20c3edcda20c3d006f9b6f3fefeac38f59262e10cef47ee2", size = 218897 }, - { url = "https://files.pythonhosted.org/packages/f7/e0/dda537c2309817edf60109e39265f24f24aa7f050767e22c98c53fe7f48b/cffi-2.0.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1cd13c99ce269b3ed80b417dcd591415d3372bcac067009b6e0f59c7d4015e65", size = 211249 }, - { url = "https://files.pythonhosted.org/packages/2b/e7/7c769804eb75e4c4b35e658dba01de1640a351a9653c3d49ca89d16ccc91/cffi-2.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:89472c9762729b5ae1ad974b777416bfda4ac5642423fa93bd57a09204712322", size = 218041 }, - { url = "https://files.pythonhosted.org/packages/aa/d9/6218d78f920dcd7507fc16a766b5ef8f3b913cc7aa938e7fc80b9978d089/cffi-2.0.0-cp39-cp39-win32.whl", hash = "sha256:2081580ebb843f759b9f617314a24ed5738c51d2aee65d31e02f6f7a2b97707a", size = 172138 }, - { url = "https://files.pythonhosted.org/packages/54/8f/a1e836f82d8e32a97e6b29cc8f641779181ac7363734f12df27db803ebda/cffi-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9", size = 182794 }, -] - -[[package]] -name = "cfgv" -version = "3.4.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/11/74/539e56497d9bd1d484fd863dd69cbbfa653cd2aa27abfe35653494d85e94/cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560", size = 7114 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2456f06955289ca770a5dbd5fd267374/cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", size = 7249 }, -] - -[[package]] -name = "cfgv" -version = "3.5.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] -sdist = { url = "https://files.pythonhosted.org/packages/4e/b5/721b8799b04bf9afe054a3899c6cf4e880fcf8563cc71c15610242490a0c/cfgv-3.5.0.tar.gz", hash = "sha256:d5b1034354820651caa73ede66a6294d6e95c1b00acc5e9b098e917404669132", size = 7334 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl", hash = "sha256:a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0", size = 7445 }, -] - -[[package]] -name = "chardet" -version = "5.2.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/f7b6ab21ec75897ed80c17d79b15951a719226b9fababf1e40ea74d69079/chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7", size = 2069618 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970", size = 199385 }, -] - -[[package]] -name = "charset-normalizer" -version = "3.4.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7b/60/e3bec1881450851b087e301bedc3daa9377a4d45f1c26aa90b0b235e38aa/charset_normalizer-3.4.6.tar.gz", hash = "sha256:1ae6b62897110aa7c79ea2f5dd38d1abca6db663687c0b1ad9aed6f6bae3d9d6", size = 143363 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e6/8c/2c56124c6dc53a774d435f985b5973bc592f42d437be58c0c92d65ae7296/charset_normalizer-3.4.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2e1d8ca8611099001949d1cdfaefc510cf0f212484fe7c565f735b68c78c3c95", size = 298751 }, - { url = "https://files.pythonhosted.org/packages/86/2a/2a7db6b314b966a3bcad8c731c0719c60b931b931de7ae9f34b2839289ee/charset_normalizer-3.4.6-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e25369dc110d58ddf29b949377a93e0716d72a24f62bad72b2b39f155949c1fd", size = 200027 }, - { url = "https://files.pythonhosted.org/packages/68/f2/0fe775c74ae25e2a3b07b01538fc162737b3e3f795bada3bc26f4d4d495c/charset_normalizer-3.4.6-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:259695e2ccc253feb2a016303543d691825e920917e31f894ca1a687982b1de4", size = 220741 }, - { url = "https://files.pythonhosted.org/packages/10/98/8085596e41f00b27dd6aa1e68413d1ddda7e605f34dd546833c61fddd709/charset_normalizer-3.4.6-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:dda86aba335c902b6149a02a55b38e96287157e609200811837678214ba2b1db", size = 215802 }, - { url = "https://files.pythonhosted.org/packages/fd/ce/865e4e09b041bad659d682bbd98b47fb490b8e124f9398c9448065f64fee/charset_normalizer-3.4.6-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:51fb3c322c81d20567019778cb5a4a6f2dc1c200b886bc0d636238e364848c89", size = 207908 }, - { url = "https://files.pythonhosted.org/packages/a8/54/8c757f1f7349262898c2f169e0d562b39dcb977503f18fdf0814e923db78/charset_normalizer-3.4.6-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:4482481cb0572180b6fd976a4d5c72a30263e98564da68b86ec91f0fe35e8565", size = 194357 }, - { url = "https://files.pythonhosted.org/packages/6f/29/e88f2fac9218907fc7a70722b393d1bbe8334c61fe9c46640dba349b6e66/charset_normalizer-3.4.6-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:39f5068d35621da2881271e5c3205125cc456f54e9030d3f723288c873a71bf9", size = 205610 }, - { url = "https://files.pythonhosted.org/packages/4c/c5/21d7bb0cb415287178450171d130bed9d664211fdd59731ed2c34267b07d/charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8bea55c4eef25b0b19a0337dc4e3f9a15b00d569c77211fa8cde38684f234fb7", size = 203512 }, - { url = "https://files.pythonhosted.org/packages/a4/be/ce52f3c7fdb35cc987ad38a53ebcef52eec498f4fb6c66ecfe62cfe57ba2/charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:f0cdaecd4c953bfae0b6bb64910aaaca5a424ad9c72d85cb88417bb9814f7550", size = 195398 }, - { url = "https://files.pythonhosted.org/packages/81/a0/3ab5dd39d4859a3555e5dadfc8a9fa7f8352f8c183d1a65c90264517da0e/charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:150b8ce8e830eb7ccb029ec9ca36022f756986aaaa7956aad6d9ec90089338c0", size = 221772 }, - { url = "https://files.pythonhosted.org/packages/04/6e/6a4e41a97ba6b2fa87f849c41e4d229449a586be85053c4d90135fe82d26/charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:e68c14b04827dd76dcbd1aeea9e604e3e4b78322d8faf2f8132c7138efa340a8", size = 205759 }, - { url = "https://files.pythonhosted.org/packages/db/3b/34a712a5ee64a6957bf355b01dc17b12de457638d436fdb05d01e463cd1c/charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:3778fd7d7cd04ae8f54651f4a7a0bd6e39a0cf20f801720a4c21d80e9b7ad6b0", size = 216938 }, - { url = "https://files.pythonhosted.org/packages/cb/05/5bd1e12da9ab18790af05c61aafd01a60f489778179b621ac2a305243c62/charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:dad6e0f2e481fffdcf776d10ebee25e0ef89f16d691f1e5dee4b586375fdc64b", size = 210138 }, - { url = "https://files.pythonhosted.org/packages/bd/8e/3cb9e2d998ff6b21c0a1860343cb7b83eba9cdb66b91410e18fc4969d6ab/charset_normalizer-3.4.6-cp310-cp310-win32.whl", hash = "sha256:74a2e659c7ecbc73562e2a15e05039f1e22c75b7c7618b4b574a3ea9118d1557", size = 144137 }, - { url = "https://files.pythonhosted.org/packages/d8/8f/78f5489ffadb0db3eb7aff53d31c24531d33eb545f0c6f6567c25f49a5ff/charset_normalizer-3.4.6-cp310-cp310-win_amd64.whl", hash = "sha256:aa9cccf4a44b9b62d8ba8b4dd06c649ba683e4bf04eea606d2e94cfc2d6ff4d6", size = 154244 }, - { url = "https://files.pythonhosted.org/packages/e4/74/e472659dffb0cadb2f411282d2d76c60da1fc94076d7fffed4ae8a93ec01/charset_normalizer-3.4.6-cp310-cp310-win_arm64.whl", hash = "sha256:e985a16ff513596f217cee86c21371b8cd011c0f6f056d0920aa2d926c544058", size = 143312 }, - { url = "https://files.pythonhosted.org/packages/62/28/ff6f234e628a2de61c458be2779cb182bc03f6eec12200d4a525bbfc9741/charset_normalizer-3.4.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:82060f995ab5003a2d6e0f4ad29065b7672b6593c8c63559beefe5b443242c3e", size = 293582 }, - { url = "https://files.pythonhosted.org/packages/1c/b7/b1a117e5385cbdb3205f6055403c2a2a220c5ea80b8716c324eaf75c5c95/charset_normalizer-3.4.6-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:60c74963d8350241a79cb8feea80e54d518f72c26db618862a8f53e5023deaf9", size = 197240 }, - { url = "https://files.pythonhosted.org/packages/a1/5f/2574f0f09f3c3bc1b2f992e20bce6546cb1f17e111c5be07308dc5427956/charset_normalizer-3.4.6-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f6e4333fb15c83f7d1482a76d45a0818897b3d33f00efd215528ff7c51b8e35d", size = 217363 }, - { url = "https://files.pythonhosted.org/packages/4a/d1/0ae20ad77bc949ddd39b51bf383b6ca932f2916074c95cad34ae465ab71f/charset_normalizer-3.4.6-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:bc72863f4d9aba2e8fd9085e63548a324ba706d2ea2c83b260da08a59b9482de", size = 212994 }, - { url = "https://files.pythonhosted.org/packages/60/ac/3233d262a310c1b12633536a07cde5ddd16985e6e7e238e9f3f9423d8eb9/charset_normalizer-3.4.6-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9cc4fc6c196d6a8b76629a70ddfcd4635a6898756e2d9cac5565cf0654605d73", size = 204697 }, - { url = "https://files.pythonhosted.org/packages/25/3c/8a18fc411f085b82303cfb7154eed5bd49c77035eb7608d049468b53f87c/charset_normalizer-3.4.6-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:0c173ce3a681f309f31b87125fecec7a5d1347261ea11ebbb856fa6006b23c8c", size = 191673 }, - { url = "https://files.pythonhosted.org/packages/ff/a7/11cfe61d6c5c5c7438d6ba40919d0306ed83c9ab957f3d4da2277ff67836/charset_normalizer-3.4.6-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c907cdc8109f6c619e6254212e794d6548373cc40e1ec75e6e3823d9135d29cc", size = 201120 }, - { url = "https://files.pythonhosted.org/packages/b5/10/cf491fa1abd47c02f69687046b896c950b92b6cd7337a27e6548adbec8e4/charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:404a1e552cf5b675a87f0651f8b79f5f1e6fd100ee88dc612f89aa16abd4486f", size = 200911 }, - { url = "https://files.pythonhosted.org/packages/28/70/039796160b48b18ed466fde0af84c1b090c4e288fae26cd674ad04a2d703/charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:e3c701e954abf6fc03a49f7c579cc80c2c6cc52525340ca3186c41d3f33482ef", size = 192516 }, - { url = "https://files.pythonhosted.org/packages/ff/34/c56f3223393d6ff3124b9e78f7de738047c2d6bc40a4f16ac0c9d7a1cb3c/charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:7a6967aaf043bceabab5412ed6bd6bd26603dae84d5cb75bf8d9a74a4959d398", size = 218795 }, - { url = "https://files.pythonhosted.org/packages/e8/3b/ce2d4f86c5282191a041fdc5a4ce18f1c6bd40a5bd1f74cf8625f08d51c1/charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:5feb91325bbceade6afab43eb3b508c63ee53579fe896c77137ded51c6b6958e", size = 201833 }, - { url = "https://files.pythonhosted.org/packages/3b/9b/b6a9f76b0fd7c5b5ec58b228ff7e85095370282150f0bd50b3126f5506d6/charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:f820f24b09e3e779fe84c3c456cb4108a7aa639b0d1f02c28046e11bfcd088ed", size = 213920 }, - { url = "https://files.pythonhosted.org/packages/ae/98/7bc23513a33d8172365ed30ee3a3b3fe1ece14a395e5fc94129541fc6003/charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b35b200d6a71b9839a46b9b7fff66b6638bb52fc9658aa58796b0326595d3021", size = 206951 }, - { url = "https://files.pythonhosted.org/packages/32/73/c0b86f3d1458468e11aec870e6b3feac931facbe105a894b552b0e518e79/charset_normalizer-3.4.6-cp311-cp311-win32.whl", hash = "sha256:9ca4c0b502ab399ef89248a2c84c54954f77a070f28e546a85e91da627d1301e", size = 143703 }, - { url = "https://files.pythonhosted.org/packages/c6/e3/76f2facfe8eddee0bbd38d2594e709033338eae44ebf1738bcefe0a06185/charset_normalizer-3.4.6-cp311-cp311-win_amd64.whl", hash = "sha256:a9e68c9d88823b274cf1e72f28cb5dc89c990edf430b0bfd3e2fb0785bfeabf4", size = 153857 }, - { url = "https://files.pythonhosted.org/packages/e2/dc/9abe19c9b27e6cd3636036b9d1b387b78c40dedbf0b47f9366737684b4b0/charset_normalizer-3.4.6-cp311-cp311-win_arm64.whl", hash = "sha256:97d0235baafca5f2b09cf332cc275f021e694e8362c6bb9c96fc9a0eb74fc316", size = 142751 }, - { url = "https://files.pythonhosted.org/packages/e5/62/c0815c992c9545347aeea7859b50dc9044d147e2e7278329c6e02ac9a616/charset_normalizer-3.4.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:2ef7fedc7a6ecbe99969cd09632516738a97eeb8bd7258bf8a0f23114c057dab", size = 295154 }, - { url = "https://files.pythonhosted.org/packages/a8/37/bdca6613c2e3c58c7421891d80cc3efa1d32e882f7c4a7ee6039c3fc951a/charset_normalizer-3.4.6-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a4ea868bc28109052790eb2b52a9ab33f3aa7adc02f96673526ff47419490e21", size = 199191 }, - { url = "https://files.pythonhosted.org/packages/6c/92/9934d1bbd69f7f398b38c5dae1cbf9cc672e7c34a4adf7b17c0a9c17d15d/charset_normalizer-3.4.6-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:836ab36280f21fc1a03c99cd05c6b7af70d2697e374c7af0b61ed271401a72a2", size = 218674 }, - { url = "https://files.pythonhosted.org/packages/af/90/25f6ab406659286be929fd89ab0e78e38aa183fc374e03aa3c12d730af8a/charset_normalizer-3.4.6-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f1ce721c8a7dfec21fcbdfe04e8f68174183cf4e8188e0645e92aa23985c57ff", size = 215259 }, - { url = "https://files.pythonhosted.org/packages/4e/ef/79a463eb0fff7f96afa04c1d4c51f8fc85426f918db467854bfb6a569ce3/charset_normalizer-3.4.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e28d62a8fc7a1fa411c43bd65e346f3bce9716dc51b897fbe930c5987b402d5", size = 207276 }, - { url = "https://files.pythonhosted.org/packages/f7/72/d0426afec4b71dc159fa6b4e68f868cd5a3ecd918fec5813a15d292a7d10/charset_normalizer-3.4.6-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:530d548084c4a9f7a16ed4a294d459b4f229db50df689bfe92027452452943a0", size = 195161 }, - { url = "https://files.pythonhosted.org/packages/bf/18/c82b06a68bfcb6ce55e508225d210c7e6a4ea122bfc0748892f3dc4e8e11/charset_normalizer-3.4.6-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:30f445ae60aad5e1f8bdbb3108e39f6fbc09f4ea16c815c66578878325f8f15a", size = 203452 }, - { url = "https://files.pythonhosted.org/packages/44/d6/0c25979b92f8adafdbb946160348d8d44aa60ce99afdc27df524379875cb/charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ac2393c73378fea4e52aa56285a3d64be50f1a12395afef9cce47772f60334c2", size = 202272 }, - { url = "https://files.pythonhosted.org/packages/2e/3d/7fea3e8fe84136bebbac715dd1221cc25c173c57a699c030ab9b8900cbb7/charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:90ca27cd8da8118b18a52d5f547859cc1f8354a00cd1e8e5120df3e30d6279e5", size = 195622 }, - { url = "https://files.pythonhosted.org/packages/57/8a/d6f7fd5cb96c58ef2f681424fbca01264461336d2a7fc875e4446b1f1346/charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8e5a94886bedca0f9b78fecd6afb6629142fd2605aa70a125d49f4edc6037ee6", size = 220056 }, - { url = "https://files.pythonhosted.org/packages/16/50/478cdda782c8c9c3fb5da3cc72dd7f331f031e7f1363a893cdd6ca0f8de0/charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:695f5c2823691a25f17bc5d5ffe79fa90972cc34b002ac6c843bb8a1720e950d", size = 203751 }, - { url = "https://files.pythonhosted.org/packages/75/fc/cc2fcac943939c8e4d8791abfa139f685e5150cae9f94b60f12520feaa9b/charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:231d4da14bcd9301310faf492051bee27df11f2bc7549bc0bb41fef11b82daa2", size = 216563 }, - { url = "https://files.pythonhosted.org/packages/a8/b7/a4add1d9a5f68f3d037261aecca83abdb0ab15960a3591d340e829b37298/charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a056d1ad2633548ca18ffa2f85c202cfb48b68615129143915b8dc72a806a923", size = 209265 }, - { url = "https://files.pythonhosted.org/packages/6c/18/c094561b5d64a24277707698e54b7f67bd17a4f857bbfbb1072bba07c8bf/charset_normalizer-3.4.6-cp312-cp312-win32.whl", hash = "sha256:c2274ca724536f173122f36c98ce188fd24ce3dad886ec2b7af859518ce008a4", size = 144229 }, - { url = "https://files.pythonhosted.org/packages/ab/20/0567efb3a8fd481b8f34f739ebddc098ed062a59fed41a8d193a61939e8f/charset_normalizer-3.4.6-cp312-cp312-win_amd64.whl", hash = "sha256:c8ae56368f8cc97c7e40a7ee18e1cedaf8e780cd8bc5ed5ac8b81f238614facb", size = 154277 }, - { url = "https://files.pythonhosted.org/packages/15/57/28d79b44b51933119e21f65479d0864a8d5893e494cf5daab15df0247c17/charset_normalizer-3.4.6-cp312-cp312-win_arm64.whl", hash = "sha256:899d28f422116b08be5118ef350c292b36fc15ec2daeb9ea987c89281c7bb5c4", size = 142817 }, - { url = "https://files.pythonhosted.org/packages/1e/1d/4fdabeef4e231153b6ed7567602f3b68265ec4e5b76d6024cf647d43d981/charset_normalizer-3.4.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:11afb56037cbc4b1555a34dd69151e8e069bee82e613a73bef6e714ce733585f", size = 294823 }, - { url = "https://files.pythonhosted.org/packages/47/7b/20e809b89c69d37be748d98e84dce6820bf663cf19cf6b942c951a3e8f41/charset_normalizer-3.4.6-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:423fb7e748a08f854a08a222b983f4df1912b1daedce51a72bd24fe8f26a1843", size = 198527 }, - { url = "https://files.pythonhosted.org/packages/37/a6/4f8d27527d59c039dce6f7622593cdcd3d70a8504d87d09eb11e9fdc6062/charset_normalizer-3.4.6-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d73beaac5e90173ac3deb9928a74763a6d230f494e4bfb422c217a0ad8e629bf", size = 218388 }, - { url = "https://files.pythonhosted.org/packages/f6/9b/4770ccb3e491a9bacf1c46cc8b812214fe367c86a96353ccc6daf87b01ec/charset_normalizer-3.4.6-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d60377dce4511655582e300dc1e5a5f24ba0cb229005a1d5c8d0cb72bb758ab8", size = 214563 }, - { url = "https://files.pythonhosted.org/packages/2b/58/a199d245894b12db0b957d627516c78e055adc3a0d978bc7f65ddaf7c399/charset_normalizer-3.4.6-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:530e8cebeea0d76bdcf93357aa5e41336f48c3dc709ac52da2bb167c5b8271d9", size = 206587 }, - { url = "https://files.pythonhosted.org/packages/7e/70/3def227f1ec56f5c69dfc8392b8bd63b11a18ca8178d9211d7cc5e5e4f27/charset_normalizer-3.4.6-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:a26611d9987b230566f24a0a125f17fe0de6a6aff9f25c9f564aaa2721a5fb88", size = 194724 }, - { url = "https://files.pythonhosted.org/packages/58/ab/9318352e220c05efd31c2779a23b50969dc94b985a2efa643ed9077bfca5/charset_normalizer-3.4.6-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:34315ff4fc374b285ad7f4a0bf7dcbfe769e1b104230d40f49f700d4ab6bbd84", size = 202956 }, - { url = "https://files.pythonhosted.org/packages/75/13/f3550a3ac25b70f87ac98c40d3199a8503676c2f1620efbf8d42095cfc40/charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5f8ddd609f9e1af8c7bd6e2aca279c931aefecd148a14402d4e368f3171769fd", size = 201923 }, - { url = "https://files.pythonhosted.org/packages/1b/db/c5c643b912740b45e8eec21de1bbab8e7fc085944d37e1e709d3dcd9d72f/charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:80d0a5615143c0b3225e5e3ef22c8d5d51f3f72ce0ea6fb84c943546c7b25b6c", size = 195366 }, - { url = "https://files.pythonhosted.org/packages/5a/67/3b1c62744f9b2448443e0eb160d8b001c849ec3fef591e012eda6484787c/charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:92734d4d8d187a354a556626c221cd1a892a4e0802ccb2af432a1d85ec012194", size = 219752 }, - { url = "https://files.pythonhosted.org/packages/f6/98/32ffbaf7f0366ffb0445930b87d103f6b406bc2c271563644bde8a2b1093/charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:613f19aa6e082cf96e17e3ffd89383343d0d589abda756b7764cf78361fd41dc", size = 203296 }, - { url = "https://files.pythonhosted.org/packages/41/12/5d308c1bbe60cabb0c5ef511574a647067e2a1f631bc8634fcafaccd8293/charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:2b1a63e8224e401cafe7739f77efd3f9e7f5f2026bda4aead8e59afab537784f", size = 215956 }, - { url = "https://files.pythonhosted.org/packages/53/e9/5f85f6c5e20669dbe56b165c67b0260547dea97dba7e187938833d791687/charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6cceb5473417d28edd20c6c984ab6fee6c6267d38d906823ebfe20b03d607dc2", size = 208652 }, - { url = "https://files.pythonhosted.org/packages/f1/11/897052ea6af56df3eef3ca94edafee410ca699ca0c7b87960ad19932c55e/charset_normalizer-3.4.6-cp313-cp313-win32.whl", hash = "sha256:d7de2637729c67d67cf87614b566626057e95c303bc0a55ffe391f5205e7003d", size = 143940 }, - { url = "https://files.pythonhosted.org/packages/a1/5c/724b6b363603e419829f561c854b87ed7c7e31231a7908708ac086cdf3e2/charset_normalizer-3.4.6-cp313-cp313-win_amd64.whl", hash = "sha256:572d7c822caf521f0525ba1bce1a622a0b85cf47ffbdae6c9c19e3b5ac3c4389", size = 154101 }, - { url = "https://files.pythonhosted.org/packages/01/a5/7abf15b4c0968e47020f9ca0935fb3274deb87cb288cd187cad92e8cdffd/charset_normalizer-3.4.6-cp313-cp313-win_arm64.whl", hash = "sha256:a4474d924a47185a06411e0064b803c68be044be2d60e50e8bddcc2649957c1f", size = 143109 }, - { url = "https://files.pythonhosted.org/packages/25/6f/ffe1e1259f384594063ea1869bfb6be5cdb8bc81020fc36c3636bc8302a1/charset_normalizer-3.4.6-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:9cc6e6d9e571d2f863fa77700701dae73ed5f78881efc8b3f9a4398772ff53e8", size = 294458 }, - { url = "https://files.pythonhosted.org/packages/56/60/09bb6c13a8c1016c2ed5c6a6488e4ffef506461aa5161662bd7636936fb1/charset_normalizer-3.4.6-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ef5960d965e67165d75b7c7ffc60a83ec5abfc5c11b764ec13ea54fbef8b4421", size = 199277 }, - { url = "https://files.pythonhosted.org/packages/00/50/dcfbb72a5138bbefdc3332e8d81a23494bf67998b4b100703fd15fa52d81/charset_normalizer-3.4.6-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b3694e3f87f8ac7ce279d4355645b3c878d24d1424581b46282f24b92f5a4ae2", size = 218758 }, - { url = "https://files.pythonhosted.org/packages/03/b3/d79a9a191bb75f5aa81f3aaaa387ef29ce7cb7a9e5074ba8ea095cc073c2/charset_normalizer-3.4.6-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5d11595abf8dd942a77883a39d81433739b287b6aa71620f15164f8096221b30", size = 215299 }, - { url = "https://files.pythonhosted.org/packages/76/7e/bc8911719f7084f72fd545f647601ea3532363927f807d296a8c88a62c0d/charset_normalizer-3.4.6-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7bda6eebafd42133efdca535b04ccb338ab29467b3f7bf79569883676fc628db", size = 206811 }, - { url = "https://files.pythonhosted.org/packages/e2/40/c430b969d41dda0c465aa36cc7c2c068afb67177bef50905ac371b28ccc7/charset_normalizer-3.4.6-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:bbc8c8650c6e51041ad1be191742b8b421d05bbd3410f43fa2a00c8db87678e8", size = 193706 }, - { url = "https://files.pythonhosted.org/packages/48/15/e35e0590af254f7df984de1323640ef375df5761f615b6225ba8deb9799a/charset_normalizer-3.4.6-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:22c6f0c2fbc31e76c3b8a86fba1a56eda6166e238c29cdd3d14befdb4a4e4815", size = 202706 }, - { url = "https://files.pythonhosted.org/packages/5e/bd/f736f7b9cc5e93a18b794a50346bb16fbfd6b37f99e8f306f7951d27c17c/charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7edbed096e4a4798710ed6bc75dcaa2a21b68b6c356553ac4823c3658d53743a", size = 202497 }, - { url = "https://files.pythonhosted.org/packages/9d/ba/2cc9e3e7dfdf7760a6ed8da7446d22536f3d0ce114ac63dee2a5a3599e62/charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:7f9019c9cb613f084481bd6a100b12e1547cf2efe362d873c2e31e4035a6fa43", size = 193511 }, - { url = "https://files.pythonhosted.org/packages/9e/cb/5be49b5f776e5613be07298c80e1b02a2d900f7a7de807230595c85a8b2e/charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:58c948d0d086229efc484fe2f30c2d382c86720f55cd9bc33591774348ad44e0", size = 220133 }, - { url = "https://files.pythonhosted.org/packages/83/43/99f1b5dad345accb322c80c7821071554f791a95ee50c1c90041c157ae99/charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:419a9d91bd238052642a51938af8ac05da5b3343becde08d5cdeab9046df9ee1", size = 203035 }, - { url = "https://files.pythonhosted.org/packages/87/9a/62c2cb6a531483b55dddff1a68b3d891a8b498f3ca555fbcf2978e804d9d/charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:5273b9f0b5835ff0350c0828faea623c68bfa65b792720c453e22b25cc72930f", size = 216321 }, - { url = "https://files.pythonhosted.org/packages/6e/79/94a010ff81e3aec7c293eb82c28f930918e517bc144c9906a060844462eb/charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:0e901eb1049fdb80f5bd11ed5ea1e498ec423102f7a9b9e4645d5b8204ff2815", size = 208973 }, - { url = "https://files.pythonhosted.org/packages/2a/57/4ecff6d4ec8585342f0c71bc03efaa99cb7468f7c91a57b105bcd561cea8/charset_normalizer-3.4.6-cp314-cp314-win32.whl", hash = "sha256:b4ff1d35e8c5bd078be89349b6f3a845128e685e751b6ea1169cf2160b344c4d", size = 144610 }, - { url = "https://files.pythonhosted.org/packages/80/94/8434a02d9d7f168c25767c64671fead8d599744a05d6a6c877144c754246/charset_normalizer-3.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:74119174722c4349af9708993118581686f343adc1c8c9c007d59be90d077f3f", size = 154962 }, - { url = "https://files.pythonhosted.org/packages/46/4c/48f2cdbfd923026503dfd67ccea45c94fd8fe988d9056b468579c66ed62b/charset_normalizer-3.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:e5bcc1a1ae744e0bb59641171ae53743760130600da8db48cbb6e4918e186e4e", size = 143595 }, - { url = "https://files.pythonhosted.org/packages/31/93/8878be7569f87b14f1d52032946131bcb6ebbd8af3e20446bc04053dc3f1/charset_normalizer-3.4.6-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:ad8faf8df23f0378c6d527d8b0b15ea4a2e23c89376877c598c4870d1b2c7866", size = 314828 }, - { url = "https://files.pythonhosted.org/packages/06/b6/fae511ca98aac69ecc35cde828b0a3d146325dd03d99655ad38fc2cc3293/charset_normalizer-3.4.6-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f5ea69428fa1b49573eef0cc44a1d43bebd45ad0c611eb7d7eac760c7ae771bc", size = 208138 }, - { url = "https://files.pythonhosted.org/packages/54/57/64caf6e1bf07274a1e0b7c160a55ee9e8c9ec32c46846ce59b9c333f7008/charset_normalizer-3.4.6-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:06a7e86163334edfc5d20fe104db92fcd666e5a5df0977cb5680a506fe26cc8e", size = 224679 }, - { url = "https://files.pythonhosted.org/packages/aa/cb/9ff5a25b9273ef160861b41f6937f86fae18b0792fe0a8e75e06acb08f1d/charset_normalizer-3.4.6-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e1f6e2f00a6b8edb562826e4632e26d063ac10307e80f7461f7de3ad8ef3f077", size = 223475 }, - { url = "https://files.pythonhosted.org/packages/fc/97/440635fc093b8d7347502a377031f9605a1039c958f3cd18dcacffb37743/charset_normalizer-3.4.6-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:95b52c68d64c1878818687a473a10547b3292e82b6f6fe483808fb1468e2f52f", size = 215230 }, - { url = "https://files.pythonhosted.org/packages/cd/24/afff630feb571a13f07c8539fbb502d2ab494019492aaffc78ef41f1d1d0/charset_normalizer-3.4.6-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:7504e9b7dc05f99a9bbb4525c67a2c155073b44d720470a148b34166a69c054e", size = 199045 }, - { url = "https://files.pythonhosted.org/packages/e5/17/d1399ecdaf7e0498c327433e7eefdd862b41236a7e484355b8e0e5ebd64b/charset_normalizer-3.4.6-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:172985e4ff804a7ad08eebec0a1640ece87ba5041d565fff23c8f99c1f389484", size = 211658 }, - { url = "https://files.pythonhosted.org/packages/b5/38/16baa0affb957b3d880e5ac2144caf3f9d7de7bc4a91842e447fbb5e8b67/charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:4be9f4830ba8741527693848403e2c457c16e499100963ec711b1c6f2049b7c7", size = 210769 }, - { url = "https://files.pythonhosted.org/packages/05/34/c531bc6ac4c21da9ddfddb3107be2287188b3ea4b53b70fc58f2a77ac8d8/charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:79090741d842f564b1b2827c0b82d846405b744d31e84f18d7a7b41c20e473ff", size = 201328 }, - { url = "https://files.pythonhosted.org/packages/fa/73/a5a1e9ca5f234519c1953608a03fe109c306b97fdfb25f09182babad51a7/charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:87725cfb1a4f1f8c2fc9890ae2f42094120f4b44db9360be5d99a4c6b0e03a9e", size = 225302 }, - { url = "https://files.pythonhosted.org/packages/ba/f6/cd782923d112d296294dea4bcc7af5a7ae0f86ab79f8fefbda5526b6cfc0/charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:fcce033e4021347d80ed9c66dcf1e7b1546319834b74445f561d2e2221de5659", size = 211127 }, - { url = "https://files.pythonhosted.org/packages/0e/c5/0b6898950627af7d6103a449b22320372c24c6feda91aa24e201a478d161/charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:ca0276464d148c72defa8bb4390cce01b4a0e425f3b50d1435aa6d7a18107602", size = 222840 }, - { url = "https://files.pythonhosted.org/packages/7d/25/c4bba773bef442cbdc06111d40daa3de5050a676fa26e85090fc54dd12f0/charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:197c1a244a274bb016dd8b79204850144ef77fe81c5b797dc389327adb552407", size = 216890 }, - { url = "https://files.pythonhosted.org/packages/35/1a/05dacadb0978da72ee287b0143097db12f2e7e8d3ffc4647da07a383b0b7/charset_normalizer-3.4.6-cp314-cp314t-win32.whl", hash = "sha256:2a24157fa36980478dd1770b585c0f30d19e18f4fb0c47c13aa568f871718579", size = 155379 }, - { url = "https://files.pythonhosted.org/packages/5d/7a/d269d834cb3a76291651256f3b9a5945e81d0a49ab9f4a498964e83c0416/charset_normalizer-3.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:cd5e2801c89992ed8c0a3f0293ae83c159a60d9a5d685005383ef4caca77f2c4", size = 169043 }, - { url = "https://files.pythonhosted.org/packages/23/06/28b29fba521a37a8932c6a84192175c34d49f84a6d4773fa63d05f9aff22/charset_normalizer-3.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:47955475ac79cc504ef2704b192364e51d0d473ad452caedd0002605f780101c", size = 148523 }, - { url = "https://files.pythonhosted.org/packages/41/85/580dbaa12ab31041ed7df59f0bebc8893514fc21da6c05c3a1c1707d118f/charset_normalizer-3.4.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:31215157227939b4fb3d740cd23fe27be0439afef67b785a1eb78a3ae69cba9e", size = 298620 }, - { url = "https://files.pythonhosted.org/packages/67/2c/1e55af3a5e2f52e44396d5c5b731e0ae4f3bb92915ff09a610fb2f4497eb/charset_normalizer-3.4.6-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecbbd45615a6885fe3240eb9db73b9e62518b611850fdf8ab08bd56de7ad2b17", size = 200106 }, - { url = "https://files.pythonhosted.org/packages/10/42/0f2f51a1d16caa45fbf384fd337d4242df1a5b313babee211381d2d39a96/charset_normalizer-3.4.6-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c45a03a4c69820a399f1dda9e1d8fbf3562eda46e7720458180302021b08f778", size = 220539 }, - { url = "https://files.pythonhosted.org/packages/1c/0c/4e10996c740eec0f4ae8afbbbfa25f66e8479c4b6ee9cff1ca366a4f6c04/charset_normalizer-3.4.6-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e8aeb10fcbe92767f0fa69ad5a72deca50d0dca07fbde97848997d778a50c9fe", size = 215821 }, - { url = "https://files.pythonhosted.org/packages/46/73/205ae7644ebb581a7c6fa9c3751e283606e145f0e6f066003c66aafc9973/charset_normalizer-3.4.6-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:54fae94be3d75f3e573c9a1b5402dc593de19377013c9a0e4285e3d402dd3a2a", size = 207917 }, - { url = "https://files.pythonhosted.org/packages/b3/ca/18f7dcf19afdab8097aeb2feb8b3809bb4b6ee356cb720abf5263d79406a/charset_normalizer-3.4.6-cp39-cp39-manylinux_2_31_armv7l.whl", hash = "sha256:2f7fdd9b6e6c529d6a2501a2d36b240109e78a8ceaef5687cfcfa2bbe671d297", size = 194513 }, - { url = "https://files.pythonhosted.org/packages/e4/6a/e7e3e204c8d79832a091e00b24595af1d5d9800d37dc1f67a6b264cc99a6/charset_normalizer-3.4.6-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4d1d02209e06550bdaef34af58e041ad71b88e624f5d825519da3a3308e22687", size = 205612 }, - { url = "https://files.pythonhosted.org/packages/ff/ae/2169ebcea2851c5460c7a21993a0f87028be3c3e60899cb36251e1135cf5/charset_normalizer-3.4.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8bc5f0687d796c05b1e28ab0d38a50e6309906ee09375dd3aff6a9c09dd6e8f4", size = 203519 }, - { url = "https://files.pythonhosted.org/packages/43/a0/6a49a925b9c225fe35dffeac5c76f68996b814c637e9d7213718f96be109/charset_normalizer-3.4.6-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:ee4ec14bc1680d6b0afab9aea2ef27e26d2024f18b24a2d7155a52b60da7e833", size = 195411 }, - { url = "https://files.pythonhosted.org/packages/47/f7/a26b0a18e52b1a0f11f53c2c400ed062f386ac227a64ae4be4c5a64699be/charset_normalizer-3.4.6-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:d1a2ee9c1499fc8f86f4521f27a973c914b211ffa87322f4ee33bb35392da2c5", size = 221653 }, - { url = "https://files.pythonhosted.org/packages/a7/3a/ed1d3b5bb55e3634bd5c31cedbe4fff79d0e5b8d9a062f663a757a07760d/charset_normalizer-3.4.6-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:48696db7f18afb80a068821504296eb0787d9ce239b91ca15059d1d3eaacf13b", size = 205650 }, - { url = "https://files.pythonhosted.org/packages/b1/27/c75819eea5ceeefc49bae329327bb91e81adc346e2a9873d9fdb9e77cde6/charset_normalizer-3.4.6-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4f41da960b196ea355357285ad1316a00099f22d0929fe168343b99b254729c9", size = 216919 }, - { url = "https://files.pythonhosted.org/packages/0f/42/6e91bf8b15f67b7c957091138a36057a083e60703cc27848d5e36ca1eb03/charset_normalizer-3.4.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:802168e03fba8bbc5ce0d866d589e4b1ca751d06edee69f7f3a19c5a9fe6b597", size = 210101 }, - { url = "https://files.pythonhosted.org/packages/99/ff/101af2605e66a7ee59961d7f9e1060df7c92e8ea54208a02ab881422c24e/charset_normalizer-3.4.6-cp39-cp39-win32.whl", hash = "sha256:8761ac29b6c81574724322a554605608a9960769ea83d2c73e396f3df896ad54", size = 144136 }, - { url = "https://files.pythonhosted.org/packages/1d/da/de5942dfbf21f28c19e9202267dabf7bc73f195465d020a3a60054520cc5/charset_normalizer-3.4.6-cp39-cp39-win_amd64.whl", hash = "sha256:1cf0a70018692f85172348fe06d3a4b63f94ecb055e13a00c644d368eb82e5b8", size = 154210 }, - { url = "https://files.pythonhosted.org/packages/06/df/1b780a25b86d22b1d736f6ac883afd38ffdf30ddc18e5dc0e82211f493f1/charset_normalizer-3.4.6-cp39-cp39-win_arm64.whl", hash = "sha256:3516bbb8d42169de9e61b8520cbeeeb716f12f4ecfe3fd30a9919aa16c806ca8", size = 143225 }, - { url = "https://files.pythonhosted.org/packages/2a/68/687187c7e26cb24ccbd88e5069f5ef00eba804d36dde11d99aad0838ab45/charset_normalizer-3.4.6-py3-none-any.whl", hash = "sha256:947cf925bc916d90adba35a64c82aace04fa39b46b52d4630ece166655905a69", size = 61455 }, -] - -[[package]] -name = "colorama" -version = "0.4.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, -] - -[[package]] -name = "comm" -version = "0.2.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4c/13/7d740c5849255756bc17888787313b61fd38a0a8304fc4f073dfc46122aa/comm-0.2.3.tar.gz", hash = "sha256:2dc8048c10962d55d7ad693be1e7045d891b7ce8d999c97963a5e3e99c055971", size = 6319 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl", hash = "sha256:c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417", size = 7294 }, -] - -[[package]] -name = "coverage" -version = "7.10.7" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/51/26/d22c300112504f5f9a9fd2297ce33c35f3d353e4aeb987c8419453b2a7c2/coverage-7.10.7.tar.gz", hash = "sha256:f4ab143ab113be368a3e9b795f9cd7906c5ef407d6173fe9675a902e1fffc239", size = 827704 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/6c/3a3f7a46888e69d18abe3ccc6fe4cb16cccb1e6a2f99698931dafca489e6/coverage-7.10.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fc04cc7a3db33664e0c2d10eb8990ff6b3536f6842c9590ae8da4c614b9ed05a", size = 217987 }, - { url = "https://files.pythonhosted.org/packages/03/94/952d30f180b1a916c11a56f5c22d3535e943aa22430e9e3322447e520e1c/coverage-7.10.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e201e015644e207139f7e2351980feb7040e6f4b2c2978892f3e3789d1c125e5", size = 218388 }, - { url = "https://files.pythonhosted.org/packages/50/2b/9e0cf8ded1e114bcd8b2fd42792b57f1c4e9e4ea1824cde2af93a67305be/coverage-7.10.7-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:240af60539987ced2c399809bd34f7c78e8abe0736af91c3d7d0e795df633d17", size = 245148 }, - { url = "https://files.pythonhosted.org/packages/19/20/d0384ac06a6f908783d9b6aa6135e41b093971499ec488e47279f5b846e6/coverage-7.10.7-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8421e088bc051361b01c4b3a50fd39a4b9133079a2229978d9d30511fd05231b", size = 246958 }, - { url = "https://files.pythonhosted.org/packages/60/83/5c283cff3d41285f8eab897651585db908a909c572bdc014bcfaf8a8b6ae/coverage-7.10.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6be8ed3039ae7f7ac5ce058c308484787c86e8437e72b30bf5e88b8ea10f3c87", size = 248819 }, - { url = "https://files.pythonhosted.org/packages/60/22/02eb98fdc5ff79f423e990d877693e5310ae1eab6cb20ae0b0b9ac45b23b/coverage-7.10.7-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e28299d9f2e889e6d51b1f043f58d5f997c373cc12e6403b90df95b8b047c13e", size = 245754 }, - { url = "https://files.pythonhosted.org/packages/b4/bc/25c83bcf3ad141b32cd7dc45485ef3c01a776ca3aa8ef0a93e77e8b5bc43/coverage-7.10.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c4e16bd7761c5e454f4efd36f345286d6f7c5fa111623c355691e2755cae3b9e", size = 246860 }, - { url = "https://files.pythonhosted.org/packages/3c/b7/95574702888b58c0928a6e982038c596f9c34d52c5e5107f1eef729399b5/coverage-7.10.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b1c81d0e5e160651879755c9c675b974276f135558cf4ba79fee7b8413a515df", size = 244877 }, - { url = "https://files.pythonhosted.org/packages/47/b6/40095c185f235e085df0e0b158f6bd68cc6e1d80ba6c7721dc81d97ec318/coverage-7.10.7-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:606cc265adc9aaedcc84f1f064f0e8736bc45814f15a357e30fca7ecc01504e0", size = 245108 }, - { url = "https://files.pythonhosted.org/packages/c8/50/4aea0556da7a4b93ec9168420d170b55e2eb50ae21b25062513d020c6861/coverage-7.10.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:10b24412692df990dbc34f8fb1b6b13d236ace9dfdd68df5b28c2e39cafbba13", size = 245752 }, - { url = "https://files.pythonhosted.org/packages/6a/28/ea1a84a60828177ae3b100cb6723838523369a44ec5742313ed7db3da160/coverage-7.10.7-cp310-cp310-win32.whl", hash = "sha256:b51dcd060f18c19290d9b8a9dd1e0181538df2ce0717f562fff6cf74d9fc0b5b", size = 220497 }, - { url = "https://files.pythonhosted.org/packages/fc/1a/a81d46bbeb3c3fd97b9602ebaa411e076219a150489bcc2c025f151bd52d/coverage-7.10.7-cp310-cp310-win_amd64.whl", hash = "sha256:3a622ac801b17198020f09af3eaf45666b344a0d69fc2a6ffe2ea83aeef1d807", size = 221392 }, - { url = "https://files.pythonhosted.org/packages/d2/5d/c1a17867b0456f2e9ce2d8d4708a4c3a089947d0bec9c66cdf60c9e7739f/coverage-7.10.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a609f9c93113be646f44c2a0256d6ea375ad047005d7f57a5c15f614dc1b2f59", size = 218102 }, - { url = "https://files.pythonhosted.org/packages/54/f0/514dcf4b4e3698b9a9077f084429681bf3aad2b4a72578f89d7f643eb506/coverage-7.10.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:65646bb0359386e07639c367a22cf9b5bf6304e8630b565d0626e2bdf329227a", size = 218505 }, - { url = "https://files.pythonhosted.org/packages/20/f6/9626b81d17e2a4b25c63ac1b425ff307ecdeef03d67c9a147673ae40dc36/coverage-7.10.7-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5f33166f0dfcce728191f520bd2692914ec70fac2713f6bf3ce59c3deacb4699", size = 248898 }, - { url = "https://files.pythonhosted.org/packages/b0/ef/bd8e719c2f7417ba03239052e099b76ea1130ac0cbb183ee1fcaa58aaff3/coverage-7.10.7-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:35f5e3f9e455bb17831876048355dca0f758b6df22f49258cb5a91da23ef437d", size = 250831 }, - { url = "https://files.pythonhosted.org/packages/a5/b6/bf054de41ec948b151ae2b79a55c107f5760979538f5fb80c195f2517718/coverage-7.10.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4da86b6d62a496e908ac2898243920c7992499c1712ff7c2b6d837cc69d9467e", size = 252937 }, - { url = "https://files.pythonhosted.org/packages/0f/e5/3860756aa6f9318227443c6ce4ed7bf9e70bb7f1447a0353f45ac5c7974b/coverage-7.10.7-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6b8b09c1fad947c84bbbc95eca841350fad9cbfa5a2d7ca88ac9f8d836c92e23", size = 249021 }, - { url = "https://files.pythonhosted.org/packages/26/0f/bd08bd042854f7fd07b45808927ebcce99a7ed0f2f412d11629883517ac2/coverage-7.10.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4376538f36b533b46f8971d3a3e63464f2c7905c9800db97361c43a2b14792ab", size = 250626 }, - { url = "https://files.pythonhosted.org/packages/8e/a7/4777b14de4abcc2e80c6b1d430f5d51eb18ed1d75fca56cbce5f2db9b36e/coverage-7.10.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:121da30abb574f6ce6ae09840dae322bef734480ceafe410117627aa54f76d82", size = 248682 }, - { url = "https://files.pythonhosted.org/packages/34/72/17d082b00b53cd45679bad682fac058b87f011fd8b9fe31d77f5f8d3a4e4/coverage-7.10.7-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:88127d40df529336a9836870436fc2751c339fbaed3a836d42c93f3e4bd1d0a2", size = 248402 }, - { url = "https://files.pythonhosted.org/packages/81/7a/92367572eb5bdd6a84bfa278cc7e97db192f9f45b28c94a9ca1a921c3577/coverage-7.10.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ba58bbcd1b72f136080c0bccc2400d66cc6115f3f906c499013d065ac33a4b61", size = 249320 }, - { url = "https://files.pythonhosted.org/packages/2f/88/a23cc185f6a805dfc4fdf14a94016835eeb85e22ac3a0e66d5e89acd6462/coverage-7.10.7-cp311-cp311-win32.whl", hash = "sha256:972b9e3a4094b053a4e46832b4bc829fc8a8d347160eb39d03f1690316a99c14", size = 220536 }, - { url = "https://files.pythonhosted.org/packages/fe/ef/0b510a399dfca17cec7bc2f05ad8bd78cf55f15c8bc9a73ab20c5c913c2e/coverage-7.10.7-cp311-cp311-win_amd64.whl", hash = "sha256:a7b55a944a7f43892e28ad4bc0561dfd5f0d73e605d1aa5c3c976b52aea121d2", size = 221425 }, - { url = "https://files.pythonhosted.org/packages/51/7f/023657f301a276e4ba1850f82749bc136f5a7e8768060c2e5d9744a22951/coverage-7.10.7-cp311-cp311-win_arm64.whl", hash = "sha256:736f227fb490f03c6488f9b6d45855f8e0fd749c007f9303ad30efab0e73c05a", size = 220103 }, - { url = "https://files.pythonhosted.org/packages/13/e4/eb12450f71b542a53972d19117ea5a5cea1cab3ac9e31b0b5d498df1bd5a/coverage-7.10.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7bb3b9ddb87ef7725056572368040c32775036472d5a033679d1fa6c8dc08417", size = 218290 }, - { url = "https://files.pythonhosted.org/packages/37/66/593f9be12fc19fb36711f19a5371af79a718537204d16ea1d36f16bd78d2/coverage-7.10.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:18afb24843cbc175687225cab1138c95d262337f5473512010e46831aa0c2973", size = 218515 }, - { url = "https://files.pythonhosted.org/packages/66/80/4c49f7ae09cafdacc73fbc30949ffe77359635c168f4e9ff33c9ebb07838/coverage-7.10.7-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:399a0b6347bcd3822be369392932884b8216d0944049ae22925631a9b3d4ba4c", size = 250020 }, - { url = "https://files.pythonhosted.org/packages/a6/90/a64aaacab3b37a17aaedd83e8000142561a29eb262cede42d94a67f7556b/coverage-7.10.7-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:314f2c326ded3f4b09be11bc282eb2fc861184bc95748ae67b360ac962770be7", size = 252769 }, - { url = "https://files.pythonhosted.org/packages/98/2e/2dda59afd6103b342e096f246ebc5f87a3363b5412609946c120f4e7750d/coverage-7.10.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c41e71c9cfb854789dee6fc51e46743a6d138b1803fab6cb860af43265b42ea6", size = 253901 }, - { url = "https://files.pythonhosted.org/packages/53/dc/8d8119c9051d50f3119bb4a75f29f1e4a6ab9415cd1fa8bf22fcc3fb3b5f/coverage-7.10.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc01f57ca26269c2c706e838f6422e2a8788e41b3e3c65e2f41148212e57cd59", size = 250413 }, - { url = "https://files.pythonhosted.org/packages/98/b3/edaff9c5d79ee4d4b6d3fe046f2b1d799850425695b789d491a64225d493/coverage-7.10.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a6442c59a8ac8b85812ce33bc4d05bde3fb22321fa8294e2a5b487c3505f611b", size = 251820 }, - { url = "https://files.pythonhosted.org/packages/11/25/9a0728564bb05863f7e513e5a594fe5ffef091b325437f5430e8cfb0d530/coverage-7.10.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:78a384e49f46b80fb4c901d52d92abe098e78768ed829c673fbb53c498bef73a", size = 249941 }, - { url = "https://files.pythonhosted.org/packages/e0/fd/ca2650443bfbef5b0e74373aac4df67b08180d2f184b482c41499668e258/coverage-7.10.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:5e1e9802121405ede4b0133aa4340ad8186a1d2526de5b7c3eca519db7bb89fb", size = 249519 }, - { url = "https://files.pythonhosted.org/packages/24/79/f692f125fb4299b6f963b0745124998ebb8e73ecdfce4ceceb06a8c6bec5/coverage-7.10.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d41213ea25a86f69efd1575073d34ea11aabe075604ddf3d148ecfec9e1e96a1", size = 251375 }, - { url = "https://files.pythonhosted.org/packages/5e/75/61b9bbd6c7d24d896bfeec57acba78e0f8deac68e6baf2d4804f7aae1f88/coverage-7.10.7-cp312-cp312-win32.whl", hash = "sha256:77eb4c747061a6af8d0f7bdb31f1e108d172762ef579166ec84542f711d90256", size = 220699 }, - { url = "https://files.pythonhosted.org/packages/ca/f3/3bf7905288b45b075918d372498f1cf845b5b579b723c8fd17168018d5f5/coverage-7.10.7-cp312-cp312-win_amd64.whl", hash = "sha256:f51328ffe987aecf6d09f3cd9d979face89a617eacdaea43e7b3080777f647ba", size = 221512 }, - { url = "https://files.pythonhosted.org/packages/5c/44/3e32dbe933979d05cf2dac5e697c8599cfe038aaf51223ab901e208d5a62/coverage-7.10.7-cp312-cp312-win_arm64.whl", hash = "sha256:bda5e34f8a75721c96085903c6f2197dc398c20ffd98df33f866a9c8fd95f4bf", size = 220147 }, - { url = "https://files.pythonhosted.org/packages/9a/94/b765c1abcb613d103b64fcf10395f54d69b0ef8be6a0dd9c524384892cc7/coverage-7.10.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:981a651f543f2854abd3b5fcb3263aac581b18209be49863ba575de6edf4c14d", size = 218320 }, - { url = "https://files.pythonhosted.org/packages/72/4f/732fff31c119bb73b35236dd333030f32c4bfe909f445b423e6c7594f9a2/coverage-7.10.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:73ab1601f84dc804f7812dc297e93cd99381162da39c47040a827d4e8dafe63b", size = 218575 }, - { url = "https://files.pythonhosted.org/packages/87/02/ae7e0af4b674be47566707777db1aa375474f02a1d64b9323e5813a6cdd5/coverage-7.10.7-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a8b6f03672aa6734e700bbcd65ff050fd19cddfec4b031cc8cf1c6967de5a68e", size = 249568 }, - { url = "https://files.pythonhosted.org/packages/a2/77/8c6d22bf61921a59bce5471c2f1f7ac30cd4ac50aadde72b8c48d5727902/coverage-7.10.7-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:10b6ba00ab1132a0ce4428ff68cf50a25efd6840a42cdf4239c9b99aad83be8b", size = 252174 }, - { url = "https://files.pythonhosted.org/packages/b1/20/b6ea4f69bbb52dac0aebd62157ba6a9dddbfe664f5af8122dac296c3ee15/coverage-7.10.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c79124f70465a150e89340de5963f936ee97097d2ef76c869708c4248c63ca49", size = 253447 }, - { url = "https://files.pythonhosted.org/packages/f9/28/4831523ba483a7f90f7b259d2018fef02cb4d5b90bc7c1505d6e5a84883c/coverage-7.10.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:69212fbccdbd5b0e39eac4067e20a4a5256609e209547d86f740d68ad4f04911", size = 249779 }, - { url = "https://files.pythonhosted.org/packages/a7/9f/4331142bc98c10ca6436d2d620c3e165f31e6c58d43479985afce6f3191c/coverage-7.10.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7ea7c6c9d0d286d04ed3541747e6597cbe4971f22648b68248f7ddcd329207f0", size = 251604 }, - { url = "https://files.pythonhosted.org/packages/ce/60/bda83b96602036b77ecf34e6393a3836365481b69f7ed7079ab85048202b/coverage-7.10.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b9be91986841a75042b3e3243d0b3cb0b2434252b977baaf0cd56e960fe1e46f", size = 249497 }, - { url = "https://files.pythonhosted.org/packages/5f/af/152633ff35b2af63977edd835d8e6430f0caef27d171edf2fc76c270ef31/coverage-7.10.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:b281d5eca50189325cfe1f365fafade89b14b4a78d9b40b05ddd1fc7d2a10a9c", size = 249350 }, - { url = "https://files.pythonhosted.org/packages/9d/71/d92105d122bd21cebba877228990e1646d862e34a98bb3374d3fece5a794/coverage-7.10.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:99e4aa63097ab1118e75a848a28e40d68b08a5e19ce587891ab7fd04475e780f", size = 251111 }, - { url = "https://files.pythonhosted.org/packages/a2/9e/9fdb08f4bf476c912f0c3ca292e019aab6712c93c9344a1653986c3fd305/coverage-7.10.7-cp313-cp313-win32.whl", hash = "sha256:dc7c389dce432500273eaf48f410b37886be9208b2dd5710aaf7c57fd442c698", size = 220746 }, - { url = "https://files.pythonhosted.org/packages/b1/b1/a75fd25df44eab52d1931e89980d1ada46824c7a3210be0d3c88a44aaa99/coverage-7.10.7-cp313-cp313-win_amd64.whl", hash = "sha256:cac0fdca17b036af3881a9d2729a850b76553f3f716ccb0360ad4dbc06b3b843", size = 221541 }, - { url = "https://files.pythonhosted.org/packages/14/3a/d720d7c989562a6e9a14b2c9f5f2876bdb38e9367126d118495b89c99c37/coverage-7.10.7-cp313-cp313-win_arm64.whl", hash = "sha256:4b6f236edf6e2f9ae8fcd1332da4e791c1b6ba0dc16a2dc94590ceccb482e546", size = 220170 }, - { url = "https://files.pythonhosted.org/packages/bb/22/e04514bf2a735d8b0add31d2b4ab636fc02370730787c576bb995390d2d5/coverage-7.10.7-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a0ec07fd264d0745ee396b666d47cef20875f4ff2375d7c4f58235886cc1ef0c", size = 219029 }, - { url = "https://files.pythonhosted.org/packages/11/0b/91128e099035ece15da3445d9015e4b4153a6059403452d324cbb0a575fa/coverage-7.10.7-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:dd5e856ebb7bfb7672b0086846db5afb4567a7b9714b8a0ebafd211ec7ce6a15", size = 219259 }, - { url = "https://files.pythonhosted.org/packages/8b/51/66420081e72801536a091a0c8f8c1f88a5c4bf7b9b1bdc6222c7afe6dc9b/coverage-7.10.7-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f57b2a3c8353d3e04acf75b3fed57ba41f5c0646bbf1d10c7c282291c97936b4", size = 260592 }, - { url = "https://files.pythonhosted.org/packages/5d/22/9b8d458c2881b22df3db5bb3e7369e63d527d986decb6c11a591ba2364f7/coverage-7.10.7-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1ef2319dd15a0b009667301a3f84452a4dc6fddfd06b0c5c53ea472d3989fbf0", size = 262768 }, - { url = "https://files.pythonhosted.org/packages/f7/08/16bee2c433e60913c610ea200b276e8eeef084b0d200bdcff69920bd5828/coverage-7.10.7-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:83082a57783239717ceb0ad584de3c69cf581b2a95ed6bf81ea66034f00401c0", size = 264995 }, - { url = "https://files.pythonhosted.org/packages/20/9d/e53eb9771d154859b084b90201e5221bca7674ba449a17c101a5031d4054/coverage-7.10.7-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:50aa94fb1fb9a397eaa19c0d5ec15a5edd03a47bf1a3a6111a16b36e190cff65", size = 259546 }, - { url = "https://files.pythonhosted.org/packages/ad/b0/69bc7050f8d4e56a89fb550a1577d5d0d1db2278106f6f626464067b3817/coverage-7.10.7-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2120043f147bebb41c85b97ac45dd173595ff14f2a584f2963891cbcc3091541", size = 262544 }, - { url = "https://files.pythonhosted.org/packages/ef/4b/2514b060dbd1bc0aaf23b852c14bb5818f244c664cb16517feff6bb3a5ab/coverage-7.10.7-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2fafd773231dd0378fdba66d339f84904a8e57a262f583530f4f156ab83863e6", size = 260308 }, - { url = "https://files.pythonhosted.org/packages/54/78/7ba2175007c246d75e496f64c06e94122bdb914790a1285d627a918bd271/coverage-7.10.7-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:0b944ee8459f515f28b851728ad224fa2d068f1513ef6b7ff1efafeb2185f999", size = 258920 }, - { url = "https://files.pythonhosted.org/packages/c0/b3/fac9f7abbc841409b9a410309d73bfa6cfb2e51c3fada738cb607ce174f8/coverage-7.10.7-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4b583b97ab2e3efe1b3e75248a9b333bd3f8b0b1b8e5b45578e05e5850dfb2c2", size = 261434 }, - { url = "https://files.pythonhosted.org/packages/ee/51/a03bec00d37faaa891b3ff7387192cef20f01604e5283a5fabc95346befa/coverage-7.10.7-cp313-cp313t-win32.whl", hash = "sha256:2a78cd46550081a7909b3329e2266204d584866e8d97b898cd7fb5ac8d888b1a", size = 221403 }, - { url = "https://files.pythonhosted.org/packages/53/22/3cf25d614e64bf6d8e59c7c669b20d6d940bb337bdee5900b9ca41c820bb/coverage-7.10.7-cp313-cp313t-win_amd64.whl", hash = "sha256:33a5e6396ab684cb43dc7befa386258acb2d7fae7f67330ebb85ba4ea27938eb", size = 222469 }, - { url = "https://files.pythonhosted.org/packages/49/a1/00164f6d30d8a01c3c9c48418a7a5be394de5349b421b9ee019f380df2a0/coverage-7.10.7-cp313-cp313t-win_arm64.whl", hash = "sha256:86b0e7308289ddde73d863b7683f596d8d21c7d8664ce1dee061d0bcf3fbb4bb", size = 220731 }, - { url = "https://files.pythonhosted.org/packages/23/9c/5844ab4ca6a4dd97a1850e030a15ec7d292b5c5cb93082979225126e35dd/coverage-7.10.7-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:b06f260b16ead11643a5a9f955bd4b5fd76c1a4c6796aeade8520095b75de520", size = 218302 }, - { url = "https://files.pythonhosted.org/packages/f0/89/673f6514b0961d1f0e20ddc242e9342f6da21eaba3489901b565c0689f34/coverage-7.10.7-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:212f8f2e0612778f09c55dd4872cb1f64a1f2b074393d139278ce902064d5b32", size = 218578 }, - { url = "https://files.pythonhosted.org/packages/05/e8/261cae479e85232828fb17ad536765c88dd818c8470aca690b0ac6feeaa3/coverage-7.10.7-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3445258bcded7d4aa630ab8296dea4d3f15a255588dd535f980c193ab6b95f3f", size = 249629 }, - { url = "https://files.pythonhosted.org/packages/82/62/14ed6546d0207e6eda876434e3e8475a3e9adbe32110ce896c9e0c06bb9a/coverage-7.10.7-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:bb45474711ba385c46a0bfe696c695a929ae69ac636cda8f532be9e8c93d720a", size = 252162 }, - { url = "https://files.pythonhosted.org/packages/ff/49/07f00db9ac6478e4358165a08fb41b469a1b053212e8a00cb02f0d27a05f/coverage-7.10.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:813922f35bd800dca9994c5971883cbc0d291128a5de6b167c7aa697fcf59360", size = 253517 }, - { url = "https://files.pythonhosted.org/packages/a2/59/c5201c62dbf165dfbc91460f6dbbaa85a8b82cfa6131ac45d6c1bfb52deb/coverage-7.10.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:93c1b03552081b2a4423091d6fb3787265b8f86af404cff98d1b5342713bdd69", size = 249632 }, - { url = "https://files.pythonhosted.org/packages/07/ae/5920097195291a51fb00b3a70b9bbd2edbfe3c84876a1762bd1ef1565ebc/coverage-7.10.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:cc87dd1b6eaf0b848eebb1c86469b9f72a1891cb42ac7adcfbce75eadb13dd14", size = 251520 }, - { url = "https://files.pythonhosted.org/packages/b9/3c/a815dde77a2981f5743a60b63df31cb322c944843e57dbd579326625a413/coverage-7.10.7-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:39508ffda4f343c35f3236fe8d1a6634a51f4581226a1262769d7f970e73bffe", size = 249455 }, - { url = "https://files.pythonhosted.org/packages/aa/99/f5cdd8421ea656abefb6c0ce92556709db2265c41e8f9fc6c8ae0f7824c9/coverage-7.10.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:925a1edf3d810537c5a3abe78ec5530160c5f9a26b1f4270b40e62cc79304a1e", size = 249287 }, - { url = "https://files.pythonhosted.org/packages/c3/7a/e9a2da6a1fc5d007dd51fca083a663ab930a8c4d149c087732a5dbaa0029/coverage-7.10.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2c8b9a0636f94c43cd3576811e05b89aa9bc2d0a85137affc544ae5cb0e4bfbd", size = 250946 }, - { url = "https://files.pythonhosted.org/packages/ef/5b/0b5799aa30380a949005a353715095d6d1da81927d6dbed5def2200a4e25/coverage-7.10.7-cp314-cp314-win32.whl", hash = "sha256:b7b8288eb7cdd268b0304632da8cb0bb93fadcfec2fe5712f7b9cc8f4d487be2", size = 221009 }, - { url = "https://files.pythonhosted.org/packages/da/b0/e802fbb6eb746de006490abc9bb554b708918b6774b722bb3a0e6aa1b7de/coverage-7.10.7-cp314-cp314-win_amd64.whl", hash = "sha256:1ca6db7c8807fb9e755d0379ccc39017ce0a84dcd26d14b5a03b78563776f681", size = 221804 }, - { url = "https://files.pythonhosted.org/packages/9e/e8/71d0c8e374e31f39e3389bb0bd19e527d46f00ea8571ec7ec8fd261d8b44/coverage-7.10.7-cp314-cp314-win_arm64.whl", hash = "sha256:097c1591f5af4496226d5783d036bf6fd6cd0cbc132e071b33861de756efb880", size = 220384 }, - { url = "https://files.pythonhosted.org/packages/62/09/9a5608d319fa3eba7a2019addeacb8c746fb50872b57a724c9f79f146969/coverage-7.10.7-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:a62c6ef0d50e6de320c270ff91d9dd0a05e7250cac2a800b7784bae474506e63", size = 219047 }, - { url = "https://files.pythonhosted.org/packages/f5/6f/f58d46f33db9f2e3647b2d0764704548c184e6f5e014bef528b7f979ef84/coverage-7.10.7-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:9fa6e4dd51fe15d8738708a973470f67a855ca50002294852e9571cdbd9433f2", size = 219266 }, - { url = "https://files.pythonhosted.org/packages/74/5c/183ffc817ba68e0b443b8c934c8795553eb0c14573813415bd59941ee165/coverage-7.10.7-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8fb190658865565c549b6b4706856d6a7b09302c797eb2cf8e7fe9dabb043f0d", size = 260767 }, - { url = "https://files.pythonhosted.org/packages/0f/48/71a8abe9c1ad7e97548835e3cc1adbf361e743e9d60310c5f75c9e7bf847/coverage-7.10.7-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:affef7c76a9ef259187ef31599a9260330e0335a3011732c4b9effa01e1cd6e0", size = 262931 }, - { url = "https://files.pythonhosted.org/packages/84/fd/193a8fb132acfc0a901f72020e54be5e48021e1575bb327d8ee1097a28fd/coverage-7.10.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e16e07d85ca0cf8bafe5f5d23a0b850064e8e945d5677492b06bbe6f09cc699", size = 265186 }, - { url = "https://files.pythonhosted.org/packages/b1/8f/74ecc30607dd95ad50e3034221113ccb1c6d4e8085cc761134782995daae/coverage-7.10.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:03ffc58aacdf65d2a82bbeb1ffe4d01ead4017a21bfd0454983b88ca73af94b9", size = 259470 }, - { url = "https://files.pythonhosted.org/packages/0f/55/79ff53a769f20d71b07023ea115c9167c0bb56f281320520cf64c5298a96/coverage-7.10.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1b4fd784344d4e52647fd7857b2af5b3fbe6c239b0b5fa63e94eb67320770e0f", size = 262626 }, - { url = "https://files.pythonhosted.org/packages/88/e2/dac66c140009b61ac3fc13af673a574b00c16efdf04f9b5c740703e953c0/coverage-7.10.7-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:0ebbaddb2c19b71912c6f2518e791aa8b9f054985a0769bdb3a53ebbc765c6a1", size = 260386 }, - { url = "https://files.pythonhosted.org/packages/a2/f1/f48f645e3f33bb9ca8a496bc4a9671b52f2f353146233ebd7c1df6160440/coverage-7.10.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:a2d9a3b260cc1d1dbdb1c582e63ddcf5363426a1a68faa0f5da28d8ee3c722a0", size = 258852 }, - { url = "https://files.pythonhosted.org/packages/bb/3b/8442618972c51a7affeead957995cfa8323c0c9bcf8fa5a027421f720ff4/coverage-7.10.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a3cc8638b2480865eaa3926d192e64ce6c51e3d29c849e09d5b4ad95efae5399", size = 261534 }, - { url = "https://files.pythonhosted.org/packages/b2/dc/101f3fa3a45146db0cb03f5b4376e24c0aac818309da23e2de0c75295a91/coverage-7.10.7-cp314-cp314t-win32.whl", hash = "sha256:67f8c5cbcd3deb7a60b3345dffc89a961a484ed0af1f6f73de91705cc6e31235", size = 221784 }, - { url = "https://files.pythonhosted.org/packages/4c/a1/74c51803fc70a8a40d7346660379e144be772bab4ac7bb6e6b905152345c/coverage-7.10.7-cp314-cp314t-win_amd64.whl", hash = "sha256:e1ed71194ef6dea7ed2d5cb5f7243d4bcd334bfb63e59878519be558078f848d", size = 222905 }, - { url = "https://files.pythonhosted.org/packages/12/65/f116a6d2127df30bcafbceef0302d8a64ba87488bf6f73a6d8eebf060873/coverage-7.10.7-cp314-cp314t-win_arm64.whl", hash = "sha256:7fe650342addd8524ca63d77b2362b02345e5f1a093266787d210c70a50b471a", size = 220922 }, - { url = "https://files.pythonhosted.org/packages/a3/ad/d1c25053764b4c42eb294aae92ab617d2e4f803397f9c7c8295caa77a260/coverage-7.10.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fff7b9c3f19957020cac546c70025331113d2e61537f6e2441bc7657913de7d3", size = 217978 }, - { url = "https://files.pythonhosted.org/packages/52/2f/b9f9daa39b80ece0b9548bbb723381e29bc664822d9a12c2135f8922c22b/coverage-7.10.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bc91b314cef27742da486d6839b677b3f2793dfe52b51bbbb7cf736d5c29281c", size = 218370 }, - { url = "https://files.pythonhosted.org/packages/dd/6e/30d006c3b469e58449650642383dddf1c8fb63d44fdf92994bfd46570695/coverage-7.10.7-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:567f5c155eda8df1d3d439d40a45a6a5f029b429b06648235f1e7e51b522b396", size = 244802 }, - { url = "https://files.pythonhosted.org/packages/b0/49/8a070782ce7e6b94ff6a0b6d7c65ba6bc3091d92a92cef4cd4eb0767965c/coverage-7.10.7-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2af88deffcc8a4d5974cf2d502251bc3b2db8461f0b66d80a449c33757aa9f40", size = 246625 }, - { url = "https://files.pythonhosted.org/packages/6a/92/1c1c5a9e8677ce56d42b97bdaca337b2d4d9ebe703d8c174ede52dbabd5f/coverage-7.10.7-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7315339eae3b24c2d2fa1ed7d7a38654cba34a13ef19fbcb9425da46d3dc594", size = 248399 }, - { url = "https://files.pythonhosted.org/packages/c0/54/b140edee7257e815de7426d5d9846b58505dffc29795fff2dfb7f8a1c5a0/coverage-7.10.7-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:912e6ebc7a6e4adfdbb1aec371ad04c68854cd3bf3608b3514e7ff9062931d8a", size = 245142 }, - { url = "https://files.pythonhosted.org/packages/e4/9e/6d6b8295940b118e8b7083b29226c71f6154f7ff41e9ca431f03de2eac0d/coverage-7.10.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f49a05acd3dfe1ce9715b657e28d138578bc40126760efb962322c56e9ca344b", size = 246284 }, - { url = "https://files.pythonhosted.org/packages/db/e5/5e957ca747d43dbe4d9714358375c7546cb3cb533007b6813fc20fce37ad/coverage-7.10.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:cce2109b6219f22ece99db7644b9622f54a4e915dad65660ec435e89a3ea7cc3", size = 244353 }, - { url = "https://files.pythonhosted.org/packages/9a/45/540fc5cc92536a1b783b7ef99450bd55a4b3af234aae35a18a339973ce30/coverage-7.10.7-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:f3c887f96407cea3916294046fc7dab611c2552beadbed4ea901cbc6a40cc7a0", size = 244430 }, - { url = "https://files.pythonhosted.org/packages/75/0b/8287b2e5b38c8fe15d7e3398849bb58d382aedc0864ea0fa1820e8630491/coverage-7.10.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:635adb9a4507c9fd2ed65f39693fa31c9a3ee3a8e6dc64df033e8fdf52a7003f", size = 245311 }, - { url = "https://files.pythonhosted.org/packages/0c/1d/29724999984740f0c86d03e6420b942439bf5bd7f54d4382cae386a9d1e9/coverage-7.10.7-cp39-cp39-win32.whl", hash = "sha256:5a02d5a850e2979b0a014c412573953995174743a3f7fa4ea5a6e9a3c5617431", size = 220500 }, - { url = "https://files.pythonhosted.org/packages/43/11/4b1e6b129943f905ca54c339f343877b55b365ae2558806c1be4f7476ed5/coverage-7.10.7-cp39-cp39-win_amd64.whl", hash = "sha256:c134869d5ffe34547d14e174c866fd8fe2254918cc0a95e99052903bc1543e07", size = 221408 }, - { url = "https://files.pythonhosted.org/packages/ec/16/114df1c291c22cac3b0c127a73e0af5c12ed7bbb6558d310429a0ae24023/coverage-7.10.7-py3-none-any.whl", hash = "sha256:f7941f6f2fe6dd6807a1208737b8a0cbcf1cc6d7b07d24998ad2d63590868260", size = 209952 }, -] - -[package.optional-dependencies] -toml = [ - { name = "tomli", marker = "python_full_version < '3.10'" }, -] - -[[package]] -name = "coverage" -version = "7.13.5" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] -sdist = { url = "https://files.pythonhosted.org/packages/9d/e0/70553e3000e345daff267cec284ce4cbf3fc141b6da229ac52775b5428f1/coverage-7.13.5.tar.gz", hash = "sha256:c81f6515c4c40141f83f502b07bbfa5c240ba25bbe73da7b33f1e5b6120ff179", size = 915967 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/69/33/e8c48488c29a73fd089f9d71f9653c1be7478f2ad6b5bc870db11a55d23d/coverage-7.13.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e0723d2c96324561b9aa76fb982406e11d93cdb388a7a7da2b16e04719cf7ca5", size = 219255 }, - { url = "https://files.pythonhosted.org/packages/da/bd/b0ebe9f677d7f4b74a3e115eec7ddd4bcf892074963a00d91e8b164a6386/coverage-7.13.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:52f444e86475992506b32d4e5ca55c24fc88d73bcbda0e9745095b28ef4dc0cf", size = 219772 }, - { url = "https://files.pythonhosted.org/packages/48/cc/5cb9502f4e01972f54eedd48218bb203fe81e294be606a2bc93970208013/coverage-7.13.5-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:704de6328e3d612a8f6c07000a878ff38181ec3263d5a11da1db294fa6a9bdf8", size = 246532 }, - { url = "https://files.pythonhosted.org/packages/7d/d8/3217636d86c7e7b12e126e4f30ef1581047da73140614523af7495ed5f2d/coverage-7.13.5-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a1a6d79a14e1ec1832cabc833898636ad5f3754a678ef8bb4908515208bf84f4", size = 248333 }, - { url = "https://files.pythonhosted.org/packages/2b/30/2002ac6729ba2d4357438e2ed3c447ad8562866c8c63fc16f6dfc33afe56/coverage-7.13.5-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:79060214983769c7ba3f0cee10b54c97609dca4d478fa1aa32b914480fd5738d", size = 250211 }, - { url = "https://files.pythonhosted.org/packages/6c/85/552496626d6b9359eb0e2f86f920037c9cbfba09b24d914c6e1528155f7d/coverage-7.13.5-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:356e76b46783a98c2a2fe81ec79df4883a1e62895ea952968fb253c114e7f930", size = 252125 }, - { url = "https://files.pythonhosted.org/packages/44/21/40256eabdcbccdb6acf6b381b3016a154399a75fe39d406f790ae84d1f3c/coverage-7.13.5-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0cef0cdec915d11254a7f549c1170afecce708d30610c6abdded1f74e581666d", size = 247219 }, - { url = "https://files.pythonhosted.org/packages/b1/e8/96e2a6c3f21a0ea77d7830b254a1542d0328acc8d7bdf6a284ba7e529f77/coverage-7.13.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:dc022073d063b25a402454e5712ef9e007113e3a676b96c5f29b2bda29352f40", size = 248248 }, - { url = "https://files.pythonhosted.org/packages/da/ba/8477f549e554827da390ec659f3c38e4b6d95470f4daafc2d8ff94eaa9c2/coverage-7.13.5-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9b74db26dfea4f4e50d48a4602207cd1e78be33182bc9cbf22da94f332f99878", size = 246254 }, - { url = "https://files.pythonhosted.org/packages/55/59/bc22aef0e6aa179d5b1b001e8b3654785e9adf27ef24c93dc4228ebd5d68/coverage-7.13.5-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ad146744ca4fd09b50c482650e3c1b1f4dfa1d4792e0a04a369c7f23336f0400", size = 250067 }, - { url = "https://files.pythonhosted.org/packages/de/1b/c6a023a160806a5137dca53468fd97530d6acad24a22003b1578a9c2e429/coverage-7.13.5-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:c555b48be1853fe3997c11c4bd521cdd9a9612352de01fa4508f16ec341e6fe0", size = 246521 }, - { url = "https://files.pythonhosted.org/packages/2d/3f/3532c85a55aa2f899fa17c186f831cfa1aa434d88ff792a709636f64130e/coverage-7.13.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7034b5c56a58ae5e85f23949d52c14aca2cfc6848a31764995b7de88f13a1ea0", size = 247126 }, - { url = "https://files.pythonhosted.org/packages/aa/2e/b9d56af4a24ef45dfbcda88e06870cb7d57b2b0bfa3a888d79b4c8debd76/coverage-7.13.5-cp310-cp310-win32.whl", hash = "sha256:eb7fdf1ef130660e7415e0253a01a7d5a88c9c4d158bcf75cbbd922fd65a5b58", size = 221860 }, - { url = "https://files.pythonhosted.org/packages/9f/cc/d938417e7a4d7f0433ad4edee8bb2acdc60dc7ac5af19e2a07a048ecbee3/coverage-7.13.5-cp310-cp310-win_amd64.whl", hash = "sha256:3e1bb5f6c78feeb1be3475789b14a0f0a5b47d505bfc7267126ccbd50289999e", size = 222788 }, - { url = "https://files.pythonhosted.org/packages/4b/37/d24c8f8220ff07b839b2c043ea4903a33b0f455abe673ae3c03bbdb7f212/coverage-7.13.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:66a80c616f80181f4d643b0f9e709d97bcea413ecd9631e1dedc7401c8e6695d", size = 219381 }, - { url = "https://files.pythonhosted.org/packages/35/8b/cd129b0ca4afe886a6ce9d183c44d8301acbd4ef248622e7c49a23145605/coverage-7.13.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:145ede53ccbafb297c1c9287f788d1bc3efd6c900da23bf6931b09eafc931587", size = 219880 }, - { url = "https://files.pythonhosted.org/packages/55/2f/e0e5b237bffdb5d6c530ce87cc1d413a5b7d7dfd60fb067ad6d254c35c76/coverage-7.13.5-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:0672854dc733c342fa3e957e0605256d2bf5934feeac328da9e0b5449634a642", size = 250303 }, - { url = "https://files.pythonhosted.org/packages/92/be/b1afb692be85b947f3401375851484496134c5554e67e822c35f28bf2fbc/coverage-7.13.5-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ec10e2a42b41c923c2209b846126c6582db5e43a33157e9870ba9fb70dc7854b", size = 252218 }, - { url = "https://files.pythonhosted.org/packages/da/69/2f47bb6fa1b8d1e3e5d0c4be8ccb4313c63d742476a619418f85740d597b/coverage-7.13.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:be3d4bbad9d4b037791794ddeedd7d64a56f5933a2c1373e18e9e568b9141686", size = 254326 }, - { url = "https://files.pythonhosted.org/packages/d5/d0/79db81da58965bd29dabc8f4ad2a2af70611a57cba9d1ec006f072f30a54/coverage-7.13.5-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4d2afbc5cc54d286bfb54541aa50b64cdb07a718227168c87b9e2fb8f25e1743", size = 256267 }, - { url = "https://files.pythonhosted.org/packages/e5/32/d0d7cc8168f91ddab44c0ce4806b969df5f5fdfdbb568eaca2dbc2a04936/coverage-7.13.5-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3ad050321264c49c2fa67bb599100456fc51d004b82534f379d16445da40fb75", size = 250430 }, - { url = "https://files.pythonhosted.org/packages/4d/06/a055311d891ddbe231cd69fdd20ea4be6e3603ffebddf8704b8ca8e10a3c/coverage-7.13.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7300c8a6d13335b29bb76d7651c66af6bd8658517c43499f110ddc6717bfc209", size = 252017 }, - { url = "https://files.pythonhosted.org/packages/d6/f6/d0fd2d21e29a657b5f77a2fe7082e1568158340dceb941954f776dce1b7b/coverage-7.13.5-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:eb07647a5738b89baab047f14edd18ded523de60f3b30e75c2acc826f79c839a", size = 250080 }, - { url = "https://files.pythonhosted.org/packages/4e/ab/0d7fb2efc2e9a5eb7ddcc6e722f834a69b454b7e6e5888c3a8567ecffb31/coverage-7.13.5-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:9adb6688e3b53adffefd4a52d72cbd8b02602bfb8f74dcd862337182fd4d1a4e", size = 253843 }, - { url = "https://files.pythonhosted.org/packages/ba/6f/7467b917bbf5408610178f62a49c0ed4377bb16c1657f689cc61470da8ce/coverage-7.13.5-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7c8d4bc913dd70b93488d6c496c77f3aff5ea99a07e36a18f865bca55adef8bd", size = 249802 }, - { url = "https://files.pythonhosted.org/packages/75/2c/1172fb689df92135f5bfbbd69fc83017a76d24ea2e2f3a1154007e2fb9f8/coverage-7.13.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0e3c426ffc4cd952f54ee9ffbdd10345709ecc78a3ecfd796a57236bfad0b9b8", size = 250707 }, - { url = "https://files.pythonhosted.org/packages/67/21/9ac389377380a07884e3b48ba7a620fcd9dbfaf1d40565facdc6b36ec9ef/coverage-7.13.5-cp311-cp311-win32.whl", hash = "sha256:259b69bb83ad9894c4b25be2528139eecba9a82646ebdda2d9db1ba28424a6bf", size = 221880 }, - { url = "https://files.pythonhosted.org/packages/af/7f/4cd8a92531253f9d7c1bbecd9fa1b472907fb54446ca768c59b531248dc5/coverage-7.13.5-cp311-cp311-win_amd64.whl", hash = "sha256:258354455f4e86e3e9d0d17571d522e13b4e1e19bf0f8596bcf9476d61e7d8a9", size = 222816 }, - { url = "https://files.pythonhosted.org/packages/12/a6/1d3f6155fb0010ca68eba7fe48ca6c9da7385058b77a95848710ecf189b1/coverage-7.13.5-cp311-cp311-win_arm64.whl", hash = "sha256:bff95879c33ec8da99fc9b6fe345ddb5be6414b41d6d1ad1c8f188d26f36e028", size = 221483 }, - { url = "https://files.pythonhosted.org/packages/a0/c3/a396306ba7db865bf96fc1fb3b7fd29bcbf3d829df642e77b13555163cd6/coverage-7.13.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:460cf0114c5016fa841214ff5564aa4864f11948da9440bc97e21ad1f4ba1e01", size = 219554 }, - { url = "https://files.pythonhosted.org/packages/a6/16/a68a19e5384e93f811dccc51034b1fd0b865841c390e3c931dcc4699e035/coverage-7.13.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0e223ce4b4ed47f065bfb123687686512e37629be25cc63728557ae7db261422", size = 219908 }, - { url = "https://files.pythonhosted.org/packages/29/72/20b917c6793af3a5ceb7fb9c50033f3ec7865f2911a1416b34a7cfa0813b/coverage-7.13.5-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:6e3370441f4513c6252bf042b9c36d22491142385049243253c7e48398a15a9f", size = 251419 }, - { url = "https://files.pythonhosted.org/packages/8c/49/cd14b789536ac6a4778c453c6a2338bc0a2fb60c5a5a41b4008328b9acc1/coverage-7.13.5-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:03ccc709a17a1de074fb1d11f217342fb0d2b1582ed544f554fc9fc3f07e95f5", size = 254159 }, - { url = "https://files.pythonhosted.org/packages/9d/00/7b0edcfe64e2ed4c0340dac14a52ad0f4c9bd0b8b5e531af7d55b703db7c/coverage-7.13.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3f4818d065964db3c1c66dc0fbdac5ac692ecbc875555e13374fdbe7eedb4376", size = 255270 }, - { url = "https://files.pythonhosted.org/packages/93/89/7ffc4ba0f5d0a55c1e84ea7cee39c9fc06af7b170513d83fbf3bbefce280/coverage-7.13.5-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:012d5319e66e9d5a218834642d6c35d265515a62f01157a45bcc036ecf947256", size = 257538 }, - { url = "https://files.pythonhosted.org/packages/81/bd/73ddf85f93f7e6fa83e77ccecb6162d9415c79007b4bc124008a4995e4a7/coverage-7.13.5-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8dd02af98971bdb956363e4827d34425cb3df19ee550ef92855b0acb9c7ce51c", size = 251821 }, - { url = "https://files.pythonhosted.org/packages/a0/81/278aff4e8dec4926a0bcb9486320752811f543a3ce5b602cc7a29978d073/coverage-7.13.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f08fd75c50a760c7eb068ae823777268daaf16a80b918fa58eea888f8e3919f5", size = 253191 }, - { url = "https://files.pythonhosted.org/packages/70/ee/fe1621488e2e0a58d7e94c4800f0d96f79671553488d401a612bebae324b/coverage-7.13.5-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:843ea8643cf967d1ac7e8ecd4bb00c99135adf4816c0c0593fdcc47b597fcf09", size = 251337 }, - { url = "https://files.pythonhosted.org/packages/37/a6/f79fb37aa104b562207cc23cb5711ab6793608e246cae1e93f26b2236ed9/coverage-7.13.5-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:9d44d7aa963820b1b971dbecd90bfe5fe8f81cff79787eb6cca15750bd2f79b9", size = 255404 }, - { url = "https://files.pythonhosted.org/packages/75/f0/ed15262a58ec81ce457ceb717b7f78752a1713556b19081b76e90896e8d4/coverage-7.13.5-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:7132bed4bd7b836200c591410ae7d97bf7ae8be6fc87d160b2bd881df929e7bf", size = 250903 }, - { url = "https://files.pythonhosted.org/packages/0f/e9/9129958f20e7e9d4d56d51d42ccf708d15cac355ff4ac6e736e97a9393d2/coverage-7.13.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a698e363641b98843c517817db75373c83254781426e94ada3197cabbc2c919c", size = 252780 }, - { url = "https://files.pythonhosted.org/packages/a4/d7/0ad9b15812d81272db94379fe4c6df8fd17781cc7671fdfa30c76ba5ff7b/coverage-7.13.5-cp312-cp312-win32.whl", hash = "sha256:bdba0a6b8812e8c7df002d908a9a2ea3c36e92611b5708633c50869e6d922fdf", size = 222093 }, - { url = "https://files.pythonhosted.org/packages/29/3d/821a9a5799fac2556bcf0bd37a70d1d11fa9e49784b6d22e92e8b2f85f18/coverage-7.13.5-cp312-cp312-win_amd64.whl", hash = "sha256:d2c87e0c473a10bffe991502eac389220533024c8082ec1ce849f4218dded810", size = 222900 }, - { url = "https://files.pythonhosted.org/packages/d4/fa/2238c2ad08e35cf4f020ea721f717e09ec3152aea75d191a7faf3ef009a8/coverage-7.13.5-cp312-cp312-win_arm64.whl", hash = "sha256:bf69236a9a81bdca3bff53796237aab096cdbf8d78a66ad61e992d9dac7eb2de", size = 221515 }, - { url = "https://files.pythonhosted.org/packages/74/8c/74fedc9663dcf168b0a059d4ea756ecae4da77a489048f94b5f512a8d0b3/coverage-7.13.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5ec4af212df513e399cf11610cc27063f1586419e814755ab362e50a85ea69c1", size = 219576 }, - { url = "https://files.pythonhosted.org/packages/0c/c9/44fb661c55062f0818a6ffd2685c67aa30816200d5f2817543717d4b92eb/coverage-7.13.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:941617e518602e2d64942c88ec8499f7fbd49d3f6c4327d3a71d43a1973032f3", size = 219942 }, - { url = "https://files.pythonhosted.org/packages/5f/13/93419671cee82b780bab7ea96b67c8ef448f5f295f36bf5031154ec9a790/coverage-7.13.5-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:da305e9937617ee95c2e39d8ff9f040e0487cbf1ac174f777ed5eddd7a7c1f26", size = 250935 }, - { url = "https://files.pythonhosted.org/packages/ac/68/1666e3a4462f8202d836920114fa7a5ee9275d1fa45366d336c551a162dd/coverage-7.13.5-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:78e696e1cc714e57e8b25760b33a8b1026b7048d270140d25dafe1b0a1ee05a3", size = 253541 }, - { url = "https://files.pythonhosted.org/packages/4e/5e/3ee3b835647be646dcf3c65a7c6c18f87c27326a858f72ab22c12730773d/coverage-7.13.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:02ca0eed225b2ff301c474aeeeae27d26e2537942aa0f87491d3e147e784a82b", size = 254780 }, - { url = "https://files.pythonhosted.org/packages/44/b3/cb5bd1a04cfcc49ede6cd8409d80bee17661167686741e041abc7ee1b9a9/coverage-7.13.5-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:04690832cbea4e4663d9149e05dba142546ca05cb1848816760e7f58285c970a", size = 256912 }, - { url = "https://files.pythonhosted.org/packages/1b/66/c1dceb7b9714473800b075f5c8a84f4588f887a90eb8645282031676e242/coverage-7.13.5-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0590e44dd2745c696a778f7bab6aa95256de2cbc8b8cff4f7db8ff09813d6969", size = 251165 }, - { url = "https://files.pythonhosted.org/packages/b7/62/5502b73b97aa2e53ea22a39cf8649ff44827bef76d90bf638777daa27a9d/coverage-7.13.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d7cfad2d6d81dd298ab6b89fe72c3b7b05ec7544bdda3b707ddaecff8d25c161", size = 252908 }, - { url = "https://files.pythonhosted.org/packages/7d/37/7792c2d69854397ca77a55c4646e5897c467928b0e27f2d235d83b5d08c6/coverage-7.13.5-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:e092b9499de38ae0fbfbc603a74660eb6ff3e869e507b50d85a13b6db9863e15", size = 250873 }, - { url = "https://files.pythonhosted.org/packages/a3/23/bc866fb6163be52a8a9e5d708ba0d3b1283c12158cefca0a8bbb6e247a43/coverage-7.13.5-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:48c39bc4a04d983a54a705a6389512883d4a3b9862991b3617d547940e9f52b1", size = 255030 }, - { url = "https://files.pythonhosted.org/packages/7d/8b/ef67e1c222ef49860701d346b8bbb70881bef283bd5f6cbba68a39a086c7/coverage-7.13.5-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:2d3807015f138ffea1ed9afeeb8624fd781703f2858b62a8dd8da5a0994c57b6", size = 250694 }, - { url = "https://files.pythonhosted.org/packages/46/0d/866d1f74f0acddbb906db212e096dee77a8e2158ca5e6bb44729f9d93298/coverage-7.13.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ee2aa19e03161671ec964004fb74b2257805d9710bf14a5c704558b9d8dbaf17", size = 252469 }, - { url = "https://files.pythonhosted.org/packages/7a/f5/be742fec31118f02ce42b21c6af187ad6a344fed546b56ca60caacc6a9a0/coverage-7.13.5-cp313-cp313-win32.whl", hash = "sha256:ce1998c0483007608c8382f4ff50164bfc5bd07a2246dd272aa4043b75e61e85", size = 222112 }, - { url = "https://files.pythonhosted.org/packages/66/40/7732d648ab9d069a46e686043241f01206348e2bbf128daea85be4d6414b/coverage-7.13.5-cp313-cp313-win_amd64.whl", hash = "sha256:631efb83f01569670a5e866ceb80fe483e7c159fac6f167e6571522636104a0b", size = 222923 }, - { url = "https://files.pythonhosted.org/packages/48/af/fea819c12a095781f6ccd504890aaddaf88b8fab263c4940e82c7b770124/coverage-7.13.5-cp313-cp313-win_arm64.whl", hash = "sha256:f4cd16206ad171cbc2470dbea9103cf9a7607d5fe8c242fdf1edf36174020664", size = 221540 }, - { url = "https://files.pythonhosted.org/packages/23/d2/17879af479df7fbbd44bd528a31692a48f6b25055d16482fdf5cdb633805/coverage-7.13.5-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0428cbef5783ad91fe240f673cc1f76b25e74bbfe1a13115e4aa30d3f538162d", size = 220262 }, - { url = "https://files.pythonhosted.org/packages/5b/4c/d20e554f988c8f91d6a02c5118f9abbbf73a8768a3048cb4962230d5743f/coverage-7.13.5-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e0b216a19534b2427cc201a26c25da4a48633f29a487c61258643e89d28200c0", size = 220617 }, - { url = "https://files.pythonhosted.org/packages/29/9c/f9f5277b95184f764b24e7231e166dfdb5780a46d408a2ac665969416d61/coverage-7.13.5-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:972a9cd27894afe4bc2b1480107054e062df08e671df7c2f18c205e805ccd806", size = 261912 }, - { url = "https://files.pythonhosted.org/packages/d5/f6/7f1ab39393eeb50cfe4747ae8ef0e4fc564b989225aa1152e13a180d74f8/coverage-7.13.5-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:4b59148601efcd2bac8c4dbf1f0ad6391693ccf7a74b8205781751637076aee3", size = 263987 }, - { url = "https://files.pythonhosted.org/packages/a0/d7/62c084fb489ed9c6fbdf57e006752e7c516ea46fd690e5ed8b8617c7d52e/coverage-7.13.5-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:505d7083c8b0c87a8fa8c07370c285847c1f77739b22e299ad75a6af6c32c5c9", size = 266416 }, - { url = "https://files.pythonhosted.org/packages/a9/f6/df63d8660e1a0bff6125947afda112a0502736f470d62ca68b288ea762d8/coverage-7.13.5-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:60365289c3741e4db327e7baff2a4aaacf22f788e80fa4683393891b70a89fbd", size = 267558 }, - { url = "https://files.pythonhosted.org/packages/5b/02/353ca81d36779bd108f6d384425f7139ac3c58c750dcfaafe5d0bee6436b/coverage-7.13.5-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1b88c69c8ef5d4b6fe7dea66d6636056a0f6a7527c440e890cf9259011f5e606", size = 261163 }, - { url = "https://files.pythonhosted.org/packages/2c/16/2e79106d5749bcaf3aee6d309123548e3276517cd7851faa8da213bc61bf/coverage-7.13.5-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5b13955d31d1633cf9376908089b7cebe7d15ddad7aeaabcbe969a595a97e95e", size = 263981 }, - { url = "https://files.pythonhosted.org/packages/29/c7/c29e0c59ffa6942030ae6f50b88ae49988e7e8da06de7ecdbf49c6d4feae/coverage-7.13.5-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:f70c9ab2595c56f81a89620e22899eea8b212a4041bd728ac6f4a28bf5d3ddd0", size = 261604 }, - { url = "https://files.pythonhosted.org/packages/40/48/097cdc3db342f34006a308ab41c3a7c11c3f0d84750d340f45d88a782e00/coverage-7.13.5-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:084b84a8c63e8d6fc7e3931b316a9bcafca1458d753c539db82d31ed20091a87", size = 265321 }, - { url = "https://files.pythonhosted.org/packages/bb/1f/4994af354689e14fd03a75f8ec85a9a68d94e0188bbdab3fc1516b55e512/coverage-7.13.5-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:ad14385487393e386e2ea988b09d62dd42c397662ac2dabc3832d71253eee479", size = 260502 }, - { url = "https://files.pythonhosted.org/packages/22/c6/9bb9ef55903e628033560885f5c31aa227e46878118b63ab15dc7ba87797/coverage-7.13.5-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:7f2c47b36fe7709a6e83bfadf4eefb90bd25fbe4014d715224c4316f808e59a2", size = 262688 }, - { url = "https://files.pythonhosted.org/packages/14/4f/f5df9007e50b15e53e01edea486814783a7f019893733d9e4d6caad75557/coverage-7.13.5-cp313-cp313t-win32.whl", hash = "sha256:67e9bc5449801fad0e5dff329499fb090ba4c5800b86805c80617b4e29809b2a", size = 222788 }, - { url = "https://files.pythonhosted.org/packages/e1/98/aa7fccaa97d0f3192bec013c4e6fd6d294a6ed44b640e6bb61f479e00ed5/coverage-7.13.5-cp313-cp313t-win_amd64.whl", hash = "sha256:da86cdcf10d2519e10cabb8ac2de03da1bcb6e4853790b7fbd48523332e3a819", size = 223851 }, - { url = "https://files.pythonhosted.org/packages/3d/8b/e5c469f7352651e5f013198e9e21f97510b23de957dd06a84071683b4b60/coverage-7.13.5-cp313-cp313t-win_arm64.whl", hash = "sha256:0ecf12ecb326fe2c339d93fc131816f3a7367d223db37817208905c89bded911", size = 222104 }, - { url = "https://files.pythonhosted.org/packages/8e/77/39703f0d1d4b478bfd30191d3c14f53caf596fac00efb3f8f6ee23646439/coverage-7.13.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fbabfaceaeb587e16f7008f7795cd80d20ec548dc7f94fbb0d4ec2e038ce563f", size = 219621 }, - { url = "https://files.pythonhosted.org/packages/e2/3e/51dff36d99ae14639a133d9b164d63e628532e2974d8b1edb99dd1ebc733/coverage-7.13.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:9bb2a28101a443669a423b665939381084412b81c3f8c0fcfbac57f4e30b5b8e", size = 219953 }, - { url = "https://files.pythonhosted.org/packages/6a/6c/1f1917b01eb647c2f2adc9962bd66c79eb978951cab61bdc1acab3290c07/coverage-7.13.5-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:bd3a2fbc1c6cccb3c5106140d87cc6a8715110373ef42b63cf5aea29df8c217a", size = 250992 }, - { url = "https://files.pythonhosted.org/packages/22/e5/06b1f88f42a5a99df42ce61208bdec3bddb3d261412874280a19796fc09c/coverage-7.13.5-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:6c36ddb64ed9d7e496028d1d00dfec3e428e0aabf4006583bb1839958d280510", size = 253503 }, - { url = "https://files.pythonhosted.org/packages/80/28/2a148a51e5907e504fa7b85490277734e6771d8844ebcc48764a15e28155/coverage-7.13.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:380e8e9084d8eb38db3a9176a1a4f3c0082c3806fa0dc882d1d87abc3c789247", size = 254852 }, - { url = "https://files.pythonhosted.org/packages/61/77/50e8d3d85cc0b7ebe09f30f151d670e302c7ff4a1bf6243f71dd8b0981fa/coverage-7.13.5-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e808af52a0513762df4d945ea164a24b37f2f518cbe97e03deaa0ee66139b4d6", size = 257161 }, - { url = "https://files.pythonhosted.org/packages/3b/c4/b5fd1d4b7bf8d0e75d997afd3925c59ba629fc8616f1b3aae7605132e256/coverage-7.13.5-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e301d30dd7e95ae068671d746ba8c34e945a82682e62918e41b2679acd2051a0", size = 251021 }, - { url = "https://files.pythonhosted.org/packages/f8/66/6ea21f910e92d69ef0b1c3346ea5922a51bad4446c9126db2ae96ee24c4c/coverage-7.13.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:800bc829053c80d240a687ceeb927a94fd108bbdc68dfbe505d0d75ab578a882", size = 252858 }, - { url = "https://files.pythonhosted.org/packages/9e/ea/879c83cb5d61aa2a35fb80e72715e92672daef8191b84911a643f533840c/coverage-7.13.5-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:0b67af5492adb31940ee418a5a655c28e48165da5afab8c7fa6fd72a142f8740", size = 250823 }, - { url = "https://files.pythonhosted.org/packages/8a/fb/616d95d3adb88b9803b275580bdeee8bd1b69a886d057652521f83d7322f/coverage-7.13.5-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:c9136ff29c3a91e25b1d1552b5308e53a1e0653a23e53b6366d7c2dcbbaf8a16", size = 255099 }, - { url = "https://files.pythonhosted.org/packages/1c/93/25e6917c90ec1c9a56b0b26f6cad6408e5f13bb6b35d484a0d75c9cf000d/coverage-7.13.5-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:cff784eef7f0b8f6cb28804fbddcfa99f89efe4cc35fb5627e3ac58f91ed3ac0", size = 250638 }, - { url = "https://files.pythonhosted.org/packages/fc/7b/dc1776b0464145a929deed214aef9fb1493f159b59ff3c7eeeedf91eddd0/coverage-7.13.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:68a4953be99b17ac3c23b6efbc8a38330d99680c9458927491d18700ef23ded0", size = 252295 }, - { url = "https://files.pythonhosted.org/packages/ea/fb/99cbbc56a26e07762a2740713f3c8f9f3f3106e3a3dd8cc4474954bccd34/coverage-7.13.5-cp314-cp314-win32.whl", hash = "sha256:35a31f2b1578185fbe6aa2e74cea1b1d0bbf4c552774247d9160d29b80ed56cc", size = 222360 }, - { url = "https://files.pythonhosted.org/packages/8d/b7/4758d4f73fb536347cc5e4ad63662f9d60ba9118cb6785e9616b2ce5d7fa/coverage-7.13.5-cp314-cp314-win_amd64.whl", hash = "sha256:2aa055ae1857258f9e0045be26a6d62bdb47a72448b62d7b55f4820f361a2633", size = 223174 }, - { url = "https://files.pythonhosted.org/packages/2c/f2/24d84e1dfe70f8ac9fdf30d338239860d0d1d5da0bda528959d0ebc9da28/coverage-7.13.5-cp314-cp314-win_arm64.whl", hash = "sha256:1b11eef33edeae9d142f9b4358edb76273b3bfd30bc3df9a4f95d0e49caf94e8", size = 221739 }, - { url = "https://files.pythonhosted.org/packages/60/5b/4a168591057b3668c2428bff25dd3ebc21b629d666d90bcdfa0217940e84/coverage-7.13.5-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:10a0c37f0b646eaff7cce1874c31d1f1ccb297688d4c747291f4f4c70741cc8b", size = 220351 }, - { url = "https://files.pythonhosted.org/packages/f5/21/1fd5c4dbfe4a58b6b99649125635df46decdfd4a784c3cd6d410d303e370/coverage-7.13.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b5db73ba3c41c7008037fa731ad5459fc3944cb7452fc0aa9f822ad3533c583c", size = 220612 }, - { url = "https://files.pythonhosted.org/packages/d6/fe/2a924b3055a5e7e4512655a9d4609781b0d62334fa0140c3e742926834e2/coverage-7.13.5-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:750db93a81e3e5a9831b534be7b1229df848b2e125a604fe6651e48aa070e5f9", size = 261985 }, - { url = "https://files.pythonhosted.org/packages/d7/0d/c8928f2bd518c45990fe1a2ab8db42e914ef9b726c975facc4282578c3eb/coverage-7.13.5-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9ddb4f4a5479f2539644be484da179b653273bca1a323947d48ab107b3ed1f29", size = 264107 }, - { url = "https://files.pythonhosted.org/packages/ef/ae/4ae35bbd9a0af9d820362751f0766582833c211224b38665c0f8de3d487f/coverage-7.13.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8a7a2049c14f413163e2bdabd37e41179b1d1ccb10ffc6ccc4b7a718429c607", size = 266513 }, - { url = "https://files.pythonhosted.org/packages/9c/20/d326174c55af36f74eac6ae781612d9492f060ce8244b570bb9d50d9d609/coverage-7.13.5-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e1c85e0b6c05c592ea6d8768a66a254bfb3874b53774b12d4c89c481eb78cb90", size = 267650 }, - { url = "https://files.pythonhosted.org/packages/7a/5e/31484d62cbd0eabd3412e30d74386ece4a0837d4f6c3040a653878bfc019/coverage-7.13.5-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:777c4d1eff1b67876139d24288aaf1817f6c03d6bae9c5cc8d27b83bcfe38fe3", size = 261089 }, - { url = "https://files.pythonhosted.org/packages/e9/d8/49a72d6de146eebb0b7e48cc0f4bc2c0dd858e3d4790ab2b39a2872b62bd/coverage-7.13.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:6697e29b93707167687543480a40f0db8f356e86d9f67ddf2e37e2dfd91a9dab", size = 263982 }, - { url = "https://files.pythonhosted.org/packages/06/3b/0351f1bd566e6e4dd39e978efe7958bde1d32f879e85589de147654f57bb/coverage-7.13.5-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:8fdf453a942c3e4d99bd80088141c4c6960bb232c409d9c3558e2dbaa3998562", size = 261579 }, - { url = "https://files.pythonhosted.org/packages/5d/ce/796a2a2f4017f554d7810f5c573449b35b1e46788424a548d4d19201b222/coverage-7.13.5-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:32ca0c0114c9834a43f045a87dcebd69d108d8ffb666957ea65aa132f50332e2", size = 265316 }, - { url = "https://files.pythonhosted.org/packages/3d/16/d5ae91455541d1a78bc90abf495be600588aff8f6db5c8b0dae739fa39c9/coverage-7.13.5-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:8769751c10f339021e2638cd354e13adeac54004d1941119b2c96fe5276d45ea", size = 260427 }, - { url = "https://files.pythonhosted.org/packages/48/11/07f413dba62db21fb3fad5d0de013a50e073cc4e2dc4306e770360f6dfc8/coverage-7.13.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cec2d83125531bd153175354055cdb7a09987af08a9430bd173c937c6d0fba2a", size = 262745 }, - { url = "https://files.pythonhosted.org/packages/91/15/d792371332eb4663115becf4bad47e047d16234b1aff687b1b18c58d60ae/coverage-7.13.5-cp314-cp314t-win32.whl", hash = "sha256:0cd9ed7a8b181775459296e402ca4fb27db1279740a24e93b3b41942ebe4b215", size = 223146 }, - { url = "https://files.pythonhosted.org/packages/db/51/37221f59a111dca5e85be7dbf09696323b5b9f13ff65e0641d535ed06ea8/coverage-7.13.5-cp314-cp314t-win_amd64.whl", hash = "sha256:301e3b7dfefecaca37c9f1aa6f0049b7d4ab8dd933742b607765d757aca77d43", size = 224254 }, - { url = "https://files.pythonhosted.org/packages/54/83/6acacc889de8987441aa7d5adfbdbf33d288dad28704a67e574f1df9bcbb/coverage-7.13.5-cp314-cp314t-win_arm64.whl", hash = "sha256:9dacc2ad679b292709e0f5fc1ac74a6d4d5562e424058962c7bb0c658ad25e45", size = 222276 }, - { url = "https://files.pythonhosted.org/packages/9e/ee/a4cf96b8ce1e566ed238f0659ac2d3f007ed1d14b181bcb684e19561a69a/coverage-7.13.5-py3-none-any.whl", hash = "sha256:34b02417cf070e173989b3db962f7ed56d2f644307b2cf9d5a0f258e13084a61", size = 211346 }, -] - -[package.optional-dependencies] -toml = [ - { name = "tomli", marker = "python_full_version >= '3.10' and python_full_version <= '3.11'" }, -] - -[[package]] -name = "debugpy" -version = "1.8.20" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e0/b7/cd8080344452e4874aae67c40d8940e2b4d47b01601a8fd9f44786c757c7/debugpy-1.8.20.tar.gz", hash = "sha256:55bc8701714969f1ab89a6d5f2f3d40c36f91b2cbe2f65d98bf8196f6a6a2c33", size = 1645207 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/71/be/8bd693a0b9d53d48c8978fa5d889e06f3b5b03e45fd1ea1e78267b4887cb/debugpy-1.8.20-cp310-cp310-macosx_15_0_x86_64.whl", hash = "sha256:157e96ffb7f80b3ad36d808646198c90acb46fdcfd8bb1999838f0b6f2b59c64", size = 2099192 }, - { url = "https://files.pythonhosted.org/packages/77/1b/85326d07432086a06361d493d2743edd0c4fc2ef62162be7f8618441ac37/debugpy-1.8.20-cp310-cp310-manylinux_2_34_x86_64.whl", hash = "sha256:c1178ae571aff42e61801a38b007af504ec8e05fde1c5c12e5a7efef21009642", size = 3088568 }, - { url = "https://files.pythonhosted.org/packages/e8/60/3e08462ee3eccd10998853eb35947c416e446bfe2bc37dbb886b9044586c/debugpy-1.8.20-cp310-cp310-win32.whl", hash = "sha256:c29dd9d656c0fbd77906a6e6a82ae4881514aa3294b94c903ff99303e789b4a2", size = 5284399 }, - { url = "https://files.pythonhosted.org/packages/72/43/09d49106e770fe558ced5e80df2e3c2ebee10e576eda155dcc5670473663/debugpy-1.8.20-cp310-cp310-win_amd64.whl", hash = "sha256:3ca85463f63b5dd0aa7aaa933d97cbc47c174896dcae8431695872969f981893", size = 5316388 }, - { url = "https://files.pythonhosted.org/packages/51/56/c3baf5cbe4dd77427fd9aef99fcdade259ad128feeb8a786c246adb838e5/debugpy-1.8.20-cp311-cp311-macosx_15_0_universal2.whl", hash = "sha256:eada6042ad88fa1571b74bd5402ee8b86eded7a8f7b827849761700aff171f1b", size = 2208318 }, - { url = "https://files.pythonhosted.org/packages/9a/7d/4fa79a57a8e69fe0d9763e98d1110320f9ecd7f1f362572e3aafd7417c9d/debugpy-1.8.20-cp311-cp311-manylinux_2_34_x86_64.whl", hash = "sha256:7de0b7dfeedc504421032afba845ae2a7bcc32ddfb07dae2c3ca5442f821c344", size = 3171493 }, - { url = "https://files.pythonhosted.org/packages/7d/f2/1e8f8affe51e12a26f3a8a8a4277d6e60aa89d0a66512f63b1e799d424a4/debugpy-1.8.20-cp311-cp311-win32.whl", hash = "sha256:773e839380cf459caf73cc533ea45ec2737a5cc184cf1b3b796cd4fd98504fec", size = 5209240 }, - { url = "https://files.pythonhosted.org/packages/d5/92/1cb532e88560cbee973396254b21bece8c5d7c2ece958a67afa08c9f10dc/debugpy-1.8.20-cp311-cp311-win_amd64.whl", hash = "sha256:1f7650546e0eded1902d0f6af28f787fa1f1dbdbc97ddabaf1cd963a405930cb", size = 5233481 }, - { url = "https://files.pythonhosted.org/packages/14/57/7f34f4736bfb6e00f2e4c96351b07805d83c9a7b33d28580ae01374430f7/debugpy-1.8.20-cp312-cp312-macosx_15_0_universal2.whl", hash = "sha256:4ae3135e2089905a916909ef31922b2d733d756f66d87345b3e5e52b7a55f13d", size = 2550686 }, - { url = "https://files.pythonhosted.org/packages/ab/78/b193a3975ca34458f6f0e24aaf5c3e3da72f5401f6054c0dfd004b41726f/debugpy-1.8.20-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:88f47850a4284b88bd2bfee1f26132147d5d504e4e86c22485dfa44b97e19b4b", size = 4310588 }, - { url = "https://files.pythonhosted.org/packages/c1/55/f14deb95eaf4f30f07ef4b90a8590fc05d9e04df85ee379712f6fb6736d7/debugpy-1.8.20-cp312-cp312-win32.whl", hash = "sha256:4057ac68f892064e5f98209ab582abfee3b543fb55d2e87610ddc133a954d390", size = 5331372 }, - { url = "https://files.pythonhosted.org/packages/a1/39/2bef246368bd42f9bd7cba99844542b74b84dacbdbea0833e610f384fee8/debugpy-1.8.20-cp312-cp312-win_amd64.whl", hash = "sha256:a1a8f851e7cf171330679ef6997e9c579ef6dd33c9098458bd9986a0f4ca52e3", size = 5372835 }, - { url = "https://files.pythonhosted.org/packages/15/e2/fc500524cc6f104a9d049abc85a0a8b3f0d14c0a39b9c140511c61e5b40b/debugpy-1.8.20-cp313-cp313-macosx_15_0_universal2.whl", hash = "sha256:5dff4bb27027821fdfcc9e8f87309a28988231165147c31730128b1c983e282a", size = 2539560 }, - { url = "https://files.pythonhosted.org/packages/90/83/fb33dcea789ed6018f8da20c5a9bc9d82adc65c0c990faed43f7c955da46/debugpy-1.8.20-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:84562982dd7cf5ebebfdea667ca20a064e096099997b175fe204e86817f64eaf", size = 4293272 }, - { url = "https://files.pythonhosted.org/packages/a6/25/b1e4a01bfb824d79a6af24b99ef291e24189080c93576dfd9b1a2815cd0f/debugpy-1.8.20-cp313-cp313-win32.whl", hash = "sha256:da11dea6447b2cadbf8ce2bec59ecea87cc18d2c574980f643f2d2dfe4862393", size = 5331208 }, - { url = "https://files.pythonhosted.org/packages/13/f7/a0b368ce54ffff9e9028c098bd2d28cfc5b54f9f6c186929083d4c60ba58/debugpy-1.8.20-cp313-cp313-win_amd64.whl", hash = "sha256:eb506e45943cab2efb7c6eafdd65b842f3ae779f020c82221f55aca9de135ed7", size = 5372930 }, - { url = "https://files.pythonhosted.org/packages/33/2e/f6cb9a8a13f5058f0a20fe09711a7b726232cd5a78c6a7c05b2ec726cff9/debugpy-1.8.20-cp314-cp314-macosx_15_0_universal2.whl", hash = "sha256:9c74df62fc064cd5e5eaca1353a3ef5a5d50da5eb8058fcef63106f7bebe6173", size = 2538066 }, - { url = "https://files.pythonhosted.org/packages/c5/56/6ddca50b53624e1ca3ce1d1e49ff22db46c47ea5fb4c0cc5c9b90a616364/debugpy-1.8.20-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:077a7447589ee9bc1ff0cdf443566d0ecf540ac8aa7333b775ebcb8ce9f4ecad", size = 4269425 }, - { url = "https://files.pythonhosted.org/packages/c5/d9/d64199c14a0d4c476df46c82470a3ce45c8d183a6796cfb5e66533b3663c/debugpy-1.8.20-cp314-cp314-win32.whl", hash = "sha256:352036a99dd35053b37b7803f748efc456076f929c6a895556932eaf2d23b07f", size = 5331407 }, - { url = "https://files.pythonhosted.org/packages/e0/d9/1f07395b54413432624d61524dfd98c1a7c7827d2abfdb8829ac92638205/debugpy-1.8.20-cp314-cp314-win_amd64.whl", hash = "sha256:a98eec61135465b062846112e5ecf2eebb855305acc1dfbae43b72903b8ab5be", size = 5372521 }, - { url = "https://files.pythonhosted.org/packages/2b/6b/668f21567e3250463beb6a401e7d598baa2a0907224000d7f68b9442c243/debugpy-1.8.20-cp39-cp39-macosx_15_0_x86_64.whl", hash = "sha256:bff8990f040dacb4c314864da95f7168c5a58a30a66e0eea0fb85e2586a92cd6", size = 2100484 }, - { url = "https://files.pythonhosted.org/packages/cf/49/223143d1da586b891f35a45515f152742ad85bfc10d2e02e697f65c83b32/debugpy-1.8.20-cp39-cp39-manylinux_2_34_x86_64.whl", hash = "sha256:70ad9ae09b98ac307b82c16c151d27ee9d68ae007a2e7843ba621b5ce65333b5", size = 3081272 }, - { url = "https://files.pythonhosted.org/packages/b1/24/9f219c9290fe8bee4f63f9af8ebac440c802e6181d7f39a79abcb5fdff2f/debugpy-1.8.20-cp39-cp39-win32.whl", hash = "sha256:9eeed9f953f9a23850c85d440bf51e3c56ed5d25f8560eeb29add815bd32f7ee", size = 5285196 }, - { url = "https://files.pythonhosted.org/packages/ba/f3/4a12d7b1b09e3b79ba6e3edfa0c677b8b8bdf110bc4b3607e0f29fb4e8b3/debugpy-1.8.20-cp39-cp39-win_amd64.whl", hash = "sha256:760813b4fff517c75bfe7923033c107104e76acfef7bda011ffea8736e9a66f8", size = 5317163 }, - { url = "https://files.pythonhosted.org/packages/e0/c3/7f67dea8ccf8fdcb9c99033bbe3e90b9e7395415843accb81428c441be2d/debugpy-1.8.20-py2.py3-none-any.whl", hash = "sha256:5be9bed9ae3be00665a06acaa48f8329d2b9632f15fd09f6a9a8c8d9907e54d7", size = 5337658 }, -] - -[[package]] -name = "decorator" -version = "5.2.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190 }, -] - -[[package]] -name = "defusedxml" -version = "0.7.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", size = 75520 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604 }, -] - -[[package]] -name = "distlib" -version = "0.4.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/96/8e/709914eb2b5749865801041647dc7f4e6d00b549cfe88b65ca192995f07c/distlib-0.4.0.tar.gz", hash = "sha256:feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d", size = 614605 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl", hash = "sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16", size = 469047 }, -] - -[[package]] -name = "docutils" -version = "0.21.2" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version == '3.10.*'", - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/ae/ed/aefcc8cd0ba62a0560c3c18c33925362d46c6075480bfa4df87b28e169a9/docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f", size = 2204444 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2", size = 587408 }, -] - -[[package]] -name = "docutils" -version = "0.22.4" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", - "python_full_version == '3.11.*'", -] -sdist = { url = "https://files.pythonhosted.org/packages/ae/b6/03bb70946330e88ffec97aefd3ea75ba575cb2e762061e0e62a213befee8/docutils-0.22.4.tar.gz", hash = "sha256:4db53b1fde9abecbb74d91230d32ab626d94f6badfc575d6db9194a49df29968", size = 2291750 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl", hash = "sha256:d0013f540772d1420576855455d050a2180186c91c15779301ac2ccb3eeb68de", size = 633196 }, -] - -[[package]] -name = "exceptiongroup" -version = "1.3.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740 }, -] - -[[package]] -name = "executing" -version = "2.2.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cc/28/c14e053b6762b1044f34a13aab6859bbf40456d37d23aa286ac24cfd9a5d/executing-2.2.1.tar.gz", hash = "sha256:3632cc370565f6648cc328b32435bd120a1e4ebb20c77e3fdde9a13cd1e533c4", size = 1129488 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl", hash = "sha256:760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017", size = 28317 }, -] - -[[package]] -name = "fastjsonschema" -version = "2.21.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/20/b5/23b216d9d985a956623b6bd12d4086b60f0059b27799f23016af04a74ea1/fastjsonschema-2.21.2.tar.gz", hash = "sha256:b1eb43748041c880796cd077f1a07c3d94e93ae84bba5ed36800a33554ae05de", size = 374130 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl", hash = "sha256:1c797122d0a86c5cace2e54bf4e819c36223b552017172f32c5c024a6b77e463", size = 24024 }, -] - -[[package]] -name = "filelock" -version = "3.19.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/40/bb/0ab3e58d22305b6f5440629d20683af28959bf793d98d11950e305c1c326/filelock-3.19.1.tar.gz", hash = "sha256:66eda1888b0171c998b35be2bcc0f6d75c388a7ce20c3f3f37aa8e96c2dddf58", size = 17687 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/42/14/42b2651a2f46b022ccd948bca9f2d5af0fd8929c4eec235b8d6d844fbe67/filelock-3.19.1-py3-none-any.whl", hash = "sha256:d38e30481def20772f5baf097c122c3babc4fcdb7e14e57049eb9d88c6dc017d", size = 15988 }, -] - -[[package]] -name = "filelock" -version = "3.25.2" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] -sdist = { url = "https://files.pythonhosted.org/packages/94/b8/00651a0f559862f3bb7d6f7477b192afe3f583cc5e26403b44e59a55ab34/filelock-3.25.2.tar.gz", hash = "sha256:b64ece2b38f4ca29dd3e810287aa8c48182bbecd1ae6e9ae126c9b35f1382694", size = 40480 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl", hash = "sha256:ca8afb0da15f229774c9ad1b455ed96e85a81373065fb10446672f64444ddf70", size = 26759 }, -] - -[[package]] -name = "fqdn" -version = "1.5.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/30/3e/a80a8c077fd798951169626cde3e239adeba7dab75deb3555716415bd9b0/fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f", size = 6015 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014", size = 9121 }, -] - -[[package]] -name = "h11" -version = "0.16.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515 }, -] - -[[package]] -name = "httpcore" -version = "1.0.9" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "certifi" }, - { name = "h11" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784 }, -] - -[[package]] -name = "httpx" -version = "0.28.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "anyio", version = "4.12.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "anyio", version = "4.13.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "certifi" }, - { name = "httpcore" }, - { name = "idna" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517 }, -] - -[[package]] -name = "identify" -version = "2.6.15" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/ff/e7/685de97986c916a6d93b3876139e00eef26ad5bbbd61925d670ae8013449/identify-2.6.15.tar.gz", hash = "sha256:e4f4864b96c6557ef2a1e1c951771838f4edc9df3a72ec7118b338801b11c7bf", size = 99311 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0f/1c/e5fd8f973d4f375adb21565739498e2e9a1e54c858a97b9a8ccfdc81da9b/identify-2.6.15-py2.py3-none-any.whl", hash = "sha256:1181ef7608e00704db228516541eb83a88a9f94433a8c80bb9b5bd54b1d81757", size = 99183 }, -] - -[[package]] -name = "identify" -version = "2.6.18" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] -sdist = { url = "https://files.pythonhosted.org/packages/46/c4/7fb4db12296cdb11893d61c92048fe617ee853f8523b9b296ac03b43757e/identify-2.6.18.tar.gz", hash = "sha256:873ac56a5e3fd63e7438a7ecbc4d91aca692eb3fefa4534db2b7913f3fc352fd", size = 99580 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/46/33/92ef41c6fad0233e41d3d84ba8e8ad18d1780f1e5d99b3c683e6d7f98b63/identify-2.6.18-py2.py3-none-any.whl", hash = "sha256:8db9d3c8ea9079db92cafb0ebf97abdc09d52e97f4dcf773a2e694048b7cd737", size = 99394 }, -] - -[[package]] -name = "idna" -version = "3.11" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008 }, -] - -[[package]] -name = "imagesize" -version = "1.5.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/cf/59/4b0dd64676aa6fb4986a755790cb6fc558559cf0084effad516820208ec3/imagesize-1.5.0.tar.gz", hash = "sha256:8bfc5363a7f2133a89f0098451e0bcb1cd71aba4dc02bbcecb39d99d40e1b94f", size = 1281127 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1e/b1/a0662b03103c66cf77101a187f396ea91167cd9b7d5d3a2e465ad2c7ee9b/imagesize-1.5.0-py2.py3-none-any.whl", hash = "sha256:32677681b3f434c2cb496f00e89c5a291247b35b1f527589909e008057da5899", size = 5763 }, -] - -[[package]] -name = "imagesize" -version = "2.0.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] -sdist = { url = "https://files.pythonhosted.org/packages/6c/e6/7bf14eeb8f8b7251141944835abd42eb20a658d89084b7e1f3e5fe394090/imagesize-2.0.0.tar.gz", hash = "sha256:8e8358c4a05c304f1fccf7ff96f036e7243a189e9e42e90851993c558cfe9ee3", size = 1773045 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl", hash = "sha256:5667c5bbb57ab3f1fa4bc366f4fbc971db3d5ed011fd2715fd8001f782718d96", size = 9441 }, -] - -[[package]] -name = "importlib-metadata" -version = "8.7.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "zipp", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f3/49/3b30cad09e7771a4982d9975a8cbf64f00d4a1ececb53297f1d9a7be1b10/importlib_metadata-8.7.1.tar.gz", hash = "sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb", size = 57107 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fa/5e/f8e9a1d23b9c20a551a8a02ea3637b4642e22c2626e3a13a9a29cdea99eb/importlib_metadata-8.7.1-py3-none-any.whl", hash = "sha256:5a1f80bf1daa489495071efbb095d75a634cf28a8bc299581244063b53176151", size = 27865 }, -] - -[[package]] -name = "iniconfig" -version = "2.1.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050 }, -] - -[[package]] -name = "iniconfig" -version = "2.3.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] -sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484 }, -] - -[[package]] -name = "ipykernel" -version = "6.31.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "appnope", marker = "python_full_version < '3.10' and sys_platform == 'darwin'" }, - { name = "comm", marker = "python_full_version < '3.10'" }, - { name = "debugpy", marker = "python_full_version < '3.10'" }, - { name = "ipython", version = "8.18.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "jupyter-client", version = "8.6.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "jupyter-core", version = "5.8.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "matplotlib-inline", marker = "python_full_version < '3.10'" }, - { name = "nest-asyncio", marker = "python_full_version < '3.10'" }, - { name = "packaging", marker = "python_full_version < '3.10'" }, - { name = "psutil", marker = "python_full_version < '3.10'" }, - { name = "pyzmq", marker = "python_full_version < '3.10'" }, - { name = "tornado", marker = "python_full_version < '3.10'" }, - { name = "traitlets", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a5/1d/d5ba6edbfe6fae4c3105bca3a9c889563cc752c7f2de45e333164c7f4846/ipykernel-6.31.0.tar.gz", hash = "sha256:2372ce8bc1ff4f34e58cafed3a0feb2194b91fc7cad0fc72e79e47b45ee9e8f6", size = 167493 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f6/d8/502954a4ec0efcf264f99b65b41c3c54e65a647d9f0d6f62cd02227d242c/ipykernel-6.31.0-py3-none-any.whl", hash = "sha256:abe5386f6ced727a70e0eb0cf1da801fa7c5fa6ff82147747d5a0406cd8c94af", size = 117003 }, -] - -[[package]] -name = "ipykernel" -version = "7.2.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] -dependencies = [ - { name = "appnope", marker = "python_full_version >= '3.10' and sys_platform == 'darwin'" }, - { name = "comm", marker = "python_full_version >= '3.10'" }, - { name = "debugpy", marker = "python_full_version >= '3.10'" }, - { name = "ipython", version = "8.39.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, - { name = "ipython", version = "9.10.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, - { name = "ipython", version = "9.12.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, - { name = "jupyter-client", version = "8.8.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "jupyter-core", version = "5.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "matplotlib-inline", marker = "python_full_version >= '3.10'" }, - { name = "nest-asyncio", marker = "python_full_version >= '3.10'" }, - { name = "packaging", marker = "python_full_version >= '3.10'" }, - { name = "psutil", marker = "python_full_version >= '3.10'" }, - { name = "pyzmq", marker = "python_full_version >= '3.10'" }, - { name = "tornado", marker = "python_full_version >= '3.10'" }, - { name = "traitlets", marker = "python_full_version >= '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ca/8d/b68b728e2d06b9e0051019640a40a9eb7a88fcd82c2e1b5ce70bef5ff044/ipykernel-7.2.0.tar.gz", hash = "sha256:18ed160b6dee2cbb16e5f3575858bc19d8f1fe6046a9a680c708494ce31d909e", size = 176046 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/82/b9/e73d5d9f405cba7706c539aa8b311b49d4c2f3d698d9c12f815231169c71/ipykernel-7.2.0-py3-none-any.whl", hash = "sha256:3bbd4420d2b3cc105cbdf3756bfc04500b1e52f090a90716851f3916c62e1661", size = 118788 }, -] - -[[package]] -name = "ipython" -version = "8.18.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "colorama", marker = "python_full_version < '3.10' and sys_platform == 'win32'" }, - { name = "decorator", marker = "python_full_version < '3.10'" }, - { name = "exceptiongroup", marker = "python_full_version < '3.10'" }, - { name = "jedi", marker = "python_full_version < '3.10'" }, - { name = "matplotlib-inline", marker = "python_full_version < '3.10'" }, - { name = "pexpect", marker = "python_full_version < '3.10' and sys_platform != 'win32'" }, - { name = "prompt-toolkit", marker = "python_full_version < '3.10'" }, - { name = "pygments", marker = "python_full_version < '3.10'" }, - { name = "stack-data", marker = "python_full_version < '3.10'" }, - { name = "traitlets", marker = "python_full_version < '3.10'" }, - { name = "typing-extensions", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b1/b9/3ba6c45a6df813c09a48bac313c22ff83efa26cbb55011218d925a46e2ad/ipython-8.18.1.tar.gz", hash = "sha256:ca6f079bb33457c66e233e4580ebfc4128855b4cf6370dddd73842a9563e8a27", size = 5486330 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/47/6b/d9fdcdef2eb6a23f391251fde8781c38d42acd82abe84d054cb74f7863b0/ipython-8.18.1-py3-none-any.whl", hash = "sha256:e8267419d72d81955ec1177f8a29aaa90ac80ad647499201119e2f05e99aa397", size = 808161 }, -] - -[[package]] -name = "ipython" -version = "8.39.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version == '3.10.*'", -] -dependencies = [ - { name = "colorama", marker = "python_full_version == '3.10.*' and sys_platform == 'win32'" }, - { name = "decorator", marker = "python_full_version == '3.10.*'" }, - { name = "exceptiongroup", marker = "python_full_version == '3.10.*'" }, - { name = "jedi", marker = "python_full_version == '3.10.*'" }, - { name = "matplotlib-inline", marker = "python_full_version == '3.10.*'" }, - { name = "pexpect", marker = "python_full_version == '3.10.*' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "prompt-toolkit", marker = "python_full_version == '3.10.*'" }, - { name = "pygments", marker = "python_full_version == '3.10.*'" }, - { name = "stack-data", marker = "python_full_version == '3.10.*'" }, - { name = "traitlets", marker = "python_full_version == '3.10.*'" }, - { name = "typing-extensions", marker = "python_full_version == '3.10.*'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/40/18/f8598d287006885e7136451fdea0755af4ebcbfe342836f24deefaed1164/ipython-8.39.0.tar.gz", hash = "sha256:4110ae96012c379b8b6db898a07e186c40a2a1ef5d57a7fa83166047d9da7624", size = 5513971 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/56/4cc7fc9e9e3f38fd324f24f8afe0ad8bb5fa41283f37f1aaf9de0612c968/ipython-8.39.0-py3-none-any.whl", hash = "sha256:bb3c51c4fa8148ab1dea07a79584d1c854e234ea44aa1283bcb37bc75054651f", size = 831849 }, -] - -[[package]] -name = "ipython" -version = "9.10.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version == '3.11.*'", -] -dependencies = [ - { name = "colorama", marker = "python_full_version == '3.11.*' and sys_platform == 'win32'" }, - { name = "decorator", marker = "python_full_version == '3.11.*'" }, - { name = "ipython-pygments-lexers", marker = "python_full_version == '3.11.*'" }, - { name = "jedi", marker = "python_full_version == '3.11.*'" }, - { name = "matplotlib-inline", marker = "python_full_version == '3.11.*'" }, - { name = "pexpect", marker = "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "prompt-toolkit", marker = "python_full_version == '3.11.*'" }, - { name = "pygments", marker = "python_full_version == '3.11.*'" }, - { name = "stack-data", marker = "python_full_version == '3.11.*'" }, - { name = "traitlets", marker = "python_full_version == '3.11.*'" }, - { name = "typing-extensions", marker = "python_full_version == '3.11.*'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/c5/25/daae0e764047b0a2480c7bbb25d48f4f509b5818636562eeac145d06dfee/ipython-9.10.1.tar.gz", hash = "sha256:e170e9b2a44312484415bdb750492699bf329233b03f2557a9692cce6466ada4", size = 4426663 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/01/09/ba70f8d662d5671687da55ad2cc0064cf795b15e1eea70907532202e7c97/ipython-9.10.1-py3-none-any.whl", hash = "sha256:82d18ae9fb9164ded080c71ef92a182ee35ee7db2395f67616034bebb020a232", size = 622827 }, -] - -[[package]] -name = "ipython" -version = "9.12.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", -] -dependencies = [ - { name = "colorama", marker = "python_full_version >= '3.12' and sys_platform == 'win32'" }, - { name = "decorator", marker = "python_full_version >= '3.12'" }, - { name = "ipython-pygments-lexers", marker = "python_full_version >= '3.12'" }, - { name = "jedi", marker = "python_full_version >= '3.12'" }, - { name = "matplotlib-inline", marker = "python_full_version >= '3.12'" }, - { name = "pexpect", marker = "python_full_version >= '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "prompt-toolkit", marker = "python_full_version >= '3.12'" }, - { name = "pygments", marker = "python_full_version >= '3.12'" }, - { name = "stack-data", marker = "python_full_version >= '3.12'" }, - { name = "traitlets", marker = "python_full_version >= '3.12'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/3a/73/7114f80a8f9cabdb13c27732dce24af945b2923dcab80723602f7c8bc2d8/ipython-9.12.0.tar.gz", hash = "sha256:01daa83f504b693ba523b5a407246cabde4eb4513285a3c6acaff11a66735ee4", size = 4428879 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/59/22/906c8108974c673ebef6356c506cebb6870d48cedea3c41e949e2dd556bb/ipython-9.12.0-py3-none-any.whl", hash = "sha256:0f2701e8ee86e117e37f50563205d36feaa259d2e08d4a6bc6b6d74b18ce128d", size = 625661 }, -] - -[[package]] -name = "ipython-pygments-lexers" -version = "1.1.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pygments", marker = "python_full_version >= '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074 }, -] - -[[package]] -name = "isoduration" -version = "20.11.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "arrow" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/7c/1a/3c8edc664e06e6bd06cce40c6b22da5f1429aa4224d0c590f3be21c91ead/isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9", size = 11649 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042", size = 11321 }, -] - -[[package]] -name = "jedi" -version = "0.19.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "parso" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278 }, -] - -[[package]] -name = "jinja2" -version = "3.1.6" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "markupsafe" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899 }, -] - -[[package]] -name = "json5" -version = "0.14.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9c/4b/6f8906aaf67d501e259b0adab4d312945bb7211e8b8d4dcc77c92320edaa/json5-0.14.0.tar.gz", hash = "sha256:b3f492fad9f6cdbced8b7d40b28b9b1c9701c5f561bef0d33b81c2ff433fefcb", size = 52656 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b8/42/cf027b4ac873b076189d935b135397675dac80cb29acb13e1ab86ad6c631/json5-0.14.0-py3-none-any.whl", hash = "sha256:56cf861bab076b1178eb8c92e1311d273a9b9acea2ccc82c276abf839ebaef3a", size = 36271 }, -] - -[[package]] -name = "jsonpointer" -version = "3.0.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/6a/0a/eebeb1fa92507ea94016a2a790b93c2ae41a7e18778f85471dc54475ed25/jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef", size = 9114 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942", size = 7595 }, -] - -[[package]] -name = "jsonpointer" -version = "3.1.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] -sdist = { url = "https://files.pythonhosted.org/packages/18/c7/af399a2e7a67fd18d63c40c5e62d3af4e67b836a2107468b6a5ea24c4304/jsonpointer-3.1.1.tar.gz", hash = "sha256:0b801c7db33a904024f6004d526dcc53bbb8a4a0f4e32bfd10beadf60adf1900", size = 9068 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/6a/a83720e953b1682d2d109d3c2dbb0bc9bf28cc1cbc205be4ef4be5da709d/jsonpointer-3.1.1-py3-none-any.whl", hash = "sha256:8ff8b95779d071ba472cf5bc913028df06031797532f08a7d5b602d8b2a488ca", size = 7659 }, -] - -[[package]] -name = "jsonschema" -version = "4.25.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "attrs", marker = "python_full_version < '3.10'" }, - { name = "jsonschema-specifications", marker = "python_full_version < '3.10'" }, - { name = "referencing", version = "0.36.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "rpds-py", version = "0.27.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/74/69/f7185de793a29082a9f3c7728268ffb31cb5095131a9c139a74078e27336/jsonschema-4.25.1.tar.gz", hash = "sha256:e4a9655ce0da0c0b67a085847e00a3a51449e1157f4f75e9fb5aa545e122eb85", size = 357342 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl", hash = "sha256:3fba0169e345c7175110351d456342c364814cfcf3b964ba4587f22915230a63", size = 90040 }, -] - -[package.optional-dependencies] -format-nongpl = [ - { name = "fqdn", marker = "python_full_version < '3.10'" }, - { name = "idna", marker = "python_full_version < '3.10'" }, - { name = "isoduration", marker = "python_full_version < '3.10'" }, - { name = "jsonpointer", version = "3.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "rfc3339-validator", marker = "python_full_version < '3.10'" }, - { name = "rfc3986-validator", marker = "python_full_version < '3.10'" }, - { name = "rfc3987-syntax", marker = "python_full_version < '3.10'" }, - { name = "uri-template", marker = "python_full_version < '3.10'" }, - { name = "webcolors", version = "24.11.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, -] - -[[package]] -name = "jsonschema" -version = "4.26.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] -dependencies = [ - { name = "attrs", marker = "python_full_version >= '3.10'" }, - { name = "jsonschema-specifications", marker = "python_full_version >= '3.10'" }, - { name = "referencing", version = "0.37.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "rpds-py", version = "0.30.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b3/fc/e067678238fa451312d4c62bf6e6cf5ec56375422aee02f9cb5f909b3047/jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326", size = 366583 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl", hash = "sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce", size = 90630 }, -] - -[package.optional-dependencies] -format-nongpl = [ - { name = "fqdn", marker = "python_full_version >= '3.10'" }, - { name = "idna", marker = "python_full_version >= '3.10'" }, - { name = "isoduration", marker = "python_full_version >= '3.10'" }, - { name = "jsonpointer", version = "3.1.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "rfc3339-validator", marker = "python_full_version >= '3.10'" }, - { name = "rfc3986-validator", marker = "python_full_version >= '3.10'" }, - { name = "rfc3987-syntax", marker = "python_full_version >= '3.10'" }, - { name = "uri-template", marker = "python_full_version >= '3.10'" }, - { name = "webcolors", version = "25.10.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, -] - -[[package]] -name = "jsonschema-specifications" -version = "2025.9.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "referencing", version = "0.36.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "referencing", version = "0.37.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437 }, -] - -[[package]] -name = "jupyter-client" -version = "8.6.3" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, - { name = "jupyter-core", version = "5.8.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "python-dateutil", marker = "python_full_version < '3.10'" }, - { name = "pyzmq", marker = "python_full_version < '3.10'" }, - { name = "tornado", marker = "python_full_version < '3.10'" }, - { name = "traitlets", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/71/22/bf9f12fdaeae18019a468b68952a60fe6dbab5d67cd2a103cac7659b41ca/jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419", size = 342019 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f", size = 106105 }, -] - -[[package]] -name = "jupyter-client" -version = "8.8.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] -dependencies = [ - { name = "jupyter-core", version = "5.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "python-dateutil", marker = "python_full_version >= '3.10'" }, - { name = "pyzmq", marker = "python_full_version >= '3.10'" }, - { name = "tornado", marker = "python_full_version >= '3.10'" }, - { name = "traitlets", marker = "python_full_version >= '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/05/e4/ba649102a3bc3fbca54e7239fb924fd434c766f855693d86de0b1f2bec81/jupyter_client-8.8.0.tar.gz", hash = "sha256:d556811419a4f2d96c869af34e854e3f059b7cc2d6d01a9cd9c85c267691be3e", size = 348020 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2d/0b/ceb7694d864abc0a047649aec263878acb9f792e1fec3e676f22dc9015e3/jupyter_client-8.8.0-py3-none-any.whl", hash = "sha256:f93a5b99c5e23a507b773d3a1136bd6e16c67883ccdbd9a829b0bbdb98cd7d7a", size = 107371 }, -] - -[[package]] -name = "jupyter-core" -version = "5.8.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "platformdirs", version = "4.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "pywin32", marker = "python_full_version < '3.10' and platform_python_implementation != 'PyPy' and sys_platform == 'win32'" }, - { name = "traitlets", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/99/1b/72906d554acfeb588332eaaa6f61577705e9ec752ddb486f302dafa292d9/jupyter_core-5.8.1.tar.gz", hash = "sha256:0a5f9706f70e64786b75acba995988915ebd4601c8a52e534a40b51c95f59941", size = 88923 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2f/57/6bffd4b20b88da3800c5d691e0337761576ee688eb01299eae865689d2df/jupyter_core-5.8.1-py3-none-any.whl", hash = "sha256:c28d268fc90fb53f1338ded2eb410704c5449a358406e8a948b75706e24863d0", size = 28880 }, -] - -[[package]] -name = "jupyter-core" -version = "5.9.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] -dependencies = [ - { name = "platformdirs", version = "4.9.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "traitlets", marker = "python_full_version >= '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/02/49/9d1284d0dc65e2c757b74c6687b6d319b02f822ad039e5c512df9194d9dd/jupyter_core-5.9.1.tar.gz", hash = "sha256:4d09aaff303b9566c3ce657f580bd089ff5c91f5f89cf7d8846c3cdf465b5508", size = 89814 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl", hash = "sha256:ebf87fdc6073d142e114c72c9e29a9d7ca03fad818c5d300ce2adc1fb0743407", size = 29032 }, -] - -[[package]] -name = "jupyter-events" -version = "0.12.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "jsonschema", version = "4.25.1", source = { registry = "https://pypi.org/simple" }, extra = ["format-nongpl"], marker = "python_full_version < '3.10'" }, - { name = "jsonschema", version = "4.26.0", source = { registry = "https://pypi.org/simple" }, extra = ["format-nongpl"], marker = "python_full_version >= '3.10'" }, - { name = "packaging" }, - { name = "python-json-logger", version = "4.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "python-json-logger", version = "4.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "pyyaml" }, - { name = "referencing", version = "0.36.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "referencing", version = "0.37.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "rfc3339-validator" }, - { name = "rfc3986-validator" }, - { name = "traitlets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/9d/c3/306d090461e4cf3cd91eceaff84bede12a8e52cd821c2d20c9a4fd728385/jupyter_events-0.12.0.tar.gz", hash = "sha256:fc3fce98865f6784c9cd0a56a20644fc6098f21c8c33834a8d9fe383c17e554b", size = 62196 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl", hash = "sha256:6464b2fa5ad10451c3d35fabc75eab39556ae1e2853ad0c0cc31b656731a97fb", size = 19430 }, -] - -[[package]] -name = "jupyter-lsp" -version = "2.3.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, - { name = "jupyter-server" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/eb/5a/9066c9f8e94ee517133cd98dba393459a16cd48bba71a82f16a65415206c/jupyter_lsp-2.3.0.tar.gz", hash = "sha256:458aa59339dc868fb784d73364f17dbce8836e906cd75fd471a325cba02e0245", size = 54823 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-py3-none-any.whl", hash = "sha256:e914a3cb2addf48b1c7710914771aaf1819d46b2e5a79b0f917b5478ec93f34f", size = 76687 }, -] - -[[package]] -name = "jupyter-server" -version = "2.17.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "anyio", version = "4.12.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "anyio", version = "4.13.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "argon2-cffi" }, - { name = "jinja2" }, - { name = "jupyter-client", version = "8.6.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "jupyter-client", version = "8.8.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "jupyter-core", version = "5.8.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "jupyter-core", version = "5.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "jupyter-events" }, - { name = "jupyter-server-terminals" }, - { name = "nbconvert" }, - { name = "nbformat" }, - { name = "overrides", marker = "python_full_version < '3.12'" }, - { name = "packaging" }, - { name = "prometheus-client" }, - { name = "pywinpty", marker = "os_name == 'nt'" }, - { name = "pyzmq" }, - { name = "send2trash" }, - { name = "terminado" }, - { name = "tornado" }, - { name = "traitlets" }, - { name = "websocket-client" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/5b/ac/e040ec363d7b6b1f11304cc9f209dac4517ece5d5e01821366b924a64a50/jupyter_server-2.17.0.tar.gz", hash = "sha256:c38ea898566964c888b4772ae1ed58eca84592e88251d2cfc4d171f81f7e99d5", size = 731949 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl", hash = "sha256:e8cb9c7db4251f51ed307e329b81b72ccf2056ff82d50524debde1ee1870e13f", size = 388221 }, -] - -[[package]] -name = "jupyter-server-terminals" -version = "0.5.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pywinpty", marker = "os_name == 'nt'" }, - { name = "terminado" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f4/a7/bcd0a9b0cbba88986fe944aaaf91bfda603e5a50bda8ed15123f381a3b2f/jupyter_server_terminals-0.5.4.tar.gz", hash = "sha256:bbda128ed41d0be9020349f9f1f2a4ab9952a73ed5f5ac9f1419794761fb87f5", size = 31770 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl", hash = "sha256:55be353fc74a80bc7f3b20e6be50a55a61cd525626f578dcb66a5708e2007d14", size = 13704 }, -] - -[[package]] -name = "jupyterlab" -version = "4.5.6" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "async-lru", version = "2.0.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "async-lru", version = "2.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "httpx" }, - { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, - { name = "ipykernel", version = "6.31.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "ipykernel", version = "7.2.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "jinja2" }, - { name = "jupyter-core", version = "5.8.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "jupyter-core", version = "5.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "jupyter-lsp" }, - { name = "jupyter-server" }, - { name = "jupyterlab-server" }, - { name = "notebook-shim" }, - { name = "packaging" }, - { name = "setuptools" }, - { name = "tomli", marker = "python_full_version < '3.11'" }, - { name = "tornado" }, - { name = "traitlets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ac/d5/730628e03fff2e8a8e8ccdaedde1489ab1309f9a4fa2536248884e30b7c7/jupyterlab-4.5.6.tar.gz", hash = "sha256:642fe2cfe7f0f5922a8a558ba7a0d246c7bc133b708dfe43f7b3a826d163cf42", size = 23970670 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e1/1b/dad6fdcc658ed7af26fdf3841e7394072c9549a8b896c381ab49dd11e2d9/jupyterlab-4.5.6-py3-none-any.whl", hash = "sha256:d6b3dac883aa4d9993348e0f8e95b24624f75099aed64eab6a4351a9cdd1e580", size = 12447124 }, -] - -[[package]] -name = "jupyterlab-pygments" -version = "0.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/90/51/9187be60d989df97f5f0aba133fa54e7300f17616e065d1ada7d7646b6d6/jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d", size = 512900 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780", size = 15884 }, -] - -[[package]] -name = "jupyterlab-server" -version = "2.28.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "babel" }, - { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, - { name = "jinja2" }, - { name = "json5" }, - { name = "jsonschema", version = "4.25.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "jsonschema", version = "4.26.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "jupyter-server" }, - { name = "packaging" }, - { name = "requests", version = "2.32.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "requests", version = "2.33.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/d6/2c/90153f189e421e93c4bb4f9e3f59802a1f01abd2ac5cf40b152d7f735232/jupyterlab_server-2.28.0.tar.gz", hash = "sha256:35baa81898b15f93573e2deca50d11ac0ae407ebb688299d3a5213265033712c", size = 76996 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e0/07/a000fe835f76b7e1143242ab1122e6362ef1c03f23f83a045c38859c2ae0/jupyterlab_server-2.28.0-py3-none-any.whl", hash = "sha256:e4355b148fdcf34d312bbbc80f22467d6d20460e8b8736bf235577dd18506968", size = 59830 }, -] - -[[package]] -name = "lark" -version = "1.3.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/da/34/28fff3ab31ccff1fd4f6c7c7b0ceb2b6968d8ea4950663eadcb5720591a0/lark-1.3.1.tar.gz", hash = "sha256:b426a7a6d6d53189d318f2b6236ab5d6429eaf09259f1ca33eb716eed10d2905", size = 382732 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/82/3d/14ce75ef66813643812f3093ab17e46d3a206942ce7376d31ec2d36229e7/lark-1.3.1-py3-none-any.whl", hash = "sha256:c629b661023a014c37da873b4ff58a817398d12635d3bbb2c5a03be7fe5d1e12", size = 113151 }, -] - -[[package]] -name = "markupsafe" -version = "3.0.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e8/4b/3541d44f3937ba468b75da9eebcae497dcf67adb65caa16760b0a6807ebb/markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559", size = 11631 }, - { url = "https://files.pythonhosted.org/packages/98/1b/fbd8eed11021cabd9226c37342fa6ca4e8a98d8188a8d9b66740494960e4/markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419", size = 12057 }, - { url = "https://files.pythonhosted.org/packages/40/01/e560d658dc0bb8ab762670ece35281dec7b6c1b33f5fbc09ebb57a185519/markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695", size = 22050 }, - { url = "https://files.pythonhosted.org/packages/af/cd/ce6e848bbf2c32314c9b237839119c5a564a59725b53157c856e90937b7a/markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591", size = 20681 }, - { url = "https://files.pythonhosted.org/packages/c9/2a/b5c12c809f1c3045c4d580b035a743d12fcde53cf685dbc44660826308da/markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c", size = 20705 }, - { url = "https://files.pythonhosted.org/packages/cf/e3/9427a68c82728d0a88c50f890d0fc072a1484de2f3ac1ad0bfc1a7214fd5/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f", size = 21524 }, - { url = "https://files.pythonhosted.org/packages/bc/36/23578f29e9e582a4d0278e009b38081dbe363c5e7165113fad546918a232/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6", size = 20282 }, - { url = "https://files.pythonhosted.org/packages/56/21/dca11354e756ebd03e036bd8ad58d6d7168c80ce1fe5e75218e4945cbab7/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1", size = 20745 }, - { url = "https://files.pythonhosted.org/packages/87/99/faba9369a7ad6e4d10b6a5fbf71fa2a188fe4a593b15f0963b73859a1bbd/markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa", size = 14571 }, - { url = "https://files.pythonhosted.org/packages/d6/25/55dc3ab959917602c96985cb1253efaa4ff42f71194bddeb61eb7278b8be/markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8", size = 15056 }, - { url = "https://files.pythonhosted.org/packages/d0/9e/0a02226640c255d1da0b8d12e24ac2aa6734da68bff14c05dd53b94a0fc3/markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1", size = 13932 }, - { url = "https://files.pythonhosted.org/packages/08/db/fefacb2136439fc8dd20e797950e749aa1f4997ed584c62cfb8ef7c2be0e/markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad", size = 11631 }, - { url = "https://files.pythonhosted.org/packages/e1/2e/5898933336b61975ce9dc04decbc0a7f2fee78c30353c5efba7f2d6ff27a/markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a", size = 12058 }, - { url = "https://files.pythonhosted.org/packages/1d/09/adf2df3699d87d1d8184038df46a9c80d78c0148492323f4693df54e17bb/markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50", size = 24287 }, - { url = "https://files.pythonhosted.org/packages/30/ac/0273f6fcb5f42e314c6d8cd99effae6a5354604d461b8d392b5ec9530a54/markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf", size = 22940 }, - { url = "https://files.pythonhosted.org/packages/19/ae/31c1be199ef767124c042c6c3e904da327a2f7f0cd63a0337e1eca2967a8/markupsafe-3.0.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f", size = 21887 }, - { url = "https://files.pythonhosted.org/packages/b2/76/7edcab99d5349a4532a459e1fe64f0b0467a3365056ae550d3bcf3f79e1e/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a", size = 23692 }, - { url = "https://files.pythonhosted.org/packages/a4/28/6e74cdd26d7514849143d69f0bf2399f929c37dc2b31e6829fd2045b2765/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115", size = 21471 }, - { url = "https://files.pythonhosted.org/packages/62/7e/a145f36a5c2945673e590850a6f8014318d5577ed7e5920a4b3448e0865d/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a", size = 22923 }, - { url = "https://files.pythonhosted.org/packages/0f/62/d9c46a7f5c9adbeeeda52f5b8d802e1094e9717705a645efc71b0913a0a8/markupsafe-3.0.3-cp311-cp311-win32.whl", hash = "sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19", size = 14572 }, - { url = "https://files.pythonhosted.org/packages/83/8a/4414c03d3f891739326e1783338e48fb49781cc915b2e0ee052aa490d586/markupsafe-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01", size = 15077 }, - { url = "https://files.pythonhosted.org/packages/35/73/893072b42e6862f319b5207adc9ae06070f095b358655f077f69a35601f0/markupsafe-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c", size = 13876 }, - { url = "https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615 }, - { url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020 }, - { url = "https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", size = 24332 }, - { url = "https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d", size = 22947 }, - { url = "https://files.pythonhosted.org/packages/2c/54/887f3092a85238093a0b2154bd629c89444f395618842e8b0c41783898ea/markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a", size = 21962 }, - { url = "https://files.pythonhosted.org/packages/c9/2f/336b8c7b6f4a4d95e91119dc8521402461b74a485558d8f238a68312f11c/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b", size = 23760 }, - { url = "https://files.pythonhosted.org/packages/32/43/67935f2b7e4982ffb50a4d169b724d74b62a3964bc1a9a527f5ac4f1ee2b/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f", size = 21529 }, - { url = "https://files.pythonhosted.org/packages/89/e0/4486f11e51bbba8b0c041098859e869e304d1c261e59244baa3d295d47b7/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b", size = 23015 }, - { url = "https://files.pythonhosted.org/packages/2f/e1/78ee7a023dac597a5825441ebd17170785a9dab23de95d2c7508ade94e0e/markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d", size = 14540 }, - { url = "https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c", size = 15105 }, - { url = "https://files.pythonhosted.org/packages/e5/f1/216fc1bbfd74011693a4fd837e7026152e89c4bcf3e77b6692fba9923123/markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f", size = 13906 }, - { url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622 }, - { url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029 }, - { url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374 }, - { url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980 }, - { url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990 }, - { url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784 }, - { url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588 }, - { url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041 }, - { url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543 }, - { url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113 }, - { url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911 }, - { url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658 }, - { url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066 }, - { url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639 }, - { url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569 }, - { url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284 }, - { url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801 }, - { url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769 }, - { url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642 }, - { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612 }, - { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200 }, - { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973 }, - { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619 }, - { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029 }, - { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408 }, - { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005 }, - { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048 }, - { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821 }, - { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606 }, - { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043 }, - { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747 }, - { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341 }, - { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073 }, - { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661 }, - { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069 }, - { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670 }, - { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598 }, - { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261 }, - { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835 }, - { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733 }, - { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672 }, - { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819 }, - { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426 }, - { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146 }, - { url = "https://files.pythonhosted.org/packages/56/23/0d8c13a44bde9154821586520840643467aee574d8ce79a17da539ee7fed/markupsafe-3.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15d939a21d546304880945ca1ecb8a039db6b4dc49b2c5a400387cdae6a62e26", size = 11623 }, - { url = "https://files.pythonhosted.org/packages/fd/23/07a2cb9a8045d5f3f0890a8c3bc0859d7a47bfd9a560b563899bec7b72ed/markupsafe-3.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f71a396b3bf33ecaa1626c255855702aca4d3d9fea5e051b41ac59a9c1c41edc", size = 12049 }, - { url = "https://files.pythonhosted.org/packages/bc/e4/6be85eb81503f8e11b61c0b6369b6e077dcf0a74adbd9ebf6b349937b4e9/markupsafe-3.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f4b68347f8c5eab4a13419215bdfd7f8c9b19f2b25520968adfad23eb0ce60c", size = 21923 }, - { url = "https://files.pythonhosted.org/packages/6f/bc/4dc914ead3fe6ddaef035341fee0fc956949bbd27335b611829292b89ee2/markupsafe-3.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e8fc20152abba6b83724d7ff268c249fa196d8259ff481f3b1476383f8f24e42", size = 20543 }, - { url = "https://files.pythonhosted.org/packages/89/6e/5fe81fbcfba4aef4093d5f856e5c774ec2057946052d18d168219b7bd9f9/markupsafe-3.0.3-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:949b8d66bc381ee8b007cd945914c721d9aba8e27f71959d750a46f7c282b20b", size = 20585 }, - { url = "https://files.pythonhosted.org/packages/f6/f6/e0e5a3d3ae9c4020f696cd055f940ef86b64fe88de26f3a0308b9d3d048c/markupsafe-3.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:3537e01efc9d4dccdf77221fb1cb3b8e1a38d5428920e0657ce299b20324d758", size = 21387 }, - { url = "https://files.pythonhosted.org/packages/c8/25/651753ef4dea08ea790f4fbb65146a9a44a014986996ca40102e237aa49a/markupsafe-3.0.3-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:591ae9f2a647529ca990bc681daebdd52c8791ff06c2bfa05b65163e28102ef2", size = 20133 }, - { url = "https://files.pythonhosted.org/packages/dc/0a/c3cf2b4fef5f0426e8a6d7fce3cb966a17817c568ce59d76b92a233fdbec/markupsafe-3.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a320721ab5a1aba0a233739394eb907f8c8da5c98c9181d1161e77a0c8e36f2d", size = 20588 }, - { url = "https://files.pythonhosted.org/packages/cd/1b/a7782984844bd519ad4ffdbebbba2671ec5d0ebbeac34736c15fb86399e8/markupsafe-3.0.3-cp39-cp39-win32.whl", hash = "sha256:df2449253ef108a379b8b5d6b43f4b1a8e81a061d6537becd5582fba5f9196d7", size = 14566 }, - { url = "https://files.pythonhosted.org/packages/18/1f/8d9c20e1c9440e215a44be5ab64359e207fcb4f675543f1cf9a2a7f648d0/markupsafe-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:7c3fb7d25180895632e5d3148dbdc29ea38ccb7fd210aa27acbd1201a1902c6e", size = 15053 }, - { url = "https://files.pythonhosted.org/packages/4e/d3/fe08482b5cd995033556d45041a4f4e76e7f0521112a9c9991d40d39825f/markupsafe-3.0.3-cp39-cp39-win_arm64.whl", hash = "sha256:38664109c14ffc9e7437e86b4dceb442b0096dfe3541d7864d9cbe1da4cf36c8", size = 13928 }, -] - -[[package]] -name = "matplotlib-inline" -version = "0.2.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "traitlets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/c7/74/97e72a36efd4ae2bccb3463284300f8953f199b5ffbc04cbbb0ec78f74b1/matplotlib_inline-0.2.1.tar.gz", hash = "sha256:e1ee949c340d771fc39e241ea75683deb94762c8fa5f2927ec57c83c4dffa9fe", size = 8110 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/af/33/ee4519fa02ed11a94aef9559552f3b17bb863f2ecfe1a35dc7f548cde231/matplotlib_inline-0.2.1-py3-none-any.whl", hash = "sha256:d56ce5156ba6085e00a9d54fead6ed29a9c47e215cd1bba2e976ef39f5710a76", size = 9516 }, -] - -[[package]] -name = "mistune" -version = "3.2.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/9d/55/d01f0c4b45ade6536c51170b9043db8b2ec6ddf4a35c7ea3f5f559ac935b/mistune-3.2.0.tar.gz", hash = "sha256:708487c8a8cdd99c9d90eb3ed4c3ed961246ff78ac82f03418f5183ab70e398a", size = 95467 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9b/f7/4a5e785ec9fbd65146a27b6b70b6cdc161a66f2024e4b04ac06a67f5578b/mistune-3.2.0-py3-none-any.whl", hash = "sha256:febdc629a3c78616b94393c6580551e0e34cc289987ec6c35ed3f4be42d0eee1", size = 53598 }, -] - -[[package]] -name = "nbclient" -version = "0.10.2" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "jupyter-client", version = "8.6.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "jupyter-core", version = "5.8.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "nbformat", marker = "python_full_version < '3.10'" }, - { name = "traitlets", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/87/66/7ffd18d58eae90d5721f9f39212327695b749e23ad44b3881744eaf4d9e8/nbclient-0.10.2.tar.gz", hash = "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193", size = 62424 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/34/6d/e7fa07f03a4a7b221d94b4d586edb754a9b0dc3c9e2c93353e9fa4e0d117/nbclient-0.10.2-py3-none-any.whl", hash = "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d", size = 25434 }, -] - -[[package]] -name = "nbclient" -version = "0.10.4" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] -dependencies = [ - { name = "jupyter-client", version = "8.8.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "jupyter-core", version = "5.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "nbformat", marker = "python_full_version >= '3.10'" }, - { name = "traitlets", marker = "python_full_version >= '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/56/91/1c1d5a4b9a9ebba2b4e32b8c852c2975c872aec1fe42ab5e516b2cecd193/nbclient-0.10.4.tar.gz", hash = "sha256:1e54091b16e6da39e297b0ece3e10f6f29f4ac4e8ee515d29f8a7099bd6553c9", size = 62554 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/83/a0/5b0c2f11142ed1dddec842457d3f65eaf71a0080894eb6f018755b319c3a/nbclient-0.10.4-py3-none-any.whl", hash = "sha256:9162df5a7373d70d606527300a95a975a47c137776cd942e52d9c7e29ff83440", size = 25465 }, -] - -[[package]] -name = "nbconvert" -version = "7.17.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "beautifulsoup4" }, - { name = "bleach", version = "6.2.0", source = { registry = "https://pypi.org/simple" }, extra = ["css"], marker = "python_full_version < '3.10'" }, - { name = "bleach", version = "6.3.0", source = { registry = "https://pypi.org/simple" }, extra = ["css"], marker = "python_full_version >= '3.10'" }, - { name = "defusedxml" }, - { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, - { name = "jinja2" }, - { name = "jupyter-core", version = "5.8.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "jupyter-core", version = "5.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "jupyterlab-pygments" }, - { name = "markupsafe" }, - { name = "mistune" }, - { name = "nbclient", version = "0.10.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "nbclient", version = "0.10.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "nbformat" }, - { name = "packaging" }, - { name = "pandocfilters" }, - { name = "pygments" }, - { name = "traitlets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/38/47/81f886b699450d0569f7bc551df2b1673d18df7ff25cc0c21ca36ed8a5ff/nbconvert-7.17.0.tar.gz", hash = "sha256:1b2696f1b5be12309f6c7d707c24af604b87dfaf6d950794c7b07acab96dda78", size = 862855 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0d/4b/8d5f796a792f8a25f6925a96032f098789f448571eb92011df1ae59e8ea8/nbconvert-7.17.0-py3-none-any.whl", hash = "sha256:4f99a63b337b9a23504347afdab24a11faa7d86b405e5c8f9881cd313336d518", size = 261510 }, -] - -[[package]] -name = "nbformat" -version = "5.10.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "fastjsonschema" }, - { name = "jsonschema", version = "4.25.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "jsonschema", version = "4.26.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "jupyter-core", version = "5.8.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "jupyter-core", version = "5.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "traitlets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/6d/fd/91545e604bc3dad7dca9ed03284086039b294c6b3d75c0d2fa45f9e9caf3/nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a", size = 142749 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b", size = 78454 }, -] - -[[package]] -name = "nest-asyncio" -version = "1.6.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195 }, -] - -[[package]] -name = "nodeenv" -version = "1.10.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/24/bf/d1bda4f6168e0b2e9e5958945e01910052158313224ada5ce1fb2e1113b8/nodeenv-1.10.0.tar.gz", hash = "sha256:996c191ad80897d076bdfba80a41994c2b47c68e224c542b48feba42ba00f8bb", size = 55611 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl", hash = "sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827", size = 23438 }, -] - -[[package]] -name = "notebook" -version = "7.5.5" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "jupyter-server" }, - { name = "jupyterlab" }, - { name = "jupyterlab-server" }, - { name = "notebook-shim" }, - { name = "tornado" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/1f/6d/41052c48d6f6349ca0a7c4d1f6a78464de135e6d18f5829ba2510e62184c/notebook-7.5.5.tar.gz", hash = "sha256:dc0bfab0f2372c8278c457423d3256c34154ac2cc76bf20e9925260c461013c3", size = 14169167 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f8/aa/cbd1deb9f07446241e88f8d5fecccd95b249bca0b4e5482214a4d1714c49/notebook-7.5.5-py3-none-any.whl", hash = "sha256:a7c14dbeefa6592e87f72290ca982e0c10f5bbf3786be2a600fda9da2764a2b8", size = 14578929 }, -] - -[[package]] -name = "notebook-shim" -version = "0.2.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "jupyter-server" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/54/d2/92fa3243712b9a3e8bafaf60aac366da1cada3639ca767ff4b5b3654ec28/notebook_shim-0.2.4.tar.gz", hash = "sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb", size = 13167 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef", size = 13307 }, -] - -[[package]] -name = "numpy" -version = "2.0.2" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/a9/75/10dd1f8116a8b796cb2c737b674e02d02e80454bda953fa7e65d8c12b016/numpy-2.0.2.tar.gz", hash = "sha256:883c987dee1880e2a864ab0dc9892292582510604156762362d9326444636e78", size = 18902015 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/21/91/3495b3237510f79f5d81f2508f9f13fea78ebfdf07538fc7444badda173d/numpy-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:51129a29dbe56f9ca83438b706e2e69a39892b5eda6cedcb6b0c9fdc9b0d3ece", size = 21165245 }, - { url = "https://files.pythonhosted.org/packages/05/33/26178c7d437a87082d11019292dce6d3fe6f0e9026b7b2309cbf3e489b1d/numpy-2.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f15975dfec0cf2239224d80e32c3170b1d168335eaedee69da84fbe9f1f9cd04", size = 13738540 }, - { url = "https://files.pythonhosted.org/packages/ec/31/cc46e13bf07644efc7a4bf68df2df5fb2a1a88d0cd0da9ddc84dc0033e51/numpy-2.0.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:8c5713284ce4e282544c68d1c3b2c7161d38c256d2eefc93c1d683cf47683e66", size = 5300623 }, - { url = "https://files.pythonhosted.org/packages/6e/16/7bfcebf27bb4f9d7ec67332ffebee4d1bf085c84246552d52dbb548600e7/numpy-2.0.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:becfae3ddd30736fe1889a37f1f580e245ba79a5855bff5f2a29cb3ccc22dd7b", size = 6901774 }, - { url = "https://files.pythonhosted.org/packages/f9/a3/561c531c0e8bf082c5bef509d00d56f82e0ea7e1e3e3a7fc8fa78742a6e5/numpy-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2da5960c3cf0df7eafefd806d4e612c5e19358de82cb3c343631188991566ccd", size = 13907081 }, - { url = "https://files.pythonhosted.org/packages/fa/66/f7177ab331876200ac7563a580140643d1179c8b4b6a6b0fc9838de2a9b8/numpy-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:496f71341824ed9f3d2fd36cf3ac57ae2e0165c143b55c3a035ee219413f3318", size = 19523451 }, - { url = "https://files.pythonhosted.org/packages/25/7f/0b209498009ad6453e4efc2c65bcdf0ae08a182b2b7877d7ab38a92dc542/numpy-2.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a61ec659f68ae254e4d237816e33171497e978140353c0c2038d46e63282d0c8", size = 19927572 }, - { url = "https://files.pythonhosted.org/packages/3e/df/2619393b1e1b565cd2d4c4403bdd979621e2c4dea1f8532754b2598ed63b/numpy-2.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d731a1c6116ba289c1e9ee714b08a8ff882944d4ad631fd411106a30f083c326", size = 14400722 }, - { url = "https://files.pythonhosted.org/packages/22/ad/77e921b9f256d5da36424ffb711ae79ca3f451ff8489eeca544d0701d74a/numpy-2.0.2-cp310-cp310-win32.whl", hash = "sha256:984d96121c9f9616cd33fbd0618b7f08e0cfc9600a7ee1d6fd9b239186d19d97", size = 6472170 }, - { url = "https://files.pythonhosted.org/packages/10/05/3442317535028bc29cf0c0dd4c191a4481e8376e9f0db6bcf29703cadae6/numpy-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:c7b0be4ef08607dd04da4092faee0b86607f111d5ae68036f16cc787e250a131", size = 15905558 }, - { url = "https://files.pythonhosted.org/packages/8b/cf/034500fb83041aa0286e0fb16e7c76e5c8b67c0711bb6e9e9737a717d5fe/numpy-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:49ca4decb342d66018b01932139c0961a8f9ddc7589611158cb3c27cbcf76448", size = 21169137 }, - { url = "https://files.pythonhosted.org/packages/4a/d9/32de45561811a4b87fbdee23b5797394e3d1504b4a7cf40c10199848893e/numpy-2.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:11a76c372d1d37437857280aa142086476136a8c0f373b2e648ab2c8f18fb195", size = 13703552 }, - { url = "https://files.pythonhosted.org/packages/c1/ca/2f384720020c7b244d22508cb7ab23d95f179fcfff33c31a6eeba8d6c512/numpy-2.0.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:807ec44583fd708a21d4a11d94aedf2f4f3c3719035c76a2bbe1fe8e217bdc57", size = 5298957 }, - { url = "https://files.pythonhosted.org/packages/0e/78/a3e4f9fb6aa4e6fdca0c5428e8ba039408514388cf62d89651aade838269/numpy-2.0.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8cafab480740e22f8d833acefed5cc87ce276f4ece12fdaa2e8903db2f82897a", size = 6905573 }, - { url = "https://files.pythonhosted.org/packages/a0/72/cfc3a1beb2caf4efc9d0b38a15fe34025230da27e1c08cc2eb9bfb1c7231/numpy-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a15f476a45e6e5a3a79d8a14e62161d27ad897381fecfa4a09ed5322f2085669", size = 13914330 }, - { url = "https://files.pythonhosted.org/packages/ba/a8/c17acf65a931ce551fee11b72e8de63bf7e8a6f0e21add4c937c83563538/numpy-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13e689d772146140a252c3a28501da66dfecd77490b498b168b501835041f951", size = 19534895 }, - { url = "https://files.pythonhosted.org/packages/ba/86/8767f3d54f6ae0165749f84648da9dcc8cd78ab65d415494962c86fac80f/numpy-2.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9ea91dfb7c3d1c56a0e55657c0afb38cf1eeae4544c208dc465c3c9f3a7c09f9", size = 19937253 }, - { url = "https://files.pythonhosted.org/packages/df/87/f76450e6e1c14e5bb1eae6836478b1028e096fd02e85c1c37674606ab752/numpy-2.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c1c9307701fec8f3f7a1e6711f9089c06e6284b3afbbcd259f7791282d660a15", size = 14414074 }, - { url = "https://files.pythonhosted.org/packages/5c/ca/0f0f328e1e59f73754f06e1adfb909de43726d4f24c6a3f8805f34f2b0fa/numpy-2.0.2-cp311-cp311-win32.whl", hash = "sha256:a392a68bd329eafac5817e5aefeb39038c48b671afd242710b451e76090e81f4", size = 6470640 }, - { url = "https://files.pythonhosted.org/packages/eb/57/3a3f14d3a759dcf9bf6e9eda905794726b758819df4663f217d658a58695/numpy-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:286cd40ce2b7d652a6f22efdfc6d1edf879440e53e76a75955bc0c826c7e64dc", size = 15910230 }, - { url = "https://files.pythonhosted.org/packages/45/40/2e117be60ec50d98fa08c2f8c48e09b3edea93cfcabd5a9ff6925d54b1c2/numpy-2.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:df55d490dea7934f330006d0f81e8551ba6010a5bf035a249ef61a94f21c500b", size = 20895803 }, - { url = "https://files.pythonhosted.org/packages/46/92/1b8b8dee833f53cef3e0a3f69b2374467789e0bb7399689582314df02651/numpy-2.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8df823f570d9adf0978347d1f926b2a867d5608f434a7cff7f7908c6570dcf5e", size = 13471835 }, - { url = "https://files.pythonhosted.org/packages/7f/19/e2793bde475f1edaea6945be141aef6c8b4c669b90c90a300a8954d08f0a/numpy-2.0.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:9a92ae5c14811e390f3767053ff54eaee3bf84576d99a2456391401323f4ec2c", size = 5038499 }, - { url = "https://files.pythonhosted.org/packages/e3/ff/ddf6dac2ff0dd50a7327bcdba45cb0264d0e96bb44d33324853f781a8f3c/numpy-2.0.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:a842d573724391493a97a62ebbb8e731f8a5dcc5d285dfc99141ca15a3302d0c", size = 6633497 }, - { url = "https://files.pythonhosted.org/packages/72/21/67f36eac8e2d2cd652a2e69595a54128297cdcb1ff3931cfc87838874bd4/numpy-2.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05e238064fc0610c840d1cf6a13bf63d7e391717d247f1bf0318172e759e692", size = 13621158 }, - { url = "https://files.pythonhosted.org/packages/39/68/e9f1126d757653496dbc096cb429014347a36b228f5a991dae2c6b6cfd40/numpy-2.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0123ffdaa88fa4ab64835dcbde75dcdf89c453c922f18dced6e27c90d1d0ec5a", size = 19236173 }, - { url = "https://files.pythonhosted.org/packages/d1/e9/1f5333281e4ebf483ba1c888b1d61ba7e78d7e910fdd8e6499667041cc35/numpy-2.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:96a55f64139912d61de9137f11bf39a55ec8faec288c75a54f93dfd39f7eb40c", size = 19634174 }, - { url = "https://files.pythonhosted.org/packages/71/af/a469674070c8d8408384e3012e064299f7a2de540738a8e414dcfd639996/numpy-2.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ec9852fb39354b5a45a80bdab5ac02dd02b15f44b3804e9f00c556bf24b4bded", size = 14099701 }, - { url = "https://files.pythonhosted.org/packages/d0/3d/08ea9f239d0e0e939b6ca52ad403c84a2bce1bde301a8eb4888c1c1543f1/numpy-2.0.2-cp312-cp312-win32.whl", hash = "sha256:671bec6496f83202ed2d3c8fdc486a8fc86942f2e69ff0e986140339a63bcbe5", size = 6174313 }, - { url = "https://files.pythonhosted.org/packages/b2/b5/4ac39baebf1fdb2e72585c8352c56d063b6126be9fc95bd2bb5ef5770c20/numpy-2.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:cfd41e13fdc257aa5778496b8caa5e856dc4896d4ccf01841daee1d96465467a", size = 15606179 }, - { url = "https://files.pythonhosted.org/packages/43/c1/41c8f6df3162b0c6ffd4437d729115704bd43363de0090c7f913cfbc2d89/numpy-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9059e10581ce4093f735ed23f3b9d283b9d517ff46009ddd485f1747eb22653c", size = 21169942 }, - { url = "https://files.pythonhosted.org/packages/39/bc/fd298f308dcd232b56a4031fd6ddf11c43f9917fbc937e53762f7b5a3bb1/numpy-2.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:423e89b23490805d2a5a96fe40ec507407b8ee786d66f7328be214f9679df6dd", size = 13711512 }, - { url = "https://files.pythonhosted.org/packages/96/ff/06d1aa3eeb1c614eda245c1ba4fb88c483bee6520d361641331872ac4b82/numpy-2.0.2-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:2b2955fa6f11907cf7a70dab0d0755159bca87755e831e47932367fc8f2f2d0b", size = 5306976 }, - { url = "https://files.pythonhosted.org/packages/2d/98/121996dcfb10a6087a05e54453e28e58694a7db62c5a5a29cee14c6e047b/numpy-2.0.2-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:97032a27bd9d8988b9a97a8c4d2c9f2c15a81f61e2f21404d7e8ef00cb5be729", size = 6906494 }, - { url = "https://files.pythonhosted.org/packages/15/31/9dffc70da6b9bbf7968f6551967fc21156207366272c2a40b4ed6008dc9b/numpy-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e795a8be3ddbac43274f18588329c72939870a16cae810c2b73461c40718ab1", size = 13912596 }, - { url = "https://files.pythonhosted.org/packages/b9/14/78635daab4b07c0930c919d451b8bf8c164774e6a3413aed04a6d95758ce/numpy-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26b258c385842546006213344c50655ff1555a9338e2e5e02a0756dc3e803dd", size = 19526099 }, - { url = "https://files.pythonhosted.org/packages/26/4c/0eeca4614003077f68bfe7aac8b7496f04221865b3a5e7cb230c9d055afd/numpy-2.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5fec9451a7789926bcf7c2b8d187292c9f93ea30284802a0ab3f5be8ab36865d", size = 19932823 }, - { url = "https://files.pythonhosted.org/packages/f1/46/ea25b98b13dccaebddf1a803f8c748680d972e00507cd9bc6dcdb5aa2ac1/numpy-2.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9189427407d88ff25ecf8f12469d4d39d35bee1db5d39fc5c168c6f088a6956d", size = 14404424 }, - { url = "https://files.pythonhosted.org/packages/c8/a6/177dd88d95ecf07e722d21008b1b40e681a929eb9e329684d449c36586b2/numpy-2.0.2-cp39-cp39-win32.whl", hash = "sha256:905d16e0c60200656500c95b6b8dca5d109e23cb24abc701d41c02d74c6b3afa", size = 6476809 }, - { url = "https://files.pythonhosted.org/packages/ea/2b/7fc9f4e7ae5b507c1a3a21f0f15ed03e794c1242ea8a242ac158beb56034/numpy-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:a3f4ab0caa7f053f6797fcd4e1e25caee367db3112ef2b6ef82d749530768c73", size = 15911314 }, - { url = "https://files.pythonhosted.org/packages/8f/3b/df5a870ac6a3be3a86856ce195ef42eec7ae50d2a202be1f5a4b3b340e14/numpy-2.0.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7f0a0c6f12e07fa94133c8a67404322845220c06a9e80e85999afe727f7438b8", size = 21025288 }, - { url = "https://files.pythonhosted.org/packages/2c/97/51af92f18d6f6f2d9ad8b482a99fb74e142d71372da5d834b3a2747a446e/numpy-2.0.2-pp39-pypy39_pp73-macosx_14_0_x86_64.whl", hash = "sha256:312950fdd060354350ed123c0e25a71327d3711584beaef30cdaa93320c392d4", size = 6762793 }, - { url = "https://files.pythonhosted.org/packages/12/46/de1fbd0c1b5ccaa7f9a005b66761533e2f6a3e560096682683a223631fe9/numpy-2.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26df23238872200f63518dd2aa984cfca675d82469535dc7162dc2ee52d9dd5c", size = 19334885 }, - { url = "https://files.pythonhosted.org/packages/cc/dc/d330a6faefd92b446ec0f0dfea4c3207bb1fef3c4771d19cf4543efd2c78/numpy-2.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a46288ec55ebbd58947d31d72be2c63cbf839f0a63b49cb755022310792a3385", size = 15828784 }, -] - -[[package]] -name = "numpy" -version = "2.2.6" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version == '3.10.*'", -] -sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245 }, - { url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048 }, - { url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542 }, - { url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301 }, - { url = "https://files.pythonhosted.org/packages/eb/17/96a3acd228cec142fcb8723bd3cc39c2a474f7dcf0a5d16731980bcafa95/numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83", size = 14297320 }, - { url = "https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915", size = 16801050 }, - { url = "https://files.pythonhosted.org/packages/07/b6/89d837eddef52b3d0cec5c6ba0456c1bf1b9ef6a6672fc2b7873c3ec4e2e/numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680", size = 15807034 }, - { url = "https://files.pythonhosted.org/packages/01/c8/dc6ae86e3c61cfec1f178e5c9f7858584049b6093f843bca541f94120920/numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289", size = 18614185 }, - { url = "https://files.pythonhosted.org/packages/5b/c5/0064b1b7e7c89137b471ccec1fd2282fceaae0ab3a9550f2568782d80357/numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d", size = 6527149 }, - { url = "https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3", size = 12904620 }, - { url = "https://files.pythonhosted.org/packages/da/a8/4f83e2aa666a9fbf56d6118faaaf5f1974d456b1823fda0a176eff722839/numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae", size = 21176963 }, - { url = "https://files.pythonhosted.org/packages/b3/2b/64e1affc7972decb74c9e29e5649fac940514910960ba25cd9af4488b66c/numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a", size = 14406743 }, - { url = "https://files.pythonhosted.org/packages/4a/9f/0121e375000b5e50ffdd8b25bf78d8e1a5aa4cca3f185d41265198c7b834/numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42", size = 5352616 }, - { url = "https://files.pythonhosted.org/packages/31/0d/b48c405c91693635fbe2dcd7bc84a33a602add5f63286e024d3b6741411c/numpy-2.2.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:481b49095335f8eed42e39e8041327c05b0f6f4780488f61286ed3c01368d491", size = 6889579 }, - { url = "https://files.pythonhosted.org/packages/52/b8/7f0554d49b565d0171eab6e99001846882000883998e7b7d9f0d98b1f934/numpy-2.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b64d8d4d17135e00c8e346e0a738deb17e754230d7e0810ac5012750bbd85a5a", size = 14312005 }, - { url = "https://files.pythonhosted.org/packages/b3/dd/2238b898e51bd6d389b7389ffb20d7f4c10066d80351187ec8e303a5a475/numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf", size = 16821570 }, - { url = "https://files.pythonhosted.org/packages/83/6c/44d0325722cf644f191042bf47eedad61c1e6df2432ed65cbe28509d404e/numpy-2.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd48227a919f1bafbdda0583705e547892342c26fb127219d60a5c36882609d1", size = 15818548 }, - { url = "https://files.pythonhosted.org/packages/ae/9d/81e8216030ce66be25279098789b665d49ff19eef08bfa8cb96d4957f422/numpy-2.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9551a499bf125c1d4f9e250377c1ee2eddd02e01eac6644c080162c0c51778ab", size = 18620521 }, - { url = "https://files.pythonhosted.org/packages/6a/fd/e19617b9530b031db51b0926eed5345ce8ddc669bb3bc0044b23e275ebe8/numpy-2.2.6-cp311-cp311-win32.whl", hash = "sha256:0678000bb9ac1475cd454c6b8c799206af8107e310843532b04d49649c717a47", size = 6525866 }, - { url = "https://files.pythonhosted.org/packages/31/0a/f354fb7176b81747d870f7991dc763e157a934c717b67b58456bc63da3df/numpy-2.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:e8213002e427c69c45a52bbd94163084025f533a55a59d6f9c5b820774ef3303", size = 12907455 }, - { url = "https://files.pythonhosted.org/packages/82/5d/c00588b6cf18e1da539b45d3598d3557084990dcc4331960c15ee776ee41/numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff", size = 20875348 }, - { url = "https://files.pythonhosted.org/packages/66/ee/560deadcdde6c2f90200450d5938f63a34b37e27ebff162810f716f6a230/numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c", size = 14119362 }, - { url = "https://files.pythonhosted.org/packages/3c/65/4baa99f1c53b30adf0acd9a5519078871ddde8d2339dc5a7fde80d9d87da/numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3", size = 5084103 }, - { url = "https://files.pythonhosted.org/packages/cc/89/e5a34c071a0570cc40c9a54eb472d113eea6d002e9ae12bb3a8407fb912e/numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282", size = 6625382 }, - { url = "https://files.pythonhosted.org/packages/f8/35/8c80729f1ff76b3921d5c9487c7ac3de9b2a103b1cd05e905b3090513510/numpy-2.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87", size = 14018462 }, - { url = "https://files.pythonhosted.org/packages/8c/3d/1e1db36cfd41f895d266b103df00ca5b3cbe965184df824dec5c08c6b803/numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249", size = 16527618 }, - { url = "https://files.pythonhosted.org/packages/61/c6/03ed30992602c85aa3cd95b9070a514f8b3c33e31124694438d88809ae36/numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49", size = 15505511 }, - { url = "https://files.pythonhosted.org/packages/b7/25/5761d832a81df431e260719ec45de696414266613c9ee268394dd5ad8236/numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de", size = 18313783 }, - { url = "https://files.pythonhosted.org/packages/57/0a/72d5a3527c5ebffcd47bde9162c39fae1f90138c961e5296491ce778e682/numpy-2.2.6-cp312-cp312-win32.whl", hash = "sha256:4eeaae00d789f66c7a25ac5f34b71a7035bb474e679f410e5e1a94deb24cf2d4", size = 6246506 }, - { url = "https://files.pythonhosted.org/packages/36/fa/8c9210162ca1b88529ab76b41ba02d433fd54fecaf6feb70ef9f124683f1/numpy-2.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2", size = 12614190 }, - { url = "https://files.pythonhosted.org/packages/f9/5c/6657823f4f594f72b5471f1db1ab12e26e890bb2e41897522d134d2a3e81/numpy-2.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84", size = 20867828 }, - { url = "https://files.pythonhosted.org/packages/dc/9e/14520dc3dadf3c803473bd07e9b2bd1b69bc583cb2497b47000fed2fa92f/numpy-2.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b", size = 14143006 }, - { url = "https://files.pythonhosted.org/packages/4f/06/7e96c57d90bebdce9918412087fc22ca9851cceaf5567a45c1f404480e9e/numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d", size = 5076765 }, - { url = "https://files.pythonhosted.org/packages/73/ed/63d920c23b4289fdac96ddbdd6132e9427790977d5457cd132f18e76eae0/numpy-2.2.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566", size = 6617736 }, - { url = "https://files.pythonhosted.org/packages/85/c5/e19c8f99d83fd377ec8c7e0cf627a8049746da54afc24ef0a0cb73d5dfb5/numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f", size = 14010719 }, - { url = "https://files.pythonhosted.org/packages/19/49/4df9123aafa7b539317bf6d342cb6d227e49f7a35b99c287a6109b13dd93/numpy-2.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f", size = 16526072 }, - { url = "https://files.pythonhosted.org/packages/b2/6c/04b5f47f4f32f7c2b0e7260442a8cbcf8168b0e1a41ff1495da42f42a14f/numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868", size = 15503213 }, - { url = "https://files.pythonhosted.org/packages/17/0a/5cd92e352c1307640d5b6fec1b2ffb06cd0dabe7d7b8227f97933d378422/numpy-2.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d", size = 18316632 }, - { url = "https://files.pythonhosted.org/packages/f0/3b/5cba2b1d88760ef86596ad0f3d484b1cbff7c115ae2429678465057c5155/numpy-2.2.6-cp313-cp313-win32.whl", hash = "sha256:5beb72339d9d4fa36522fc63802f469b13cdbe4fdab4a288f0c441b74272ebfd", size = 6244532 }, - { url = "https://files.pythonhosted.org/packages/cb/3b/d58c12eafcb298d4e6d0d40216866ab15f59e55d148a5658bb3132311fcf/numpy-2.2.6-cp313-cp313-win_amd64.whl", hash = "sha256:b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c", size = 12610885 }, - { url = "https://files.pythonhosted.org/packages/6b/9e/4bf918b818e516322db999ac25d00c75788ddfd2d2ade4fa66f1f38097e1/numpy-2.2.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6", size = 20963467 }, - { url = "https://files.pythonhosted.org/packages/61/66/d2de6b291507517ff2e438e13ff7b1e2cdbdb7cb40b3ed475377aece69f9/numpy-2.2.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda", size = 14225144 }, - { url = "https://files.pythonhosted.org/packages/e4/25/480387655407ead912e28ba3a820bc69af9adf13bcbe40b299d454ec011f/numpy-2.2.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40", size = 5200217 }, - { url = "https://files.pythonhosted.org/packages/aa/4a/6e313b5108f53dcbf3aca0c0f3e9c92f4c10ce57a0a721851f9785872895/numpy-2.2.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8", size = 6712014 }, - { url = "https://files.pythonhosted.org/packages/b7/30/172c2d5c4be71fdf476e9de553443cf8e25feddbe185e0bd88b096915bcc/numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f", size = 14077935 }, - { url = "https://files.pythonhosted.org/packages/12/fb/9e743f8d4e4d3c710902cf87af3512082ae3d43b945d5d16563f26ec251d/numpy-2.2.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa", size = 16600122 }, - { url = "https://files.pythonhosted.org/packages/12/75/ee20da0e58d3a66f204f38916757e01e33a9737d0b22373b3eb5a27358f9/numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571", size = 15586143 }, - { url = "https://files.pythonhosted.org/packages/76/95/bef5b37f29fc5e739947e9ce5179ad402875633308504a52d188302319c8/numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1", size = 18385260 }, - { url = "https://files.pythonhosted.org/packages/09/04/f2f83279d287407cf36a7a8053a5abe7be3622a4363337338f2585e4afda/numpy-2.2.6-cp313-cp313t-win32.whl", hash = "sha256:038613e9fb8c72b0a41f025a7e4c3f0b7a1b5d768ece4796b674c8f3fe13efff", size = 6377225 }, - { url = "https://files.pythonhosted.org/packages/67/0e/35082d13c09c02c011cf21570543d202ad929d961c02a147493cb0c2bdf5/numpy-2.2.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06", size = 12771374 }, - { url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391 }, - { url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754 }, - { url = "https://files.pythonhosted.org/packages/af/30/feba75f143bdc868a1cc3f44ccfa6c4b9ec522b36458e738cd00f67b573f/numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543", size = 16643476 }, - { url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666 }, -] - -[[package]] -name = "numpy" -version = "2.4.4" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", - "python_full_version == '3.11.*'", -] -sdist = { url = "https://files.pythonhosted.org/packages/d7/9f/b8cef5bffa569759033adda9481211426f12f53299629b410340795c2514/numpy-2.4.4.tar.gz", hash = "sha256:2d390634c5182175533585cc89f3608a4682ccb173cc9bb940b2881c8d6f8fa0", size = 20731587 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ef/c6/4218570d8c8ecc9704b5157a3348e486e84ef4be0ed3e38218ab473c83d2/numpy-2.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f983334aea213c99992053ede6168500e5f086ce74fbc4acc3f2b00f5762e9db", size = 16976799 }, - { url = "https://files.pythonhosted.org/packages/dd/92/b4d922c4a5f5dab9ed44e6153908a5c665b71acf183a83b93b690996e39b/numpy-2.4.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:72944b19f2324114e9dc86a159787333b77874143efcf89a5167ef83cfee8af0", size = 14971552 }, - { url = "https://files.pythonhosted.org/packages/8a/dc/df98c095978fa6ee7b9a9387d1d58cbb3d232d0e69ad169a4ce784bde4fd/numpy-2.4.4-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:86b6f55f5a352b48d7fbfd2dbc3d5b780b2d79f4d3c121f33eb6efb22e9a2015", size = 5476566 }, - { url = "https://files.pythonhosted.org/packages/28/34/b3fdcec6e725409223dd27356bdf5a3c2cc2282e428218ecc9cb7acc9763/numpy-2.4.4-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:ba1f4fc670ed79f876f70082eff4f9583c15fb9a4b89d6188412de4d18ae2f40", size = 6806482 }, - { url = "https://files.pythonhosted.org/packages/68/62/63417c13aa35d57bee1337c67446761dc25ea6543130cf868eace6e8157b/numpy-2.4.4-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a87ec22c87be071b6bdbd27920b129b94f2fc964358ce38f3822635a3e2e03d", size = 15973376 }, - { url = "https://files.pythonhosted.org/packages/cf/c5/9fcb7e0e69cef59cf10c746b84f7d58b08bc66a6b7d459783c5a4f6101a6/numpy-2.4.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:df3775294accfdd75f32c74ae39fcba920c9a378a2fc18a12b6820aa8c1fb502", size = 16925137 }, - { url = "https://files.pythonhosted.org/packages/7e/43/80020edacb3f84b9efdd1591120a4296462c23fd8db0dde1666f6ef66f13/numpy-2.4.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0d4e437e295f18ec29bc79daf55e8a47a9113df44d66f702f02a293d93a2d6dd", size = 17329414 }, - { url = "https://files.pythonhosted.org/packages/fd/06/af0658593b18a5f73532d377188b964f239eb0894e664a6c12f484472f97/numpy-2.4.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6aa3236c78803afbcb255045fbef97a9e25a1f6c9888357d205ddc42f4d6eba5", size = 18658397 }, - { url = "https://files.pythonhosted.org/packages/e6/ce/13a09ed65f5d0ce5c7dd0669250374c6e379910f97af2c08c57b0608eee4/numpy-2.4.4-cp311-cp311-win32.whl", hash = "sha256:30caa73029a225b2d40d9fae193e008e24b2026b7ee1a867b7ee8d96ca1a448e", size = 6239499 }, - { url = "https://files.pythonhosted.org/packages/bd/63/05d193dbb4b5eec1eca73822d80da98b511f8328ad4ae3ca4caf0f4db91d/numpy-2.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:6bbe4eb67390b0a0265a2c25458f6b90a409d5d069f1041e6aff1e27e3d9a79e", size = 12614257 }, - { url = "https://files.pythonhosted.org/packages/87/c5/8168052f080c26fa984c413305012be54741c9d0d74abd7fbeeccae3889f/numpy-2.4.4-cp311-cp311-win_arm64.whl", hash = "sha256:fcfe2045fd2e8f3cb0ce9d4ba6dba6333b8fa05bb8a4939c908cd43322d14c7e", size = 10486775 }, - { url = "https://files.pythonhosted.org/packages/28/05/32396bec30fb2263770ee910142f49c1476d08e8ad41abf8403806b520ce/numpy-2.4.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:15716cfef24d3a9762e3acdf87e27f58dc823d1348f765bbea6bef8c639bfa1b", size = 16689272 }, - { url = "https://files.pythonhosted.org/packages/c5/f3/a983d28637bfcd763a9c7aafdb6d5c0ebf3d487d1e1459ffdb57e2f01117/numpy-2.4.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:23cbfd4c17357c81021f21540da84ee282b9c8fba38a03b7b9d09ba6b951421e", size = 14699573 }, - { url = "https://files.pythonhosted.org/packages/9b/fd/e5ecca1e78c05106d98028114f5c00d3eddb41207686b2b7de3e477b0e22/numpy-2.4.4-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:8b3b60bb7cba2c8c81837661c488637eee696f59a877788a396d33150c35d842", size = 5204782 }, - { url = "https://files.pythonhosted.org/packages/de/2f/702a4594413c1a8632092beae8aba00f1d67947389369b3777aed783fdca/numpy-2.4.4-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:e4a010c27ff6f210ff4c6ef34394cd61470d01014439b192ec22552ee867f2a8", size = 6552038 }, - { url = "https://files.pythonhosted.org/packages/7f/37/eed308a8f56cba4d1fdf467a4fc67ef4ff4bf1c888f5fc980481890104b1/numpy-2.4.4-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f9e75681b59ddaa5e659898085ae0eaea229d054f2ac0c7e563a62205a700121", size = 15670666 }, - { url = "https://files.pythonhosted.org/packages/0a/0d/0e3ecece05b7a7e87ab9fb587855548da437a061326fff64a223b6dcb78a/numpy-2.4.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:81f4a14bee47aec54f883e0cad2d73986640c1590eb9bfaaba7ad17394481e6e", size = 16645480 }, - { url = "https://files.pythonhosted.org/packages/34/49/f2312c154b82a286758ee2f1743336d50651f8b5195db18cdb63675ff649/numpy-2.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:62d6b0f03b694173f9fcb1fb317f7222fd0b0b103e784c6549f5e53a27718c44", size = 17020036 }, - { url = "https://files.pythonhosted.org/packages/7b/e9/736d17bd77f1b0ec4f9901aaec129c00d59f5d84d5e79bba540ef12c2330/numpy-2.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fbc356aae7adf9e6336d336b9c8111d390a05df88f1805573ebb0807bd06fd1d", size = 18368643 }, - { url = "https://files.pythonhosted.org/packages/63/f6/d417977c5f519b17c8a5c3bc9e8304b0908b0e21136fe43bf628a1343914/numpy-2.4.4-cp312-cp312-win32.whl", hash = "sha256:0d35aea54ad1d420c812bfa0385c71cd7cc5bcf7c65fed95fc2cd02fe8c79827", size = 5961117 }, - { url = "https://files.pythonhosted.org/packages/2d/5b/e1deebf88ff431b01b7406ca3583ab2bbb90972bbe1c568732e49c844f7e/numpy-2.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:b5f0362dc928a6ecd9db58868fca5e48485205e3855957bdedea308f8672ea4a", size = 12320584 }, - { url = "https://files.pythonhosted.org/packages/58/89/e4e856ac82a68c3ed64486a544977d0e7bdd18b8da75b78a577ca31c4395/numpy-2.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:846300f379b5b12cc769334464656bc882e0735d27d9726568bc932fdc49d5ec", size = 10221450 }, - { url = "https://files.pythonhosted.org/packages/14/1d/d0a583ce4fefcc3308806a749a536c201ed6b5ad6e1322e227ee4848979d/numpy-2.4.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:08f2e31ed5e6f04b118e49821397f12767934cfdd12a1ce86a058f91e004ee50", size = 16684933 }, - { url = "https://files.pythonhosted.org/packages/c1/62/2b7a48fbb745d344742c0277f01286dead15f3f68e4f359fbfcf7b48f70f/numpy-2.4.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e823b8b6edc81e747526f70f71a9c0a07ac4e7ad13020aa736bb7c9d67196115", size = 14694532 }, - { url = "https://files.pythonhosted.org/packages/e5/87/499737bfba066b4a3bebff24a8f1c5b2dee410b209bc6668c9be692580f0/numpy-2.4.4-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:4a19d9dba1a76618dd86b164d608566f393f8ec6ac7c44f0cc879011c45e65af", size = 5199661 }, - { url = "https://files.pythonhosted.org/packages/cd/da/464d551604320d1491bc345efed99b4b7034143a85787aab78d5691d5a0e/numpy-2.4.4-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:d2a8490669bfe99a233298348acc2d824d496dee0e66e31b66a6022c2ad74a5c", size = 6547539 }, - { url = "https://files.pythonhosted.org/packages/7d/90/8d23e3b0dafd024bf31bdec225b3bb5c2dbfa6912f8a53b8659f21216cbf/numpy-2.4.4-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:45dbed2ab436a9e826e302fcdcbe9133f9b0006e5af7168afb8963a6520da103", size = 15668806 }, - { url = "https://files.pythonhosted.org/packages/d1/73/a9d864e42a01896bb5974475438f16086be9ba1f0d19d0bb7a07427c4a8b/numpy-2.4.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c901b15172510173f5cb310eae652908340f8dede90fff9e3bf6c0d8dfd92f83", size = 16632682 }, - { url = "https://files.pythonhosted.org/packages/34/fb/14570d65c3bde4e202a031210475ae9cde9b7686a2e7dc97ee67d2833b35/numpy-2.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:99d838547ace2c4aace6c4f76e879ddfe02bb58a80c1549928477862b7a6d6ed", size = 17019810 }, - { url = "https://files.pythonhosted.org/packages/8a/77/2ba9d87081fd41f6d640c83f26fb7351e536b7ce6dd9061b6af5904e8e46/numpy-2.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0aec54fd785890ecca25a6003fd9a5aed47ad607bbac5cd64f836ad8666f4959", size = 18357394 }, - { url = "https://files.pythonhosted.org/packages/a2/23/52666c9a41708b0853fa3b1a12c90da38c507a3074883823126d4e9d5b30/numpy-2.4.4-cp313-cp313-win32.whl", hash = "sha256:07077278157d02f65c43b1b26a3886bce886f95d20aabd11f87932750dfb14ed", size = 5959556 }, - { url = "https://files.pythonhosted.org/packages/57/fb/48649b4971cde70d817cf97a2a2fdc0b4d8308569f1dd2f2611959d2e0cf/numpy-2.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:5c70f1cc1c4efbe316a572e2d8b9b9cc44e89b95f79ca3331553fbb63716e2bf", size = 12317311 }, - { url = "https://files.pythonhosted.org/packages/ba/d8/11490cddd564eb4de97b4579ef6bfe6a736cc07e94c1598590ae25415e01/numpy-2.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:ef4059d6e5152fa1a39f888e344c73fdc926e1b2dd58c771d67b0acfbf2aa67d", size = 10222060 }, - { url = "https://files.pythonhosted.org/packages/99/5d/dab4339177a905aad3e2221c915b35202f1ec30d750dd2e5e9d9a72b804b/numpy-2.4.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4bbc7f303d125971f60ec0aaad5e12c62d0d2c925f0ab1273debd0e4ba37aba5", size = 14822302 }, - { url = "https://files.pythonhosted.org/packages/eb/e4/0564a65e7d3d97562ed6f9b0fd0fb0a6f559ee444092f105938b50043876/numpy-2.4.4-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:4d6d57903571f86180eb98f8f0c839fa9ebbfb031356d87f1361be91e433f5b7", size = 5327407 }, - { url = "https://files.pythonhosted.org/packages/29/8d/35a3a6ce5ad371afa58b4700f1c820f8f279948cca32524e0a695b0ded83/numpy-2.4.4-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:4636de7fd195197b7535f231b5de9e4b36d2c440b6e566d2e4e4746e6af0ca93", size = 6647631 }, - { url = "https://files.pythonhosted.org/packages/f4/da/477731acbd5a58a946c736edfdabb2ac5b34c3d08d1ba1a7b437fa0884df/numpy-2.4.4-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ad2e2ef14e0b04e544ea2fa0a36463f847f113d314aa02e5b402fdf910ef309e", size = 15727691 }, - { url = "https://files.pythonhosted.org/packages/e6/db/338535d9b152beabeb511579598418ba0212ce77cf9718edd70262cc4370/numpy-2.4.4-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a285b3b96f951841799528cd1f4f01cd70e7e0204b4abebac9463eecfcf2a40", size = 16681241 }, - { url = "https://files.pythonhosted.org/packages/e2/a9/ad248e8f58beb7a0219b413c9c7d8151c5d285f7f946c3e26695bdbbe2df/numpy-2.4.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:f8474c4241bc18b750be2abea9d7a9ec84f46ef861dbacf86a4f6e043401f79e", size = 17085767 }, - { url = "https://files.pythonhosted.org/packages/b5/1a/3b88ccd3694681356f70da841630e4725a7264d6a885c8d442a697e1146b/numpy-2.4.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4e874c976154687c1f71715b034739b45c7711bec81db01914770373d125e392", size = 18403169 }, - { url = "https://files.pythonhosted.org/packages/c2/c9/fcfd5d0639222c6eac7f304829b04892ef51c96a75d479214d77e3ce6e33/numpy-2.4.4-cp313-cp313t-win32.whl", hash = "sha256:9c585a1790d5436a5374bac930dad6ed244c046ed91b2b2a3634eb2971d21008", size = 6083477 }, - { url = "https://files.pythonhosted.org/packages/d5/e3/3938a61d1c538aaec8ed6fd6323f57b0c2d2d2219512434c5c878db76553/numpy-2.4.4-cp313-cp313t-win_amd64.whl", hash = "sha256:93e15038125dc1e5345d9b5b68aa7f996ec33b98118d18c6ca0d0b7d6198b7e8", size = 12457487 }, - { url = "https://files.pythonhosted.org/packages/97/6a/7e345032cc60501721ef94e0e30b60f6b0bd601f9174ebd36389a2b86d40/numpy-2.4.4-cp313-cp313t-win_arm64.whl", hash = "sha256:0dfd3f9d3adbe2920b68b5cd3d51444e13a10792ec7154cd0a2f6e74d4ab3233", size = 10292002 }, - { url = "https://files.pythonhosted.org/packages/6e/06/c54062f85f673dd5c04cbe2f14c3acb8c8b95e3384869bb8cc9bff8cb9df/numpy-2.4.4-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:f169b9a863d34f5d11b8698ead99febeaa17a13ca044961aa8e2662a6c7766a0", size = 16684353 }, - { url = "https://files.pythonhosted.org/packages/4c/39/8a320264a84404c74cc7e79715de85d6130fa07a0898f67fb5cd5bd79908/numpy-2.4.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2483e4584a1cb3092da4470b38866634bafb223cbcd551ee047633fd2584599a", size = 14704914 }, - { url = "https://files.pythonhosted.org/packages/91/fb/287076b2614e1d1044235f50f03748f31fa287e3dbe6abeb35cdfa351eca/numpy-2.4.4-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:2d19e6e2095506d1736b7d80595e0f252d76b89f5e715c35e06e937679ea7d7a", size = 5210005 }, - { url = "https://files.pythonhosted.org/packages/63/eb/fcc338595309910de6ecabfcef2419a9ce24399680bfb149421fa2df1280/numpy-2.4.4-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:6a246d5914aa1c820c9443ddcee9c02bec3e203b0c080349533fae17727dfd1b", size = 6544974 }, - { url = "https://files.pythonhosted.org/packages/44/5d/e7e9044032a716cdfaa3fba27a8e874bf1c5f1912a1ddd4ed071bf8a14a6/numpy-2.4.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:989824e9faf85f96ec9c7761cd8d29c531ad857bfa1daa930cba85baaecf1a9a", size = 15684591 }, - { url = "https://files.pythonhosted.org/packages/98/7c/21252050676612625449b4807d6b695b9ce8a7c9e1c197ee6216c8a65c7c/numpy-2.4.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:27a8d92cd10f1382a67d7cf4db7ce18341b66438bdd9f691d7b0e48d104c2a9d", size = 16637700 }, - { url = "https://files.pythonhosted.org/packages/b1/29/56d2bbef9465db24ef25393383d761a1af4f446a1df9b8cded4fe3a5a5d7/numpy-2.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e44319a2953c738205bf3354537979eaa3998ed673395b964c1176083dd46252", size = 17035781 }, - { url = "https://files.pythonhosted.org/packages/e3/2b/a35a6d7589d21f44cea7d0a98de5ddcbb3d421b2622a5c96b1edf18707c3/numpy-2.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e892aff75639bbef0d2a2cfd55535510df26ff92f63c92cd84ef8d4ba5a5557f", size = 18362959 }, - { url = "https://files.pythonhosted.org/packages/64/c9/d52ec581f2390e0f5f85cbfd80fb83d965fc15e9f0e1aec2195faa142cde/numpy-2.4.4-cp314-cp314-win32.whl", hash = "sha256:1378871da56ca8943c2ba674530924bb8ca40cd228358a3b5f302ad60cf875fc", size = 6008768 }, - { url = "https://files.pythonhosted.org/packages/fa/22/4cc31a62a6c7b74a8730e31a4274c5dc80e005751e277a2ce38e675e4923/numpy-2.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:715d1c092715954784bc79e1174fc2a90093dc4dc84ea15eb14dad8abdcdeb74", size = 12449181 }, - { url = "https://files.pythonhosted.org/packages/70/2e/14cda6f4d8e396c612d1bf97f22958e92148801d7e4f110cabebdc0eef4b/numpy-2.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:2c194dd721e54ecad9ad387c1d35e63dce5c4450c6dc7dd5611283dda239aabb", size = 10496035 }, - { url = "https://files.pythonhosted.org/packages/b1/e8/8fed8c8d848d7ecea092dc3469643f9d10bc3a134a815a3b033da1d2039b/numpy-2.4.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2aa0613a5177c264ff5921051a5719d20095ea586ca88cc802c5c218d1c67d3e", size = 14824958 }, - { url = "https://files.pythonhosted.org/packages/05/1a/d8007a5138c179c2bf33ef44503e83d70434d2642877ee8fbb230e7c0548/numpy-2.4.4-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:42c16925aa5a02362f986765f9ebabf20de75cdefdca827d14315c568dcab113", size = 5330020 }, - { url = "https://files.pythonhosted.org/packages/99/64/ffb99ac6ae93faf117bcbd5c7ba48a7f45364a33e8e458545d3633615dda/numpy-2.4.4-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:874f200b2a981c647340f841730fc3a2b54c9d940566a3c4149099591e2c4c3d", size = 6650758 }, - { url = "https://files.pythonhosted.org/packages/6e/6e/795cc078b78a384052e73b2f6281ff7a700e9bf53bcce2ee579d4f6dd879/numpy-2.4.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c9b39d38a9bd2ae1becd7eac1303d031c5c110ad31f2b319c6e7d98b135c934d", size = 15729948 }, - { url = "https://files.pythonhosted.org/packages/5f/86/2acbda8cc2af5f3d7bfc791192863b9e3e19674da7b5e533fded124d1299/numpy-2.4.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b268594bccac7d7cf5844c7732e3f20c50921d94e36d7ec9b79e9857694b1b2f", size = 16679325 }, - { url = "https://files.pythonhosted.org/packages/bc/59/cafd83018f4aa55e0ac6fa92aa066c0a1877b77a615ceff1711c260ffae8/numpy-2.4.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ac6b31e35612a26483e20750126d30d0941f949426974cace8e6b5c58a3657b0", size = 17084883 }, - { url = "https://files.pythonhosted.org/packages/f0/85/a42548db84e65ece46ab2caea3d3f78b416a47af387fcbb47ec28e660dc2/numpy-2.4.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:8e3ed142f2728df44263aaf5fb1f5b0b99f4070c553a0d7f033be65338329150", size = 18403474 }, - { url = "https://files.pythonhosted.org/packages/ed/ad/483d9e262f4b831000062e5d8a45e342166ec8aaa1195264982bca267e62/numpy-2.4.4-cp314-cp314t-win32.whl", hash = "sha256:dddbbd259598d7240b18c9d87c56a9d2fb3b02fe266f49a7c101532e78c1d871", size = 6155500 }, - { url = "https://files.pythonhosted.org/packages/c7/03/2fc4e14c7bd4ff2964b74ba90ecb8552540b6315f201df70f137faa5c589/numpy-2.4.4-cp314-cp314t-win_amd64.whl", hash = "sha256:a7164afb23be6e37ad90b2f10426149fd75aee07ca55653d2aa41e66c4ef697e", size = 12637755 }, - { url = "https://files.pythonhosted.org/packages/58/78/548fb8e07b1a341746bfbecb32f2c268470f45fa028aacdbd10d9bc73aab/numpy-2.4.4-cp314-cp314t-win_arm64.whl", hash = "sha256:ba203255017337d39f89bdd58417f03c4426f12beed0440cfd933cb15f8669c7", size = 10566643 }, - { url = "https://files.pythonhosted.org/packages/6b/33/8fae8f964a4f63ed528264ddf25d2b683d0b663e3cba26961eb838a7c1bd/numpy-2.4.4-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:58c8b5929fcb8287cbd6f0a3fae19c6e03a5c48402ae792962ac465224a629a4", size = 16854491 }, - { url = "https://files.pythonhosted.org/packages/bc/d0/1aabee441380b981cf8cdda3ae7a46aa827d1b5a8cce84d14598bc94d6d9/numpy-2.4.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:eea7ac5d2dce4189771cedb559c738a71512768210dc4e4753b107a2048b3d0e", size = 14895830 }, - { url = "https://files.pythonhosted.org/packages/a5/b8/aafb0d1065416894fccf4df6b49ef22b8db045187949545bced89c034b8e/numpy-2.4.4-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:51fc224f7ca4d92656d5a5eb315f12eb5fe2c97a66249aa7b5f562528a3be38c", size = 5400927 }, - { url = "https://files.pythonhosted.org/packages/d6/77/063baa20b08b431038c7f9ff5435540c7b7265c78cf56012a483019ca72d/numpy-2.4.4-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:28a650663f7314afc3e6ec620f44f333c386aad9f6fc472030865dc0ebb26ee3", size = 6715557 }, - { url = "https://files.pythonhosted.org/packages/c7/a8/379542d45a14f149444c5c4c4e7714707239ce9cc1de8c2803958889da14/numpy-2.4.4-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:19710a9ca9992d7174e9c52f643d4272dcd1558c5f7af7f6f8190f633bd651a7", size = 15804253 }, - { url = "https://files.pythonhosted.org/packages/a2/c8/f0a45426d6d21e7ea3310a15cf90c43a14d9232c31a837702dba437f3373/numpy-2.4.4-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9b2aec6af35c113b05695ebb5749a787acd63cafc83086a05771d1e1cd1e555f", size = 16753552 }, - { url = "https://files.pythonhosted.org/packages/04/74/f4c001f4714c3ad9ce037e18cf2b9c64871a84951eaa0baf683a9ca9301c/numpy-2.4.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:f2cf083b324a467e1ab358c105f6cad5ea950f50524668a80c486ff1db24e119", size = 12509075 }, -] - -[[package]] -name = "overrides" -version = "7.7.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/36/86/b585f53236dec60aba864e050778b25045f857e17f6e5ea0ae95fe80edd2/overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a", size = 22812 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/ab/fc8290c6a4c722e5514d80f62b2dc4c4df1a68a41d1364e625c35990fcf3/overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49", size = 17832 }, -] - -[[package]] -name = "packaging" -version = "26.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/65/ee/299d360cdc32edc7d2cf530f3accf79c4fca01e96ffc950d8a52213bd8e4/packaging-26.0.tar.gz", hash = "sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4", size = 143416 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl", hash = "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529", size = 74366 }, -] - -[[package]] -name = "pandocfilters" -version = "1.5.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/70/6f/3dd4940bbe001c06a65f88e36bad298bc7a0de5036115639926b0c5c0458/pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e", size = 8454 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ef/af/4fbc8cab944db5d21b7e2a5b8e9211a03a79852b1157e2c102fcc61ac440/pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc", size = 8663 }, -] - -[[package]] -name = "parso" -version = "0.8.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/81/76/a1e769043c0c0c9fe391b702539d594731a4362334cdf4dc25d0c09761e7/parso-0.8.6.tar.gz", hash = "sha256:2b9a0332696df97d454fa67b81618fd69c35a7b90327cbe6ba5c92d2c68a7bfd", size = 401621 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b6/61/fae042894f4296ec49e3f193aff5d7c18440da9e48102c3315e1bc4519a7/parso-0.8.6-py2.py3-none-any.whl", hash = "sha256:2c549f800b70a5c4952197248825584cb00f033b29c692671d3bf08bf380baff", size = 106894 }, -] - -[[package]] -name = "pexpect" -version = "4.9.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "ptyprocess" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772 }, -] - -[[package]] -name = "platformdirs" -version = "4.4.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/23/e8/21db9c9987b0e728855bd57bff6984f67952bea55d6f75e055c46b5383e8/platformdirs-4.4.0.tar.gz", hash = "sha256:ca753cf4d81dc309bc67b0ea38fd15dc97bc30ce419a7f58d13eb3bf14c4febf", size = 21634 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/40/4b/2028861e724d3bd36227adfa20d3fd24c3fc6d52032f4a93c133be5d17ce/platformdirs-4.4.0-py3-none-any.whl", hash = "sha256:abd01743f24e5287cd7a5db3752faf1a2d65353f38ec26d98e25a6db65958c85", size = 18654 }, -] - -[[package]] -name = "platformdirs" -version = "4.9.4" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] -sdist = { url = "https://files.pythonhosted.org/packages/19/56/8d4c30c8a1d07013911a8fdbd8f89440ef9f08d07a1b50ab8ca8be5a20f9/platformdirs-4.9.4.tar.gz", hash = "sha256:1ec356301b7dc906d83f371c8f487070e99d3ccf9e501686456394622a01a934", size = 28737 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/63/d7/97f7e3a6abb67d8080dd406fd4df842c2be0efaf712d1c899c32a075027c/platformdirs-4.9.4-py3-none-any.whl", hash = "sha256:68a9a4619a666ea6439f2ff250c12a853cd1cbd5158d258bd824a7df6be2f868", size = 21216 }, -] - -[[package]] -name = "pluggy" -version = "1.6.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538 }, -] - -[[package]] -name = "pre-commit" -version = "4.3.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "cfgv", version = "3.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "identify", version = "2.6.15", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "nodeenv", marker = "python_full_version < '3.10'" }, - { name = "pyyaml", marker = "python_full_version < '3.10'" }, - { name = "virtualenv", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ff/29/7cf5bbc236333876e4b41f56e06857a87937ce4bf91e117a6991a2dbb02a/pre_commit-4.3.0.tar.gz", hash = "sha256:499fe450cc9d42e9d58e606262795ecb64dd05438943c62b66f6a8673da30b16", size = 193792 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5b/a5/987a405322d78a73b66e39e4a90e4ef156fd7141bf71df987e50717c321b/pre_commit-4.3.0-py2.py3-none-any.whl", hash = "sha256:2b0747ad7e6e967169136edffee14c16e148a778a54e4f967921aa1ebf2308d8", size = 220965 }, -] - -[[package]] -name = "pre-commit" -version = "4.5.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] -dependencies = [ - { name = "cfgv", version = "3.5.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "identify", version = "2.6.18", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "nodeenv", marker = "python_full_version >= '3.10'" }, - { name = "pyyaml", marker = "python_full_version >= '3.10'" }, - { name = "virtualenv", marker = "python_full_version >= '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/40/f1/6d86a29246dfd2e9b6237f0b5823717f60cad94d47ddc26afa916d21f525/pre_commit-4.5.1.tar.gz", hash = "sha256:eb545fcff725875197837263e977ea257a402056661f09dae08e4b149b030a61", size = 198232 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl", hash = "sha256:3b3afd891e97337708c1674210f8eba659b52a38ea5f822ff142d10786221f77", size = 226437 }, -] - -[[package]] -name = "prometheus-client" -version = "0.24.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f0/58/a794d23feb6b00fc0c72787d7e87d872a6730dd9ed7c7b3e954637d8f280/prometheus_client-0.24.1.tar.gz", hash = "sha256:7e0ced7fbbd40f7b84962d5d2ab6f17ef88a72504dcf7c0b40737b43b2a461f9", size = 85616 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/74/c3/24a2f845e3917201628ecaba4f18bab4d18a337834c1df2a159ee9d22a42/prometheus_client-0.24.1-py3-none-any.whl", hash = "sha256:150db128af71a5c2482b36e588fc8a6b95e498750da4b17065947c16070f4055", size = 64057 }, -] - -[[package]] -name = "prompt-toolkit" -version = "3.0.52" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "wcwidth" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a1/96/06e01a7b38dce6fe1db213e061a4602dd6032a8a97ef6c1a862537732421/prompt_toolkit-3.0.52.tar.gz", hash = "sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855", size = 434198 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl", hash = "sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955", size = 391431 }, -] - -[[package]] -name = "psutil" -version = "7.2.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/aa/c6/d1ddf4abb55e93cebc4f2ed8b5d6dbad109ecb8d63748dd2b20ab5e57ebe/psutil-7.2.2.tar.gz", hash = "sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372", size = 493740 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/51/08/510cbdb69c25a96f4ae523f733cdc963ae654904e8db864c07585ef99875/psutil-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b", size = 130595 }, - { url = "https://files.pythonhosted.org/packages/d6/f5/97baea3fe7a5a9af7436301f85490905379b1c6f2dd51fe3ecf24b4c5fbf/psutil-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea", size = 131082 }, - { url = "https://files.pythonhosted.org/packages/37/d6/246513fbf9fa174af531f28412297dd05241d97a75911ac8febefa1a53c6/psutil-7.2.2-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63", size = 181476 }, - { url = "https://files.pythonhosted.org/packages/b8/b5/9182c9af3836cca61696dabe4fd1304e17bc56cb62f17439e1154f225dd3/psutil-7.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312", size = 184062 }, - { url = "https://files.pythonhosted.org/packages/16/ba/0756dca669f5a9300d0cbcbfae9a4c30e446dfc7440ffe43ded5724bfd93/psutil-7.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b", size = 139893 }, - { url = "https://files.pythonhosted.org/packages/1c/61/8fa0e26f33623b49949346de05ec1ddaad02ed8ba64af45f40a147dbfa97/psutil-7.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9", size = 135589 }, - { url = "https://files.pythonhosted.org/packages/81/69/ef179ab5ca24f32acc1dac0c247fd6a13b501fd5534dbae0e05a1c48b66d/psutil-7.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00", size = 130664 }, - { url = "https://files.pythonhosted.org/packages/7b/64/665248b557a236d3fa9efc378d60d95ef56dd0a490c2cd37dafc7660d4a9/psutil-7.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9", size = 131087 }, - { url = "https://files.pythonhosted.org/packages/d5/2e/e6782744700d6759ebce3043dcfa661fb61e2fb752b91cdeae9af12c2178/psutil-7.2.2-cp314-cp314t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a", size = 182383 }, - { url = "https://files.pythonhosted.org/packages/57/49/0a41cefd10cb7505cdc04dab3eacf24c0c2cb158a998b8c7b1d27ee2c1f5/psutil-7.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf", size = 185210 }, - { url = "https://files.pythonhosted.org/packages/dd/2c/ff9bfb544f283ba5f83ba725a3c5fec6d6b10b8f27ac1dc641c473dc390d/psutil-7.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1", size = 141228 }, - { url = "https://files.pythonhosted.org/packages/f2/fc/f8d9c31db14fcec13748d373e668bc3bed94d9077dbc17fb0eebc073233c/psutil-7.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841", size = 136284 }, - { url = "https://files.pythonhosted.org/packages/e7/36/5ee6e05c9bd427237b11b3937ad82bb8ad2752d72c6969314590dd0c2f6e/psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486", size = 129090 }, - { url = "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979", size = 129859 }, - { url = "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9", size = 155560 }, - { url = "https://files.pythonhosted.org/packages/63/65/37648c0c158dc222aba51c089eb3bdfa238e621674dc42d48706e639204f/psutil-7.2.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e", size = 156997 }, - { url = "https://files.pythonhosted.org/packages/8e/13/125093eadae863ce03c6ffdbae9929430d116a246ef69866dad94da3bfbc/psutil-7.2.2-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8", size = 148972 }, - { url = "https://files.pythonhosted.org/packages/04/78/0acd37ca84ce3ddffaa92ef0f571e073faa6d8ff1f0559ab1272188ea2be/psutil-7.2.2-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc", size = 148266 }, - { url = "https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl", hash = "sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988", size = 137737 }, - { url = "https://files.pythonhosted.org/packages/8c/c7/7bb2e321574b10df20cbde462a94e2b71d05f9bbda251ef27d104668306a/psutil-7.2.2-cp37-abi3-win_arm64.whl", hash = "sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee", size = 134617 }, -] - -[[package]] -name = "ptyprocess" -version = "0.7.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993 }, -] - -[[package]] -name = "pure-eval" -version = "0.2.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842 }, -] - -[[package]] -name = "pyamapping" -source = { editable = "." } -dependencies = [ - { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, - { name = "numpy", version = "2.4.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "scipy", version = "1.13.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, - { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, -] - -[package.optional-dependencies] -example-notebooks = [ - { name = "notebook" }, -] - -[package.dev-dependencies] -dev = [ - { name = "pre-commit", version = "4.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "pre-commit", version = "4.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "pytest", version = "8.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "pytest", version = "9.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "pytest-cov" }, - { name = "sphinx", version = "7.4.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, - { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, - { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, - { name = "tox", version = "4.30.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "tox", version = "4.52.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, -] - -[package.metadata] -requires-dist = [ - { name = "notebook", marker = "extra == 'example-notebooks'" }, - { name = "numpy" }, - { name = "scipy" }, -] -provides-extras = ["example-notebooks"] - -[package.metadata.requires-dev] -dev = [ - { name = "pre-commit" }, - { name = "pytest" }, - { name = "pytest-cov" }, - { name = "sphinx" }, - { name = "tox" }, -] - -[[package]] -name = "pycparser" -version = "2.23" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/fe/cf/d2d3b9f5699fb1e4615c8e32ff220203e43b248e1dfcc6736ad9057731ca/pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2", size = 173734 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934", size = 118140 }, -] - -[[package]] -name = "pycparser" -version = "3.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] -sdist = { url = "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", size = 103492 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172 }, -] - -[[package]] -name = "pygments" -version = "2.20.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151 }, -] - -[[package]] -name = "pyproject-api" -version = "1.9.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "packaging", marker = "python_full_version < '3.10'" }, - { name = "tomli", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/19/fd/437901c891f58a7b9096511750247535e891d2d5a5a6eefbc9386a2b41d5/pyproject_api-1.9.1.tar.gz", hash = "sha256:43c9918f49daab37e302038fc1aed54a8c7a91a9fa935d00b9a485f37e0f5335", size = 22710 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ef/e6/c293c06695d4a3ab0260ef124a74ebadba5f4c511ce3a4259e976902c00b/pyproject_api-1.9.1-py3-none-any.whl", hash = "sha256:7d6238d92f8962773dd75b5f0c4a6a27cce092a14b623b811dba656f3b628948", size = 13158 }, -] - -[[package]] -name = "pyproject-api" -version = "1.10.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] -dependencies = [ - { name = "packaging", marker = "python_full_version >= '3.10'" }, - { name = "tomli", marker = "python_full_version == '3.10.*'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/45/7b/c0e1333b61d41c69e59e5366e727b18c4992688caf0de1be10b3e5265f6b/pyproject_api-1.10.0.tar.gz", hash = "sha256:40c6f2d82eebdc4afee61c773ed208c04c19db4c4a60d97f8d7be3ebc0bbb330", size = 22785 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/54/cc/cecf97be298bee2b2a37dd360618c819a2a7fd95251d8e480c1f0eb88f3b/pyproject_api-1.10.0-py3-none-any.whl", hash = "sha256:8757c41a79c0f4ab71b99abed52b97ecf66bd20b04fa59da43b5840bac105a09", size = 13218 }, -] - -[[package]] -name = "pytest" -version = "8.4.2" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "colorama", marker = "python_full_version < '3.10' and sys_platform == 'win32'" }, - { name = "exceptiongroup", marker = "python_full_version < '3.10'" }, - { name = "iniconfig", version = "2.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "packaging", marker = "python_full_version < '3.10'" }, - { name = "pluggy", marker = "python_full_version < '3.10'" }, - { name = "pygments", marker = "python_full_version < '3.10'" }, - { name = "tomli", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a3/5c/00a0e072241553e1a7496d638deababa67c5058571567b92a7eaa258397c/pytest-8.4.2.tar.gz", hash = "sha256:86c0d0b93306b961d58d62a4db4879f27fe25513d4b969df351abdddb3c30e01", size = 1519618 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a8/a4/20da314d277121d6534b3a980b29035dcd51e6744bd79075a6ce8fa4eb8d/pytest-8.4.2-py3-none-any.whl", hash = "sha256:872f880de3fc3a5bdc88a11b39c9710c3497a547cfa9320bc3c5e62fbf272e79", size = 365750 }, -] - -[[package]] -name = "pytest" -version = "9.0.2" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] -dependencies = [ - { name = "colorama", marker = "python_full_version >= '3.10' and sys_platform == 'win32'" }, - { name = "exceptiongroup", marker = "python_full_version == '3.10.*'" }, - { name = "iniconfig", version = "2.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "packaging", marker = "python_full_version >= '3.10'" }, - { name = "pluggy", marker = "python_full_version >= '3.10'" }, - { name = "pygments", marker = "python_full_version >= '3.10'" }, - { name = "tomli", marker = "python_full_version == '3.10.*'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/d1/db/7ef3487e0fb0049ddb5ce41d3a49c235bf9ad299b6a25d5780a89f19230f/pytest-9.0.2.tar.gz", hash = "sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11", size = 1568901 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl", hash = "sha256:711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b", size = 374801 }, -] - -[[package]] -name = "pytest-cov" -version = "7.1.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "coverage", version = "7.10.7", source = { registry = "https://pypi.org/simple" }, extra = ["toml"], marker = "python_full_version < '3.10'" }, - { name = "coverage", version = "7.13.5", source = { registry = "https://pypi.org/simple" }, extra = ["toml"], marker = "python_full_version >= '3.10'" }, - { name = "pluggy" }, - { name = "pytest", version = "8.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "pytest", version = "9.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b1/51/a849f96e117386044471c8ec2bd6cfebacda285da9525c9106aeb28da671/pytest_cov-7.1.0.tar.gz", hash = "sha256:30674f2b5f6351aa09702a9c8c364f6a01c27aae0c1366ae8016160d1efc56b2", size = 55592 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl", hash = "sha256:a0461110b7865f9a271aa1b51e516c9a95de9d696734a2f71e3e78f46e1d4678", size = 22876 }, -] - -[[package]] -name = "python-dateutil" -version = "2.9.0.post0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "six" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 }, -] - -[[package]] -name = "python-discovery" -version = "1.2.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "filelock", version = "3.19.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "platformdirs", version = "4.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b9/88/815e53084c5079a59df912825a279f41dd2e0df82281770eadc732f5352c/python_discovery-1.2.1.tar.gz", hash = "sha256:180c4d114bff1c32462537eac5d6a332b768242b76b69c0259c7d14b1b680c9e", size = 58457 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/67/0f/019d3949a40280f6193b62bc010177d4ce702d0fce424322286488569cd3/python_discovery-1.2.1-py3-none-any.whl", hash = "sha256:b6a957b24c1cd79252484d3566d1b49527581d46e789aaf43181005e56201502", size = 31674 }, -] - -[[package]] -name = "python-discovery" -version = "1.2.2" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] -dependencies = [ - { name = "filelock", version = "3.25.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "platformdirs", version = "4.9.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/de/ef/3bae0e537cfe91e8431efcba4434463d2c5a65f5a89edd47c6cf2f03c55f/python_discovery-1.2.2.tar.gz", hash = "sha256:876e9c57139eb757cb5878cbdd9ae5379e5d96266c99ef731119e04fffe533bb", size = 58872 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d8/db/795879cc3ddfe338599bddea6388cc5100b088db0a4caf6e6c1af1c27e04/python_discovery-1.2.2-py3-none-any.whl", hash = "sha256:e1ae95d9af875e78f15e19aed0c6137ab1bb49c200f21f5061786490c9585c7a", size = 31894 }, -] - -[[package]] -name = "python-json-logger" -version = "4.0.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/29/bf/eca6a3d43db1dae7070f70e160ab20b807627ba953663ba07928cdd3dc58/python_json_logger-4.0.0.tar.gz", hash = "sha256:f58e68eb46e1faed27e0f574a55a0455eecd7b8a5b88b85a784519ba3cff047f", size = 17683 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.0-py3-none-any.whl", hash = "sha256:af09c9daf6a813aa4cc7180395f50f2a9e5fa056034c9953aec92e381c5ba1e2", size = 15548 }, -] - -[[package]] -name = "python-json-logger" -version = "4.1.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] -sdist = { url = "https://files.pythonhosted.org/packages/f7/ff/3cc9165fd44106973cd7ac9facb674a65ed853494592541d339bdc9a30eb/python_json_logger-4.1.0.tar.gz", hash = "sha256:b396b9e3ed782b09ff9d6e4f1683d46c83ad0d35d2e407c09a9ebbf038f88195", size = 17573 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/27/be/0631a861af4d1c875f096c07d34e9a63639560a717130e7a87cbc82b7e3f/python_json_logger-4.1.0-py3-none-any.whl", hash = "sha256:132994765cf75bf44554be9aa49b06ef2345d23661a96720262716438141b6b2", size = 15021 }, -] - -[[package]] -name = "pywin32" -version = "311" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7b/40/44efbb0dfbd33aca6a6483191dae0716070ed99e2ecb0c53683f400a0b4f/pywin32-311-cp310-cp310-win32.whl", hash = "sha256:d03ff496d2a0cd4a5893504789d4a15399133fe82517455e78bad62efbb7f0a3", size = 8760432 }, - { url = "https://files.pythonhosted.org/packages/5e/bf/360243b1e953bd254a82f12653974be395ba880e7ec23e3731d9f73921cc/pywin32-311-cp310-cp310-win_amd64.whl", hash = "sha256:797c2772017851984b97180b0bebe4b620bb86328e8a884bb626156295a63b3b", size = 9590103 }, - { url = "https://files.pythonhosted.org/packages/57/38/d290720e6f138086fb3d5ffe0b6caa019a791dd57866940c82e4eeaf2012/pywin32-311-cp310-cp310-win_arm64.whl", hash = "sha256:0502d1facf1fed4839a9a51ccbcc63d952cf318f78ffc00a7e78528ac27d7a2b", size = 8778557 }, - { url = "https://files.pythonhosted.org/packages/7c/af/449a6a91e5d6db51420875c54f6aff7c97a86a3b13a0b4f1a5c13b988de3/pywin32-311-cp311-cp311-win32.whl", hash = "sha256:184eb5e436dea364dcd3d2316d577d625c0351bf237c4e9a5fabbcfa5a58b151", size = 8697031 }, - { url = "https://files.pythonhosted.org/packages/51/8f/9bb81dd5bb77d22243d33c8397f09377056d5c687aa6d4042bea7fbf8364/pywin32-311-cp311-cp311-win_amd64.whl", hash = "sha256:3ce80b34b22b17ccbd937a6e78e7225d80c52f5ab9940fe0506a1a16f3dab503", size = 9508308 }, - { url = "https://files.pythonhosted.org/packages/44/7b/9c2ab54f74a138c491aba1b1cd0795ba61f144c711daea84a88b63dc0f6c/pywin32-311-cp311-cp311-win_arm64.whl", hash = "sha256:a733f1388e1a842abb67ffa8e7aad0e70ac519e09b0f6a784e65a136ec7cefd2", size = 8703930 }, - { url = "https://files.pythonhosted.org/packages/e7/ab/01ea1943d4eba0f850c3c61e78e8dd59757ff815ff3ccd0a84de5f541f42/pywin32-311-cp312-cp312-win32.whl", hash = "sha256:750ec6e621af2b948540032557b10a2d43b0cee2ae9758c54154d711cc852d31", size = 8706543 }, - { url = "https://files.pythonhosted.org/packages/d1/a8/a0e8d07d4d051ec7502cd58b291ec98dcc0c3fff027caad0470b72cfcc2f/pywin32-311-cp312-cp312-win_amd64.whl", hash = "sha256:b8c095edad5c211ff31c05223658e71bf7116daa0ecf3ad85f3201ea3190d067", size = 9495040 }, - { url = "https://files.pythonhosted.org/packages/ba/3a/2ae996277b4b50f17d61f0603efd8253cb2d79cc7ae159468007b586396d/pywin32-311-cp312-cp312-win_arm64.whl", hash = "sha256:e286f46a9a39c4a18b319c28f59b61de793654af2f395c102b4f819e584b5852", size = 8710102 }, - { url = "https://files.pythonhosted.org/packages/a5/be/3fd5de0979fcb3994bfee0d65ed8ca9506a8a1260651b86174f6a86f52b3/pywin32-311-cp313-cp313-win32.whl", hash = "sha256:f95ba5a847cba10dd8c4d8fefa9f2a6cf283b8b88ed6178fa8a6c1ab16054d0d", size = 8705700 }, - { url = "https://files.pythonhosted.org/packages/e3/28/e0a1909523c6890208295a29e05c2adb2126364e289826c0a8bc7297bd5c/pywin32-311-cp313-cp313-win_amd64.whl", hash = "sha256:718a38f7e5b058e76aee1c56ddd06908116d35147e133427e59a3983f703a20d", size = 9494700 }, - { url = "https://files.pythonhosted.org/packages/04/bf/90339ac0f55726dce7d794e6d79a18a91265bdf3aa70b6b9ca52f35e022a/pywin32-311-cp313-cp313-win_arm64.whl", hash = "sha256:7b4075d959648406202d92a2310cb990fea19b535c7f4a78d3f5e10b926eeb8a", size = 8709318 }, - { url = "https://files.pythonhosted.org/packages/c9/31/097f2e132c4f16d99a22bfb777e0fd88bd8e1c634304e102f313af69ace5/pywin32-311-cp314-cp314-win32.whl", hash = "sha256:b7a2c10b93f8986666d0c803ee19b5990885872a7de910fc460f9b0c2fbf92ee", size = 8840714 }, - { url = "https://files.pythonhosted.org/packages/90/4b/07c77d8ba0e01349358082713400435347df8426208171ce297da32c313d/pywin32-311-cp314-cp314-win_amd64.whl", hash = "sha256:3aca44c046bd2ed8c90de9cb8427f581c479e594e99b5c0bb19b29c10fd6cb87", size = 9656800 }, - { url = "https://files.pythonhosted.org/packages/c0/d2/21af5c535501a7233e734b8af901574572da66fcc254cb35d0609c9080dd/pywin32-311-cp314-cp314-win_arm64.whl", hash = "sha256:a508e2d9025764a8270f93111a970e1d0fbfc33f4153b388bb649b7eec4f9b42", size = 8932540 }, - { url = "https://files.pythonhosted.org/packages/59/42/b86689aac0cdaee7ae1c58d464b0ff04ca909c19bb6502d4973cdd9f9544/pywin32-311-cp39-cp39-win32.whl", hash = "sha256:aba8f82d551a942cb20d4a83413ccbac30790b50efb89a75e4f586ac0bb8056b", size = 8760837 }, - { url = "https://files.pythonhosted.org/packages/9f/8a/1403d0353f8c5a2f0829d2b1c4becbf9da2f0a4d040886404fc4a5431e4d/pywin32-311-cp39-cp39-win_amd64.whl", hash = "sha256:e0c4cfb0621281fe40387df582097fd796e80430597cb9944f0ae70447bacd91", size = 9590187 }, - { url = "https://files.pythonhosted.org/packages/60/22/e0e8d802f124772cec9c75430b01a212f86f9de7546bda715e54140d5aeb/pywin32-311-cp39-cp39-win_arm64.whl", hash = "sha256:62ea666235135fee79bb154e695f3ff67370afefd71bd7fea7512fc70ef31e3d", size = 8778162 }, -] - -[[package]] -name = "pywinpty" -version = "3.0.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f7/54/37c7370ba91f579235049dc26cd2c5e657d2a943e01820844ffc81f32176/pywinpty-3.0.3.tar.gz", hash = "sha256:523441dc34d231fb361b4b00f8c99d3f16de02f5005fd544a0183112bcc22412", size = 31309 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/62/28/a652709bd76ca7533cd1c443b03add9f5051fdf71bc6bdb8801dddd4e7a3/pywinpty-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:ff05f12d775b142b11c6fe085129bdd759b61cf7d41da6c745e78e3a1ef5bf40", size = 2114320 }, - { url = "https://files.pythonhosted.org/packages/b2/13/a0181cc5c2d5635d3dbc3802b97bc8e3ad4fa7502ccef576651a5e08e54c/pywinpty-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:340ccacb4d74278a631923794ccd758471cfc8eeeeee4610b280420a17ad1e82", size = 235670 }, - { url = "https://files.pythonhosted.org/packages/79/c3/3e75075c7f71735f22b66fab0481f2c98e3a4d58cba55cb50ba29114bcf6/pywinpty-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:dff25a9a6435f527d7c65608a7e62783fc12076e7d44487a4911ee91be5a8ac8", size = 2114430 }, - { url = "https://files.pythonhosted.org/packages/8d/1e/8a54166a8c5e4f5cb516514bdf4090be4d51a71e8d9f6d98c0aa00fe45d4/pywinpty-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:fbc1e230e5b193eef4431cba3f39996a288f9958f9c9f092c8a961d930ee8f68", size = 236191 }, - { url = "https://files.pythonhosted.org/packages/7c/d4/aeb5e1784d2c5bff6e189138a9ca91a090117459cea0c30378e1f2db3d54/pywinpty-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:c9081df0e49ffa86d15db4a6ba61530630e48707f987df42c9d3313537e81fc0", size = 2113098 }, - { url = "https://files.pythonhosted.org/packages/b9/53/7278223c493ccfe4883239cf06c823c56460a8010e0fc778eef67858dc14/pywinpty-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:15e79d870e18b678fb8a5a6105fd38496b55697c66e6fc0378236026bc4d59e9", size = 234901 }, - { url = "https://files.pythonhosted.org/packages/e5/cb/58d6ed3fd429c96a90ef01ac9a617af10a6d41469219c25e7dc162abbb71/pywinpty-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9c91dbb026050c77bdcef964e63a4f10f01a639113c4d3658332614544c467ab", size = 2112686 }, - { url = "https://files.pythonhosted.org/packages/fd/50/724ed5c38c504d4e58a88a072776a1e880d970789deaeb2b9f7bd9a5141a/pywinpty-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:fe1f7911805127c94cf51f89ab14096c6f91ffdcacf993d2da6082b2142a2523", size = 234591 }, - { url = "https://files.pythonhosted.org/packages/f7/ad/90a110538696b12b39fd8758a06d70ded899308198ad2305ac68e361126e/pywinpty-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:3f07a6cf1c1d470d284e614733c3d0f726d2c85e78508ea10a403140c3c0c18a", size = 2112360 }, - { url = "https://files.pythonhosted.org/packages/44/0f/7ffa221757a220402bc79fda44044c3f2cc57338d878ab7d622add6f4581/pywinpty-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:15c7c0b6f8e9d87aabbaff76468dabf6e6121332c40fc1d83548d02a9d6a3759", size = 233107 }, - { url = "https://files.pythonhosted.org/packages/28/88/2ff917caff61e55f38bcdb27de06ee30597881b2cae44fbba7627be015c4/pywinpty-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:d4b6b7b0fe0cdcd02e956bd57cfe9f4e5a06514eecf3b5ae174da4f951b58be9", size = 2113282 }, - { url = "https://files.pythonhosted.org/packages/63/32/40a775343ace542cc43ece3f1d1fce454021521ecac41c4c4573081c2336/pywinpty-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:34789d685fc0d547ce0c8a65e5a70e56f77d732fa6e03c8f74fefb8cbb252019", size = 234207 }, - { url = "https://files.pythonhosted.org/packages/8d/54/5d5e52f4cb75028104ca6faf36c10f9692389b1986d34471663b4ebebd6d/pywinpty-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:0c37e224a47a971d1a6e08649a1714dac4f63c11920780977829ed5c8cadead1", size = 2112910 }, - { url = "https://files.pythonhosted.org/packages/0a/44/dcd184824e21d4620b06c7db9fbb15c3ad0a0f1fa2e6de79969fb82647ec/pywinpty-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:c4e9c3dff7d86ba81937438d5819f19f385a39d8f592d4e8af67148ceb4f6ab5", size = 233425 }, - { url = "https://files.pythonhosted.org/packages/d7/48/57c3d4e63aa93280ad1b1c2b3a5412d9d1fdee9955fa0aef43a84518d31b/pywinpty-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:0f10e81d52d7f2c4d927f645f247028e64eaf205a3ed9e64dbd998122108a218", size = 2116037 }, -] - -[[package]] -name = "pyyaml" -version = "6.0.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227 }, - { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019 }, - { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646 }, - { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793 }, - { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293 }, - { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872 }, - { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828 }, - { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415 }, - { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561 }, - { url = "https://files.pythonhosted.org/packages/6d/16/a95b6757765b7b031c9374925bb718d55e0a9ba8a1b6a12d25962ea44347/pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e", size = 185826 }, - { url = "https://files.pythonhosted.org/packages/16/19/13de8e4377ed53079ee996e1ab0a9c33ec2faf808a4647b7b4c0d46dd239/pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824", size = 175577 }, - { url = "https://files.pythonhosted.org/packages/0c/62/d2eb46264d4b157dae1275b573017abec435397aa59cbcdab6fc978a8af4/pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c", size = 775556 }, - { url = "https://files.pythonhosted.org/packages/10/cb/16c3f2cf3266edd25aaa00d6c4350381c8b012ed6f5276675b9eba8d9ff4/pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00", size = 882114 }, - { url = "https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d", size = 806638 }, - { url = "https://files.pythonhosted.org/packages/dd/6f/529b0f316a9fd167281a6c3826b5583e6192dba792dd55e3203d3f8e655a/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a", size = 767463 }, - { url = "https://files.pythonhosted.org/packages/f2/6a/b627b4e0c1dd03718543519ffb2f1deea4a1e6d42fbab8021936a4d22589/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4", size = 794986 }, - { url = "https://files.pythonhosted.org/packages/45/91/47a6e1c42d9ee337c4839208f30d9f09caa9f720ec7582917b264defc875/pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b", size = 142543 }, - { url = "https://files.pythonhosted.org/packages/da/e3/ea007450a105ae919a72393cb06f122f288ef60bba2dc64b26e2646fa315/pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf", size = 158763 }, - { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063 }, - { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973 }, - { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116 }, - { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011 }, - { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870 }, - { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089 }, - { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181 }, - { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658 }, - { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003 }, - { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344 }, - { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669 }, - { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252 }, - { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081 }, - { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159 }, - { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626 }, - { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613 }, - { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115 }, - { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427 }, - { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090 }, - { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246 }, - { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814 }, - { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809 }, - { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454 }, - { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355 }, - { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175 }, - { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228 }, - { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194 }, - { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429 }, - { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912 }, - { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108 }, - { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641 }, - { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901 }, - { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132 }, - { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261 }, - { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272 }, - { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923 }, - { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062 }, - { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341 }, - { url = "https://files.pythonhosted.org/packages/9f/62/67fc8e68a75f738c9200422bf65693fb79a4cd0dc5b23310e5202e978090/pyyaml-6.0.3-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:b865addae83924361678b652338317d1bd7e79b1f4596f96b96c77a5a34b34da", size = 184450 }, - { url = "https://files.pythonhosted.org/packages/ae/92/861f152ce87c452b11b9d0977952259aa7df792d71c1053365cc7b09cc08/pyyaml-6.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c3355370a2c156cffb25e876646f149d5d68f5e0a3ce86a5084dd0b64a994917", size = 174319 }, - { url = "https://files.pythonhosted.org/packages/d0/cd/f0cfc8c74f8a030017a2b9c771b7f47e5dd702c3e28e5b2071374bda2948/pyyaml-6.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3c5677e12444c15717b902a5798264fa7909e41153cdf9ef7ad571b704a63dd9", size = 737631 }, - { url = "https://files.pythonhosted.org/packages/ef/b2/18f2bd28cd2055a79a46c9b0895c0b3d987ce40ee471cecf58a1a0199805/pyyaml-6.0.3-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5ed875a24292240029e4483f9d4a4b8a1ae08843b9c54f43fcc11e404532a8a5", size = 836795 }, - { url = "https://files.pythonhosted.org/packages/73/b9/793686b2d54b531203c160ef12bec60228a0109c79bae6c1277961026770/pyyaml-6.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0150219816b6a1fa26fb4699fb7daa9caf09eb1999f3b70fb6e786805e80375a", size = 750767 }, - { url = "https://files.pythonhosted.org/packages/a9/86/a137b39a611def2ed78b0e66ce2fe13ee701a07c07aebe55c340ed2a050e/pyyaml-6.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fa160448684b4e94d80416c0fa4aac48967a969efe22931448d853ada8baf926", size = 727982 }, - { url = "https://files.pythonhosted.org/packages/dd/62/71c27c94f457cf4418ef8ccc71735324c549f7e3ea9d34aba50874563561/pyyaml-6.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:27c0abcb4a5dac13684a37f76e701e054692a9b2d3064b70f5e4eb54810553d7", size = 755677 }, - { url = "https://files.pythonhosted.org/packages/29/3d/6f5e0d58bd924fb0d06c3a6bad00effbdae2de5adb5cda5648006ffbd8d3/pyyaml-6.0.3-cp39-cp39-win32.whl", hash = "sha256:1ebe39cb5fc479422b83de611d14e2c0d3bb2a18bbcb01f229ab3cfbd8fee7a0", size = 142592 }, - { url = "https://files.pythonhosted.org/packages/f0/0c/25113e0b5e103d7f1490c0e947e303fe4a696c10b501dea7a9f49d4e876c/pyyaml-6.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:2e71d11abed7344e42a8849600193d15b6def118602c4c176f748e4583246007", size = 158777 }, -] - -[[package]] -name = "pyzmq" -version = "27.1.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cffi", marker = "implementation_name == 'pypy'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/04/0b/3c9baedbdf613ecaa7aa07027780b8867f57b6293b6ee50de316c9f3222b/pyzmq-27.1.0.tar.gz", hash = "sha256:ac0765e3d44455adb6ddbf4417dcce460fc40a05978c08efdf2948072f6db540", size = 281750 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/67/b9/52aa9ec2867528b54f1e60846728d8b4d84726630874fee3a91e66c7df81/pyzmq-27.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:508e23ec9bc44c0005c4946ea013d9317ae00ac67778bd47519fdf5a0e930ff4", size = 1329850 }, - { url = "https://files.pythonhosted.org/packages/99/64/5653e7b7425b169f994835a2b2abf9486264401fdef18df91ddae47ce2cc/pyzmq-27.1.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:507b6f430bdcf0ee48c0d30e734ea89ce5567fd7b8a0f0044a369c176aa44556", size = 906380 }, - { url = "https://files.pythonhosted.org/packages/73/78/7d713284dbe022f6440e391bd1f3c48d9185673878034cfb3939cdf333b2/pyzmq-27.1.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf7b38f9fd7b81cb6d9391b2946382c8237fd814075c6aa9c3b746d53076023b", size = 666421 }, - { url = "https://files.pythonhosted.org/packages/30/76/8f099f9d6482450428b17c4d6b241281af7ce6a9de8149ca8c1c649f6792/pyzmq-27.1.0-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:03ff0b279b40d687691a6217c12242ee71f0fba28bf8626ff50e3ef0f4410e1e", size = 854149 }, - { url = "https://files.pythonhosted.org/packages/59/f0/37fbfff06c68016019043897e4c969ceab18bde46cd2aca89821fcf4fb2e/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:677e744fee605753eac48198b15a2124016c009a11056f93807000ab11ce6526", size = 1655070 }, - { url = "https://files.pythonhosted.org/packages/47/14/7254be73f7a8edc3587609554fcaa7bfd30649bf89cd260e4487ca70fdaa/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dd2fec2b13137416a1c5648b7009499bcc8fea78154cd888855fa32514f3dad1", size = 2033441 }, - { url = "https://files.pythonhosted.org/packages/22/dc/49f2be26c6f86f347e796a4d99b19167fc94503f0af3fd010ad262158822/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:08e90bb4b57603b84eab1d0ca05b3bbb10f60c1839dc471fc1c9e1507bef3386", size = 1891529 }, - { url = "https://files.pythonhosted.org/packages/a3/3e/154fb963ae25be70c0064ce97776c937ecc7d8b0259f22858154a9999769/pyzmq-27.1.0-cp310-cp310-win32.whl", hash = "sha256:a5b42d7a0658b515319148875fcb782bbf118dd41c671b62dae33666c2213bda", size = 567276 }, - { url = "https://files.pythonhosted.org/packages/62/b2/f4ab56c8c595abcb26b2be5fd9fa9e6899c1e5ad54964e93ae8bb35482be/pyzmq-27.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:c0bb87227430ee3aefcc0ade2088100e528d5d3298a0a715a64f3d04c60ba02f", size = 632208 }, - { url = "https://files.pythonhosted.org/packages/3b/e3/be2cc7ab8332bdac0522fdb64c17b1b6241a795bee02e0196636ec5beb79/pyzmq-27.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:9a916f76c2ab8d045b19f2286851a38e9ac94ea91faf65bd64735924522a8b32", size = 559766 }, - { url = "https://files.pythonhosted.org/packages/06/5d/305323ba86b284e6fcb0d842d6adaa2999035f70f8c38a9b6d21ad28c3d4/pyzmq-27.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:226b091818d461a3bef763805e75685e478ac17e9008f49fce2d3e52b3d58b86", size = 1333328 }, - { url = "https://files.pythonhosted.org/packages/bd/a0/fc7e78a23748ad5443ac3275943457e8452da67fda347e05260261108cbc/pyzmq-27.1.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:0790a0161c281ca9723f804871b4027f2e8b5a528d357c8952d08cd1a9c15581", size = 908803 }, - { url = "https://files.pythonhosted.org/packages/7e/22/37d15eb05f3bdfa4abea6f6d96eb3bb58585fbd3e4e0ded4e743bc650c97/pyzmq-27.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c895a6f35476b0c3a54e3eb6ccf41bf3018de937016e6e18748317f25d4e925f", size = 668836 }, - { url = "https://files.pythonhosted.org/packages/b1/c4/2a6fe5111a01005fc7af3878259ce17684fabb8852815eda6225620f3c59/pyzmq-27.1.0-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5bbf8d3630bf96550b3be8e1fc0fea5cbdc8d5466c1192887bd94869da17a63e", size = 857038 }, - { url = "https://files.pythonhosted.org/packages/cb/eb/bfdcb41d0db9cd233d6fb22dc131583774135505ada800ebf14dfb0a7c40/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:15c8bd0fe0dabf808e2d7a681398c4e5ded70a551ab47482067a572c054c8e2e", size = 1657531 }, - { url = "https://files.pythonhosted.org/packages/ab/21/e3180ca269ed4a0de5c34417dfe71a8ae80421198be83ee619a8a485b0c7/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:bafcb3dd171b4ae9f19ee6380dfc71ce0390fefaf26b504c0e5f628d7c8c54f2", size = 2034786 }, - { url = "https://files.pythonhosted.org/packages/3b/b1/5e21d0b517434b7f33588ff76c177c5a167858cc38ef740608898cd329f2/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e829529fcaa09937189178115c49c504e69289abd39967cd8a4c215761373394", size = 1894220 }, - { url = "https://files.pythonhosted.org/packages/03/f2/44913a6ff6941905efc24a1acf3d3cb6146b636c546c7406c38c49c403d4/pyzmq-27.1.0-cp311-cp311-win32.whl", hash = "sha256:6df079c47d5902af6db298ec92151db82ecb557af663098b92f2508c398bb54f", size = 567155 }, - { url = "https://files.pythonhosted.org/packages/23/6d/d8d92a0eb270a925c9b4dd039c0b4dc10abc2fcbc48331788824ef113935/pyzmq-27.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:190cbf120fbc0fc4957b56866830def56628934a9d112aec0e2507aa6a032b97", size = 633428 }, - { url = "https://files.pythonhosted.org/packages/ae/14/01afebc96c5abbbd713ecfc7469cfb1bc801c819a74ed5c9fad9a48801cb/pyzmq-27.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:eca6b47df11a132d1745eb3b5b5e557a7dae2c303277aa0e69c6ba91b8736e07", size = 559497 }, - { url = "https://files.pythonhosted.org/packages/92/e7/038aab64a946d535901103da16b953c8c9cc9c961dadcbf3609ed6428d23/pyzmq-27.1.0-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:452631b640340c928fa343801b0d07eb0c3789a5ffa843f6e1a9cee0ba4eb4fc", size = 1306279 }, - { url = "https://files.pythonhosted.org/packages/e8/5e/c3c49fdd0f535ef45eefcc16934648e9e59dace4a37ee88fc53f6cd8e641/pyzmq-27.1.0-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1c179799b118e554b66da67d88ed66cd37a169f1f23b5d9f0a231b4e8d44a113", size = 895645 }, - { url = "https://files.pythonhosted.org/packages/f8/e5/b0b2504cb4e903a74dcf1ebae157f9e20ebb6ea76095f6cfffea28c42ecd/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3837439b7f99e60312f0c926a6ad437b067356dc2bc2ec96eb395fd0fe804233", size = 652574 }, - { url = "https://files.pythonhosted.org/packages/f8/9b/c108cdb55560eaf253f0cbdb61b29971e9fb34d9c3499b0e96e4e60ed8a5/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43ad9a73e3da1fab5b0e7e13402f0b2fb934ae1c876c51d0afff0e7c052eca31", size = 840995 }, - { url = "https://files.pythonhosted.org/packages/c2/bb/b79798ca177b9eb0825b4c9998c6af8cd2a7f15a6a1a4272c1d1a21d382f/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0de3028d69d4cdc475bfe47a6128eb38d8bc0e8f4d69646adfbcd840facbac28", size = 1642070 }, - { url = "https://files.pythonhosted.org/packages/9c/80/2df2e7977c4ede24c79ae39dcef3899bfc5f34d1ca7a5b24f182c9b7a9ca/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:cf44a7763aea9298c0aa7dbf859f87ed7012de8bda0f3977b6fb1d96745df856", size = 2021121 }, - { url = "https://files.pythonhosted.org/packages/46/bd/2d45ad24f5f5ae7e8d01525eb76786fa7557136555cac7d929880519e33a/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f30f395a9e6fbca195400ce833c731e7b64c3919aa481af4d88c3759e0cb7496", size = 1878550 }, - { url = "https://files.pythonhosted.org/packages/e6/2f/104c0a3c778d7c2ab8190e9db4f62f0b6957b53c9d87db77c284b69f33ea/pyzmq-27.1.0-cp312-abi3-win32.whl", hash = "sha256:250e5436a4ba13885494412b3da5d518cd0d3a278a1ae640e113c073a5f88edd", size = 559184 }, - { url = "https://files.pythonhosted.org/packages/fc/7f/a21b20d577e4100c6a41795842028235998a643b1ad406a6d4163ea8f53e/pyzmq-27.1.0-cp312-abi3-win_amd64.whl", hash = "sha256:9ce490cf1d2ca2ad84733aa1d69ce6855372cb5ce9223802450c9b2a7cba0ccf", size = 619480 }, - { url = "https://files.pythonhosted.org/packages/78/c2/c012beae5f76b72f007a9e91ee9401cb88c51d0f83c6257a03e785c81cc2/pyzmq-27.1.0-cp312-abi3-win_arm64.whl", hash = "sha256:75a2f36223f0d535a0c919e23615fc85a1e23b71f40c7eb43d7b1dedb4d8f15f", size = 552993 }, - { url = "https://files.pythonhosted.org/packages/60/cb/84a13459c51da6cec1b7b1dc1a47e6db6da50b77ad7fd9c145842750a011/pyzmq-27.1.0-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:93ad4b0855a664229559e45c8d23797ceac03183c7b6f5b4428152a6b06684a5", size = 1122436 }, - { url = "https://files.pythonhosted.org/packages/dc/b6/94414759a69a26c3dd674570a81813c46a078767d931a6c70ad29fc585cb/pyzmq-27.1.0-cp313-cp313-android_24_x86_64.whl", hash = "sha256:fbb4f2400bfda24f12f009cba62ad5734148569ff4949b1b6ec3b519444342e6", size = 1156301 }, - { url = "https://files.pythonhosted.org/packages/a5/ad/15906493fd40c316377fd8a8f6b1f93104f97a752667763c9b9c1b71d42d/pyzmq-27.1.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:e343d067f7b151cfe4eb3bb796a7752c9d369eed007b91231e817071d2c2fec7", size = 1341197 }, - { url = "https://files.pythonhosted.org/packages/14/1d/d343f3ce13db53a54cb8946594e567410b2125394dafcc0268d8dda027e0/pyzmq-27.1.0-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:08363b2011dec81c354d694bdecaef4770e0ae96b9afea70b3f47b973655cc05", size = 897275 }, - { url = "https://files.pythonhosted.org/packages/69/2d/d83dd6d7ca929a2fc67d2c3005415cdf322af7751d773524809f9e585129/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d54530c8c8b5b8ddb3318f481297441af102517602b569146185fa10b63f4fa9", size = 660469 }, - { url = "https://files.pythonhosted.org/packages/3e/cd/9822a7af117f4bc0f1952dbe9ef8358eb50a24928efd5edf54210b850259/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f3afa12c392f0a44a2414056d730eebc33ec0926aae92b5ad5cf26ebb6cc128", size = 847961 }, - { url = "https://files.pythonhosted.org/packages/9a/12/f003e824a19ed73be15542f172fd0ec4ad0b60cf37436652c93b9df7c585/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c65047adafe573ff023b3187bb93faa583151627bc9c51fc4fb2c561ed689d39", size = 1650282 }, - { url = "https://files.pythonhosted.org/packages/d5/4a/e82d788ed58e9a23995cee70dbc20c9aded3d13a92d30d57ec2291f1e8a3/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:90e6e9441c946a8b0a667356f7078d96411391a3b8f80980315455574177ec97", size = 2024468 }, - { url = "https://files.pythonhosted.org/packages/d9/94/2da0a60841f757481e402b34bf4c8bf57fa54a5466b965de791b1e6f747d/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:add071b2d25f84e8189aaf0882d39a285b42fa3853016ebab234a5e78c7a43db", size = 1885394 }, - { url = "https://files.pythonhosted.org/packages/4f/6f/55c10e2e49ad52d080dc24e37adb215e5b0d64990b57598abc2e3f01725b/pyzmq-27.1.0-cp313-cp313t-win32.whl", hash = "sha256:7ccc0700cfdf7bd487bea8d850ec38f204478681ea02a582a8da8171b7f90a1c", size = 574964 }, - { url = "https://files.pythonhosted.org/packages/87/4d/2534970ba63dd7c522d8ca80fb92777f362c0f321900667c615e2067cb29/pyzmq-27.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:8085a9fba668216b9b4323be338ee5437a235fe275b9d1610e422ccc279733e2", size = 641029 }, - { url = "https://files.pythonhosted.org/packages/f6/fa/f8aea7a28b0641f31d40dea42d7ef003fded31e184ef47db696bc74cd610/pyzmq-27.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:6bb54ca21bcfe361e445256c15eedf083f153811c37be87e0514934d6913061e", size = 561541 }, - { url = "https://files.pythonhosted.org/packages/87/45/19efbb3000956e82d0331bafca5d9ac19ea2857722fa2caacefb6042f39d/pyzmq-27.1.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:ce980af330231615756acd5154f29813d553ea555485ae712c491cd483df6b7a", size = 1341197 }, - { url = "https://files.pythonhosted.org/packages/48/43/d72ccdbf0d73d1343936296665826350cb1e825f92f2db9db3e61c2162a2/pyzmq-27.1.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1779be8c549e54a1c38f805e56d2a2e5c009d26de10921d7d51cfd1c8d4632ea", size = 897175 }, - { url = "https://files.pythonhosted.org/packages/2f/2e/a483f73a10b65a9ef0161e817321d39a770b2acf8bcf3004a28d90d14a94/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7200bb0f03345515df50d99d3db206a0a6bee1955fbb8c453c76f5bf0e08fb96", size = 660427 }, - { url = "https://files.pythonhosted.org/packages/f5/d2/5f36552c2d3e5685abe60dfa56f91169f7a2d99bbaf67c5271022ab40863/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01c0e07d558b06a60773744ea6251f769cd79a41a97d11b8bf4ab8f034b0424d", size = 847929 }, - { url = "https://files.pythonhosted.org/packages/c4/2a/404b331f2b7bf3198e9945f75c4c521f0c6a3a23b51f7a4a401b94a13833/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:80d834abee71f65253c91540445d37c4c561e293ba6e741b992f20a105d69146", size = 1650193 }, - { url = "https://files.pythonhosted.org/packages/1c/0b/f4107e33f62a5acf60e3ded67ed33d79b4ce18de432625ce2fc5093d6388/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:544b4e3b7198dde4a62b8ff6685e9802a9a1ebf47e77478a5eb88eca2a82f2fd", size = 2024388 }, - { url = "https://files.pythonhosted.org/packages/0d/01/add31fe76512642fd6e40e3a3bd21f4b47e242c8ba33efb6809e37076d9b/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cedc4c68178e59a4046f97eca31b148ddcf51e88677de1ef4e78cf06c5376c9a", size = 1885316 }, - { url = "https://files.pythonhosted.org/packages/c4/59/a5f38970f9bf07cee96128de79590bb354917914a9be11272cfc7ff26af0/pyzmq-27.1.0-cp314-cp314t-win32.whl", hash = "sha256:1f0b2a577fd770aa6f053211a55d1c47901f4d537389a034c690291485e5fe92", size = 587472 }, - { url = "https://files.pythonhosted.org/packages/70/d8/78b1bad170f93fcf5e3536e70e8fadac55030002275c9a29e8f5719185de/pyzmq-27.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:19c9468ae0437f8074af379e986c5d3d7d7bfe033506af442e8c879732bedbe0", size = 661401 }, - { url = "https://files.pythonhosted.org/packages/81/d6/4bfbb40c9a0b42fc53c7cf442f6385db70b40f74a783130c5d0a5aa62228/pyzmq-27.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:dc5dbf68a7857b59473f7df42650c621d7e8923fb03fa74a526890f4d33cc4d7", size = 575170 }, - { url = "https://files.pythonhosted.org/packages/ac/4e/782eb6df91b6a9d9afa96c2dcfc5cac62562a68eb62a02210101f886014d/pyzmq-27.1.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:96c71c32fff75957db6ae33cd961439f386505c6e6b377370af9b24a1ef9eafb", size = 1330426 }, - { url = "https://files.pythonhosted.org/packages/8d/ca/2b8693d06b1db4e0c084871e4c9d7842b561d0a6ff9d780640f5e3e9eb55/pyzmq-27.1.0-cp39-cp39-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:49d3980544447f6bd2968b6ac913ab963a49dcaa2d4a2990041f16057b04c429", size = 906559 }, - { url = "https://files.pythonhosted.org/packages/6a/b3/b99b39e2cfdcebd512959780e4d299447fd7f46010b1d88d63324e2481ec/pyzmq-27.1.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:849ca054d81aa1c175c49484afaaa5db0622092b5eccb2055f9f3bb8f703782d", size = 863816 }, - { url = "https://files.pythonhosted.org/packages/61/b2/018fa8e8eefb34a625b1a45e2effcbc9885645b22cdd0a68283f758351e7/pyzmq-27.1.0-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3970778e74cb7f85934d2b926b9900e92bfe597e62267d7499acc39c9c28e345", size = 666735 }, - { url = "https://files.pythonhosted.org/packages/01/05/8ae778f7cd7c94030731ae2305e6a38f3a333b6825f56c0c03f2134ccf1b/pyzmq-27.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:da96ecdcf7d3919c3be2de91a8c513c186f6762aa6cf7c01087ed74fad7f0968", size = 1655425 }, - { url = "https://files.pythonhosted.org/packages/ad/ad/d69478a97a3f3142f9dbbbd9daa4fcf42541913a85567c36d4cfc19b2218/pyzmq-27.1.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:9541c444cfe1b1c0156c5c86ece2bb926c7079a18e7b47b0b1b3b1b875e5d098", size = 2033729 }, - { url = "https://files.pythonhosted.org/packages/9a/6d/e3c6ad05bc1cddd25094e66cc15ae8924e15c67e231e93ed2955c401007e/pyzmq-27.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e30a74a39b93e2e1591b58eb1acef4902be27c957a8720b0e368f579b82dc22f", size = 1891803 }, - { url = "https://files.pythonhosted.org/packages/7f/a7/97e8be0daaca157511563160b67a13d4fe76b195e3fa6873cb554ad46be3/pyzmq-27.1.0-cp39-cp39-win32.whl", hash = "sha256:b1267823d72d1e40701dcba7edc45fd17f71be1285557b7fe668887150a14b78", size = 567627 }, - { url = "https://files.pythonhosted.org/packages/5c/91/70bbf3a7c5b04c904261ef5ba224d8a76315f6c23454251bf5f55573a8a1/pyzmq-27.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:0c996ded912812a2fcd7ab6574f4ad3edc27cb6510349431e4930d4196ade7db", size = 632315 }, - { url = "https://files.pythonhosted.org/packages/cc/b5/a4173a83c7fd37f6bdb5a800ea338bc25603284e9ef8681377cec006ede4/pyzmq-27.1.0-cp39-cp39-win_arm64.whl", hash = "sha256:346e9ba4198177a07e7706050f35d733e08c1c1f8ceacd5eb6389d653579ffbc", size = 559833 }, - { url = "https://files.pythonhosted.org/packages/f3/81/a65e71c1552f74dec9dff91d95bafb6e0d33338a8dfefbc88aa562a20c92/pyzmq-27.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c17e03cbc9312bee223864f1a2b13a99522e0dc9f7c5df0177cd45210ac286e6", size = 836266 }, - { url = "https://files.pythonhosted.org/packages/58/ed/0202ca350f4f2b69faa95c6d931e3c05c3a397c184cacb84cb4f8f42f287/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:f328d01128373cb6763823b2b4e7f73bdf767834268c565151eacb3b7a392f90", size = 800206 }, - { url = "https://files.pythonhosted.org/packages/47/42/1ff831fa87fe8f0a840ddb399054ca0009605d820e2b44ea43114f5459f4/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c1790386614232e1b3a40a958454bdd42c6d1811837b15ddbb052a032a43f62", size = 567747 }, - { url = "https://files.pythonhosted.org/packages/d1/db/5c4d6807434751e3f21231bee98109aa57b9b9b55e058e450d0aef59b70f/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:448f9cb54eb0cee4732b46584f2710c8bc178b0e5371d9e4fc8125201e413a74", size = 747371 }, - { url = "https://files.pythonhosted.org/packages/26/af/78ce193dbf03567eb8c0dc30e3df2b9e56f12a670bf7eb20f9fb532c7e8a/pyzmq-27.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:05b12f2d32112bf8c95ef2e74ec4f1d4beb01f8b5e703b38537f8849f92cb9ba", size = 544862 }, - { url = "https://files.pythonhosted.org/packages/4c/c6/c4dcdecdbaa70969ee1fdced6d7b8f60cfabe64d25361f27ac4665a70620/pyzmq-27.1.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:18770c8d3563715387139060d37859c02ce40718d1faf299abddcdcc6a649066", size = 836265 }, - { url = "https://files.pythonhosted.org/packages/3e/79/f38c92eeaeb03a2ccc2ba9866f0439593bb08c5e3b714ac1d553e5c96e25/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:ac25465d42f92e990f8d8b0546b01c391ad431c3bf447683fdc40565941d0604", size = 800208 }, - { url = "https://files.pythonhosted.org/packages/49/0e/3f0d0d335c6b3abb9b7b723776d0b21fa7f3a6c819a0db6097059aada160/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53b40f8ae006f2734ee7608d59ed661419f087521edbfc2149c3932e9c14808c", size = 567747 }, - { url = "https://files.pythonhosted.org/packages/a1/cf/f2b3784d536250ffd4be70e049f3b60981235d70c6e8ce7e3ef21e1adb25/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f605d884e7c8be8fe1aa94e0a783bf3f591b84c24e4bc4f3e7564c82ac25e271", size = 747371 }, - { url = "https://files.pythonhosted.org/packages/01/1b/5dbe84eefc86f48473947e2f41711aded97eecef1231f4558f1f02713c12/pyzmq-27.1.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c9f7f6e13dff2e44a6afeaf2cf54cee5929ad64afaf4d40b50f93c58fc687355", size = 544862 }, - { url = "https://files.pythonhosted.org/packages/57/f4/c2e978cf6b833708bad7d6396c3a20c19750585a1775af3ff13c435e1912/pyzmq-27.1.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:722ea791aa233ac0a819fc2c475e1292c76930b31f1d828cb61073e2fe5e208f", size = 836257 }, - { url = "https://files.pythonhosted.org/packages/5f/5f/4e10c7f57a4c92ab0fbb2396297aa8d618e6f5b9b8f8e9756d56f3e6fc52/pyzmq-27.1.0-pp39-pypy39_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:01f9437501886d3a1dd4b02ef59fb8cc384fa718ce066d52f175ee49dd5b7ed8", size = 800203 }, - { url = "https://files.pythonhosted.org/packages/19/72/a74a007cd636f903448c6ab66628104b1fc5f2ba018733d5eabb94a0a6fb/pyzmq-27.1.0-pp39-pypy39_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4a19387a3dddcc762bfd2f570d14e2395b2c9701329b266f83dd87a2b3cbd381", size = 758756 }, - { url = "https://files.pythonhosted.org/packages/a9/d4/30c25b91f2b4786026372f5ef454134d7f576fcf4ac58539ad7dd5de4762/pyzmq-27.1.0-pp39-pypy39_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c618fbcd069e3a29dcd221739cacde52edcc681f041907867e0f5cc7e85f172", size = 567742 }, - { url = "https://files.pythonhosted.org/packages/92/aa/ee86edad943438cd0316964020c4b6d09854414f9f945f8e289ea6fcc019/pyzmq-27.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ff8d114d14ac671d88c89b9224c63d6c4e5a613fe8acd5594ce53d752a3aafe9", size = 544857 }, -] - -[[package]] -name = "referencing" -version = "0.36.2" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "attrs", marker = "python_full_version < '3.10'" }, - { name = "rpds-py", version = "0.27.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "typing-extensions", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/2f/db/98b5c277be99dd18bfd91dd04e1b759cad18d1a338188c936e92f921c7e2/referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa", size = 74744 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775 }, -] - -[[package]] -name = "referencing" -version = "0.37.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] -dependencies = [ - { name = "attrs", marker = "python_full_version >= '3.10'" }, - { name = "rpds-py", version = "0.30.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "typing-extensions", marker = "python_full_version >= '3.10' and python_full_version < '3.13'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8", size = 78036 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231", size = 26766 }, -] - -[[package]] -name = "requests" -version = "2.32.5" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "certifi", marker = "python_full_version < '3.10'" }, - { name = "charset-normalizer", marker = "python_full_version < '3.10'" }, - { name = "idna", marker = "python_full_version < '3.10'" }, - { name = "urllib3", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738 }, -] - -[[package]] -name = "requests" -version = "2.33.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] -dependencies = [ - { name = "certifi", marker = "python_full_version >= '3.10'" }, - { name = "charset-normalizer", marker = "python_full_version >= '3.10'" }, - { name = "idna", marker = "python_full_version >= '3.10'" }, - { name = "urllib3", marker = "python_full_version >= '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/5f/a4/98b9c7c6428a668bf7e42ebb7c79d576a1c3c1e3ae2d47e674b468388871/requests-2.33.1.tar.gz", hash = "sha256:18817f8c57c6263968bc123d237e3b8b08ac046f5456bd1e307ee8f4250d3517", size = 134120 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl", hash = "sha256:4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a", size = 64947 }, -] - -[[package]] -name = "rfc3339-validator" -version = "0.1.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "six" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/28/ea/a9387748e2d111c3c2b275ba970b735e04e15cdb1eb30693b6b5708c4dbd/rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b", size = 5513 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa", size = 3490 }, -] - -[[package]] -name = "rfc3986-validator" -version = "0.1.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/da/88/f270de456dd7d11dcc808abfa291ecdd3f45ff44e3b549ffa01b126464d0/rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055", size = 6760 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9", size = 4242 }, -] - -[[package]] -name = "rfc3987-syntax" -version = "1.1.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "lark" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/2c/06/37c1a5557acf449e8e406a830a05bf885ac47d33270aec454ef78675008d/rfc3987_syntax-1.1.0.tar.gz", hash = "sha256:717a62cbf33cffdd16dfa3a497d81ce48a660ea691b1ddd7be710c22f00b4a0d", size = 14239 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/71/44ce230e1b7fadd372515a97e32a83011f906ddded8d03e3c6aafbdedbb7/rfc3987_syntax-1.1.0-py3-none-any.whl", hash = "sha256:6c3d97604e4c5ce9f714898e05401a0445a641cfa276432b0a648c80856f6a3f", size = 8046 }, -] - -[[package]] -name = "roman-numerals" -version = "4.1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ae/f9/41dc953bbeb056c17d5f7a519f50fdf010bd0553be2d630bc69d1e022703/roman_numerals-4.1.0.tar.gz", hash = "sha256:1af8b147eb1405d5839e78aeb93131690495fe9da5c91856cb33ad55a7f1e5b2", size = 9077 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl", hash = "sha256:647ba99caddc2cc1e55a51e4360689115551bf4476d90e8162cf8c345fe233c7", size = 7676 }, -] - -[[package]] -name = "rpds-py" -version = "0.27.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/e9/dd/2c0cbe774744272b0ae725f44032c77bdcab6e8bcf544bffa3b6e70c8dba/rpds_py-0.27.1.tar.gz", hash = "sha256:26a1c73171d10b7acccbded82bf6a586ab8203601e565badc74bbbf8bc5a10f8", size = 27479 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a5/ed/3aef893e2dd30e77e35d20d4ddb45ca459db59cead748cad9796ad479411/rpds_py-0.27.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:68afeec26d42ab3b47e541b272166a0b4400313946871cba3ed3a4fc0cab1cef", size = 371606 }, - { url = "https://files.pythonhosted.org/packages/6d/82/9818b443e5d3eb4c83c3994561387f116aae9833b35c484474769c4a8faf/rpds_py-0.27.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:74e5b2f7bb6fa38b1b10546d27acbacf2a022a8b5543efb06cfebc72a59c85be", size = 353452 }, - { url = "https://files.pythonhosted.org/packages/99/c7/d2a110ffaaa397fc6793a83c7bd3545d9ab22658b7cdff05a24a4535cc45/rpds_py-0.27.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9024de74731df54546fab0bfbcdb49fae19159ecaecfc8f37c18d2c7e2c0bd61", size = 381519 }, - { url = "https://files.pythonhosted.org/packages/5a/bc/e89581d1f9d1be7d0247eaef602566869fdc0d084008ba139e27e775366c/rpds_py-0.27.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:31d3ebadefcd73b73928ed0b2fd696f7fefda8629229f81929ac9c1854d0cffb", size = 394424 }, - { url = "https://files.pythonhosted.org/packages/ac/2e/36a6861f797530e74bb6ed53495f8741f1ef95939eed01d761e73d559067/rpds_py-0.27.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2e7f8f169d775dd9092a1743768d771f1d1300453ddfe6325ae3ab5332b4657", size = 523467 }, - { url = "https://files.pythonhosted.org/packages/c4/59/c1bc2be32564fa499f988f0a5c6505c2f4746ef96e58e4d7de5cf923d77e/rpds_py-0.27.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d905d16f77eb6ab2e324e09bfa277b4c8e5e6b8a78a3e7ff8f3cdf773b4c013", size = 402660 }, - { url = "https://files.pythonhosted.org/packages/0a/ec/ef8bf895f0628dd0a59e54d81caed6891663cb9c54a0f4bb7da918cb88cf/rpds_py-0.27.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50c946f048209e6362e22576baea09193809f87687a95a8db24e5fbdb307b93a", size = 384062 }, - { url = "https://files.pythonhosted.org/packages/69/f7/f47ff154be8d9a5e691c083a920bba89cef88d5247c241c10b9898f595a1/rpds_py-0.27.1-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:3deab27804d65cd8289eb814c2c0e807c4b9d9916c9225e363cb0cf875eb67c1", size = 401289 }, - { url = "https://files.pythonhosted.org/packages/3b/d9/ca410363efd0615814ae579f6829cafb39225cd63e5ea5ed1404cb345293/rpds_py-0.27.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8b61097f7488de4be8244c89915da8ed212832ccf1e7c7753a25a394bf9b1f10", size = 417718 }, - { url = "https://files.pythonhosted.org/packages/e3/a0/8cb5c2ff38340f221cc067cc093d1270e10658ba4e8d263df923daa18e86/rpds_py-0.27.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8a3f29aba6e2d7d90528d3c792555a93497fe6538aa65eb675b44505be747808", size = 558333 }, - { url = "https://files.pythonhosted.org/packages/6f/8c/1b0de79177c5d5103843774ce12b84caa7164dfc6cd66378768d37db11bf/rpds_py-0.27.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dd6cd0485b7d347304067153a6dc1d73f7d4fd995a396ef32a24d24b8ac63ac8", size = 589127 }, - { url = "https://files.pythonhosted.org/packages/c8/5e/26abb098d5e01266b0f3a2488d299d19ccc26849735d9d2b95c39397e945/rpds_py-0.27.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6f4461bf931108c9fa226ffb0e257c1b18dc2d44cd72b125bec50ee0ab1248a9", size = 554899 }, - { url = "https://files.pythonhosted.org/packages/de/41/905cc90ced13550db017f8f20c6d8e8470066c5738ba480d7ba63e3d136b/rpds_py-0.27.1-cp310-cp310-win32.whl", hash = "sha256:ee5422d7fb21f6a00c1901bf6559c49fee13a5159d0288320737bbf6585bd3e4", size = 217450 }, - { url = "https://files.pythonhosted.org/packages/75/3d/6bef47b0e253616ccdf67c283e25f2d16e18ccddd38f92af81d5a3420206/rpds_py-0.27.1-cp310-cp310-win_amd64.whl", hash = "sha256:3e039aabf6d5f83c745d5f9a0a381d031e9ed871967c0a5c38d201aca41f3ba1", size = 228447 }, - { url = "https://files.pythonhosted.org/packages/b5/c1/7907329fbef97cbd49db6f7303893bd1dd5a4a3eae415839ffdfb0762cae/rpds_py-0.27.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:be898f271f851f68b318872ce6ebebbc62f303b654e43bf72683dbdc25b7c881", size = 371063 }, - { url = "https://files.pythonhosted.org/packages/11/94/2aab4bc86228bcf7c48760990273653a4900de89c7537ffe1b0d6097ed39/rpds_py-0.27.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:62ac3d4e3e07b58ee0ddecd71d6ce3b1637de2d373501412df395a0ec5f9beb5", size = 353210 }, - { url = "https://files.pythonhosted.org/packages/3a/57/f5eb3ecf434342f4f1a46009530e93fd201a0b5b83379034ebdb1d7c1a58/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4708c5c0ceb2d034f9991623631d3d23cb16e65c83736ea020cdbe28d57c0a0e", size = 381636 }, - { url = "https://files.pythonhosted.org/packages/ae/f4/ef95c5945e2ceb5119571b184dd5a1cc4b8541bbdf67461998cfeac9cb1e/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:abfa1171a9952d2e0002aba2ad3780820b00cc3d9c98c6630f2e93271501f66c", size = 394341 }, - { url = "https://files.pythonhosted.org/packages/5a/7e/4bd610754bf492d398b61725eb9598ddd5eb86b07d7d9483dbcd810e20bc/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b507d19f817ebaca79574b16eb2ae412e5c0835542c93fe9983f1e432aca195", size = 523428 }, - { url = "https://files.pythonhosted.org/packages/9f/e5/059b9f65a8c9149361a8b75094864ab83b94718344db511fd6117936ed2a/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:168b025f8fd8d8d10957405f3fdcef3dc20f5982d398f90851f4abc58c566c52", size = 402923 }, - { url = "https://files.pythonhosted.org/packages/f5/48/64cabb7daced2968dd08e8a1b7988bf358d7bd5bcd5dc89a652f4668543c/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb56c6210ef77caa58e16e8c17d35c63fe3f5b60fd9ba9d424470c3400bcf9ed", size = 384094 }, - { url = "https://files.pythonhosted.org/packages/ae/e1/dc9094d6ff566bff87add8a510c89b9e158ad2ecd97ee26e677da29a9e1b/rpds_py-0.27.1-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:d252f2d8ca0195faa707f8eb9368955760880b2b42a8ee16d382bf5dd807f89a", size = 401093 }, - { url = "https://files.pythonhosted.org/packages/37/8e/ac8577e3ecdd5593e283d46907d7011618994e1d7ab992711ae0f78b9937/rpds_py-0.27.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6e5e54da1e74b91dbc7996b56640f79b195d5925c2b78efaa8c5d53e1d88edde", size = 417969 }, - { url = "https://files.pythonhosted.org/packages/66/6d/87507430a8f74a93556fe55c6485ba9c259949a853ce407b1e23fea5ba31/rpds_py-0.27.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ffce0481cc6e95e5b3f0a47ee17ffbd234399e6d532f394c8dce320c3b089c21", size = 558302 }, - { url = "https://files.pythonhosted.org/packages/3a/bb/1db4781ce1dda3eecc735e3152659a27b90a02ca62bfeea17aee45cc0fbc/rpds_py-0.27.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:a205fdfe55c90c2cd8e540ca9ceba65cbe6629b443bc05db1f590a3db8189ff9", size = 589259 }, - { url = "https://files.pythonhosted.org/packages/7b/0e/ae1c8943d11a814d01b482e1f8da903f88047a962dff9bbdadf3bd6e6fd1/rpds_py-0.27.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:689fb5200a749db0415b092972e8eba85847c23885c8543a8b0f5c009b1a5948", size = 554983 }, - { url = "https://files.pythonhosted.org/packages/b2/d5/0b2a55415931db4f112bdab072443ff76131b5ac4f4dc98d10d2d357eb03/rpds_py-0.27.1-cp311-cp311-win32.whl", hash = "sha256:3182af66048c00a075010bc7f4860f33913528a4b6fc09094a6e7598e462fe39", size = 217154 }, - { url = "https://files.pythonhosted.org/packages/24/75/3b7ffe0d50dc86a6a964af0d1cc3a4a2cdf437cb7b099a4747bbb96d1819/rpds_py-0.27.1-cp311-cp311-win_amd64.whl", hash = "sha256:b4938466c6b257b2f5c4ff98acd8128ec36b5059e5c8f8372d79316b1c36bb15", size = 228627 }, - { url = "https://files.pythonhosted.org/packages/8d/3f/4fd04c32abc02c710f09a72a30c9a55ea3cc154ef8099078fd50a0596f8e/rpds_py-0.27.1-cp311-cp311-win_arm64.whl", hash = "sha256:2f57af9b4d0793e53266ee4325535a31ba48e2f875da81a9177c9926dfa60746", size = 220998 }, - { url = "https://files.pythonhosted.org/packages/bd/fe/38de28dee5df58b8198c743fe2bea0c785c6d40941b9950bac4cdb71a014/rpds_py-0.27.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ae2775c1973e3c30316892737b91f9283f9908e3cc7625b9331271eaaed7dc90", size = 361887 }, - { url = "https://files.pythonhosted.org/packages/7c/9a/4b6c7eedc7dd90986bf0fab6ea2a091ec11c01b15f8ba0a14d3f80450468/rpds_py-0.27.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2643400120f55c8a96f7c9d858f7be0c88d383cd4653ae2cf0d0c88f668073e5", size = 345795 }, - { url = "https://files.pythonhosted.org/packages/6f/0e/e650e1b81922847a09cca820237b0edee69416a01268b7754d506ade11ad/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16323f674c089b0360674a4abd28d5042947d54ba620f72514d69be4ff64845e", size = 385121 }, - { url = "https://files.pythonhosted.org/packages/1b/ea/b306067a712988e2bff00dcc7c8f31d26c29b6d5931b461aa4b60a013e33/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a1f4814b65eacac94a00fc9a526e3fdafd78e439469644032032d0d63de4881", size = 398976 }, - { url = "https://files.pythonhosted.org/packages/2c/0a/26dc43c8840cb8fe239fe12dbc8d8de40f2365e838f3d395835dde72f0e5/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ba32c16b064267b22f1850a34051121d423b6f7338a12b9459550eb2096e7ec", size = 525953 }, - { url = "https://files.pythonhosted.org/packages/22/14/c85e8127b573aaf3a0cbd7fbb8c9c99e735a4a02180c84da2a463b766e9e/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5c20f33fd10485b80f65e800bbe5f6785af510b9f4056c5a3c612ebc83ba6cb", size = 407915 }, - { url = "https://files.pythonhosted.org/packages/ed/7b/8f4fee9ba1fb5ec856eb22d725a4efa3deb47f769597c809e03578b0f9d9/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:466bfe65bd932da36ff279ddd92de56b042f2266d752719beb97b08526268ec5", size = 386883 }, - { url = "https://files.pythonhosted.org/packages/86/47/28fa6d60f8b74fcdceba81b272f8d9836ac0340570f68f5df6b41838547b/rpds_py-0.27.1-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:41e532bbdcb57c92ba3be62c42e9f096431b4cf478da9bc3bc6ce5c38ab7ba7a", size = 405699 }, - { url = "https://files.pythonhosted.org/packages/d0/fd/c5987b5e054548df56953a21fe2ebed51fc1ec7c8f24fd41c067b68c4a0a/rpds_py-0.27.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f149826d742b406579466283769a8ea448eed82a789af0ed17b0cd5770433444", size = 423713 }, - { url = "https://files.pythonhosted.org/packages/ac/ba/3c4978b54a73ed19a7d74531be37a8bcc542d917c770e14d372b8daea186/rpds_py-0.27.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:80c60cfb5310677bd67cb1e85a1e8eb52e12529545441b43e6f14d90b878775a", size = 562324 }, - { url = "https://files.pythonhosted.org/packages/b5/6c/6943a91768fec16db09a42b08644b960cff540c66aab89b74be6d4a144ba/rpds_py-0.27.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:7ee6521b9baf06085f62ba9c7a3e5becffbc32480d2f1b351559c001c38ce4c1", size = 593646 }, - { url = "https://files.pythonhosted.org/packages/11/73/9d7a8f4be5f4396f011a6bb7a19fe26303a0dac9064462f5651ced2f572f/rpds_py-0.27.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a512c8263249a9d68cac08b05dd59d2b3f2061d99b322813cbcc14c3c7421998", size = 558137 }, - { url = "https://files.pythonhosted.org/packages/6e/96/6772cbfa0e2485bcceef8071de7821f81aeac8bb45fbfd5542a3e8108165/rpds_py-0.27.1-cp312-cp312-win32.whl", hash = "sha256:819064fa048ba01b6dadc5116f3ac48610435ac9a0058bbde98e569f9e785c39", size = 221343 }, - { url = "https://files.pythonhosted.org/packages/67/b6/c82f0faa9af1c6a64669f73a17ee0eeef25aff30bb9a1c318509efe45d84/rpds_py-0.27.1-cp312-cp312-win_amd64.whl", hash = "sha256:d9199717881f13c32c4046a15f024971a3b78ad4ea029e8da6b86e5aa9cf4594", size = 232497 }, - { url = "https://files.pythonhosted.org/packages/e1/96/2817b44bd2ed11aebacc9251da03689d56109b9aba5e311297b6902136e2/rpds_py-0.27.1-cp312-cp312-win_arm64.whl", hash = "sha256:33aa65b97826a0e885ef6e278fbd934e98cdcfed80b63946025f01e2f5b29502", size = 222790 }, - { url = "https://files.pythonhosted.org/packages/cc/77/610aeee8d41e39080c7e14afa5387138e3c9fa9756ab893d09d99e7d8e98/rpds_py-0.27.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:e4b9fcfbc021633863a37e92571d6f91851fa656f0180246e84cbd8b3f6b329b", size = 361741 }, - { url = "https://files.pythonhosted.org/packages/3a/fc/c43765f201c6a1c60be2043cbdb664013def52460a4c7adace89d6682bf4/rpds_py-0.27.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1441811a96eadca93c517d08df75de45e5ffe68aa3089924f963c782c4b898cf", size = 345574 }, - { url = "https://files.pythonhosted.org/packages/20/42/ee2b2ca114294cd9847d0ef9c26d2b0851b2e7e00bf14cc4c0b581df0fc3/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55266dafa22e672f5a4f65019015f90336ed31c6383bd53f5e7826d21a0e0b83", size = 385051 }, - { url = "https://files.pythonhosted.org/packages/fd/e8/1e430fe311e4799e02e2d1af7c765f024e95e17d651612425b226705f910/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d78827d7ac08627ea2c8e02c9e5b41180ea5ea1f747e9db0915e3adf36b62dcf", size = 398395 }, - { url = "https://files.pythonhosted.org/packages/82/95/9dc227d441ff2670651c27a739acb2535ccaf8b351a88d78c088965e5996/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae92443798a40a92dc5f0b01d8a7c93adde0c4dc965310a29ae7c64d72b9fad2", size = 524334 }, - { url = "https://files.pythonhosted.org/packages/87/01/a670c232f401d9ad461d9a332aa4080cd3cb1d1df18213dbd0d2a6a7ab51/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c46c9dd2403b66a2a3b9720ec4b74d4ab49d4fabf9f03dfdce2d42af913fe8d0", size = 407691 }, - { url = "https://files.pythonhosted.org/packages/03/36/0a14aebbaa26fe7fab4780c76f2239e76cc95a0090bdb25e31d95c492fcd/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2efe4eb1d01b7f5f1939f4ef30ecea6c6b3521eec451fb93191bf84b2a522418", size = 386868 }, - { url = "https://files.pythonhosted.org/packages/3b/03/8c897fb8b5347ff6c1cc31239b9611c5bf79d78c984430887a353e1409a1/rpds_py-0.27.1-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:15d3b4d83582d10c601f481eca29c3f138d44c92187d197aff663a269197c02d", size = 405469 }, - { url = "https://files.pythonhosted.org/packages/da/07/88c60edc2df74850d496d78a1fdcdc7b54360a7f610a4d50008309d41b94/rpds_py-0.27.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4ed2e16abbc982a169d30d1a420274a709949e2cbdef119fe2ec9d870b42f274", size = 422125 }, - { url = "https://files.pythonhosted.org/packages/6b/86/5f4c707603e41b05f191a749984f390dabcbc467cf833769b47bf14ba04f/rpds_py-0.27.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a75f305c9b013289121ec0f1181931975df78738cdf650093e6b86d74aa7d8dd", size = 562341 }, - { url = "https://files.pythonhosted.org/packages/b2/92/3c0cb2492094e3cd9baf9e49bbb7befeceb584ea0c1a8b5939dca4da12e5/rpds_py-0.27.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:67ce7620704745881a3d4b0ada80ab4d99df390838839921f99e63c474f82cf2", size = 592511 }, - { url = "https://files.pythonhosted.org/packages/10/bb/82e64fbb0047c46a168faa28d0d45a7851cd0582f850b966811d30f67ad8/rpds_py-0.27.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9d992ac10eb86d9b6f369647b6a3f412fc0075cfd5d799530e84d335e440a002", size = 557736 }, - { url = "https://files.pythonhosted.org/packages/00/95/3c863973d409210da7fb41958172c6b7dbe7fc34e04d3cc1f10bb85e979f/rpds_py-0.27.1-cp313-cp313-win32.whl", hash = "sha256:4f75e4bd8ab8db624e02c8e2fc4063021b58becdbe6df793a8111d9343aec1e3", size = 221462 }, - { url = "https://files.pythonhosted.org/packages/ce/2c/5867b14a81dc217b56d95a9f2a40fdbc56a1ab0181b80132beeecbd4b2d6/rpds_py-0.27.1-cp313-cp313-win_amd64.whl", hash = "sha256:f9025faafc62ed0b75a53e541895ca272815bec18abe2249ff6501c8f2e12b83", size = 232034 }, - { url = "https://files.pythonhosted.org/packages/c7/78/3958f3f018c01923823f1e47f1cc338e398814b92d83cd278364446fac66/rpds_py-0.27.1-cp313-cp313-win_arm64.whl", hash = "sha256:ed10dc32829e7d222b7d3b93136d25a406ba9788f6a7ebf6809092da1f4d279d", size = 222392 }, - { url = "https://files.pythonhosted.org/packages/01/76/1cdf1f91aed5c3a7bf2eba1f1c4e4d6f57832d73003919a20118870ea659/rpds_py-0.27.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:92022bbbad0d4426e616815b16bc4127f83c9a74940e1ccf3cfe0b387aba0228", size = 358355 }, - { url = "https://files.pythonhosted.org/packages/c3/6f/bf142541229374287604caf3bb2a4ae17f0a580798fd72d3b009b532db4e/rpds_py-0.27.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:47162fdab9407ec3f160805ac3e154df042e577dd53341745fc7fb3f625e6d92", size = 342138 }, - { url = "https://files.pythonhosted.org/packages/1a/77/355b1c041d6be40886c44ff5e798b4e2769e497b790f0f7fd1e78d17e9a8/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb89bec23fddc489e5d78b550a7b773557c9ab58b7946154a10a6f7a214a48b2", size = 380247 }, - { url = "https://files.pythonhosted.org/packages/d6/a4/d9cef5c3946ea271ce2243c51481971cd6e34f21925af2783dd17b26e815/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e48af21883ded2b3e9eb48cb7880ad8598b31ab752ff3be6457001d78f416723", size = 390699 }, - { url = "https://files.pythonhosted.org/packages/3a/06/005106a7b8c6c1a7e91b73169e49870f4af5256119d34a361ae5240a0c1d/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6f5b7bd8e219ed50299e58551a410b64daafb5017d54bbe822e003856f06a802", size = 521852 }, - { url = "https://files.pythonhosted.org/packages/e5/3e/50fb1dac0948e17a02eb05c24510a8fe12d5ce8561c6b7b7d1339ab7ab9c/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08f1e20bccf73b08d12d804d6e1c22ca5530e71659e6673bce31a6bb71c1e73f", size = 402582 }, - { url = "https://files.pythonhosted.org/packages/cb/b0/f4e224090dc5b0ec15f31a02d746ab24101dd430847c4d99123798661bfc/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dc5dceeaefcc96dc192e3a80bbe1d6c410c469e97bdd47494a7d930987f18b2", size = 384126 }, - { url = "https://files.pythonhosted.org/packages/54/77/ac339d5f82b6afff1df8f0fe0d2145cc827992cb5f8eeb90fc9f31ef7a63/rpds_py-0.27.1-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:d76f9cc8665acdc0c9177043746775aa7babbf479b5520b78ae4002d889f5c21", size = 399486 }, - { url = "https://files.pythonhosted.org/packages/d6/29/3e1c255eee6ac358c056a57d6d6869baa00a62fa32eea5ee0632039c50a3/rpds_py-0.27.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:134fae0e36022edad8290a6661edf40c023562964efea0cc0ec7f5d392d2aaef", size = 414832 }, - { url = "https://files.pythonhosted.org/packages/3f/db/6d498b844342deb3fa1d030598db93937a9964fcf5cb4da4feb5f17be34b/rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:eb11a4f1b2b63337cfd3b4d110af778a59aae51c81d195768e353d8b52f88081", size = 557249 }, - { url = "https://files.pythonhosted.org/packages/60/f3/690dd38e2310b6f68858a331399b4d6dbb9132c3e8ef8b4333b96caf403d/rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:13e608ac9f50a0ed4faec0e90ece76ae33b34c0e8656e3dceb9a7db994c692cd", size = 587356 }, - { url = "https://files.pythonhosted.org/packages/86/e3/84507781cccd0145f35b1dc32c72675200c5ce8d5b30f813e49424ef68fc/rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dd2135527aa40f061350c3f8f89da2644de26cd73e4de458e79606384f4f68e7", size = 555300 }, - { url = "https://files.pythonhosted.org/packages/e5/ee/375469849e6b429b3516206b4580a79e9ef3eb12920ddbd4492b56eaacbe/rpds_py-0.27.1-cp313-cp313t-win32.whl", hash = "sha256:3020724ade63fe320a972e2ffd93b5623227e684315adce194941167fee02688", size = 216714 }, - { url = "https://files.pythonhosted.org/packages/21/87/3fc94e47c9bd0742660e84706c311a860dcae4374cf4a03c477e23ce605a/rpds_py-0.27.1-cp313-cp313t-win_amd64.whl", hash = "sha256:8ee50c3e41739886606388ba3ab3ee2aae9f35fb23f833091833255a31740797", size = 228943 }, - { url = "https://files.pythonhosted.org/packages/70/36/b6e6066520a07cf029d385de869729a895917b411e777ab1cde878100a1d/rpds_py-0.27.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:acb9aafccaae278f449d9c713b64a9e68662e7799dbd5859e2c6b3c67b56d334", size = 362472 }, - { url = "https://files.pythonhosted.org/packages/af/07/b4646032e0dcec0df9c73a3bd52f63bc6c5f9cda992f06bd0e73fe3fbebd/rpds_py-0.27.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:b7fb801aa7f845ddf601c49630deeeccde7ce10065561d92729bfe81bd21fb33", size = 345676 }, - { url = "https://files.pythonhosted.org/packages/b0/16/2f1003ee5d0af4bcb13c0cf894957984c32a6751ed7206db2aee7379a55e/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe0dd05afb46597b9a2e11c351e5e4283c741237e7f617ffb3252780cca9336a", size = 385313 }, - { url = "https://files.pythonhosted.org/packages/05/cd/7eb6dd7b232e7f2654d03fa07f1414d7dfc980e82ba71e40a7c46fd95484/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b6dfb0e058adb12d8b1d1b25f686e94ffa65d9995a5157afe99743bf7369d62b", size = 399080 }, - { url = "https://files.pythonhosted.org/packages/20/51/5829afd5000ec1cb60f304711f02572d619040aa3ec033d8226817d1e571/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed090ccd235f6fa8bb5861684567f0a83e04f52dfc2e5c05f2e4b1309fcf85e7", size = 523868 }, - { url = "https://files.pythonhosted.org/packages/05/2c/30eebca20d5db95720ab4d2faec1b5e4c1025c473f703738c371241476a2/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf876e79763eecf3e7356f157540d6a093cef395b65514f17a356f62af6cc136", size = 408750 }, - { url = "https://files.pythonhosted.org/packages/90/1a/cdb5083f043597c4d4276eae4e4c70c55ab5accec078da8611f24575a367/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:12ed005216a51b1d6e2b02a7bd31885fe317e45897de81d86dcce7d74618ffff", size = 387688 }, - { url = "https://files.pythonhosted.org/packages/7c/92/cf786a15320e173f945d205ab31585cc43969743bb1a48b6888f7a2b0a2d/rpds_py-0.27.1-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:ee4308f409a40e50593c7e3bb8cbe0b4d4c66d1674a316324f0c2f5383b486f9", size = 407225 }, - { url = "https://files.pythonhosted.org/packages/33/5c/85ee16df5b65063ef26017bef33096557a4c83fbe56218ac7cd8c235f16d/rpds_py-0.27.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0b08d152555acf1f455154d498ca855618c1378ec810646fcd7c76416ac6dc60", size = 423361 }, - { url = "https://files.pythonhosted.org/packages/4b/8e/1c2741307fcabd1a334ecf008e92c4f47bb6f848712cf15c923becfe82bb/rpds_py-0.27.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:dce51c828941973a5684d458214d3a36fcd28da3e1875d659388f4f9f12cc33e", size = 562493 }, - { url = "https://files.pythonhosted.org/packages/04/03/5159321baae9b2222442a70c1f988cbbd66b9be0675dd3936461269be360/rpds_py-0.27.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:c1476d6f29eb81aa4151c9a31219b03f1f798dc43d8af1250a870735516a1212", size = 592623 }, - { url = "https://files.pythonhosted.org/packages/ff/39/c09fd1ad28b85bc1d4554a8710233c9f4cefd03d7717a1b8fbfd171d1167/rpds_py-0.27.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:3ce0cac322b0d69b63c9cdb895ee1b65805ec9ffad37639f291dd79467bee675", size = 558800 }, - { url = "https://files.pythonhosted.org/packages/c5/d6/99228e6bbcf4baa764b18258f519a9035131d91b538d4e0e294313462a98/rpds_py-0.27.1-cp314-cp314-win32.whl", hash = "sha256:dfbfac137d2a3d0725758cd141f878bf4329ba25e34979797c89474a89a8a3a3", size = 221943 }, - { url = "https://files.pythonhosted.org/packages/be/07/c802bc6b8e95be83b79bdf23d1aa61d68324cb1006e245d6c58e959e314d/rpds_py-0.27.1-cp314-cp314-win_amd64.whl", hash = "sha256:a6e57b0abfe7cc513450fcf529eb486b6e4d3f8aee83e92eb5f1ef848218d456", size = 233739 }, - { url = "https://files.pythonhosted.org/packages/c8/89/3e1b1c16d4c2d547c5717377a8df99aee8099ff050f87c45cb4d5fa70891/rpds_py-0.27.1-cp314-cp314-win_arm64.whl", hash = "sha256:faf8d146f3d476abfee026c4ae3bdd9ca14236ae4e4c310cbd1cf75ba33d24a3", size = 223120 }, - { url = "https://files.pythonhosted.org/packages/62/7e/dc7931dc2fa4a6e46b2a4fa744a9fe5c548efd70e0ba74f40b39fa4a8c10/rpds_py-0.27.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:ba81d2b56b6d4911ce735aad0a1d4495e808b8ee4dc58715998741a26874e7c2", size = 358944 }, - { url = "https://files.pythonhosted.org/packages/e6/22/4af76ac4e9f336bfb1a5f240d18a33c6b2fcaadb7472ac7680576512b49a/rpds_py-0.27.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:84f7d509870098de0e864cad0102711c1e24e9b1a50ee713b65928adb22269e4", size = 342283 }, - { url = "https://files.pythonhosted.org/packages/1c/15/2a7c619b3c2272ea9feb9ade67a45c40b3eeb500d503ad4c28c395dc51b4/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9e960fc78fecd1100539f14132425e1d5fe44ecb9239f8f27f079962021523e", size = 380320 }, - { url = "https://files.pythonhosted.org/packages/a2/7d/4c6d243ba4a3057e994bb5bedd01b5c963c12fe38dde707a52acdb3849e7/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:62f85b665cedab1a503747617393573995dac4600ff51869d69ad2f39eb5e817", size = 391760 }, - { url = "https://files.pythonhosted.org/packages/b4/71/b19401a909b83bcd67f90221330bc1ef11bc486fe4e04c24388d28a618ae/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fed467af29776f6556250c9ed85ea5a4dd121ab56a5f8b206e3e7a4c551e48ec", size = 522476 }, - { url = "https://files.pythonhosted.org/packages/e4/44/1a3b9715c0455d2e2f0f6df5ee6d6f5afdc423d0773a8a682ed2b43c566c/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2729615f9d430af0ae6b36cf042cb55c0936408d543fb691e1a9e36648fd35a", size = 403418 }, - { url = "https://files.pythonhosted.org/packages/1c/4b/fb6c4f14984eb56673bc868a66536f53417ddb13ed44b391998100a06a96/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b207d881a9aef7ba753d69c123a35d96ca7cb808056998f6b9e8747321f03b8", size = 384771 }, - { url = "https://files.pythonhosted.org/packages/c0/56/d5265d2d28b7420d7b4d4d85cad8ef891760f5135102e60d5c970b976e41/rpds_py-0.27.1-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:639fd5efec029f99b79ae47e5d7e00ad8a773da899b6309f6786ecaf22948c48", size = 400022 }, - { url = "https://files.pythonhosted.org/packages/8f/e9/9f5fc70164a569bdd6ed9046486c3568d6926e3a49bdefeeccfb18655875/rpds_py-0.27.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fecc80cb2a90e28af8a9b366edacf33d7a91cbfe4c2c4544ea1246e949cfebeb", size = 416787 }, - { url = "https://files.pythonhosted.org/packages/d4/64/56dd03430ba491db943a81dcdef115a985aac5f44f565cd39a00c766d45c/rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:42a89282d711711d0a62d6f57d81aa43a1368686c45bc1c46b7f079d55692734", size = 557538 }, - { url = "https://files.pythonhosted.org/packages/3f/36/92cc885a3129993b1d963a2a42ecf64e6a8e129d2c7cc980dbeba84e55fb/rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:cf9931f14223de59551ab9d38ed18d92f14f055a5f78c1d8ad6493f735021bbb", size = 588512 }, - { url = "https://files.pythonhosted.org/packages/dd/10/6b283707780a81919f71625351182b4f98932ac89a09023cb61865136244/rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f39f58a27cc6e59f432b568ed8429c7e1641324fbe38131de852cd77b2d534b0", size = 555813 }, - { url = "https://files.pythonhosted.org/packages/04/2e/30b5ea18c01379da6272a92825dd7e53dc9d15c88a19e97932d35d430ef7/rpds_py-0.27.1-cp314-cp314t-win32.whl", hash = "sha256:d5fa0ee122dc09e23607a28e6d7b150da16c662e66409bbe85230e4c85bb528a", size = 217385 }, - { url = "https://files.pythonhosted.org/packages/32/7d/97119da51cb1dd3f2f3c0805f155a3aa4a95fa44fe7d78ae15e69edf4f34/rpds_py-0.27.1-cp314-cp314t-win_amd64.whl", hash = "sha256:6567d2bb951e21232c2f660c24cf3470bb96de56cdcb3f071a83feeaff8a2772", size = 230097 }, - { url = "https://files.pythonhosted.org/packages/7f/6c/252e83e1ce7583c81f26d1d884b2074d40a13977e1b6c9c50bbf9a7f1f5a/rpds_py-0.27.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c918c65ec2e42c2a78d19f18c553d77319119bf43aa9e2edf7fb78d624355527", size = 372140 }, - { url = "https://files.pythonhosted.org/packages/9d/71/949c195d927c5aeb0d0629d329a20de43a64c423a6aa53836290609ef7ec/rpds_py-0.27.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1fea2b1a922c47c51fd07d656324531adc787e415c8b116530a1d29c0516c62d", size = 354086 }, - { url = "https://files.pythonhosted.org/packages/9f/02/e43e332ad8ce4f6c4342d151a471a7f2900ed1d76901da62eb3762663a71/rpds_py-0.27.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbf94c58e8e0cd6b6f38d8de67acae41b3a515c26169366ab58bdca4a6883bb8", size = 382117 }, - { url = "https://files.pythonhosted.org/packages/d0/05/b0fdeb5b577197ad72812bbdfb72f9a08fa1e64539cc3940b1b781cd3596/rpds_py-0.27.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c2a8fed130ce946d5c585eddc7c8eeef0051f58ac80a8ee43bd17835c144c2cc", size = 394520 }, - { url = "https://files.pythonhosted.org/packages/67/1f/4cfef98b2349a7585181e99294fa2a13f0af06902048a5d70f431a66d0b9/rpds_py-0.27.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:037a2361db72ee98d829bc2c5b7cc55598ae0a5e0ec1823a56ea99374cfd73c1", size = 522657 }, - { url = "https://files.pythonhosted.org/packages/44/55/ccf37ddc4c6dce7437b335088b5ca18da864b334890e2fe9aa6ddc3f79a9/rpds_py-0.27.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5281ed1cc1d49882f9997981c88df1a22e140ab41df19071222f7e5fc4e72125", size = 402967 }, - { url = "https://files.pythonhosted.org/packages/74/e5/5903f92e41e293b07707d5bf00ef39a0eb2af7190aff4beaf581a6591510/rpds_py-0.27.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fd50659a069c15eef8aa3d64bbef0d69fd27bb4a50c9ab4f17f83a16cbf8905", size = 384372 }, - { url = "https://files.pythonhosted.org/packages/8f/e3/fbb409e18aeefc01e49f5922ac63d2d914328430e295c12183ce56ebf76b/rpds_py-0.27.1-cp39-cp39-manylinux_2_31_riscv64.whl", hash = "sha256:c4b676c4ae3921649a15d28ed10025548e9b561ded473aa413af749503c6737e", size = 401264 }, - { url = "https://files.pythonhosted.org/packages/55/79/529ad07794e05cb0f38e2f965fc5bb20853d523976719400acecc447ec9d/rpds_py-0.27.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:079bc583a26db831a985c5257797b2b5d3affb0386e7ff886256762f82113b5e", size = 418691 }, - { url = "https://files.pythonhosted.org/packages/33/39/6554a7fd6d9906fda2521c6d52f5d723dca123529fb719a5b5e074c15e01/rpds_py-0.27.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4e44099bd522cba71a2c6b97f68e19f40e7d85399de899d66cdb67b32d7cb786", size = 558989 }, - { url = "https://files.pythonhosted.org/packages/19/b2/76fa15173b6f9f445e5ef15120871b945fb8dd9044b6b8c7abe87e938416/rpds_py-0.27.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:e202e6d4188e53c6661af813b46c37ca2c45e497fc558bacc1a7630ec2695aec", size = 589835 }, - { url = "https://files.pythonhosted.org/packages/ee/9e/5560a4b39bab780405bed8a88ee85b30178061d189558a86003548dea045/rpds_py-0.27.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f41f814b8eaa48768d1bb551591f6ba45f87ac76899453e8ccd41dba1289b04b", size = 555227 }, - { url = "https://files.pythonhosted.org/packages/52/d7/cd9c36215111aa65724c132bf709c6f35175973e90b32115dedc4ced09cb/rpds_py-0.27.1-cp39-cp39-win32.whl", hash = "sha256:9e71f5a087ead99563c11fdaceee83ee982fd39cf67601f4fd66cb386336ee52", size = 217899 }, - { url = "https://files.pythonhosted.org/packages/5b/e0/d75ab7b4dd8ba777f6b365adbdfc7614bbfe7c5f05703031dfa4b61c3d6c/rpds_py-0.27.1-cp39-cp39-win_amd64.whl", hash = "sha256:71108900c9c3c8590697244b9519017a400d9ba26a36c48381b3f64743a44aab", size = 228725 }, - { url = "https://files.pythonhosted.org/packages/d5/63/b7cc415c345625d5e62f694ea356c58fb964861409008118f1245f8c3347/rpds_py-0.27.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7ba22cb9693df986033b91ae1d7a979bc399237d45fccf875b76f62bb9e52ddf", size = 371360 }, - { url = "https://files.pythonhosted.org/packages/e5/8c/12e1b24b560cf378b8ffbdb9dc73abd529e1adcfcf82727dfd29c4a7b88d/rpds_py-0.27.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5b640501be9288c77738b5492b3fd3abc4ba95c50c2e41273c8a1459f08298d3", size = 353933 }, - { url = "https://files.pythonhosted.org/packages/9b/85/1bb2210c1f7a1b99e91fea486b9f0f894aa5da3a5ec7097cbad7dec6d40f/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb08b65b93e0c6dd70aac7f7890a9c0938d5ec71d5cb32d45cf844fb8ae47636", size = 382962 }, - { url = "https://files.pythonhosted.org/packages/cc/c9/a839b9f219cf80ed65f27a7f5ddbb2809c1b85c966020ae2dff490e0b18e/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d7ff07d696a7a38152ebdb8212ca9e5baab56656749f3d6004b34ab726b550b8", size = 394412 }, - { url = "https://files.pythonhosted.org/packages/02/2d/b1d7f928b0b1f4fc2e0133e8051d199b01d7384875adc63b6ddadf3de7e5/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fb7c72262deae25366e3b6c0c0ba46007967aea15d1eea746e44ddba8ec58dcc", size = 523972 }, - { url = "https://files.pythonhosted.org/packages/a9/af/2cbf56edd2d07716df1aec8a726b3159deb47cb5c27e1e42b71d705a7c2f/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7b002cab05d6339716b03a4a3a2ce26737f6231d7b523f339fa061d53368c9d8", size = 403273 }, - { url = "https://files.pythonhosted.org/packages/c0/93/425e32200158d44ff01da5d9612c3b6711fe69f606f06e3895511f17473b/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23f6b69d1c26c4704fec01311963a41d7de3ee0570a84ebde4d544e5a1859ffc", size = 385278 }, - { url = "https://files.pythonhosted.org/packages/eb/1a/1a04a915ecd0551bfa9e77b7672d1937b4b72a0fc204a17deef76001cfb2/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:530064db9146b247351f2a0250b8f00b289accea4596a033e94be2389977de71", size = 402084 }, - { url = "https://files.pythonhosted.org/packages/51/f7/66585c0fe5714368b62951d2513b684e5215beaceab2c6629549ddb15036/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7b90b0496570bd6b0321724a330d8b545827c4df2034b6ddfc5f5275f55da2ad", size = 419041 }, - { url = "https://files.pythonhosted.org/packages/8e/7e/83a508f6b8e219bba2d4af077c35ba0e0cdd35a751a3be6a7cba5a55ad71/rpds_py-0.27.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:879b0e14a2da6a1102a3fc8af580fc1ead37e6d6692a781bd8c83da37429b5ab", size = 560084 }, - { url = "https://files.pythonhosted.org/packages/66/66/bb945683b958a1b19eb0fe715594630d0f36396ebdef4d9b89c2fa09aa56/rpds_py-0.27.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:0d807710df3b5faa66c731afa162ea29717ab3be17bdc15f90f2d9f183da4059", size = 590115 }, - { url = "https://files.pythonhosted.org/packages/12/00/ccfaafaf7db7e7adace915e5c2f2c2410e16402561801e9c7f96683002d3/rpds_py-0.27.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:3adc388fc3afb6540aec081fa59e6e0d3908722771aa1e37ffe22b220a436f0b", size = 556561 }, - { url = "https://files.pythonhosted.org/packages/e1/b7/92b6ed9aad103bfe1c45df98453dfae40969eef2cb6c6239c58d7e96f1b3/rpds_py-0.27.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c796c0c1cc68cb08b0284db4229f5af76168172670c74908fdbd4b7d7f515819", size = 229125 }, - { url = "https://files.pythonhosted.org/packages/0c/ed/e1fba02de17f4f76318b834425257c8ea297e415e12c68b4361f63e8ae92/rpds_py-0.27.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cdfe4bb2f9fe7458b7453ad3c33e726d6d1c7c0a72960bcc23800d77384e42df", size = 371402 }, - { url = "https://files.pythonhosted.org/packages/af/7c/e16b959b316048b55585a697e94add55a4ae0d984434d279ea83442e460d/rpds_py-0.27.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:8fabb8fd848a5f75a2324e4a84501ee3a5e3c78d8603f83475441866e60b94a3", size = 354084 }, - { url = "https://files.pythonhosted.org/packages/de/c1/ade645f55de76799fdd08682d51ae6724cb46f318573f18be49b1e040428/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eda8719d598f2f7f3e0f885cba8646644b55a187762bec091fa14a2b819746a9", size = 383090 }, - { url = "https://files.pythonhosted.org/packages/1f/27/89070ca9b856e52960da1472efcb6c20ba27cfe902f4f23ed095b9cfc61d/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3c64d07e95606ec402a0a1c511fe003873fa6af630bda59bac77fac8b4318ebc", size = 394519 }, - { url = "https://files.pythonhosted.org/packages/b3/28/be120586874ef906aa5aeeae95ae8df4184bc757e5b6bd1c729ccff45ed5/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:93a2ed40de81bcff59aabebb626562d48332f3d028ca2036f1d23cbb52750be4", size = 523817 }, - { url = "https://files.pythonhosted.org/packages/a8/ef/70cc197bc11cfcde02a86f36ac1eed15c56667c2ebddbdb76a47e90306da/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:387ce8c44ae94e0ec50532d9cb0edce17311024c9794eb196b90e1058aadeb66", size = 403240 }, - { url = "https://files.pythonhosted.org/packages/cf/35/46936cca449f7f518f2f4996e0e8344db4b57e2081e752441154089d2a5f/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aaf94f812c95b5e60ebaf8bfb1898a7d7cb9c1af5744d4a67fa47796e0465d4e", size = 385194 }, - { url = "https://files.pythonhosted.org/packages/e1/62/29c0d3e5125c3270b51415af7cbff1ec587379c84f55a5761cc9efa8cd06/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:4848ca84d6ded9b58e474dfdbad4b8bfb450344c0551ddc8d958bf4b36aa837c", size = 402086 }, - { url = "https://files.pythonhosted.org/packages/8f/66/03e1087679227785474466fdd04157fb793b3b76e3fcf01cbf4c693c1949/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2bde09cbcf2248b73c7c323be49b280180ff39fadcfe04e7b6f54a678d02a7cf", size = 419272 }, - { url = "https://files.pythonhosted.org/packages/6a/24/e3e72d265121e00b063aef3e3501e5b2473cf1b23511d56e529531acf01e/rpds_py-0.27.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:94c44ee01fd21c9058f124d2d4f0c9dc7634bec93cd4b38eefc385dabe71acbf", size = 560003 }, - { url = "https://files.pythonhosted.org/packages/26/ca/f5a344c534214cc2d41118c0699fffbdc2c1bc7046f2a2b9609765ab9c92/rpds_py-0.27.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:df8b74962e35c9249425d90144e721eed198e6555a0e22a563d29fe4486b51f6", size = 590482 }, - { url = "https://files.pythonhosted.org/packages/ce/08/4349bdd5c64d9d193c360aa9db89adeee6f6682ab8825dca0a3f535f434f/rpds_py-0.27.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:dc23e6820e3b40847e2f4a7726462ba0cf53089512abe9ee16318c366494c17a", size = 556523 }, - { url = "https://files.pythonhosted.org/packages/4e/ea/5463cd5048a7a2fcdae308b6e96432802132c141bfb9420260142632a0f1/rpds_py-0.27.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:aa8933159edc50be265ed22b401125c9eebff3171f570258854dbce3ecd55475", size = 371778 }, - { url = "https://files.pythonhosted.org/packages/0d/c8/f38c099db07f5114029c1467649d308543906933eebbc226d4527a5f4693/rpds_py-0.27.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a50431bf02583e21bf273c71b89d710e7a710ad5e39c725b14e685610555926f", size = 354394 }, - { url = "https://files.pythonhosted.org/packages/7d/79/b76f97704d9dd8ddbd76fed4c4048153a847c5d6003afe20a6b5c3339065/rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78af06ddc7fe5cc0e967085a9115accee665fb912c22a3f54bad70cc65b05fe6", size = 382348 }, - { url = "https://files.pythonhosted.org/packages/8a/3f/ef23d3c1be1b837b648a3016d5bbe7cfe711422ad110b4081c0a90ef5a53/rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:70d0738ef8fee13c003b100c2fbd667ec4f133468109b3472d249231108283a3", size = 394159 }, - { url = "https://files.pythonhosted.org/packages/74/8a/9e62693af1a34fd28b1a190d463d12407bd7cf561748cb4745845d9548d3/rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2f6fd8a1cea5bbe599b6e78a6e5ee08db434fc8ffea51ff201c8765679698b3", size = 522775 }, - { url = "https://files.pythonhosted.org/packages/36/0d/8d5bb122bf7a60976b54c5c99a739a3819f49f02d69df3ea2ca2aff47d5c/rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8177002868d1426305bb5de1e138161c2ec9eb2d939be38291d7c431c4712df8", size = 402633 }, - { url = "https://files.pythonhosted.org/packages/0f/0e/237948c1f425e23e0cf5a566d702652a6e55c6f8fbd332a1792eb7043daf/rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:008b839781d6c9bf3b6a8984d1d8e56f0ec46dc56df61fd669c49b58ae800400", size = 384867 }, - { url = "https://files.pythonhosted.org/packages/d6/0a/da0813efcd998d260cbe876d97f55b0f469ada8ba9cbc47490a132554540/rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:a55b9132bb1ade6c734ddd2759c8dc132aa63687d259e725221f106b83a0e485", size = 401791 }, - { url = "https://files.pythonhosted.org/packages/51/78/c6c9e8a8aaca416a6f0d1b6b4a6ee35b88fe2c5401d02235d0a056eceed2/rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a46fdec0083a26415f11d5f236b79fa1291c32aaa4a17684d82f7017a1f818b1", size = 419525 }, - { url = "https://files.pythonhosted.org/packages/a3/69/5af37e1d71487cf6d56dd1420dc7e0c2732c1b6ff612aa7a88374061c0a8/rpds_py-0.27.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:8a63b640a7845f2bdd232eb0d0a4a2dd939bcdd6c57e6bb134526487f3160ec5", size = 559255 }, - { url = "https://files.pythonhosted.org/packages/40/7f/8b7b136069ef7ac3960eda25d832639bdb163018a34c960ed042dd1707c8/rpds_py-0.27.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:7e32721e5d4922deaaf963469d795d5bde6093207c52fec719bd22e5d1bedbc4", size = 590384 }, - { url = "https://files.pythonhosted.org/packages/d8/06/c316d3f6ff03f43ccb0eba7de61376f8ec4ea850067dddfafe98274ae13c/rpds_py-0.27.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:2c426b99a068601b5f4623573df7a7c3d72e87533a2dd2253353a03e7502566c", size = 555959 }, - { url = "https://files.pythonhosted.org/packages/60/94/384cf54c430b9dac742bbd2ec26c23feb78ded0d43d6d78563a281aec017/rpds_py-0.27.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4fc9b7fe29478824361ead6e14e4f5aed570d477e06088826537e202d25fe859", size = 228784 }, -] - -[[package]] -name = "rpds-py" -version = "0.30.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] -sdist = { url = "https://files.pythonhosted.org/packages/20/af/3f2f423103f1113b36230496629986e0ef7e199d2aa8392452b484b38ced/rpds_py-0.30.0.tar.gz", hash = "sha256:dd8ff7cf90014af0c0f787eea34794ebf6415242ee1d6fa91eaba725cc441e84", size = 69469 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/06/0c/0c411a0ec64ccb6d104dcabe0e713e05e153a9a2c3c2bd2b32ce412166fe/rpds_py-0.30.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:679ae98e00c0e8d68a7fda324e16b90fd5260945b45d3b824c892cec9eea3288", size = 370490 }, - { url = "https://files.pythonhosted.org/packages/19/6a/4ba3d0fb7297ebae71171822554abe48d7cab29c28b8f9f2c04b79988c05/rpds_py-0.30.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4cc2206b76b4f576934f0ed374b10d7ca5f457858b157ca52064bdfc26b9fc00", size = 359751 }, - { url = "https://files.pythonhosted.org/packages/cd/7c/e4933565ef7f7a0818985d87c15d9d273f1a649afa6a52ea35ad011195ea/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:389a2d49eded1896c3d48b0136ead37c48e221b391c052fba3f4055c367f60a6", size = 389696 }, - { url = "https://files.pythonhosted.org/packages/5e/01/6271a2511ad0815f00f7ed4390cf2567bec1d4b1da39e2c27a41e6e3b4de/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:32c8528634e1bf7121f3de08fa85b138f4e0dc47657866630611b03967f041d7", size = 403136 }, - { url = "https://files.pythonhosted.org/packages/55/64/c857eb7cd7541e9b4eee9d49c196e833128a55b89a9850a9c9ac33ccf897/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f207f69853edd6f6700b86efb84999651baf3789e78a466431df1331608e5324", size = 524699 }, - { url = "https://files.pythonhosted.org/packages/9c/ed/94816543404078af9ab26159c44f9e98e20fe47e2126d5d32c9d9948d10a/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:67b02ec25ba7a9e8fa74c63b6ca44cf5707f2fbfadae3ee8e7494297d56aa9df", size = 412022 }, - { url = "https://files.pythonhosted.org/packages/61/b5/707f6cf0066a6412aacc11d17920ea2e19e5b2f04081c64526eb35b5c6e7/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0e95f6819a19965ff420f65578bacb0b00f251fefe2c8b23347c37174271f3", size = 390522 }, - { url = "https://files.pythonhosted.org/packages/13/4e/57a85fda37a229ff4226f8cbcf09f2a455d1ed20e802ce5b2b4a7f5ed053/rpds_py-0.30.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:a452763cc5198f2f98898eb98f7569649fe5da666c2dc6b5ddb10fde5a574221", size = 404579 }, - { url = "https://files.pythonhosted.org/packages/f9/da/c9339293513ec680a721e0e16bf2bac3db6e5d7e922488de471308349bba/rpds_py-0.30.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e0b65193a413ccc930671c55153a03ee57cecb49e6227204b04fae512eb657a7", size = 421305 }, - { url = "https://files.pythonhosted.org/packages/f9/be/522cb84751114f4ad9d822ff5a1aa3c98006341895d5f084779b99596e5c/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:858738e9c32147f78b3ac24dc0edb6610000e56dc0f700fd5f651d0a0f0eb9ff", size = 572503 }, - { url = "https://files.pythonhosted.org/packages/a2/9b/de879f7e7ceddc973ea6e4629e9b380213a6938a249e94b0cdbcc325bb66/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:da279aa314f00acbb803da1e76fa18666778e8a8f83484fba94526da5de2cba7", size = 598322 }, - { url = "https://files.pythonhosted.org/packages/48/ac/f01fc22efec3f37d8a914fc1b2fb9bcafd56a299edbe96406f3053edea5a/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c64d38fb49b6cdeda16ab49e35fe0da2e1e9b34bc38bd78386530f218b37139", size = 560792 }, - { url = "https://files.pythonhosted.org/packages/e2/da/4e2b19d0f131f35b6146425f846563d0ce036763e38913d917187307a671/rpds_py-0.30.0-cp310-cp310-win32.whl", hash = "sha256:6de2a32a1665b93233cde140ff8b3467bdb9e2af2b91079f0333a0974d12d464", size = 221901 }, - { url = "https://files.pythonhosted.org/packages/96/cb/156d7a5cf4f78a7cc571465d8aec7a3c447c94f6749c5123f08438bcf7bc/rpds_py-0.30.0-cp310-cp310-win_amd64.whl", hash = "sha256:1726859cd0de969f88dc8673bdd954185b9104e05806be64bcd87badbe313169", size = 235823 }, - { url = "https://files.pythonhosted.org/packages/4d/6e/f964e88b3d2abee2a82c1ac8366da848fce1c6d834dc2132c3fda3970290/rpds_py-0.30.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a2bffea6a4ca9f01b3f8e548302470306689684e61602aa3d141e34da06cf425", size = 370157 }, - { url = "https://files.pythonhosted.org/packages/94/ba/24e5ebb7c1c82e74c4e4f33b2112a5573ddc703915b13a073737b59b86e0/rpds_py-0.30.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dc4f992dfe1e2bc3ebc7444f6c7051b4bc13cd8e33e43511e8ffd13bf407010d", size = 359676 }, - { url = "https://files.pythonhosted.org/packages/84/86/04dbba1b087227747d64d80c3b74df946b986c57af0a9f0c98726d4d7a3b/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:422c3cb9856d80b09d30d2eb255d0754b23e090034e1deb4083f8004bd0761e4", size = 389938 }, - { url = "https://files.pythonhosted.org/packages/42/bb/1463f0b1722b7f45431bdd468301991d1328b16cffe0b1c2918eba2c4eee/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07ae8a593e1c3c6b82ca3292efbe73c30b61332fd612e05abee07c79359f292f", size = 402932 }, - { url = "https://files.pythonhosted.org/packages/99/ee/2520700a5c1f2d76631f948b0736cdf9b0acb25abd0ca8e889b5c62ac2e3/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12f90dd7557b6bd57f40abe7747e81e0c0b119bef015ea7726e69fe550e394a4", size = 525830 }, - { url = "https://files.pythonhosted.org/packages/e0/ad/bd0331f740f5705cc555a5e17fdf334671262160270962e69a2bdef3bf76/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99b47d6ad9a6da00bec6aabe5a6279ecd3c06a329d4aa4771034a21e335c3a97", size = 412033 }, - { url = "https://files.pythonhosted.org/packages/f8/1e/372195d326549bb51f0ba0f2ecb9874579906b97e08880e7a65c3bef1a99/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33f559f3104504506a44bb666b93a33f5d33133765b0c216a5bf2f1e1503af89", size = 390828 }, - { url = "https://files.pythonhosted.org/packages/ab/2b/d88bb33294e3e0c76bc8f351a3721212713629ffca1700fa94979cb3eae8/rpds_py-0.30.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:946fe926af6e44f3697abbc305ea168c2c31d3e3ef1058cf68f379bf0335a78d", size = 404683 }, - { url = "https://files.pythonhosted.org/packages/50/32/c759a8d42bcb5289c1fac697cd92f6fe01a018dd937e62ae77e0e7f15702/rpds_py-0.30.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:495aeca4b93d465efde585977365187149e75383ad2684f81519f504f5c13038", size = 421583 }, - { url = "https://files.pythonhosted.org/packages/2b/81/e729761dbd55ddf5d84ec4ff1f47857f4374b0f19bdabfcf929164da3e24/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9a0ca5da0386dee0655b4ccdf46119df60e0f10da268d04fe7cc87886872ba7", size = 572496 }, - { url = "https://files.pythonhosted.org/packages/14/f6/69066a924c3557c9c30baa6ec3a0aa07526305684c6f86c696b08860726c/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8d6d1cc13664ec13c1b84241204ff3b12f9bb82464b8ad6e7a5d3486975c2eed", size = 598669 }, - { url = "https://files.pythonhosted.org/packages/5f/48/905896b1eb8a05630d20333d1d8ffd162394127b74ce0b0784ae04498d32/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3896fa1be39912cf0757753826bc8bdc8ca331a28a7c4ae46b7a21280b06bb85", size = 561011 }, - { url = "https://files.pythonhosted.org/packages/22/16/cd3027c7e279d22e5eb431dd3c0fbc677bed58797fe7581e148f3f68818b/rpds_py-0.30.0-cp311-cp311-win32.whl", hash = "sha256:55f66022632205940f1827effeff17c4fa7ae1953d2b74a8581baaefb7d16f8c", size = 221406 }, - { url = "https://files.pythonhosted.org/packages/fa/5b/e7b7aa136f28462b344e652ee010d4de26ee9fd16f1bfd5811f5153ccf89/rpds_py-0.30.0-cp311-cp311-win_amd64.whl", hash = "sha256:a51033ff701fca756439d641c0ad09a41d9242fa69121c7d8769604a0a629825", size = 236024 }, - { url = "https://files.pythonhosted.org/packages/14/a6/364bba985e4c13658edb156640608f2c9e1d3ea3c81b27aa9d889fff0e31/rpds_py-0.30.0-cp311-cp311-win_arm64.whl", hash = "sha256:47b0ef6231c58f506ef0b74d44e330405caa8428e770fec25329ed2cb971a229", size = 229069 }, - { url = "https://files.pythonhosted.org/packages/03/e7/98a2f4ac921d82f33e03f3835f5bf3a4a40aa1bfdc57975e74a97b2b4bdd/rpds_py-0.30.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a161f20d9a43006833cd7068375a94d035714d73a172b681d8881820600abfad", size = 375086 }, - { url = "https://files.pythonhosted.org/packages/4d/a1/bca7fd3d452b272e13335db8d6b0b3ecde0f90ad6f16f3328c6fb150c889/rpds_py-0.30.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6abc8880d9d036ecaafe709079969f56e876fcf107f7a8e9920ba6d5a3878d05", size = 359053 }, - { url = "https://files.pythonhosted.org/packages/65/1c/ae157e83a6357eceff62ba7e52113e3ec4834a84cfe07fa4b0757a7d105f/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca28829ae5f5d569bb62a79512c842a03a12576375d5ece7d2cadf8abe96ec28", size = 390763 }, - { url = "https://files.pythonhosted.org/packages/d4/36/eb2eb8515e2ad24c0bd43c3ee9cd74c33f7ca6430755ccdb240fd3144c44/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a1010ed9524c73b94d15919ca4d41d8780980e1765babf85f9a2f90d247153dd", size = 408951 }, - { url = "https://files.pythonhosted.org/packages/d6/65/ad8dc1784a331fabbd740ef6f71ce2198c7ed0890dab595adb9ea2d775a1/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8d1736cfb49381ba528cd5baa46f82fdc65c06e843dab24dd70b63d09121b3f", size = 514622 }, - { url = "https://files.pythonhosted.org/packages/63/8e/0cfa7ae158e15e143fe03993b5bcd743a59f541f5952e1546b1ac1b5fd45/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d948b135c4693daff7bc2dcfc4ec57237a29bd37e60c2fabf5aff2bbacf3e2f1", size = 414492 }, - { url = "https://files.pythonhosted.org/packages/60/1b/6f8f29f3f995c7ffdde46a626ddccd7c63aefc0efae881dc13b6e5d5bb16/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47f236970bccb2233267d89173d3ad2703cd36a0e2a6e92d0560d333871a3d23", size = 394080 }, - { url = "https://files.pythonhosted.org/packages/6d/d5/a266341051a7a3ca2f4b750a3aa4abc986378431fc2da508c5034d081b70/rpds_py-0.30.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:2e6ecb5a5bcacf59c3f912155044479af1d0b6681280048b338b28e364aca1f6", size = 408680 }, - { url = "https://files.pythonhosted.org/packages/10/3b/71b725851df9ab7a7a4e33cf36d241933da66040d195a84781f49c50490c/rpds_py-0.30.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a8fa71a2e078c527c3e9dc9fc5a98c9db40bcc8a92b4e8858e36d329f8684b51", size = 423589 }, - { url = "https://files.pythonhosted.org/packages/00/2b/e59e58c544dc9bd8bd8384ecdb8ea91f6727f0e37a7131baeff8d6f51661/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:73c67f2db7bc334e518d097c6d1e6fed021bbc9b7d678d6cc433478365d1d5f5", size = 573289 }, - { url = "https://files.pythonhosted.org/packages/da/3e/a18e6f5b460893172a7d6a680e86d3b6bc87a54c1f0b03446a3c8c7b588f/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5ba103fb455be00f3b1c2076c9d4264bfcb037c976167a6047ed82f23153f02e", size = 599737 }, - { url = "https://files.pythonhosted.org/packages/5c/e2/714694e4b87b85a18e2c243614974413c60aa107fd815b8cbc42b873d1d7/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7cee9c752c0364588353e627da8a7e808a66873672bcb5f52890c33fd965b394", size = 563120 }, - { url = "https://files.pythonhosted.org/packages/6f/ab/d5d5e3bcedb0a77f4f613706b750e50a5a3ba1c15ccd3665ecc636c968fd/rpds_py-0.30.0-cp312-cp312-win32.whl", hash = "sha256:1ab5b83dbcf55acc8b08fc62b796ef672c457b17dbd7820a11d6c52c06839bdf", size = 223782 }, - { url = "https://files.pythonhosted.org/packages/39/3b/f786af9957306fdc38a74cef405b7b93180f481fb48453a114bb6465744a/rpds_py-0.30.0-cp312-cp312-win_amd64.whl", hash = "sha256:a090322ca841abd453d43456ac34db46e8b05fd9b3b4ac0c78bcde8b089f959b", size = 240463 }, - { url = "https://files.pythonhosted.org/packages/f3/d2/b91dc748126c1559042cfe41990deb92c4ee3e2b415f6b5234969ffaf0cc/rpds_py-0.30.0-cp312-cp312-win_arm64.whl", hash = "sha256:669b1805bd639dd2989b281be2cfd951c6121b65e729d9b843e9639ef1fd555e", size = 230868 }, - { url = "https://files.pythonhosted.org/packages/ed/dc/d61221eb88ff410de3c49143407f6f3147acf2538c86f2ab7ce65ae7d5f9/rpds_py-0.30.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f83424d738204d9770830d35290ff3273fbb02b41f919870479fab14b9d303b2", size = 374887 }, - { url = "https://files.pythonhosted.org/packages/fd/32/55fb50ae104061dbc564ef15cc43c013dc4a9f4527a1f4d99baddf56fe5f/rpds_py-0.30.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e7536cd91353c5273434b4e003cbda89034d67e7710eab8761fd918ec6c69cf8", size = 358904 }, - { url = "https://files.pythonhosted.org/packages/58/70/faed8186300e3b9bdd138d0273109784eea2396c68458ed580f885dfe7ad/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2771c6c15973347f50fece41fc447c054b7ac2ae0502388ce3b6738cd366e3d4", size = 389945 }, - { url = "https://files.pythonhosted.org/packages/bd/a8/073cac3ed2c6387df38f71296d002ab43496a96b92c823e76f46b8af0543/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0a59119fc6e3f460315fe9d08149f8102aa322299deaa5cab5b40092345c2136", size = 407783 }, - { url = "https://files.pythonhosted.org/packages/77/57/5999eb8c58671f1c11eba084115e77a8899d6e694d2a18f69f0ba471ec8b/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76fec018282b4ead0364022e3c54b60bf368b9d926877957a8624b58419169b7", size = 515021 }, - { url = "https://files.pythonhosted.org/packages/e0/af/5ab4833eadc36c0a8ed2bc5c0de0493c04f6c06de223170bd0798ff98ced/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:692bef75a5525db97318e8cd061542b5a79812d711ea03dbc1f6f8dbb0c5f0d2", size = 414589 }, - { url = "https://files.pythonhosted.org/packages/b7/de/f7192e12b21b9e9a68a6d0f249b4af3fdcdff8418be0767a627564afa1f1/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9027da1ce107104c50c81383cae773ef5c24d296dd11c99e2629dbd7967a20c6", size = 394025 }, - { url = "https://files.pythonhosted.org/packages/91/c4/fc70cd0249496493500e7cc2de87504f5aa6509de1e88623431fec76d4b6/rpds_py-0.30.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:9cf69cdda1f5968a30a359aba2f7f9aa648a9ce4b580d6826437f2b291cfc86e", size = 408895 }, - { url = "https://files.pythonhosted.org/packages/58/95/d9275b05ab96556fefff73a385813eb66032e4c99f411d0795372d9abcea/rpds_py-0.30.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a4796a717bf12b9da9d3ad002519a86063dcac8988b030e405704ef7d74d2d9d", size = 422799 }, - { url = "https://files.pythonhosted.org/packages/06/c1/3088fc04b6624eb12a57eb814f0d4997a44b0d208d6cace713033ff1a6ba/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5d4c2aa7c50ad4728a094ebd5eb46c452e9cb7edbfdb18f9e1221f597a73e1e7", size = 572731 }, - { url = "https://files.pythonhosted.org/packages/d8/42/c612a833183b39774e8ac8fecae81263a68b9583ee343db33ab571a7ce55/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ba81a9203d07805435eb06f536d95a266c21e5b2dfbf6517748ca40c98d19e31", size = 599027 }, - { url = "https://files.pythonhosted.org/packages/5f/60/525a50f45b01d70005403ae0e25f43c0384369ad24ffe46e8d9068b50086/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:945dccface01af02675628334f7cf49c2af4c1c904748efc5cf7bbdf0b579f95", size = 563020 }, - { url = "https://files.pythonhosted.org/packages/0b/5d/47c4655e9bcd5ca907148535c10e7d489044243cc9941c16ed7cd53be91d/rpds_py-0.30.0-cp313-cp313-win32.whl", hash = "sha256:b40fb160a2db369a194cb27943582b38f79fc4887291417685f3ad693c5a1d5d", size = 223139 }, - { url = "https://files.pythonhosted.org/packages/f2/e1/485132437d20aa4d3e1d8b3fb5a5e65aa8139f1e097080c2a8443201742c/rpds_py-0.30.0-cp313-cp313-win_amd64.whl", hash = "sha256:806f36b1b605e2d6a72716f321f20036b9489d29c51c91f4dd29a3e3afb73b15", size = 240224 }, - { url = "https://files.pythonhosted.org/packages/24/95/ffd128ed1146a153d928617b0ef673960130be0009c77d8fbf0abe306713/rpds_py-0.30.0-cp313-cp313-win_arm64.whl", hash = "sha256:d96c2086587c7c30d44f31f42eae4eac89b60dabbac18c7669be3700f13c3ce1", size = 230645 }, - { url = "https://files.pythonhosted.org/packages/ff/1b/b10de890a0def2a319a2626334a7f0ae388215eb60914dbac8a3bae54435/rpds_py-0.30.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:eb0b93f2e5c2189ee831ee43f156ed34e2a89a78a66b98cadad955972548be5a", size = 364443 }, - { url = "https://files.pythonhosted.org/packages/0d/bf/27e39f5971dc4f305a4fb9c672ca06f290f7c4e261c568f3dea16a410d47/rpds_py-0.30.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:922e10f31f303c7c920da8981051ff6d8c1a56207dbdf330d9047f6d30b70e5e", size = 353375 }, - { url = "https://files.pythonhosted.org/packages/40/58/442ada3bba6e8e6615fc00483135c14a7538d2ffac30e2d933ccf6852232/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdc62c8286ba9bf7f47befdcea13ea0e26bf294bda99758fd90535cbaf408000", size = 383850 }, - { url = "https://files.pythonhosted.org/packages/14/14/f59b0127409a33c6ef6f5c1ebd5ad8e32d7861c9c7adfa9a624fc3889f6c/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:47f9a91efc418b54fb8190a6b4aa7813a23fb79c51f4bb84e418f5476c38b8db", size = 392812 }, - { url = "https://files.pythonhosted.org/packages/b3/66/e0be3e162ac299b3a22527e8913767d869e6cc75c46bd844aa43fb81ab62/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f3587eb9b17f3789ad50824084fa6f81921bbf9a795826570bda82cb3ed91f2", size = 517841 }, - { url = "https://files.pythonhosted.org/packages/3d/55/fa3b9cf31d0c963ecf1ba777f7cf4b2a2c976795ac430d24a1f43d25a6ba/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39c02563fc592411c2c61d26b6c5fe1e51eaa44a75aa2c8735ca88b0d9599daa", size = 408149 }, - { url = "https://files.pythonhosted.org/packages/60/ca/780cf3b1a32b18c0f05c441958d3758f02544f1d613abf9488cd78876378/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51a1234d8febafdfd33a42d97da7a43f5dcb120c1060e352a3fbc0c6d36e2083", size = 383843 }, - { url = "https://files.pythonhosted.org/packages/82/86/d5f2e04f2aa6247c613da0c1dd87fcd08fa17107e858193566048a1e2f0a/rpds_py-0.30.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:eb2c4071ab598733724c08221091e8d80e89064cd472819285a9ab0f24bcedb9", size = 396507 }, - { url = "https://files.pythonhosted.org/packages/4b/9a/453255d2f769fe44e07ea9785c8347edaf867f7026872e76c1ad9f7bed92/rpds_py-0.30.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6bdfdb946967d816e6adf9a3d8201bfad269c67efe6cefd7093ef959683c8de0", size = 414949 }, - { url = "https://files.pythonhosted.org/packages/a3/31/622a86cdc0c45d6df0e9ccb6becdba5074735e7033c20e401a6d9d0e2ca0/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c77afbd5f5250bf27bf516c7c4a016813eb2d3e116139aed0096940c5982da94", size = 565790 }, - { url = "https://files.pythonhosted.org/packages/1c/5d/15bbf0fb4a3f58a3b1c67855ec1efcc4ceaef4e86644665fff03e1b66d8d/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:61046904275472a76c8c90c9ccee9013d70a6d0f73eecefd38c1ae7c39045a08", size = 590217 }, - { url = "https://files.pythonhosted.org/packages/6d/61/21b8c41f68e60c8cc3b2e25644f0e3681926020f11d06ab0b78e3c6bbff1/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c5f36a861bc4b7da6516dbdf302c55313afa09b81931e8280361a4f6c9a2d27", size = 555806 }, - { url = "https://files.pythonhosted.org/packages/f9/39/7e067bb06c31de48de3eb200f9fc7c58982a4d3db44b07e73963e10d3be9/rpds_py-0.30.0-cp313-cp313t-win32.whl", hash = "sha256:3d4a69de7a3e50ffc214ae16d79d8fbb0922972da0356dcf4d0fdca2878559c6", size = 211341 }, - { url = "https://files.pythonhosted.org/packages/0a/4d/222ef0b46443cf4cf46764d9c630f3fe4abaa7245be9417e56e9f52b8f65/rpds_py-0.30.0-cp313-cp313t-win_amd64.whl", hash = "sha256:f14fc5df50a716f7ece6a80b6c78bb35ea2ca47c499e422aa4463455dd96d56d", size = 225768 }, - { url = "https://files.pythonhosted.org/packages/86/81/dad16382ebbd3d0e0328776d8fd7ca94220e4fa0798d1dc5e7da48cb3201/rpds_py-0.30.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:68f19c879420aa08f61203801423f6cd5ac5f0ac4ac82a2368a9fcd6a9a075e0", size = 362099 }, - { url = "https://files.pythonhosted.org/packages/2b/60/19f7884db5d5603edf3c6bce35408f45ad3e97e10007df0e17dd57af18f8/rpds_py-0.30.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ec7c4490c672c1a0389d319b3a9cfcd098dcdc4783991553c332a15acf7249be", size = 353192 }, - { url = "https://files.pythonhosted.org/packages/bf/c4/76eb0e1e72d1a9c4703c69607cec123c29028bff28ce41588792417098ac/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f251c812357a3fed308d684a5079ddfb9d933860fc6de89f2b7ab00da481e65f", size = 384080 }, - { url = "https://files.pythonhosted.org/packages/72/87/87ea665e92f3298d1b26d78814721dc39ed8d2c74b86e83348d6b48a6f31/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac98b175585ecf4c0348fd7b29c3864bda53b805c773cbf7bfdaffc8070c976f", size = 394841 }, - { url = "https://files.pythonhosted.org/packages/77/ad/7783a89ca0587c15dcbf139b4a8364a872a25f861bdb88ed99f9b0dec985/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3e62880792319dbeb7eb866547f2e35973289e7d5696c6e295476448f5b63c87", size = 516670 }, - { url = "https://files.pythonhosted.org/packages/5b/3c/2882bdac942bd2172f3da574eab16f309ae10a3925644e969536553cb4ee/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e7fc54e0900ab35d041b0601431b0a0eb495f0851a0639b6ef90f7741b39a18", size = 408005 }, - { url = "https://files.pythonhosted.org/packages/ce/81/9a91c0111ce1758c92516a3e44776920b579d9a7c09b2b06b642d4de3f0f/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47e77dc9822d3ad616c3d5759ea5631a75e5809d5a28707744ef79d7a1bcfcad", size = 382112 }, - { url = "https://files.pythonhosted.org/packages/cf/8e/1da49d4a107027e5fbc64daeab96a0706361a2918da10cb41769244b805d/rpds_py-0.30.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b4dc1a6ff022ff85ecafef7979a2c6eb423430e05f1165d6688234e62ba99a07", size = 399049 }, - { url = "https://files.pythonhosted.org/packages/df/5a/7ee239b1aa48a127570ec03becbb29c9d5a9eb092febbd1699d567cae859/rpds_py-0.30.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4559c972db3a360808309e06a74628b95eaccbf961c335c8fe0d590cf587456f", size = 415661 }, - { url = "https://files.pythonhosted.org/packages/70/ea/caa143cf6b772f823bc7929a45da1fa83569ee49b11d18d0ada7f5ee6fd6/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0ed177ed9bded28f8deb6ab40c183cd1192aa0de40c12f38be4d59cd33cb5c65", size = 565606 }, - { url = "https://files.pythonhosted.org/packages/64/91/ac20ba2d69303f961ad8cf55bf7dbdb4763f627291ba3d0d7d67333cced9/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ad1fa8db769b76ea911cb4e10f049d80bf518c104f15b3edb2371cc65375c46f", size = 591126 }, - { url = "https://files.pythonhosted.org/packages/21/20/7ff5f3c8b00c8a95f75985128c26ba44503fb35b8e0259d812766ea966c7/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:46e83c697b1f1c72b50e5ee5adb4353eef7406fb3f2043d64c33f20ad1c2fc53", size = 553371 }, - { url = "https://files.pythonhosted.org/packages/72/c7/81dadd7b27c8ee391c132a6b192111ca58d866577ce2d9b0ca157552cce0/rpds_py-0.30.0-cp314-cp314-win32.whl", hash = "sha256:ee454b2a007d57363c2dfd5b6ca4a5d7e2c518938f8ed3b706e37e5d470801ed", size = 215298 }, - { url = "https://files.pythonhosted.org/packages/3e/d2/1aaac33287e8cfb07aab2e6b8ac1deca62f6f65411344f1433c55e6f3eb8/rpds_py-0.30.0-cp314-cp314-win_amd64.whl", hash = "sha256:95f0802447ac2d10bcc69f6dc28fe95fdf17940367b21d34e34c737870758950", size = 228604 }, - { url = "https://files.pythonhosted.org/packages/e8/95/ab005315818cc519ad074cb7784dae60d939163108bd2b394e60dc7b5461/rpds_py-0.30.0-cp314-cp314-win_arm64.whl", hash = "sha256:613aa4771c99f03346e54c3f038e4cc574ac09a3ddfb0e8878487335e96dead6", size = 222391 }, - { url = "https://files.pythonhosted.org/packages/9e/68/154fe0194d83b973cdedcdcc88947a2752411165930182ae41d983dcefa6/rpds_py-0.30.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:7e6ecfcb62edfd632e56983964e6884851786443739dbfe3582947e87274f7cb", size = 364868 }, - { url = "https://files.pythonhosted.org/packages/83/69/8bbc8b07ec854d92a8b75668c24d2abcb1719ebf890f5604c61c9369a16f/rpds_py-0.30.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a1d0bc22a7cdc173fedebb73ef81e07faef93692b8c1ad3733b67e31e1b6e1b8", size = 353747 }, - { url = "https://files.pythonhosted.org/packages/ab/00/ba2e50183dbd9abcce9497fa5149c62b4ff3e22d338a30d690f9af970561/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d08f00679177226c4cb8c5265012eea897c8ca3b93f429e546600c971bcbae7", size = 383795 }, - { url = "https://files.pythonhosted.org/packages/05/6f/86f0272b84926bcb0e4c972262f54223e8ecc556b3224d281e6598fc9268/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5965af57d5848192c13534f90f9dd16464f3c37aaf166cc1da1cae1fd5a34898", size = 393330 }, - { url = "https://files.pythonhosted.org/packages/cb/e9/0e02bb2e6dc63d212641da45df2b0bf29699d01715913e0d0f017ee29438/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a4e86e34e9ab6b667c27f3211ca48f73dba7cd3d90f8d5b11be56e5dbc3fb4e", size = 518194 }, - { url = "https://files.pythonhosted.org/packages/ee/ca/be7bca14cf21513bdf9c0606aba17d1f389ea2b6987035eb4f62bd923f25/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d3e6b26f2c785d65cc25ef1e5267ccbe1b069c5c21b8cc724efee290554419", size = 408340 }, - { url = "https://files.pythonhosted.org/packages/c2/c7/736e00ebf39ed81d75544c0da6ef7b0998f8201b369acf842f9a90dc8fce/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:626a7433c34566535b6e56a1b39a7b17ba961e97ce3b80ec62e6f1312c025551", size = 383765 }, - { url = "https://files.pythonhosted.org/packages/4a/3f/da50dfde9956aaf365c4adc9533b100008ed31aea635f2b8d7b627e25b49/rpds_py-0.30.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:acd7eb3f4471577b9b5a41baf02a978e8bdeb08b4b355273994f8b87032000a8", size = 396834 }, - { url = "https://files.pythonhosted.org/packages/4e/00/34bcc2565b6020eab2623349efbdec810676ad571995911f1abdae62a3a0/rpds_py-0.30.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe5fa731a1fa8a0a56b0977413f8cacac1768dad38d16b3a296712709476fbd5", size = 415470 }, - { url = "https://files.pythonhosted.org/packages/8c/28/882e72b5b3e6f718d5453bd4d0d9cf8df36fddeb4ddbbab17869d5868616/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:74a3243a411126362712ee1524dfc90c650a503502f135d54d1b352bd01f2404", size = 565630 }, - { url = "https://files.pythonhosted.org/packages/3b/97/04a65539c17692de5b85c6e293520fd01317fd878ea1995f0367d4532fb1/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:3e8eeb0544f2eb0d2581774be4c3410356eba189529a6b3e36bbbf9696175856", size = 591148 }, - { url = "https://files.pythonhosted.org/packages/85/70/92482ccffb96f5441aab93e26c4d66489eb599efdcf96fad90c14bbfb976/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:dbd936cde57abfee19ab3213cf9c26be06d60750e60a8e4dd85d1ab12c8b1f40", size = 556030 }, - { url = "https://files.pythonhosted.org/packages/20/53/7c7e784abfa500a2b6b583b147ee4bb5a2b3747a9166bab52fec4b5b5e7d/rpds_py-0.30.0-cp314-cp314t-win32.whl", hash = "sha256:dc824125c72246d924f7f796b4f63c1e9dc810c7d9e2355864b3c3a73d59ade0", size = 211570 }, - { url = "https://files.pythonhosted.org/packages/d0/02/fa464cdfbe6b26e0600b62c528b72d8608f5cc49f96b8d6e38c95d60c676/rpds_py-0.30.0-cp314-cp314t-win_amd64.whl", hash = "sha256:27f4b0e92de5bfbc6f86e43959e6edd1425c33b5e69aab0984a72047f2bcf1e3", size = 226532 }, - { url = "https://files.pythonhosted.org/packages/69/71/3f34339ee70521864411f8b6992e7ab13ac30d8e4e3309e07c7361767d91/rpds_py-0.30.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c2262bdba0ad4fc6fb5545660673925c2d2a5d9e2e0fb603aad545427be0fc58", size = 372292 }, - { url = "https://files.pythonhosted.org/packages/57/09/f183df9b8f2d66720d2ef71075c59f7e1b336bec7ee4c48f0a2b06857653/rpds_py-0.30.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ee6af14263f25eedc3bb918a3c04245106a42dfd4f5c2285ea6f997b1fc3f89a", size = 362128 }, - { url = "https://files.pythonhosted.org/packages/7a/68/5c2594e937253457342e078f0cc1ded3dd7b2ad59afdbf2d354869110a02/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3adbb8179ce342d235c31ab8ec511e66c73faa27a47e076ccc92421add53e2bb", size = 391542 }, - { url = "https://files.pythonhosted.org/packages/49/5c/31ef1afd70b4b4fbdb2800249f34c57c64beb687495b10aec0365f53dfc4/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:250fa00e9543ac9b97ac258bd37367ff5256666122c2d0f2bc97577c60a1818c", size = 404004 }, - { url = "https://files.pythonhosted.org/packages/e3/63/0cfbea38d05756f3440ce6534d51a491d26176ac045e2707adc99bb6e60a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9854cf4f488b3d57b9aaeb105f06d78e5529d3145b1e4a41750167e8c213c6d3", size = 527063 }, - { url = "https://files.pythonhosted.org/packages/42/e6/01e1f72a2456678b0f618fc9a1a13f882061690893c192fcad9f2926553a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:993914b8e560023bc0a8bf742c5f303551992dcb85e247b1e5c7f4a7d145bda5", size = 413099 }, - { url = "https://files.pythonhosted.org/packages/b8/25/8df56677f209003dcbb180765520c544525e3ef21ea72279c98b9aa7c7fb/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58edca431fb9b29950807e301826586e5bbf24163677732429770a697ffe6738", size = 392177 }, - { url = "https://files.pythonhosted.org/packages/4a/b4/0a771378c5f16f8115f796d1f437950158679bcd2a7c68cf251cfb00ed5b/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:dea5b552272a944763b34394d04577cf0f9bd013207bc32323b5a89a53cf9c2f", size = 406015 }, - { url = "https://files.pythonhosted.org/packages/36/d8/456dbba0af75049dc6f63ff295a2f92766b9d521fa00de67a2bd6427d57a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ba3af48635eb83d03f6c9735dfb21785303e73d22ad03d489e88adae6eab8877", size = 423736 }, - { url = "https://files.pythonhosted.org/packages/13/64/b4d76f227d5c45a7e0b796c674fd81b0a6c4fbd48dc29271857d8219571c/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:dff13836529b921e22f15cb099751209a60009731a68519630a24d61f0b1b30a", size = 573981 }, - { url = "https://files.pythonhosted.org/packages/20/91/092bacadeda3edf92bf743cc96a7be133e13a39cdbfd7b5082e7ab638406/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:1b151685b23929ab7beec71080a8889d4d6d9fa9a983d213f07121205d48e2c4", size = 599782 }, - { url = "https://files.pythonhosted.org/packages/d1/b7/b95708304cd49b7b6f82fdd039f1748b66ec2b21d6a45180910802f1abf1/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ac37f9f516c51e5753f27dfdef11a88330f04de2d564be3991384b2f3535d02e", size = 562191 }, -] - -[[package]] -name = "scipy" -version = "1.13.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ae/00/48c2f661e2816ccf2ecd77982f6605b2950afe60f60a52b4cbbc2504aa8f/scipy-1.13.1.tar.gz", hash = "sha256:095a87a0312b08dfd6a6155cbbd310a8c51800fc931b8c0b84003014b874ed3c", size = 57210720 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/33/59/41b2529908c002ade869623b87eecff3e11e3ce62e996d0bdcb536984187/scipy-1.13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:20335853b85e9a49ff7572ab453794298bcf0354d8068c5f6775a0eabf350aca", size = 39328076 }, - { url = "https://files.pythonhosted.org/packages/d5/33/f1307601f492f764062ce7dd471a14750f3360e33cd0f8c614dae208492c/scipy-1.13.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d605e9c23906d1994f55ace80e0125c587f96c020037ea6aa98d01b4bd2e222f", size = 30306232 }, - { url = "https://files.pythonhosted.org/packages/c0/66/9cd4f501dd5ea03e4a4572ecd874936d0da296bd04d1c45ae1a4a75d9c3a/scipy-1.13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfa31f1def5c819b19ecc3a8b52d28ffdcc7ed52bb20c9a7589669dd3c250989", size = 33743202 }, - { url = "https://files.pythonhosted.org/packages/a3/ba/7255e5dc82a65adbe83771c72f384d99c43063648456796436c9a5585ec3/scipy-1.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26264b282b9da0952a024ae34710c2aff7d27480ee91a2e82b7b7073c24722f", size = 38577335 }, - { url = "https://files.pythonhosted.org/packages/49/a5/bb9ded8326e9f0cdfdc412eeda1054b914dfea952bda2097d174f8832cc0/scipy-1.13.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:eccfa1906eacc02de42d70ef4aecea45415f5be17e72b61bafcfd329bdc52e94", size = 38820728 }, - { url = "https://files.pythonhosted.org/packages/12/30/df7a8fcc08f9b4a83f5f27cfaaa7d43f9a2d2ad0b6562cced433e5b04e31/scipy-1.13.1-cp310-cp310-win_amd64.whl", hash = "sha256:2831f0dc9c5ea9edd6e51e6e769b655f08ec6db6e2e10f86ef39bd32eb11da54", size = 46210588 }, - { url = "https://files.pythonhosted.org/packages/b4/15/4a4bb1b15bbd2cd2786c4f46e76b871b28799b67891f23f455323a0cdcfb/scipy-1.13.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:27e52b09c0d3a1d5b63e1105f24177e544a222b43611aaf5bc44d4a0979e32f9", size = 39333805 }, - { url = "https://files.pythonhosted.org/packages/ba/92/42476de1af309c27710004f5cdebc27bec62c204db42e05b23a302cb0c9a/scipy-1.13.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:54f430b00f0133e2224c3ba42b805bfd0086fe488835effa33fa291561932326", size = 30317687 }, - { url = "https://files.pythonhosted.org/packages/80/ba/8be64fe225360a4beb6840f3cbee494c107c0887f33350d0a47d55400b01/scipy-1.13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e89369d27f9e7b0884ae559a3a956e77c02114cc60a6058b4e5011572eea9299", size = 33694638 }, - { url = "https://files.pythonhosted.org/packages/36/07/035d22ff9795129c5a847c64cb43c1fa9188826b59344fee28a3ab02e283/scipy-1.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a78b4b3345f1b6f68a763c6e25c0c9a23a9fd0f39f5f3d200efe8feda560a5fa", size = 38569931 }, - { url = "https://files.pythonhosted.org/packages/d9/10/f9b43de37e5ed91facc0cfff31d45ed0104f359e4f9a68416cbf4e790241/scipy-1.13.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45484bee6d65633752c490404513b9ef02475b4284c4cfab0ef946def50b3f59", size = 38838145 }, - { url = "https://files.pythonhosted.org/packages/4a/48/4513a1a5623a23e95f94abd675ed91cfb19989c58e9f6f7d03990f6caf3d/scipy-1.13.1-cp311-cp311-win_amd64.whl", hash = "sha256:5713f62f781eebd8d597eb3f88b8bf9274e79eeabf63afb4a737abc6c84ad37b", size = 46196227 }, - { url = "https://files.pythonhosted.org/packages/f2/7b/fb6b46fbee30fc7051913068758414f2721003a89dd9a707ad49174e3843/scipy-1.13.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5d72782f39716b2b3509cd7c33cdc08c96f2f4d2b06d51e52fb45a19ca0c86a1", size = 39357301 }, - { url = "https://files.pythonhosted.org/packages/dc/5a/2043a3bde1443d94014aaa41e0b50c39d046dda8360abd3b2a1d3f79907d/scipy-1.13.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:017367484ce5498445aade74b1d5ab377acdc65e27095155e448c88497755a5d", size = 30363348 }, - { url = "https://files.pythonhosted.org/packages/e7/cb/26e4a47364bbfdb3b7fb3363be6d8a1c543bcd70a7753ab397350f5f189a/scipy-1.13.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:949ae67db5fa78a86e8fa644b9a6b07252f449dcf74247108c50e1d20d2b4627", size = 33406062 }, - { url = "https://files.pythonhosted.org/packages/88/ab/6ecdc526d509d33814835447bbbeedbebdec7cca46ef495a61b00a35b4bf/scipy-1.13.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de3ade0e53bc1f21358aa74ff4830235d716211d7d077e340c7349bc3542e884", size = 38218311 }, - { url = "https://files.pythonhosted.org/packages/0b/00/9f54554f0f8318100a71515122d8f4f503b1a2c4b4cfab3b4b68c0eb08fa/scipy-1.13.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2ac65fb503dad64218c228e2dc2d0a0193f7904747db43014645ae139c8fad16", size = 38442493 }, - { url = "https://files.pythonhosted.org/packages/3e/df/963384e90733e08eac978cd103c34df181d1fec424de383cdc443f418dd4/scipy-1.13.1-cp312-cp312-win_amd64.whl", hash = "sha256:cdd7dacfb95fea358916410ec61bbc20440f7860333aee6d882bb8046264e949", size = 45910955 }, - { url = "https://files.pythonhosted.org/packages/7f/29/c2ea58c9731b9ecb30b6738113a95d147e83922986b34c685b8f6eefde21/scipy-1.13.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:436bbb42a94a8aeef855d755ce5a465479c721e9d684de76bf61a62e7c2b81d5", size = 39352927 }, - { url = "https://files.pythonhosted.org/packages/5c/c0/e71b94b20ccf9effb38d7147c0064c08c622309fd487b1b677771a97d18c/scipy-1.13.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:8335549ebbca860c52bf3d02f80784e91a004b71b059e3eea9678ba994796a24", size = 30324538 }, - { url = "https://files.pythonhosted.org/packages/6d/0f/aaa55b06d474817cea311e7b10aab2ea1fd5d43bc6a2861ccc9caec9f418/scipy-1.13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d533654b7d221a6a97304ab63c41c96473ff04459e404b83275b60aa8f4b7004", size = 33732190 }, - { url = "https://files.pythonhosted.org/packages/35/f5/d0ad1a96f80962ba65e2ce1de6a1e59edecd1f0a7b55990ed208848012e0/scipy-1.13.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637e98dcf185ba7f8e663e122ebf908c4702420477ae52a04f9908707456ba4d", size = 38612244 }, - { url = "https://files.pythonhosted.org/packages/8d/02/1165905f14962174e6569076bcc3315809ae1291ed14de6448cc151eedfd/scipy-1.13.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a014c2b3697bde71724244f63de2476925596c24285c7a637364761f8710891c", size = 38845637 }, - { url = "https://files.pythonhosted.org/packages/3e/77/dab54fe647a08ee4253963bcd8f9cf17509c8ca64d6335141422fe2e2114/scipy-1.13.1-cp39-cp39-win_amd64.whl", hash = "sha256:392e4ec766654852c25ebad4f64e4e584cf19820b980bc04960bca0b0cd6eaa2", size = 46227440 }, -] - -[[package]] -name = "scipy" -version = "1.15.3" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version == '3.10.*'", -] -dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/0f/37/6964b830433e654ec7485e45a00fc9a27cf868d622838f6b6d9c5ec0d532/scipy-1.15.3.tar.gz", hash = "sha256:eae3cf522bc7df64b42cad3925c876e1b0b6c35c1337c93e12c0f366f55b0eaf", size = 59419214 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/78/2f/4966032c5f8cc7e6a60f1b2e0ad686293b9474b65246b0c642e3ef3badd0/scipy-1.15.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:a345928c86d535060c9c2b25e71e87c39ab2f22fc96e9636bd74d1dbf9de448c", size = 38702770 }, - { url = "https://files.pythonhosted.org/packages/a0/6e/0c3bf90fae0e910c274db43304ebe25a6b391327f3f10b5dcc638c090795/scipy-1.15.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:ad3432cb0f9ed87477a8d97f03b763fd1d57709f1bbde3c9369b1dff5503b253", size = 30094511 }, - { url = "https://files.pythonhosted.org/packages/ea/b1/4deb37252311c1acff7f101f6453f0440794f51b6eacb1aad4459a134081/scipy-1.15.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:aef683a9ae6eb00728a542b796f52a5477b78252edede72b8327a886ab63293f", size = 22368151 }, - { url = "https://files.pythonhosted.org/packages/38/7d/f457626e3cd3c29b3a49ca115a304cebb8cc6f31b04678f03b216899d3c6/scipy-1.15.3-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:1c832e1bd78dea67d5c16f786681b28dd695a8cb1fb90af2e27580d3d0967e92", size = 25121732 }, - { url = "https://files.pythonhosted.org/packages/db/0a/92b1de4a7adc7a15dcf5bddc6e191f6f29ee663b30511ce20467ef9b82e4/scipy-1.15.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:263961f658ce2165bbd7b99fa5135195c3a12d9bef045345016b8b50c315cb82", size = 35547617 }, - { url = "https://files.pythonhosted.org/packages/8e/6d/41991e503e51fc1134502694c5fa7a1671501a17ffa12716a4a9151af3df/scipy-1.15.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e2abc762b0811e09a0d3258abee2d98e0c703eee49464ce0069590846f31d40", size = 37662964 }, - { url = "https://files.pythonhosted.org/packages/25/e1/3df8f83cb15f3500478c889be8fb18700813b95e9e087328230b98d547ff/scipy-1.15.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ed7284b21a7a0c8f1b6e5977ac05396c0d008b89e05498c8b7e8f4a1423bba0e", size = 37238749 }, - { url = "https://files.pythonhosted.org/packages/93/3e/b3257cf446f2a3533ed7809757039016b74cd6f38271de91682aa844cfc5/scipy-1.15.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5380741e53df2c566f4d234b100a484b420af85deb39ea35a1cc1be84ff53a5c", size = 40022383 }, - { url = "https://files.pythonhosted.org/packages/d1/84/55bc4881973d3f79b479a5a2e2df61c8c9a04fcb986a213ac9c02cfb659b/scipy-1.15.3-cp310-cp310-win_amd64.whl", hash = "sha256:9d61e97b186a57350f6d6fd72640f9e99d5a4a2b8fbf4b9ee9a841eab327dc13", size = 41259201 }, - { url = "https://files.pythonhosted.org/packages/96/ab/5cc9f80f28f6a7dff646c5756e559823614a42b1939d86dd0ed550470210/scipy-1.15.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:993439ce220d25e3696d1b23b233dd010169b62f6456488567e830654ee37a6b", size = 38714255 }, - { url = "https://files.pythonhosted.org/packages/4a/4a/66ba30abe5ad1a3ad15bfb0b59d22174012e8056ff448cb1644deccbfed2/scipy-1.15.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:34716e281f181a02341ddeaad584205bd2fd3c242063bd3423d61ac259ca7eba", size = 30111035 }, - { url = "https://files.pythonhosted.org/packages/4b/fa/a7e5b95afd80d24313307f03624acc65801846fa75599034f8ceb9e2cbf6/scipy-1.15.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3b0334816afb8b91dab859281b1b9786934392aa3d527cd847e41bb6f45bee65", size = 22384499 }, - { url = "https://files.pythonhosted.org/packages/17/99/f3aaddccf3588bb4aea70ba35328c204cadd89517a1612ecfda5b2dd9d7a/scipy-1.15.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:6db907c7368e3092e24919b5e31c76998b0ce1684d51a90943cb0ed1b4ffd6c1", size = 25152602 }, - { url = "https://files.pythonhosted.org/packages/56/c5/1032cdb565f146109212153339f9cb8b993701e9fe56b1c97699eee12586/scipy-1.15.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:721d6b4ef5dc82ca8968c25b111e307083d7ca9091bc38163fb89243e85e3889", size = 35503415 }, - { url = "https://files.pythonhosted.org/packages/bd/37/89f19c8c05505d0601ed5650156e50eb881ae3918786c8fd7262b4ee66d3/scipy-1.15.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39cb9c62e471b1bb3750066ecc3a3f3052b37751c7c3dfd0fd7e48900ed52982", size = 37652622 }, - { url = "https://files.pythonhosted.org/packages/7e/31/be59513aa9695519b18e1851bb9e487de66f2d31f835201f1b42f5d4d475/scipy-1.15.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:795c46999bae845966368a3c013e0e00947932d68e235702b5c3f6ea799aa8c9", size = 37244796 }, - { url = "https://files.pythonhosted.org/packages/10/c0/4f5f3eeccc235632aab79b27a74a9130c6c35df358129f7ac8b29f562ac7/scipy-1.15.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:18aaacb735ab38b38db42cb01f6b92a2d0d4b6aabefeb07f02849e47f8fb3594", size = 40047684 }, - { url = "https://files.pythonhosted.org/packages/ab/a7/0ddaf514ce8a8714f6ed243a2b391b41dbb65251affe21ee3077ec45ea9a/scipy-1.15.3-cp311-cp311-win_amd64.whl", hash = "sha256:ae48a786a28412d744c62fd7816a4118ef97e5be0bee968ce8f0a2fba7acf3bb", size = 41246504 }, - { url = "https://files.pythonhosted.org/packages/37/4b/683aa044c4162e10ed7a7ea30527f2cbd92e6999c10a8ed8edb253836e9c/scipy-1.15.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6ac6310fdbfb7aa6612408bd2f07295bcbd3fda00d2d702178434751fe48e019", size = 38766735 }, - { url = "https://files.pythonhosted.org/packages/7b/7e/f30be3d03de07f25dc0ec926d1681fed5c732d759ac8f51079708c79e680/scipy-1.15.3-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:185cd3d6d05ca4b44a8f1595af87f9c372bb6acf9c808e99aa3e9aa03bd98cf6", size = 30173284 }, - { url = "https://files.pythonhosted.org/packages/07/9c/0ddb0d0abdabe0d181c1793db51f02cd59e4901da6f9f7848e1f96759f0d/scipy-1.15.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:05dc6abcd105e1a29f95eada46d4a3f251743cfd7d3ae8ddb4088047f24ea477", size = 22446958 }, - { url = "https://files.pythonhosted.org/packages/af/43/0bce905a965f36c58ff80d8bea33f1f9351b05fad4beaad4eae34699b7a1/scipy-1.15.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:06efcba926324df1696931a57a176c80848ccd67ce6ad020c810736bfd58eb1c", size = 25242454 }, - { url = "https://files.pythonhosted.org/packages/56/30/a6f08f84ee5b7b28b4c597aca4cbe545535c39fe911845a96414700b64ba/scipy-1.15.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05045d8b9bfd807ee1b9f38761993297b10b245f012b11b13b91ba8945f7e45", size = 35210199 }, - { url = "https://files.pythonhosted.org/packages/0b/1f/03f52c282437a168ee2c7c14a1a0d0781a9a4a8962d84ac05c06b4c5b555/scipy-1.15.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:271e3713e645149ea5ea3e97b57fdab61ce61333f97cfae392c28ba786f9bb49", size = 37309455 }, - { url = "https://files.pythonhosted.org/packages/89/b1/fbb53137f42c4bf630b1ffdfc2151a62d1d1b903b249f030d2b1c0280af8/scipy-1.15.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6cfd56fc1a8e53f6e89ba3a7a7251f7396412d655bca2aa5611c8ec9a6784a1e", size = 36885140 }, - { url = "https://files.pythonhosted.org/packages/2e/2e/025e39e339f5090df1ff266d021892694dbb7e63568edcfe43f892fa381d/scipy-1.15.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0ff17c0bb1cb32952c09217d8d1eed9b53d1463e5f1dd6052c7857f83127d539", size = 39710549 }, - { url = "https://files.pythonhosted.org/packages/e6/eb/3bf6ea8ab7f1503dca3a10df2e4b9c3f6b3316df07f6c0ded94b281c7101/scipy-1.15.3-cp312-cp312-win_amd64.whl", hash = "sha256:52092bc0472cfd17df49ff17e70624345efece4e1a12b23783a1ac59a1b728ed", size = 40966184 }, - { url = "https://files.pythonhosted.org/packages/73/18/ec27848c9baae6e0d6573eda6e01a602e5649ee72c27c3a8aad673ebecfd/scipy-1.15.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2c620736bcc334782e24d173c0fdbb7590a0a436d2fdf39310a8902505008759", size = 38728256 }, - { url = "https://files.pythonhosted.org/packages/74/cd/1aef2184948728b4b6e21267d53b3339762c285a46a274ebb7863c9e4742/scipy-1.15.3-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:7e11270a000969409d37ed399585ee530b9ef6aa99d50c019de4cb01e8e54e62", size = 30109540 }, - { url = "https://files.pythonhosted.org/packages/5b/d8/59e452c0a255ec352bd0a833537a3bc1bfb679944c4938ab375b0a6b3a3e/scipy-1.15.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8c9ed3ba2c8a2ce098163a9bdb26f891746d02136995df25227a20e71c396ebb", size = 22383115 }, - { url = "https://files.pythonhosted.org/packages/08/f5/456f56bbbfccf696263b47095291040655e3cbaf05d063bdc7c7517f32ac/scipy-1.15.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:0bdd905264c0c9cfa74a4772cdb2070171790381a5c4d312c973382fc6eaf730", size = 25163884 }, - { url = "https://files.pythonhosted.org/packages/a2/66/a9618b6a435a0f0c0b8a6d0a2efb32d4ec5a85f023c2b79d39512040355b/scipy-1.15.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79167bba085c31f38603e11a267d862957cbb3ce018d8b38f79ac043bc92d825", size = 35174018 }, - { url = "https://files.pythonhosted.org/packages/b5/09/c5b6734a50ad4882432b6bb7c02baf757f5b2f256041da5df242e2d7e6b6/scipy-1.15.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9deabd6d547aee2c9a81dee6cc96c6d7e9a9b1953f74850c179f91fdc729cb7", size = 37269716 }, - { url = "https://files.pythonhosted.org/packages/77/0a/eac00ff741f23bcabd352731ed9b8995a0a60ef57f5fd788d611d43d69a1/scipy-1.15.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dde4fc32993071ac0c7dd2d82569e544f0bdaff66269cb475e0f369adad13f11", size = 36872342 }, - { url = "https://files.pythonhosted.org/packages/fe/54/4379be86dd74b6ad81551689107360d9a3e18f24d20767a2d5b9253a3f0a/scipy-1.15.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f77f853d584e72e874d87357ad70f44b437331507d1c311457bed8ed2b956126", size = 39670869 }, - { url = "https://files.pythonhosted.org/packages/87/2e/892ad2862ba54f084ffe8cc4a22667eaf9c2bcec6d2bff1d15713c6c0703/scipy-1.15.3-cp313-cp313-win_amd64.whl", hash = "sha256:b90ab29d0c37ec9bf55424c064312930ca5f4bde15ee8619ee44e69319aab163", size = 40988851 }, - { url = "https://files.pythonhosted.org/packages/1b/e9/7a879c137f7e55b30d75d90ce3eb468197646bc7b443ac036ae3fe109055/scipy-1.15.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3ac07623267feb3ae308487c260ac684b32ea35fd81e12845039952f558047b8", size = 38863011 }, - { url = "https://files.pythonhosted.org/packages/51/d1/226a806bbd69f62ce5ef5f3ffadc35286e9fbc802f606a07eb83bf2359de/scipy-1.15.3-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:6487aa99c2a3d509a5227d9a5e889ff05830a06b2ce08ec30df6d79db5fcd5c5", size = 30266407 }, - { url = "https://files.pythonhosted.org/packages/e5/9b/f32d1d6093ab9eeabbd839b0f7619c62e46cc4b7b6dbf05b6e615bbd4400/scipy-1.15.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:50f9e62461c95d933d5c5ef4a1f2ebf9a2b4e83b0db374cb3f1de104d935922e", size = 22540030 }, - { url = "https://files.pythonhosted.org/packages/e7/29/c278f699b095c1a884f29fda126340fcc201461ee8bfea5c8bdb1c7c958b/scipy-1.15.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:14ed70039d182f411ffc74789a16df3835e05dc469b898233a245cdfd7f162cb", size = 25218709 }, - { url = "https://files.pythonhosted.org/packages/24/18/9e5374b617aba742a990581373cd6b68a2945d65cc588482749ef2e64467/scipy-1.15.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a769105537aa07a69468a0eefcd121be52006db61cdd8cac8a0e68980bbb723", size = 34809045 }, - { url = "https://files.pythonhosted.org/packages/e1/fe/9c4361e7ba2927074360856db6135ef4904d505e9b3afbbcb073c4008328/scipy-1.15.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9db984639887e3dffb3928d118145ffe40eff2fa40cb241a306ec57c219ebbbb", size = 36703062 }, - { url = "https://files.pythonhosted.org/packages/b7/8e/038ccfe29d272b30086b25a4960f757f97122cb2ec42e62b460d02fe98e9/scipy-1.15.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:40e54d5c7e7ebf1aa596c374c49fa3135f04648a0caabcb66c52884b943f02b4", size = 36393132 }, - { url = "https://files.pythonhosted.org/packages/10/7e/5c12285452970be5bdbe8352c619250b97ebf7917d7a9a9e96b8a8140f17/scipy-1.15.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5e721fed53187e71d0ccf382b6bf977644c533e506c4d33c3fb24de89f5c3ed5", size = 38979503 }, - { url = "https://files.pythonhosted.org/packages/81/06/0a5e5349474e1cbc5757975b21bd4fad0e72ebf138c5592f191646154e06/scipy-1.15.3-cp313-cp313t-win_amd64.whl", hash = "sha256:76ad1fb5f8752eabf0fa02e4cc0336b4e8f021e2d5f061ed37d6d264db35e3ca", size = 40308097 }, -] - -[[package]] -name = "scipy" -version = "1.17.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", - "python_full_version == '3.11.*'", -] -dependencies = [ - { name = "numpy", version = "2.4.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/7a/97/5a3609c4f8d58b039179648e62dd220f89864f56f7357f5d4f45c29eb2cc/scipy-1.17.1.tar.gz", hash = "sha256:95d8e012d8cb8816c226aef832200b1d45109ed4464303e997c5b13122b297c0", size = 30573822 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/df/75/b4ce781849931fef6fd529afa6b63711d5a733065722d0c3e2724af9e40a/scipy-1.17.1-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:1f95b894f13729334fb990162e911c9e5dc1ab390c58aa6cbecb389c5b5e28ec", size = 31613675 }, - { url = "https://files.pythonhosted.org/packages/f7/58/bccc2861b305abdd1b8663d6130c0b3d7cc22e8d86663edbc8401bfd40d4/scipy-1.17.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:e18f12c6b0bc5a592ed23d3f7b891f68fd7f8241d69b7883769eb5d5dfb52696", size = 28162057 }, - { url = "https://files.pythonhosted.org/packages/6d/ee/18146b7757ed4976276b9c9819108adbc73c5aad636e5353e20746b73069/scipy-1.17.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:a3472cfbca0a54177d0faa68f697d8ba4c80bbdc19908c3465556d9f7efce9ee", size = 20334032 }, - { url = "https://files.pythonhosted.org/packages/ec/e6/cef1cf3557f0c54954198554a10016b6a03b2ec9e22a4e1df734936bd99c/scipy-1.17.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:766e0dc5a616d026a3a1cffa379af959671729083882f50307e18175797b3dfd", size = 22709533 }, - { url = "https://files.pythonhosted.org/packages/4d/60/8804678875fc59362b0fb759ab3ecce1f09c10a735680318ac30da8cd76b/scipy-1.17.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:744b2bf3640d907b79f3fd7874efe432d1cf171ee721243e350f55234b4cec4c", size = 33062057 }, - { url = "https://files.pythonhosted.org/packages/09/7d/af933f0f6e0767995b4e2d705a0665e454d1c19402aa7e895de3951ebb04/scipy-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43af8d1f3bea642559019edfe64e9b11192a8978efbd1539d7bc2aaa23d92de4", size = 35349300 }, - { url = "https://files.pythonhosted.org/packages/b4/3d/7ccbbdcbb54c8fdc20d3b6930137c782a163fa626f0aef920349873421ba/scipy-1.17.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cd96a1898c0a47be4520327e01f874acfd61fb48a9420f8aa9f6483412ffa444", size = 35127333 }, - { url = "https://files.pythonhosted.org/packages/e8/19/f926cb11c42b15ba08e3a71e376d816ac08614f769b4f47e06c3580c836a/scipy-1.17.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4eb6c25dd62ee8d5edf68a8e1c171dd71c292fdae95d8aeb3dd7d7de4c364082", size = 37741314 }, - { url = "https://files.pythonhosted.org/packages/95/da/0d1df507cf574b3f224ccc3d45244c9a1d732c81dcb26b1e8a766ae271a8/scipy-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:d30e57c72013c2a4fe441c2fcb8e77b14e152ad48b5464858e07e2ad9fbfceff", size = 36607512 }, - { url = "https://files.pythonhosted.org/packages/68/7f/bdd79ceaad24b671543ffe0ef61ed8e659440eb683b66f033454dcee90eb/scipy-1.17.1-cp311-cp311-win_arm64.whl", hash = "sha256:9ecb4efb1cd6e8c4afea0daa91a87fbddbce1b99d2895d151596716c0b2e859d", size = 24599248 }, - { url = "https://files.pythonhosted.org/packages/35/48/b992b488d6f299dbe3f11a20b24d3dda3d46f1a635ede1c46b5b17a7b163/scipy-1.17.1-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:35c3a56d2ef83efc372eaec584314bd0ef2e2f0d2adb21c55e6ad5b344c0dcb8", size = 31610954 }, - { url = "https://files.pythonhosted.org/packages/b2/02/cf107b01494c19dc100f1d0b7ac3cc08666e96ba2d64db7626066cee895e/scipy-1.17.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:fcb310ddb270a06114bb64bbe53c94926b943f5b7f0842194d585c65eb4edd76", size = 28172662 }, - { url = "https://files.pythonhosted.org/packages/cf/a9/599c28631bad314d219cf9ffd40e985b24d603fc8a2f4ccc5ae8419a535b/scipy-1.17.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:cc90d2e9c7e5c7f1a482c9875007c095c3194b1cfedca3c2f3291cdc2bc7c086", size = 20344366 }, - { url = "https://files.pythonhosted.org/packages/35/f5/906eda513271c8deb5af284e5ef0206d17a96239af79f9fa0aebfe0e36b4/scipy-1.17.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:c80be5ede8f3f8eded4eff73cc99a25c388ce98e555b17d31da05287015ffa5b", size = 22704017 }, - { url = "https://files.pythonhosted.org/packages/da/34/16f10e3042d2f1d6b66e0428308ab52224b6a23049cb2f5c1756f713815f/scipy-1.17.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e19ebea31758fac5893a2ac360fedd00116cbb7628e650842a6691ba7ca28a21", size = 32927842 }, - { url = "https://files.pythonhosted.org/packages/01/8e/1e35281b8ab6d5d72ebe9911edcdffa3f36b04ed9d51dec6dd140396e220/scipy-1.17.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:02ae3b274fde71c5e92ac4d54bc06c42d80e399fec704383dcd99b301df37458", size = 35235890 }, - { url = "https://files.pythonhosted.org/packages/c5/5c/9d7f4c88bea6e0d5a4f1bc0506a53a00e9fcb198de372bfe4d3652cef482/scipy-1.17.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8a604bae87c6195d8b1045eddece0514d041604b14f2727bbc2b3020172045eb", size = 35003557 }, - { url = "https://files.pythonhosted.org/packages/65/94/7698add8f276dbab7a9de9fb6b0e02fc13ee61d51c7c3f85ac28b65e1239/scipy-1.17.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f590cd684941912d10becc07325a3eeb77886fe981415660d9265c4c418d0bea", size = 37625856 }, - { url = "https://files.pythonhosted.org/packages/a2/84/dc08d77fbf3d87d3ee27f6a0c6dcce1de5829a64f2eae85a0ecc1f0daa73/scipy-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:41b71f4a3a4cab9d366cd9065b288efc4d4f3c0b37a91a8e0947fb5bd7f31d87", size = 36549682 }, - { url = "https://files.pythonhosted.org/packages/bc/98/fe9ae9ffb3b54b62559f52dedaebe204b408db8109a8c66fdd04869e6424/scipy-1.17.1-cp312-cp312-win_arm64.whl", hash = "sha256:f4115102802df98b2b0db3cce5cb9b92572633a1197c77b7553e5203f284a5b3", size = 24547340 }, - { url = "https://files.pythonhosted.org/packages/76/27/07ee1b57b65e92645f219b37148a7e7928b82e2b5dbeccecb4dff7c64f0b/scipy-1.17.1-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:5e3c5c011904115f88a39308379c17f91546f77c1667cea98739fe0fccea804c", size = 31590199 }, - { url = "https://files.pythonhosted.org/packages/ec/ae/db19f8ab842e9b724bf5dbb7db29302a91f1e55bc4d04b1025d6d605a2c5/scipy-1.17.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:6fac755ca3d2c3edcb22f479fceaa241704111414831ddd3bc6056e18516892f", size = 28154001 }, - { url = "https://files.pythonhosted.org/packages/5b/58/3ce96251560107b381cbd6e8413c483bbb1228a6b919fa8652b0d4090e7f/scipy-1.17.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:7ff200bf9d24f2e4d5dc6ee8c3ac64d739d3a89e2326ba68aaf6c4a2b838fd7d", size = 20325719 }, - { url = "https://files.pythonhosted.org/packages/b2/83/15087d945e0e4d48ce2377498abf5ad171ae013232ae31d06f336e64c999/scipy-1.17.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4b400bdc6f79fa02a4d86640310dde87a21fba0c979efff5248908c6f15fad1b", size = 22683595 }, - { url = "https://files.pythonhosted.org/packages/b4/e0/e58fbde4a1a594c8be8114eb4aac1a55bcd6587047efc18a61eb1f5c0d30/scipy-1.17.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2b64ca7d4aee0102a97f3ba22124052b4bd2152522355073580bf4845e2550b6", size = 32896429 }, - { url = "https://files.pythonhosted.org/packages/f5/5f/f17563f28ff03c7b6799c50d01d5d856a1d55f2676f537ca8d28c7f627cd/scipy-1.17.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:581b2264fc0aa555f3f435a5944da7504ea3a065d7029ad60e7c3d1ae09c5464", size = 35203952 }, - { url = "https://files.pythonhosted.org/packages/8d/a5/9afd17de24f657fdfe4df9a3f1ea049b39aef7c06000c13db1530d81ccca/scipy-1.17.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:beeda3d4ae615106d7094f7e7cef6218392e4465cc95d25f900bebabfded0950", size = 34979063 }, - { url = "https://files.pythonhosted.org/packages/8b/13/88b1d2384b424bf7c924f2038c1c409f8d88bb2a8d49d097861dd64a57b2/scipy-1.17.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6609bc224e9568f65064cfa72edc0f24ee6655b47575954ec6339534b2798369", size = 37598449 }, - { url = "https://files.pythonhosted.org/packages/35/e5/d6d0e51fc888f692a35134336866341c08655d92614f492c6860dc45bb2c/scipy-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:37425bc9175607b0268f493d79a292c39f9d001a357bebb6b88fdfaff13f6448", size = 36510943 }, - { url = "https://files.pythonhosted.org/packages/2a/fd/3be73c564e2a01e690e19cc618811540ba5354c67c8680dce3281123fb79/scipy-1.17.1-cp313-cp313-win_arm64.whl", hash = "sha256:5cf36e801231b6a2059bf354720274b7558746f3b1a4efb43fcf557ccd484a87", size = 24545621 }, - { url = "https://files.pythonhosted.org/packages/6f/6b/17787db8b8114933a66f9dcc479a8272e4b4da75fe03b0c282f7b0ade8cd/scipy-1.17.1-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:d59c30000a16d8edc7e64152e30220bfbd724c9bbb08368c054e24c651314f0a", size = 31936708 }, - { url = "https://files.pythonhosted.org/packages/38/2e/524405c2b6392765ab1e2b722a41d5da33dc5c7b7278184a8ad29b6cb206/scipy-1.17.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:010f4333c96c9bb1a4516269e33cb5917b08ef2166d5556ca2fd9f082a9e6ea0", size = 28570135 }, - { url = "https://files.pythonhosted.org/packages/fd/c3/5bd7199f4ea8556c0c8e39f04ccb014ac37d1468e6cfa6a95c6b3562b76e/scipy-1.17.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:2ceb2d3e01c5f1d83c4189737a42d9cb2fc38a6eeed225e7515eef71ad301dce", size = 20741977 }, - { url = "https://files.pythonhosted.org/packages/d9/b8/8ccd9b766ad14c78386599708eb745f6b44f08400a5fd0ade7cf89b6fc93/scipy-1.17.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:844e165636711ef41f80b4103ed234181646b98a53c8f05da12ca5ca289134f6", size = 23029601 }, - { url = "https://files.pythonhosted.org/packages/6d/a0/3cb6f4d2fb3e17428ad2880333cac878909ad1a89f678527b5328b93c1d4/scipy-1.17.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:158dd96d2207e21c966063e1635b1063cd7787b627b6f07305315dd73d9c679e", size = 33019667 }, - { url = "https://files.pythonhosted.org/packages/f3/c3/2d834a5ac7bf3a0c806ad1508efc02dda3c8c61472a56132d7894c312dea/scipy-1.17.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:74cbb80d93260fe2ffa334efa24cb8f2f0f622a9b9febf8b483c0b865bfb3475", size = 35264159 }, - { url = "https://files.pythonhosted.org/packages/4d/77/d3ed4becfdbd217c52062fafe35a72388d1bd82c2d0ba5ca19d6fcc93e11/scipy-1.17.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:dbc12c9f3d185f5c737d801da555fb74b3dcfa1a50b66a1a93e09190f41fab50", size = 35102771 }, - { url = "https://files.pythonhosted.org/packages/bd/12/d19da97efde68ca1ee5538bb261d5d2c062f0c055575128f11a2730e3ac1/scipy-1.17.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:94055a11dfebe37c656e70317e1996dc197e1a15bbcc351bcdd4610e128fe1ca", size = 37665910 }, - { url = "https://files.pythonhosted.org/packages/06/1c/1172a88d507a4baaf72c5a09bb6c018fe2ae0ab622e5830b703a46cc9e44/scipy-1.17.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e30bdeaa5deed6bc27b4cc490823cd0347d7dae09119b8803ae576ea0ce52e4c", size = 36562980 }, - { url = "https://files.pythonhosted.org/packages/70/b0/eb757336e5a76dfa7911f63252e3b7d1de00935d7705cf772db5b45ec238/scipy-1.17.1-cp313-cp313t-win_arm64.whl", hash = "sha256:a720477885a9d2411f94a93d16f9d89bad0f28ca23c3f8daa521e2dcc3f44d49", size = 24856543 }, - { url = "https://files.pythonhosted.org/packages/cf/83/333afb452af6f0fd70414dc04f898647ee1423979ce02efa75c3b0f2c28e/scipy-1.17.1-cp314-cp314-macosx_10_14_x86_64.whl", hash = "sha256:a48a72c77a310327f6a3a920092fa2b8fd03d7deaa60f093038f22d98e096717", size = 31584510 }, - { url = "https://files.pythonhosted.org/packages/ed/a6/d05a85fd51daeb2e4ea71d102f15b34fedca8e931af02594193ae4fd25f7/scipy-1.17.1-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:45abad819184f07240d8a696117a7aacd39787af9e0b719d00285549ed19a1e9", size = 28170131 }, - { url = "https://files.pythonhosted.org/packages/db/7b/8624a203326675d7746a254083a187398090a179335b2e4a20e2ddc46e83/scipy-1.17.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:3fd1fcdab3ea951b610dc4cef356d416d5802991e7e32b5254828d342f7b7e0b", size = 20342032 }, - { url = "https://files.pythonhosted.org/packages/c9/35/2c342897c00775d688d8ff3987aced3426858fd89d5a0e26e020b660b301/scipy-1.17.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:7bdf2da170b67fdf10bca777614b1c7d96ae3ca5794fd9587dce41eb2966e866", size = 22678766 }, - { url = "https://files.pythonhosted.org/packages/ef/f2/7cdb8eb308a1a6ae1e19f945913c82c23c0c442a462a46480ce487fdc0ac/scipy-1.17.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:adb2642e060a6549c343603a3851ba76ef0b74cc8c079a9a58121c7ec9fe2350", size = 32957007 }, - { url = "https://files.pythonhosted.org/packages/0b/2e/7eea398450457ecb54e18e9d10110993fa65561c4f3add5e8eccd2b9cd41/scipy-1.17.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eee2cfda04c00a857206a4330f0c5e3e56535494e30ca445eb19ec624ae75118", size = 35221333 }, - { url = "https://files.pythonhosted.org/packages/d9/77/5b8509d03b77f093a0d52e606d3c4f79e8b06d1d38c441dacb1e26cacf46/scipy-1.17.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d2650c1fb97e184d12d8ba010493ee7b322864f7d3d00d3f9bb97d9c21de4068", size = 35042066 }, - { url = "https://files.pythonhosted.org/packages/f9/df/18f80fb99df40b4070328d5ae5c596f2f00fffb50167e31439e932f29e7d/scipy-1.17.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:08b900519463543aa604a06bec02461558a6e1cef8fdbb8098f77a48a83c8118", size = 37612763 }, - { url = "https://files.pythonhosted.org/packages/4b/39/f0e8ea762a764a9dc52aa7dabcfad51a354819de1f0d4652b6a1122424d6/scipy-1.17.1-cp314-cp314-win_amd64.whl", hash = "sha256:3877ac408e14da24a6196de0ddcace62092bfc12a83823e92e49e40747e52c19", size = 37290984 }, - { url = "https://files.pythonhosted.org/packages/7c/56/fe201e3b0f93d1a8bcf75d3379affd228a63d7e2d80ab45467a74b494947/scipy-1.17.1-cp314-cp314-win_arm64.whl", hash = "sha256:f8885db0bc2bffa59d5c1b72fad7a6a92d3e80e7257f967dd81abb553a90d293", size = 25192877 }, - { url = "https://files.pythonhosted.org/packages/96/ad/f8c414e121f82e02d76f310f16db9899c4fcde36710329502a6b2a3c0392/scipy-1.17.1-cp314-cp314t-macosx_10_14_x86_64.whl", hash = "sha256:1cc682cea2ae55524432f3cdff9e9a3be743d52a7443d0cba9017c23c87ae2f6", size = 31949750 }, - { url = "https://files.pythonhosted.org/packages/7c/b0/c741e8865d61b67c81e255f4f0a832846c064e426636cd7de84e74d209be/scipy-1.17.1-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:2040ad4d1795a0ae89bfc7e8429677f365d45aa9fd5e4587cf1ea737f927b4a1", size = 28585858 }, - { url = "https://files.pythonhosted.org/packages/ed/1b/3985219c6177866628fa7c2595bfd23f193ceebbe472c98a08824b9466ff/scipy-1.17.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:131f5aaea57602008f9822e2115029b55d4b5f7c070287699fe45c661d051e39", size = 20757723 }, - { url = "https://files.pythonhosted.org/packages/c0/19/2a04aa25050d656d6f7b9e7b685cc83d6957fb101665bfd9369ca6534563/scipy-1.17.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:9cdc1a2fcfd5c52cfb3045feb399f7b3ce822abdde3a193a6b9a60b3cb5854ca", size = 23043098 }, - { url = "https://files.pythonhosted.org/packages/86/f1/3383beb9b5d0dbddd030335bf8a8b32d4317185efe495374f134d8be6cce/scipy-1.17.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e3dcd57ab780c741fde8dc68619de988b966db759a3c3152e8e9142c26295ad", size = 33030397 }, - { url = "https://files.pythonhosted.org/packages/41/68/8f21e8a65a5a03f25a79165ec9d2b28c00e66dc80546cf5eb803aeeff35b/scipy-1.17.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a9956e4d4f4a301ebf6cde39850333a6b6110799d470dbbb1e25326ac447f52a", size = 35281163 }, - { url = "https://files.pythonhosted.org/packages/84/8d/c8a5e19479554007a5632ed7529e665c315ae7492b4f946b0deb39870e39/scipy-1.17.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:a4328d245944d09fd639771de275701ccadf5f781ba0ff092ad141e017eccda4", size = 35116291 }, - { url = "https://files.pythonhosted.org/packages/52/52/e57eceff0e342a1f50e274264ed47497b59e6a4e3118808ee58ddda7b74a/scipy-1.17.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a77cbd07b940d326d39a1d1b37817e2ee4d79cb30e7338f3d0cddffae70fcaa2", size = 37682317 }, - { url = "https://files.pythonhosted.org/packages/11/2f/b29eafe4a3fbc3d6de9662b36e028d5f039e72d345e05c250e121a230dd4/scipy-1.17.1-cp314-cp314t-win_amd64.whl", hash = "sha256:eb092099205ef62cd1782b006658db09e2fed75bffcae7cc0d44052d8aa0f484", size = 37345327 }, - { url = "https://files.pythonhosted.org/packages/07/39/338d9219c4e87f3e708f18857ecd24d22a0c3094752393319553096b98af/scipy-1.17.1-cp314-cp314t-win_arm64.whl", hash = "sha256:200e1050faffacc162be6a486a984a0497866ec54149a01270adc8a59b7c7d21", size = 25489165 }, -] - -[[package]] -name = "send2trash" -version = "2.1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c5/f0/184b4b5f8d00f2a92cf96eec8967a3d550b52cf94362dad1100df9e48d57/send2trash-2.1.0.tar.gz", hash = "sha256:1c72b39f09457db3c05ce1d19158c2cbef4c32b8bedd02c155e49282b7ea7459", size = 17255 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1c/78/504fdd027da3b84ff1aecd9f6957e65f35134534ccc6da8628eb71e76d3f/send2trash-2.1.0-py3-none-any.whl", hash = "sha256:0da2f112e6d6bb22de6aa6daa7e144831a4febf2a87261451c4ad849fe9a873c", size = 17610 }, -] - -[[package]] -name = "setuptools" -version = "82.0.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4f/db/cfac1baf10650ab4d1c111714410d2fbb77ac5a616db26775db562c8fab2/setuptools-82.0.1.tar.gz", hash = "sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9", size = 1152316 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl", hash = "sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb", size = 1006223 }, -] - -[[package]] -name = "six" -version = "1.17.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 }, -] - -[[package]] -name = "snowballstemmer" -version = "3.0.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/75/a7/9810d872919697c9d01295633f5d574fb416d47e535f258272ca1f01f447/snowballstemmer-3.0.1.tar.gz", hash = "sha256:6d5eeeec8e9f84d4d56b847692bacf79bc2c8e90c7f80ca4444ff8b6f2e52895", size = 105575 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl", hash = "sha256:6cd7b3897da8d6c9ffb968a6781fa6532dce9c3618a4b127d920dab764a19064", size = 103274 }, -] - -[[package]] -name = "soupsieve" -version = "2.8.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7b/ae/2d9c981590ed9999a0d91755b47fc74f74de286b0f5cee14c9269041e6c4/soupsieve-2.8.3.tar.gz", hash = "sha256:3267f1eeea4251fb42728b6dfb746edc9acaffc4a45b27e19450b676586e8349", size = 118627 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl", hash = "sha256:ed64f2ba4eebeab06cc4962affce381647455978ffc1e36bb79a545b91f45a95", size = 37016 }, -] - -[[package]] -name = "sphinx" -version = "7.4.7" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "alabaster", version = "0.7.16", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "babel", marker = "python_full_version < '3.10'" }, - { name = "colorama", marker = "python_full_version < '3.10' and sys_platform == 'win32'" }, - { name = "docutils", version = "0.21.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "imagesize", version = "1.5.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, - { name = "jinja2", marker = "python_full_version < '3.10'" }, - { name = "packaging", marker = "python_full_version < '3.10'" }, - { name = "pygments", marker = "python_full_version < '3.10'" }, - { name = "requests", version = "2.32.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "snowballstemmer", marker = "python_full_version < '3.10'" }, - { name = "sphinxcontrib-applehelp", marker = "python_full_version < '3.10'" }, - { name = "sphinxcontrib-devhelp", marker = "python_full_version < '3.10'" }, - { name = "sphinxcontrib-htmlhelp", marker = "python_full_version < '3.10'" }, - { name = "sphinxcontrib-jsmath", marker = "python_full_version < '3.10'" }, - { name = "sphinxcontrib-qthelp", marker = "python_full_version < '3.10'" }, - { name = "sphinxcontrib-serializinghtml", marker = "python_full_version < '3.10'" }, - { name = "tomli", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/5b/be/50e50cb4f2eff47df05673d361095cafd95521d2a22521b920c67a372dcb/sphinx-7.4.7.tar.gz", hash = "sha256:242f92a7ea7e6c5b406fdc2615413890ba9f699114a9c09192d7dfead2ee9cfe", size = 8067911 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0d/ef/153f6803c5d5f8917dbb7f7fcf6d34a871ede3296fa89c2c703f5f8a6c8e/sphinx-7.4.7-py3-none-any.whl", hash = "sha256:c2419e2135d11f1951cd994d6eb18a1835bd8fdd8429f9ca375dc1f3281bd239", size = 3401624 }, -] - -[[package]] -name = "sphinx" -version = "8.1.3" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version == '3.10.*'", -] -dependencies = [ - { name = "alabaster", version = "1.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, - { name = "babel", marker = "python_full_version == '3.10.*'" }, - { name = "colorama", marker = "python_full_version == '3.10.*' and sys_platform == 'win32'" }, - { name = "docutils", version = "0.21.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, - { name = "imagesize", version = "2.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, - { name = "jinja2", marker = "python_full_version == '3.10.*'" }, - { name = "packaging", marker = "python_full_version == '3.10.*'" }, - { name = "pygments", marker = "python_full_version == '3.10.*'" }, - { name = "requests", version = "2.33.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, - { name = "snowballstemmer", marker = "python_full_version == '3.10.*'" }, - { name = "sphinxcontrib-applehelp", marker = "python_full_version == '3.10.*'" }, - { name = "sphinxcontrib-devhelp", marker = "python_full_version == '3.10.*'" }, - { name = "sphinxcontrib-htmlhelp", marker = "python_full_version == '3.10.*'" }, - { name = "sphinxcontrib-jsmath", marker = "python_full_version == '3.10.*'" }, - { name = "sphinxcontrib-qthelp", marker = "python_full_version == '3.10.*'" }, - { name = "sphinxcontrib-serializinghtml", marker = "python_full_version == '3.10.*'" }, - { name = "tomli", marker = "python_full_version == '3.10.*'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/be0b61178fe2cdcb67e2a92fc9ebb488e3c51c4f74a36a7824c0adf23425/sphinx-8.1.3.tar.gz", hash = "sha256:43c1911eecb0d3e161ad78611bc905d1ad0e523e4ddc202a58a821773dc4c927", size = 8184611 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/26/60/1ddff83a56d33aaf6f10ec8ce84b4c007d9368b21008876fceda7e7381ef/sphinx-8.1.3-py3-none-any.whl", hash = "sha256:09719015511837b76bf6e03e42eb7595ac8c2e41eeb9c29c5b755c6b677992a2", size = 3487125 }, -] - -[[package]] -name = "sphinx" -version = "9.0.4" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version == '3.11.*'", -] -dependencies = [ - { name = "alabaster", version = "1.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, - { name = "babel", marker = "python_full_version == '3.11.*'" }, - { name = "colorama", marker = "python_full_version == '3.11.*' and sys_platform == 'win32'" }, - { name = "docutils", version = "0.22.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, - { name = "imagesize", version = "2.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, - { name = "jinja2", marker = "python_full_version == '3.11.*'" }, - { name = "packaging", marker = "python_full_version == '3.11.*'" }, - { name = "pygments", marker = "python_full_version == '3.11.*'" }, - { name = "requests", version = "2.33.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, - { name = "roman-numerals", marker = "python_full_version == '3.11.*'" }, - { name = "snowballstemmer", marker = "python_full_version == '3.11.*'" }, - { name = "sphinxcontrib-applehelp", marker = "python_full_version == '3.11.*'" }, - { name = "sphinxcontrib-devhelp", marker = "python_full_version == '3.11.*'" }, - { name = "sphinxcontrib-htmlhelp", marker = "python_full_version == '3.11.*'" }, - { name = "sphinxcontrib-jsmath", marker = "python_full_version == '3.11.*'" }, - { name = "sphinxcontrib-qthelp", marker = "python_full_version == '3.11.*'" }, - { name = "sphinxcontrib-serializinghtml", marker = "python_full_version == '3.11.*'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/42/50/a8c6ccc36d5eacdfd7913ddccd15a9cee03ecafc5ee2bc40e1f168d85022/sphinx-9.0.4.tar.gz", hash = "sha256:594ef59d042972abbc581d8baa577404abe4e6c3b04ef61bd7fc2acbd51f3fa3", size = 8710502 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl", hash = "sha256:5bebc595a5e943ea248b99c13814c1c5e10b3ece718976824ffa7959ff95fffb", size = 3917713 }, -] - -[[package]] -name = "sphinx" -version = "9.1.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", -] -dependencies = [ - { name = "alabaster", version = "1.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, - { name = "babel", marker = "python_full_version >= '3.12'" }, - { name = "colorama", marker = "python_full_version >= '3.12' and sys_platform == 'win32'" }, - { name = "docutils", version = "0.22.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, - { name = "imagesize", version = "2.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, - { name = "jinja2", marker = "python_full_version >= '3.12'" }, - { name = "packaging", marker = "python_full_version >= '3.12'" }, - { name = "pygments", marker = "python_full_version >= '3.12'" }, - { name = "requests", version = "2.33.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, - { name = "roman-numerals", marker = "python_full_version >= '3.12'" }, - { name = "snowballstemmer", marker = "python_full_version >= '3.12'" }, - { name = "sphinxcontrib-applehelp", marker = "python_full_version >= '3.12'" }, - { name = "sphinxcontrib-devhelp", marker = "python_full_version >= '3.12'" }, - { name = "sphinxcontrib-htmlhelp", marker = "python_full_version >= '3.12'" }, - { name = "sphinxcontrib-jsmath", marker = "python_full_version >= '3.12'" }, - { name = "sphinxcontrib-qthelp", marker = "python_full_version >= '3.12'" }, - { name = "sphinxcontrib-serializinghtml", marker = "python_full_version >= '3.12'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/cd/bd/f08eb0f4eed5c83f1ba2a3bd18f7745a2b1525fad70660a1c00224ec468a/sphinx-9.1.0.tar.gz", hash = "sha256:7741722357dd75f8190766926071fed3bdc211c74dd2d7d4df5404da95930ddb", size = 8718324 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl", hash = "sha256:c84fdd4e782504495fe4f2c0b3413d6c2bf388589bb352d439b2a3bb99991978", size = 3921742 }, -] - -[[package]] -name = "sphinxcontrib-applehelp" -version = "2.0.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ba/6e/b837e84a1a704953c62ef8776d45c3e8d759876b4a84fe14eba2859106fe/sphinxcontrib_applehelp-2.0.0.tar.gz", hash = "sha256:2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1", size = 20053 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl", hash = "sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5", size = 119300 }, -] - -[[package]] -name = "sphinxcontrib-devhelp" -version = "2.0.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f6/d2/5beee64d3e4e747f316bae86b55943f51e82bb86ecd325883ef65741e7da/sphinxcontrib_devhelp-2.0.0.tar.gz", hash = "sha256:411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad", size = 12967 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl", hash = "sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2", size = 82530 }, -] - -[[package]] -name = "sphinxcontrib-htmlhelp" -version = "2.1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/93/983afd9aa001e5201eab16b5a444ed5b9b0a7a010541e0ddfbbfd0b2470c/sphinxcontrib_htmlhelp-2.1.0.tar.gz", hash = "sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9", size = 22617 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", hash = "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8", size = 98705 }, -] - -[[package]] -name = "sphinxcontrib-jsmath" -version = "1.0.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b2/e8/9ed3830aeed71f17c026a07a5097edcf44b692850ef215b161b8ad875729/sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8", size = 5787 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178", size = 5071 }, -] - -[[package]] -name = "sphinxcontrib-qthelp" -version = "2.0.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/68/bc/9104308fc285eb3e0b31b67688235db556cd5b0ef31d96f30e45f2e51cae/sphinxcontrib_qthelp-2.0.0.tar.gz", hash = "sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab", size = 17165 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl", hash = "sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb", size = 88743 }, -] - -[[package]] -name = "sphinxcontrib-serializinghtml" -version = "2.0.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3b/44/6716b257b0aa6bfd51a1b31665d1c205fb12cb5ad56de752dfa15657de2f/sphinxcontrib_serializinghtml-2.0.0.tar.gz", hash = "sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d", size = 16080 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", hash = "sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331", size = 92072 }, -] - -[[package]] -name = "stack-data" -version = "0.6.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "asttokens" }, - { name = "executing" }, - { name = "pure-eval" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521 }, -] - -[[package]] -name = "terminado" -version = "0.18.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "ptyprocess", marker = "os_name != 'nt'" }, - { name = "pywinpty", marker = "os_name == 'nt'" }, - { name = "tornado" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/8a/11/965c6fd8e5cc254f1fe142d547387da17a8ebfd75a3455f637c663fb38a0/terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e", size = 32701 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6a/9e/2064975477fdc887e47ad42157e214526dcad8f317a948dee17e1659a62f/terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0", size = 14154 }, -] - -[[package]] -name = "tinycss2" -version = "1.4.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "webencodings" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/7a/fd/7a5ee21fd08ff70d3d33a5781c255cbe779659bd03278feb98b19ee550f4/tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7", size = 87085 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289", size = 26610 }, -] - -[[package]] -name = "tomli" -version = "2.4.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f4/11/db3d5885d8528263d8adc260bb2d28ebf1270b96e98f0e0268d32b8d9900/tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30", size = 154704 }, - { url = "https://files.pythonhosted.org/packages/6d/f7/675db52c7e46064a9aa928885a9b20f4124ecb9bc2e1ce74c9106648d202/tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a", size = 149454 }, - { url = "https://files.pythonhosted.org/packages/61/71/81c50943cf953efa35bce7646caab3cf457a7d8c030b27cfb40d7235f9ee/tomli-2.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076", size = 237561 }, - { url = "https://files.pythonhosted.org/packages/48/c1/f41d9cb618acccca7df82aaf682f9b49013c9397212cb9f53219e3abac37/tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9", size = 243824 }, - { url = "https://files.pythonhosted.org/packages/22/e4/5a816ecdd1f8ca51fb756ef684b90f2780afc52fc67f987e3c61d800a46d/tomli-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c", size = 242227 }, - { url = "https://files.pythonhosted.org/packages/6b/49/2b2a0ef529aa6eec245d25f0c703e020a73955ad7edf73e7f54ddc608aa5/tomli-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc", size = 247859 }, - { url = "https://files.pythonhosted.org/packages/83/bd/6c1a630eaca337e1e78c5903104f831bda934c426f9231429396ce3c3467/tomli-2.4.1-cp311-cp311-win32.whl", hash = "sha256:ff2983983d34813c1aeb0fa89091e76c3a22889ee83ab27c5eeb45100560c049", size = 97204 }, - { url = "https://files.pythonhosted.org/packages/42/59/71461df1a885647e10b6bb7802d0b8e66480c61f3f43079e0dcd315b3954/tomli-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e", size = 108084 }, - { url = "https://files.pythonhosted.org/packages/b8/83/dceca96142499c069475b790e7913b1044c1a4337e700751f48ed723f883/tomli-2.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:c2541745709bad0264b7d4705ad453b76ccd191e64aa6f0fc66b69a293a45ece", size = 95285 }, - { url = "https://files.pythonhosted.org/packages/c1/ba/42f134a3fe2b370f555f44b1d72feebb94debcab01676bf918d0cb70e9aa/tomli-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c742f741d58a28940ce01d58f0ab2ea3ced8b12402f162f4d534dfe18ba1cd6a", size = 155924 }, - { url = "https://files.pythonhosted.org/packages/dc/c7/62d7a17c26487ade21c5422b646110f2162f1fcc95980ef7f63e73c68f14/tomli-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7f86fd587c4ed9dd76f318225e7d9b29cfc5a9d43de44e5754db8d1128487085", size = 150018 }, - { url = "https://files.pythonhosted.org/packages/5c/05/79d13d7c15f13bdef410bdd49a6485b1c37d28968314eabee452c22a7fda/tomli-2.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff18e6a727ee0ab0388507b89d1bc6a22b138d1e2fa56d1ad494586d61d2eae9", size = 244948 }, - { url = "https://files.pythonhosted.org/packages/10/90/d62ce007a1c80d0b2c93e02cab211224756240884751b94ca72df8a875ca/tomli-2.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:136443dbd7e1dee43c68ac2694fde36b2849865fa258d39bf822c10e8068eac5", size = 253341 }, - { url = "https://files.pythonhosted.org/packages/1a/7e/caf6496d60152ad4ed09282c1885cca4eea150bfd007da84aea07bcc0a3e/tomli-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e262d41726bc187e69af7825504c933b6794dc3fbd5945e41a79bb14c31f585", size = 248159 }, - { url = "https://files.pythonhosted.org/packages/99/e7/c6f69c3120de34bbd882c6fba7975f3d7a746e9218e56ab46a1bc4b42552/tomli-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5cb41aa38891e073ee49d55fbc7839cfdb2bc0e600add13874d048c94aadddd1", size = 253290 }, - { url = "https://files.pythonhosted.org/packages/d6/2f/4a3c322f22c5c66c4b836ec58211641a4067364f5dcdd7b974b4c5da300c/tomli-2.4.1-cp312-cp312-win32.whl", hash = "sha256:da25dc3563bff5965356133435b757a795a17b17d01dbc0f42fb32447ddfd917", size = 98141 }, - { url = "https://files.pythonhosted.org/packages/24/22/4daacd05391b92c55759d55eaee21e1dfaea86ce5c571f10083360adf534/tomli-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:52c8ef851d9a240f11a88c003eacb03c31fc1c9c4ec64a99a0f922b93874fda9", size = 108847 }, - { url = "https://files.pythonhosted.org/packages/68/fd/70e768887666ddd9e9f5d85129e84910f2db2796f9096aa02b721a53098d/tomli-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:f758f1b9299d059cc3f6546ae2af89670cb1c4d48ea29c3cacc4fe7de3058257", size = 95088 }, - { url = "https://files.pythonhosted.org/packages/07/06/b823a7e818c756d9a7123ba2cda7d07bc2dd32835648d1a7b7b7a05d848d/tomli-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:36d2bd2ad5fb9eaddba5226aa02c8ec3fa4f192631e347b3ed28186d43be6b54", size = 155866 }, - { url = "https://files.pythonhosted.org/packages/14/6f/12645cf7f08e1a20c7eb8c297c6f11d31c1b50f316a7e7e1e1de6e2e7b7e/tomli-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eb0dc4e38e6a1fd579e5d50369aa2e10acfc9cace504579b2faabb478e76941a", size = 149887 }, - { url = "https://files.pythonhosted.org/packages/5c/e0/90637574e5e7212c09099c67ad349b04ec4d6020324539297b634a0192b0/tomli-2.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7f2c7f2b9ca6bdeef8f0fa897f8e05085923eb091721675170254cbc5b02897", size = 243704 }, - { url = "https://files.pythonhosted.org/packages/10/8f/d3ddb16c5a4befdf31a23307f72828686ab2096f068eaf56631e136c1fdd/tomli-2.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3c6818a1a86dd6dca7ddcaaf76947d5ba31aecc28cb1b67009a5877c9a64f3f", size = 251628 }, - { url = "https://files.pythonhosted.org/packages/e3/f1/dbeeb9116715abee2485bf0a12d07a8f31af94d71608c171c45f64c0469d/tomli-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d312ef37c91508b0ab2cee7da26ec0b3ed2f03ce12bd87a588d771ae15dcf82d", size = 247180 }, - { url = "https://files.pythonhosted.org/packages/d3/74/16336ffd19ed4da28a70959f92f506233bd7cfc2332b20bdb01591e8b1d1/tomli-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51529d40e3ca50046d7606fa99ce3956a617f9b36380da3b7f0dd3dd28e68cb5", size = 251674 }, - { url = "https://files.pythonhosted.org/packages/16/f9/229fa3434c590ddf6c0aa9af64d3af4b752540686cace29e6281e3458469/tomli-2.4.1-cp313-cp313-win32.whl", hash = "sha256:2190f2e9dd7508d2a90ded5ed369255980a1bcdd58e52f7fe24b8162bf9fedbd", size = 97976 }, - { url = "https://files.pythonhosted.org/packages/6a/1e/71dfd96bcc1c775420cb8befe7a9d35f2e5b1309798f009dca17b7708c1e/tomli-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d65a2fbf9d2f8352685bc1364177ee3923d6baf5e7f43ea4959d7d8bc326a36", size = 108755 }, - { url = "https://files.pythonhosted.org/packages/83/7a/d34f422a021d62420b78f5c538e5b102f62bea616d1d75a13f0a88acb04a/tomli-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:4b605484e43cdc43f0954ddae319fb75f04cc10dd80d830540060ee7cd0243cd", size = 95265 }, - { url = "https://files.pythonhosted.org/packages/3c/fb/9a5c8d27dbab540869f7c1f8eb0abb3244189ce780ba9cd73f3770662072/tomli-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fd0409a3653af6c147209d267a0e4243f0ae46b011aa978b1080359fddc9b6cf", size = 155726 }, - { url = "https://files.pythonhosted.org/packages/62/05/d2f816630cc771ad836af54f5001f47a6f611d2d39535364f148b6a92d6b/tomli-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a120733b01c45e9a0c34aeef92bf0cf1d56cfe81ed9d47d562f9ed591a9828ac", size = 149859 }, - { url = "https://files.pythonhosted.org/packages/ce/48/66341bdb858ad9bd0ceab5a86f90eddab127cf8b046418009f2125630ecb/tomli-2.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:559db847dc486944896521f68d8190be1c9e719fced785720d2216fe7022b662", size = 244713 }, - { url = "https://files.pythonhosted.org/packages/df/6d/c5fad00d82b3c7a3ab6189bd4b10e60466f22cfe8a08a9394185c8a8111c/tomli-2.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01f520d4f53ef97964a240a035ec2a869fe1a37dde002b57ebc4417a27ccd853", size = 252084 }, - { url = "https://files.pythonhosted.org/packages/00/71/3a69e86f3eafe8c7a59d008d245888051005bd657760e96d5fbfb0b740c2/tomli-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7f94b27a62cfad8496c8d2513e1a222dd446f095fca8987fceef261225538a15", size = 247973 }, - { url = "https://files.pythonhosted.org/packages/67/50/361e986652847fec4bd5e4a0208752fbe64689c603c7ae5ea7cb16b1c0ca/tomli-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ede3e6487c5ef5d28634ba3f31f989030ad6af71edfb0055cbbd14189ff240ba", size = 256223 }, - { url = "https://files.pythonhosted.org/packages/8c/9a/b4173689a9203472e5467217e0154b00e260621caa227b6fa01feab16998/tomli-2.4.1-cp314-cp314-win32.whl", hash = "sha256:3d48a93ee1c9b79c04bb38772ee1b64dcf18ff43085896ea460ca8dec96f35f6", size = 98973 }, - { url = "https://files.pythonhosted.org/packages/14/58/640ac93bf230cd27d002462c9af0d837779f8773bc03dee06b5835208214/tomli-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:88dceee75c2c63af144e456745e10101eb67361050196b0b6af5d717254dddf7", size = 109082 }, - { url = "https://files.pythonhosted.org/packages/d5/2f/702d5e05b227401c1068f0d386d79a589bb12bf64c3d2c72ce0631e3bc49/tomli-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:b8c198f8c1805dc42708689ed6864951fd2494f924149d3e4bce7710f8eb5232", size = 96490 }, - { url = "https://files.pythonhosted.org/packages/45/4b/b877b05c8ba62927d9865dd980e34a755de541eb65fffba52b4cc495d4d2/tomli-2.4.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d4d8fe59808a54658fcc0160ecfb1b30f9089906c50b23bcb4c69eddc19ec2b4", size = 164263 }, - { url = "https://files.pythonhosted.org/packages/24/79/6ab420d37a270b89f7195dec5448f79400d9e9c1826df982f3f8e97b24fd/tomli-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7008df2e7655c495dd12d2a4ad038ff878d4ca4b81fccaf82b714e07eae4402c", size = 160736 }, - { url = "https://files.pythonhosted.org/packages/02/e0/3630057d8eb170310785723ed5adcdfb7d50cb7e6455f85ba8a3deed642b/tomli-2.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d8591993e228b0c930c4bb0db464bdad97b3289fb981255d6c9a41aedc84b2d", size = 270717 }, - { url = "https://files.pythonhosted.org/packages/7a/b4/1613716072e544d1a7891f548d8f9ec6ce2faf42ca65acae01d76ea06bb0/tomli-2.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:734e20b57ba95624ecf1841e72b53f6e186355e216e5412de414e3c51e5e3c41", size = 278461 }, - { url = "https://files.pythonhosted.org/packages/05/38/30f541baf6a3f6df77b3df16b01ba319221389e2da59427e221ef417ac0c/tomli-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8a650c2dbafa08d42e51ba0b62740dae4ecb9338eefa093aa5c78ceb546fcd5c", size = 274855 }, - { url = "https://files.pythonhosted.org/packages/77/a3/ec9dd4fd2c38e98de34223b995a3b34813e6bdadf86c75314c928350ed14/tomli-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:504aa796fe0569bb43171066009ead363de03675276d2d121ac1a4572397870f", size = 283144 }, - { url = "https://files.pythonhosted.org/packages/ef/be/605a6261cac79fba2ec0c9827e986e00323a1945700969b8ee0b30d85453/tomli-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:b1d22e6e9387bf4739fbe23bfa80e93f6b0373a7f1b96c6227c32bef95a4d7a8", size = 108683 }, - { url = "https://files.pythonhosted.org/packages/12/64/da524626d3b9cc40c168a13da8335fe1c51be12c0a63685cc6db7308daae/tomli-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2c1c351919aca02858f740c6d33adea0c5deea37f9ecca1cc1ef9e884a619d26", size = 121196 }, - { url = "https://files.pythonhosted.org/packages/5a/cd/e80b62269fc78fc36c9af5a6b89c835baa8af28ff5ad28c7028d60860320/tomli-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:eab21f45c7f66c13f2a9e0e1535309cee140182a9cdae1e041d02e47291e8396", size = 100393 }, - { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583 }, -] - -[[package]] -name = "tomli-w" -version = "1.2.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/19/75/241269d1da26b624c0d5e110e8149093c759b7a286138f4efd61a60e75fe/tomli_w-1.2.0.tar.gz", hash = "sha256:2dd14fac5a47c27be9cd4c976af5a12d87fb1f0b4512f81d69cce3b35ae25021", size = 7184 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c7/18/c86eb8e0202e32dd3df50d43d7ff9854f8e0603945ff398974c1d91ac1ef/tomli_w-1.2.0-py3-none-any.whl", hash = "sha256:188306098d013b691fcadc011abd66727d3c414c571bb01b1a174ba8c983cf90", size = 6675 }, -] - -[[package]] -name = "tornado" -version = "6.5.5" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f8/f1/3173dfa4a18db4a9b03e5d55325559dab51ee653763bb8745a75af491286/tornado-6.5.5.tar.gz", hash = "sha256:192b8f3ea91bd7f1f50c06955416ed76c6b72f96779b962f07f911b91e8d30e9", size = 516006 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/59/8c/77f5097695f4dd8255ecbd08b2a1ed8ba8b953d337804dd7080f199e12bf/tornado-6.5.5-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:487dc9cc380e29f58c7ab88f9e27cdeef04b2140862e5076a66fb6bb68bb1bfa", size = 445983 }, - { url = "https://files.pythonhosted.org/packages/ab/5e/7625b76cd10f98f1516c36ce0346de62061156352353ef2da44e5c21523c/tornado-6.5.5-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:65a7f1d46d4bb41df1ac99f5fcb685fb25c7e61613742d5108b010975a9a6521", size = 444246 }, - { url = "https://files.pythonhosted.org/packages/b2/04/7b5705d5b3c0fab088f434f9c83edac1573830ca49ccf29fb83bf7178eec/tornado-6.5.5-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e74c92e8e65086b338fd56333fb9a68b9f6f2fe7ad532645a290a464bcf46be5", size = 447229 }, - { url = "https://files.pythonhosted.org/packages/34/01/74e034a30ef59afb4097ef8659515e96a39d910b712a89af76f5e4e1f93c/tornado-6.5.5-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:435319e9e340276428bbdb4e7fa732c2d399386d1de5686cb331ec8eee754f07", size = 448192 }, - { url = "https://files.pythonhosted.org/packages/be/00/fe9e02c5a96429fce1a1d15a517f5d8444f9c412e0bb9eadfbe3b0fc55bf/tornado-6.5.5-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3f54aa540bdbfee7b9eb268ead60e7d199de5021facd276819c193c0fb28ea4e", size = 448039 }, - { url = "https://files.pythonhosted.org/packages/82/9e/656ee4cec0398b1d18d0f1eb6372c41c6b889722641d84948351ae19556d/tornado-6.5.5-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:36abed1754faeb80fbd6e64db2758091e1320f6bba74a4cf8c09cd18ccce8aca", size = 447445 }, - { url = "https://files.pythonhosted.org/packages/5a/76/4921c00511f88af86a33de770d64141170f1cfd9c00311aea689949e274e/tornado-6.5.5-cp39-abi3-win32.whl", hash = "sha256:dd3eafaaeec1c7f2f8fdcd5f964e8907ad788fe8a5a32c4426fbbdda621223b7", size = 448582 }, - { url = "https://files.pythonhosted.org/packages/2c/23/f6c6112a04d28eed765e374435fb1a9198f73e1ec4b4024184f21faeb1ad/tornado-6.5.5-cp39-abi3-win_amd64.whl", hash = "sha256:6443a794ba961a9f619b1ae926a2e900ac20c34483eea67be4ed8f1e58d3ef7b", size = 448990 }, - { url = "https://files.pythonhosted.org/packages/b7/c8/876602cbc96469911f0939f703453c1157b0c826ecb05bdd32e023397d4e/tornado-6.5.5-cp39-abi3-win_arm64.whl", hash = "sha256:2c9a876e094109333f888539ddb2de4361743e5d21eece20688e3e351e4990a6", size = 448016 }, -] - -[[package]] -name = "tox" -version = "4.30.3" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "cachetools", version = "6.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "chardet", marker = "python_full_version < '3.10'" }, - { name = "colorama", marker = "python_full_version < '3.10'" }, - { name = "filelock", version = "3.19.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "packaging", marker = "python_full_version < '3.10'" }, - { name = "platformdirs", version = "4.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "pluggy", marker = "python_full_version < '3.10'" }, - { name = "pyproject-api", version = "1.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "tomli", marker = "python_full_version < '3.10'" }, - { name = "typing-extensions", marker = "python_full_version < '3.10'" }, - { name = "virtualenv", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/51/b2/cee55172e5e10ce030b087cd3ac06641e47d08a3dc8d76c17b157dba7558/tox-4.30.3.tar.gz", hash = "sha256:f3dd0735f1cd4e8fbea5a3661b77f517456b5f0031a6256432533900e34b90bf", size = 202799 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e2/e4/8bb9ce952820df4165eb34610af347665d6cb436898a234db9d84d093ce6/tox-4.30.3-py3-none-any.whl", hash = "sha256:a9f17b4b2d0f74fe0d76207236925a119095011e5c2e661a133115a8061178c9", size = 175512 }, -] - -[[package]] -name = "tox" -version = "4.52.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] -dependencies = [ - { name = "cachetools", version = "7.0.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "colorama", marker = "python_full_version >= '3.10'" }, - { name = "filelock", version = "3.25.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "packaging", marker = "python_full_version >= '3.10'" }, - { name = "platformdirs", version = "4.9.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "pluggy", marker = "python_full_version >= '3.10'" }, - { name = "pyproject-api", version = "1.10.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "python-discovery", version = "1.2.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "tomli", marker = "python_full_version == '3.10.*'" }, - { name = "tomli-w", marker = "python_full_version >= '3.10'" }, - { name = "typing-extensions", marker = "python_full_version == '3.10.*'" }, - { name = "virtualenv", marker = "python_full_version >= '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/bc/fb/d7d634eb513f741ffd40f4c262b7feea19d5c616882eb554045c620670a6/tox-4.52.1.tar.gz", hash = "sha256:297e71ea0ae4ef3acc45cb5fdf080b74537e6ecb5eea7d4646fa7322ca10473e", size = 273730 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3a/70/0d4fb1eefa05a24ca2f58272b4c4718090dd5ed7e38b54b9a7e757bfafc8/tox-4.52.1-py3-none-any.whl", hash = "sha256:3c4eef0a64f319df0b67dacdb7edcfeda87c8cc722581af5d98dd54f3ffdd8ef", size = 212179 }, -] - -[[package]] -name = "traitlets" -version = "5.14.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359 }, -] - -[[package]] -name = "typing-extensions" -version = "4.15.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614 }, -] - -[[package]] -name = "tzdata" -version = "2025.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5e/a7/c202b344c5ca7daf398f3b8a477eeb205cf3b6f32e7ec3a6bac0629ca975/tzdata-2025.3.tar.gz", hash = "sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7", size = 196772 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl", hash = "sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1", size = 348521 }, -] - -[[package]] -name = "uri-template" -version = "1.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/31/c7/0336f2bd0bcbada6ccef7aaa25e443c118a704f828a0620c6fa0207c1b64/uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7", size = 21678 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363", size = 11140 }, -] - -[[package]] -name = "urllib3" -version = "2.6.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 435556 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584 }, -] - -[[package]] -name = "virtualenv" -version = "21.2.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "distlib" }, - { name = "filelock", version = "3.19.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "filelock", version = "3.25.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "platformdirs", version = "4.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "platformdirs", version = "4.9.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "python-discovery", version = "1.2.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "python-discovery", version = "1.2.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/aa/92/58199fe10049f9703c2666e809c4f686c54ef0a68b0f6afccf518c0b1eb9/virtualenv-21.2.0.tar.gz", hash = "sha256:1720dc3a62ef5b443092e3f499228599045d7fea4c79199770499df8becf9098", size = 5840618 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl", hash = "sha256:1bd755b504931164a5a496d217c014d098426cddc79363ad66ac78125f9d908f", size = 5825084 }, -] - -[[package]] -name = "wcwidth" -version = "0.6.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/35/a2/8e3becb46433538a38726c948d3399905a4c7cabd0df578ede5dc51f0ec2/wcwidth-0.6.0.tar.gz", hash = "sha256:cdc4e4262d6ef9a1a57e018384cbeb1208d8abbc64176027e2c2455c81313159", size = 159684 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/68/5a/199c59e0a824a3db2b89c5d2dade7ab5f9624dbf6448dc291b46d5ec94d3/wcwidth-0.6.0-py3-none-any.whl", hash = "sha256:1a3a1e510b553315f8e146c54764f4fb6264ffad731b3d78088cdb1478ffbdad", size = 94189 }, -] - -[[package]] -name = "webcolors" -version = "24.11.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/7b/29/061ec845fb58521848f3739e466efd8250b4b7b98c1b6c5bf4d40b419b7e/webcolors-24.11.1.tar.gz", hash = "sha256:ecb3d768f32202af770477b8b65f318fa4f566c22948673a977b00d589dd80f6", size = 45064 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/60/e8/c0e05e4684d13459f93d312077a9a2efbe04d59c393bc2b8802248c908d4/webcolors-24.11.1-py3-none-any.whl", hash = "sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9", size = 14934 }, -] - -[[package]] -name = "webcolors" -version = "25.10.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] -sdist = { url = "https://files.pythonhosted.org/packages/1d/7a/eb316761ec35664ea5174709a68bbd3389de60d4a1ebab8808bfc264ed67/webcolors-25.10.0.tar.gz", hash = "sha256:62abae86504f66d0f6364c2a8520de4a0c47b80c03fc3a5f1815fedbef7c19bf", size = 53491 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl", hash = "sha256:032c727334856fc0b968f63daa252a1ac93d33db2f5267756623c210e57a4f1d", size = 14905 }, -] - -[[package]] -name = "webencodings" -version = "0.5.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0b/02/ae6ceac1baeda530866a85075641cec12989bd8d31af6d5ab4a3e8c92f47/webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923", size = 9721 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", size = 11774 }, -] - -[[package]] -name = "websocket-client" -version = "1.9.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2c/41/aa4bf9664e4cda14c3b39865b12251e8e7d239f4cd0e3cc1b6c2ccde25c1/websocket_client-1.9.0.tar.gz", hash = "sha256:9e813624b6eb619999a97dc7958469217c3176312b3a16a4bd1bc7e08a46ec98", size = 70576 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/34/db/b10e48aa8fff7407e67470363eac595018441cf32d5e1001567a7aeba5d2/websocket_client-1.9.0-py3-none-any.whl", hash = "sha256:af248a825037ef591efbf6ed20cc5faa03d3b47b9e5a2230a529eeee1c1fc3ef", size = 82616 }, -] - -[[package]] -name = "zipp" -version = "3.23.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e3/02/0f2892c661036d50ede074e376733dca2ae7c6eb617489437771209d4180/zipp-3.23.0.tar.gz", hash = "sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166", size = 25547 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl", hash = "sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e", size = 10276 }, -] From 68a8aab97ac584b9d217375cc5048e3358658c2d Mon Sep 17 00:00:00 2001 From: Fabian Hommel Date: Tue, 14 Apr 2026 12:24:56 +0200 Subject: [PATCH 74/87] Repaired uv.lock --- uv.lock | 3853 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 3853 insertions(+) create mode 100644 uv.lock diff --git a/uv.lock b/uv.lock new file mode 100644 index 0000000..cc10495 --- /dev/null +++ b/uv.lock @@ -0,0 +1,3853 @@ +version = 1 +revision = 1 +requires-python = ">=3.9" +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", + "python_full_version < '3.10'", +] + +[[package]] +name = "alabaster" +version = "0.7.16" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/c9/3e/13dd8e5ed9094e734ac430b5d0eb4f2bb001708a8b7856cbf8e084e001ba/alabaster-0.7.16.tar.gz", hash = "sha256:75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65", size = 23776 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/34/d4e1c02d3bee589efb5dfa17f88ea08bdb3e3eac12bc475462aec52ed223/alabaster-0.7.16-py3-none-any.whl", hash = "sha256:b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92", size = 13511 }, +] + +[[package]] +name = "alabaster" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/a6/f8/d9c74d0daf3f742840fd818d69cfae176fa332022fd44e3469487d5a9420/alabaster-1.0.0.tar.gz", hash = "sha256:c00dca57bca26fa62a6d7d0a9fcce65f3e026e9bfe33e9c538fd3fbb2144fd9e", size = 24210 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl", hash = "sha256:fc6786402dc3fcb2de3cabd5fe455a2db534b371124f1f21de8731783dec828b", size = 13929 }, +] + +[[package]] +name = "anyio" +version = "4.12.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "exceptiongroup", marker = "python_full_version < '3.10'" }, + { name = "idna", marker = "python_full_version < '3.10'" }, + { name = "typing-extensions", marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/96/f0/5eb65b2bb0d09ac6776f2eb54adee6abe8228ea05b20a5ad0e4945de8aac/anyio-4.12.1.tar.gz", hash = "sha256:41cfcc3a4c85d3f05c932da7c26d0201ac36f72abd4435ba90d0464a3ffed703", size = 228685 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl", hash = "sha256:d405828884fc140aa80a3c667b8beed277f1dfedec42ba031bd6ac3db606ab6c", size = 113592 }, +] + +[[package]] +name = "anyio" +version = "4.13.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "exceptiongroup", marker = "python_full_version == '3.10.*'" }, + { name = "idna", marker = "python_full_version >= '3.10'" }, + { name = "typing-extensions", marker = "python_full_version >= '3.10' and python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/14/2c5dd9f512b66549ae92767a9c7b330ae88e1932ca57876909410251fe13/anyio-4.13.0.tar.gz", hash = "sha256:334b70e641fd2221c1505b3890c69882fe4a2df910cba14d97019b90b24439dc", size = 231622 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/da/42/e921fccf5015463e32a3cf6ee7f980a6ed0f395ceeaa45060b61d86486c2/anyio-4.13.0-py3-none-any.whl", hash = "sha256:08b310f9e24a9594186fd75b4f73f4a4152069e3853f1ed8bfbf58369f4ad708", size = 114353 }, +] + +[[package]] +name = "appnope" +version = "0.1.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321 }, +] + +[[package]] +name = "argon2-cffi" +version = "25.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "argon2-cffi-bindings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0e/89/ce5af8a7d472a67cc819d5d998aa8c82c5d860608c4db9f46f1162d7dab9/argon2_cffi-25.1.0.tar.gz", hash = "sha256:694ae5cc8a42f4c4e2bf2ca0e64e51e23a040c6a517a85074683d3959e1346c1", size = 45706 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4f/d3/a8b22fa575b297cd6e3e3b0155c7e25db170edf1c74783d6a31a2490b8d9/argon2_cffi-25.1.0-py3-none-any.whl", hash = "sha256:fdc8b074db390fccb6eb4a3604ae7231f219aa669a2652e0f20e16ba513d5741", size = 14657 }, +] + +[[package]] +name = "argon2-cffi-bindings" +version = "25.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5c/2d/db8af0df73c1cf454f71b2bbe5e356b8c1f8041c979f505b3d3186e520a9/argon2_cffi_bindings-25.1.0.tar.gz", hash = "sha256:b957f3e6ea4d55d820e40ff76f450952807013d361a65d7f28acc0acbf29229d", size = 1783441 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/97/3c0a35f46e52108d4707c44b95cfe2afcafc50800b5450c197454569b776/argon2_cffi_bindings-25.1.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:3d3f05610594151994ca9ccb3c771115bdb4daef161976a266f0dd8aa9996b8f", size = 54393 }, + { url = "https://files.pythonhosted.org/packages/9d/f4/98bbd6ee89febd4f212696f13c03ca302b8552e7dbf9c8efa11ea4a388c3/argon2_cffi_bindings-25.1.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:8b8efee945193e667a396cbc7b4fb7d357297d6234d30a489905d96caabde56b", size = 29328 }, + { url = "https://files.pythonhosted.org/packages/43/24/90a01c0ef12ac91a6be05969f29944643bc1e5e461155ae6559befa8f00b/argon2_cffi_bindings-25.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:3c6702abc36bf3ccba3f802b799505def420a1b7039862014a65db3205967f5a", size = 31269 }, + { url = "https://files.pythonhosted.org/packages/d4/d3/942aa10782b2697eee7af5e12eeff5ebb325ccfb86dd8abda54174e377e4/argon2_cffi_bindings-25.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a1c70058c6ab1e352304ac7e3b52554daadacd8d453c1752e547c76e9c99ac44", size = 86558 }, + { url = "https://files.pythonhosted.org/packages/0d/82/b484f702fec5536e71836fc2dbc8c5267b3f6e78d2d539b4eaa6f0db8bf8/argon2_cffi_bindings-25.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e2fd3bfbff3c5d74fef31a722f729bf93500910db650c925c2d6ef879a7e51cb", size = 92364 }, + { url = "https://files.pythonhosted.org/packages/c9/c1/a606ff83b3f1735f3759ad0f2cd9e038a0ad11a3de3b6c673aa41c24bb7b/argon2_cffi_bindings-25.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c4f9665de60b1b0e99bcd6be4f17d90339698ce954cfd8d9cf4f91c995165a92", size = 85637 }, + { url = "https://files.pythonhosted.org/packages/44/b4/678503f12aceb0262f84fa201f6027ed77d71c5019ae03b399b97caa2f19/argon2_cffi_bindings-25.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ba92837e4a9aa6a508c8d2d7883ed5a8f6c308c89a4790e1e447a220deb79a85", size = 91934 }, + { url = "https://files.pythonhosted.org/packages/f0/c7/f36bd08ef9bd9f0a9cff9428406651f5937ce27b6c5b07b92d41f91ae541/argon2_cffi_bindings-25.1.0-cp314-cp314t-win32.whl", hash = "sha256:84a461d4d84ae1295871329b346a97f68eade8c53b6ed9a7ca2d7467f3c8ff6f", size = 28158 }, + { url = "https://files.pythonhosted.org/packages/b3/80/0106a7448abb24a2c467bf7d527fe5413b7fdfa4ad6d6a96a43a62ef3988/argon2_cffi_bindings-25.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b55aec3565b65f56455eebc9b9f34130440404f27fe21c3b375bf1ea4d8fbae6", size = 32597 }, + { url = "https://files.pythonhosted.org/packages/05/b8/d663c9caea07e9180b2cb662772865230715cbd573ba3b5e81793d580316/argon2_cffi_bindings-25.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:87c33a52407e4c41f3b70a9c2d3f6056d88b10dad7695be708c5021673f55623", size = 28231 }, + { url = "https://files.pythonhosted.org/packages/1d/57/96b8b9f93166147826da5f90376e784a10582dd39a393c99bb62cfcf52f0/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:aecba1723ae35330a008418a91ea6cfcedf6d31e5fbaa056a166462ff066d500", size = 54121 }, + { url = "https://files.pythonhosted.org/packages/0a/08/a9bebdb2e0e602dde230bdde8021b29f71f7841bd54801bcfd514acb5dcf/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:2630b6240b495dfab90aebe159ff784d08ea999aa4b0d17efa734055a07d2f44", size = 29177 }, + { url = "https://files.pythonhosted.org/packages/b6/02/d297943bcacf05e4f2a94ab6f462831dc20158614e5d067c35d4e63b9acb/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:7aef0c91e2c0fbca6fc68e7555aa60ef7008a739cbe045541e438373bc54d2b0", size = 31090 }, + { url = "https://files.pythonhosted.org/packages/c1/93/44365f3d75053e53893ec6d733e4a5e3147502663554b4d864587c7828a7/argon2_cffi_bindings-25.1.0-cp39-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1e021e87faa76ae0d413b619fe2b65ab9a037f24c60a1e6cc43457ae20de6dc6", size = 81246 }, + { url = "https://files.pythonhosted.org/packages/09/52/94108adfdd6e2ddf58be64f959a0b9c7d4ef2fa71086c38356d22dc501ea/argon2_cffi_bindings-25.1.0-cp39-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d3e924cfc503018a714f94a49a149fdc0b644eaead5d1f089330399134fa028a", size = 87126 }, + { url = "https://files.pythonhosted.org/packages/72/70/7a2993a12b0ffa2a9271259b79cc616e2389ed1a4d93842fac5a1f923ffd/argon2_cffi_bindings-25.1.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:c87b72589133f0346a1cb8d5ecca4b933e3c9b64656c9d175270a000e73b288d", size = 80343 }, + { url = "https://files.pythonhosted.org/packages/78/9a/4e5157d893ffc712b74dbd868c7f62365618266982b64accab26bab01edc/argon2_cffi_bindings-25.1.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1db89609c06afa1a214a69a462ea741cf735b29a57530478c06eb81dd403de99", size = 86777 }, + { url = "https://files.pythonhosted.org/packages/74/cd/15777dfde1c29d96de7f18edf4cc94c385646852e7c7b0320aa91ccca583/argon2_cffi_bindings-25.1.0-cp39-abi3-win32.whl", hash = "sha256:473bcb5f82924b1becbb637b63303ec8d10e84c8d241119419897a26116515d2", size = 27180 }, + { url = "https://files.pythonhosted.org/packages/e2/c6/a759ece8f1829d1f162261226fbfd2c6832b3ff7657384045286d2afa384/argon2_cffi_bindings-25.1.0-cp39-abi3-win_amd64.whl", hash = "sha256:a98cd7d17e9f7ce244c0803cad3c23a7d379c301ba618a5fa76a67d116618b98", size = 31715 }, + { url = "https://files.pythonhosted.org/packages/42/b9/f8d6fa329ab25128b7e98fd83a3cb34d9db5b059a9847eddb840a0af45dd/argon2_cffi_bindings-25.1.0-cp39-abi3-win_arm64.whl", hash = "sha256:b0fdbcf513833809c882823f98dc2f931cf659d9a1429616ac3adebb49f5db94", size = 27149 }, + { url = "https://files.pythonhosted.org/packages/11/2d/ba4e4ca8d149f8dcc0d952ac0967089e1d759c7e5fcf0865a317eb680fbb/argon2_cffi_bindings-25.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:6dca33a9859abf613e22733131fc9194091c1fa7cb3e131c143056b4856aa47e", size = 24549 }, + { url = "https://files.pythonhosted.org/packages/5c/82/9b2386cc75ac0bd3210e12a44bfc7fd1632065ed8b80d573036eecb10442/argon2_cffi_bindings-25.1.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:21378b40e1b8d1655dd5310c84a40fc19a9aa5e6366e835ceb8576bf0fea716d", size = 25539 }, + { url = "https://files.pythonhosted.org/packages/31/db/740de99a37aa727623730c90d92c22c9e12585b3c98c54b7960f7810289f/argon2_cffi_bindings-25.1.0-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d588dec224e2a83edbdc785a5e6f3c6cd736f46bfd4b441bbb5aa1f5085e584", size = 28467 }, + { url = "https://files.pythonhosted.org/packages/71/7a/47c4509ea18d755f44e2b92b7178914f0c113946d11e16e626df8eaa2b0b/argon2_cffi_bindings-25.1.0-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5acb4e41090d53f17ca1110c3427f0a130f944b896fc8c83973219c97f57b690", size = 27355 }, + { url = "https://files.pythonhosted.org/packages/ee/82/82745642d3c46e7cea25e1885b014b033f4693346ce46b7f47483cf5d448/argon2_cffi_bindings-25.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:da0c79c23a63723aa5d782250fbf51b768abca630285262fb5144ba5ae01e520", size = 29187 }, +] + +[[package]] +name = "arrow" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "python-dateutil" }, + { name = "tzdata" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b9/33/032cdc44182491aa708d06a68b62434140d8c50820a087fac7af37703357/arrow-1.4.0.tar.gz", hash = "sha256:ed0cc050e98001b8779e84d461b0098c4ac597e88704a655582b21d116e526d7", size = 152931 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl", hash = "sha256:749f0769958ebdc79c173ff0b0670d59051a535fa26e8eba02953dc19eb43205", size = 68797 }, +] + +[[package]] +name = "asttokens" +version = "3.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/be/a5/8e3f9b6771b0b408517c82d97aed8f2036509bc247d46114925e32fe33f0/asttokens-3.0.1.tar.gz", hash = "sha256:71a4ee5de0bde6a31d64f6b13f2293ac190344478f081c3d1bccfcf5eacb0cb7", size = 62308 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/39/e7eaf1799466a4aef85b6a4fe7bd175ad2b1c6345066aa33f1f58d4b18d0/asttokens-3.0.1-py3-none-any.whl", hash = "sha256:15a3ebc0f43c2d0a50eeafea25e19046c68398e487b9f1f5b517f7c0f40f976a", size = 27047 }, +] + +[[package]] +name = "async-lru" +version = "2.0.5" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b2/4d/71ec4d3939dc755264f680f6c2b4906423a304c3d18e96853f0a595dfe97/async_lru-2.0.5.tar.gz", hash = "sha256:481d52ccdd27275f42c43a928b4a50c3bfb2d67af4e78b170e3e0bb39c66e5bb", size = 10380 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/03/49/d10027df9fce941cb8184e78a02857af36360d33e1721df81c5ed2179a1a/async_lru-2.0.5-py3-none-any.whl", hash = "sha256:ab95404d8d2605310d345932697371a5f40def0487c03d6d0ad9138de52c9943", size = 6069 }, +] + +[[package]] +name = "async-lru" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "typing-extensions", marker = "python_full_version == '3.10.*'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e8/1f/989ecfef8e64109a489fff357450cb73fa73a865a92bd8c272170a6922c2/async_lru-2.3.0.tar.gz", hash = "sha256:89bdb258a0140d7313cf8f4031d816a042202faa61d0ab310a0a538baa1c24b6", size = 16332 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/e2/c2e3abf398f80732e58b03be77bde9022550d221dd8781bf586bd4d97cc1/async_lru-2.3.0-py3-none-any.whl", hash = "sha256:eea27b01841909316f2cc739807acea1c623df2be8c5cfad7583286397bb8315", size = 8403 }, +] + +[[package]] +name = "attrs" +version = "26.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/82a0fe20a541c03148528be8cac2408564a6c9a0cc7e9171802bc1d26985/attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32", size = 952055 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548 }, +] + +[[package]] +name = "babel" +version = "2.18.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/b2/51899539b6ceeeb420d40ed3cd4b7a40519404f9baf3d4ac99dc413a834b/babel-2.18.0.tar.gz", hash = "sha256:b80b99a14bd085fcacfa15c9165f651fbb3406e66cc603abf11c5750937c992d", size = 9959554 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl", hash = "sha256:e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35", size = 10196845 }, +] + +[[package]] +name = "beautifulsoup4" +version = "4.14.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "soupsieve" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c3/b0/1c6a16426d389813b48d95e26898aff79abbde42ad353958ad95cc8c9b21/beautifulsoup4-4.14.3.tar.gz", hash = "sha256:6292b1c5186d356bba669ef9f7f051757099565ad9ada5dd630bd9de5fa7fb86", size = 627737 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl", hash = "sha256:0918bfe44902e6ad8d57732ba310582e98da931428d231a5ecb9e7c703a735bb", size = 107721 }, +] + +[[package]] +name = "bleach" +version = "6.2.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "webencodings", marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/76/9a/0e33f5054c54d349ea62c277191c020c2d6ef1d65ab2cb1993f91ec846d1/bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f", size = 203083 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fc/55/96142937f66150805c25c4d0f31ee4132fd33497753400734f9dfdcbdc66/bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e", size = 163406 }, +] + +[package.optional-dependencies] +css = [ + { name = "tinycss2", marker = "python_full_version < '3.10'" }, +] + +[[package]] +name = "bleach" +version = "6.3.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "webencodings", marker = "python_full_version >= '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/07/18/3c8523962314be6bf4c8989c79ad9531c825210dd13a8669f6b84336e8bd/bleach-6.3.0.tar.gz", hash = "sha256:6f3b91b1c0a02bb9a78b5a454c92506aa0fdf197e1d5e114d2e00c6f64306d22", size = 203533 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cd/3a/577b549de0cc09d95f11087ee63c739bba856cd3952697eec4c4bb91350a/bleach-6.3.0-py3-none-any.whl", hash = "sha256:fe10ec77c93ddf3d13a73b035abaac7a9f5e436513864ccdad516693213c65d6", size = 164437 }, +] + +[package.optional-dependencies] +css = [ + { name = "tinycss2", marker = "python_full_version >= '3.10'" }, +] + +[[package]] +name = "cachetools" +version = "6.2.6" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/39/91/d9ae9a66b01102a18cd16db0cf4cd54187ffe10f0865cc80071a4104fbb3/cachetools-6.2.6.tar.gz", hash = "sha256:16c33e1f276b9a9c0b49ab5782d901e3ad3de0dd6da9bf9bcd29ac5672f2f9e6", size = 32363 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/90/45/f458fa2c388e79dd9d8b9b0c99f1d31b568f27388f2fdba7bb66bbc0c6ed/cachetools-6.2.6-py3-none-any.whl", hash = "sha256:8c9717235b3c651603fff0076db52d6acbfd1b338b8ed50256092f7ce9c85bda", size = 11668 }, +] + +[[package]] +name = "cachetools" +version = "7.0.5" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/af/dd/57fe3fdb6e65b25a5987fd2cdc7e22db0aef508b91634d2e57d22928d41b/cachetools-7.0.5.tar.gz", hash = "sha256:0cd042c24377200c1dcd225f8b7b12b0ca53cc2c961b43757e774ebe190fd990", size = 37367 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/06/f3/39cf3367b8107baa44f861dc802cbf16263c945b62d8265d36034fc07bea/cachetools-7.0.5-py3-none-any.whl", hash = "sha256:46bc8ebefbe485407621d0a4264b23c080cedd913921bad7ac3ed2f26c183114", size = 13918 }, +] + +[[package]] +name = "certifi" +version = "2026.2.25" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/af/2d/7bf41579a8986e348fa033a31cdd0e4121114f6bce2457e8876010b092dd/certifi-2026.2.25.tar.gz", hash = "sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7", size = 155029 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl", hash = "sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa", size = 153684 }, +] + +[[package]] +name = "cffi" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", version = "2.23", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' and implementation_name != 'PyPy'" }, + { name = "pycparser", version = "3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10' and implementation_name != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/93/d7/516d984057745a6cd96575eea814fe1edd6646ee6efd552fb7b0921dec83/cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44", size = 184283 }, + { url = "https://files.pythonhosted.org/packages/9e/84/ad6a0b408daa859246f57c03efd28e5dd1b33c21737c2db84cae8c237aa5/cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49", size = 180504 }, + { url = "https://files.pythonhosted.org/packages/50/bd/b1a6362b80628111e6653c961f987faa55262b4002fcec42308cad1db680/cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c", size = 208811 }, + { url = "https://files.pythonhosted.org/packages/4f/27/6933a8b2562d7bd1fb595074cf99cc81fc3789f6a6c05cdabb46284a3188/cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb", size = 216402 }, + { url = "https://files.pythonhosted.org/packages/05/eb/b86f2a2645b62adcfff53b0dd97e8dfafb5c8aa864bd0d9a2c2049a0d551/cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0", size = 203217 }, + { url = "https://files.pythonhosted.org/packages/9f/e0/6cbe77a53acf5acc7c08cc186c9928864bd7c005f9efd0d126884858a5fe/cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4", size = 203079 }, + { url = "https://files.pythonhosted.org/packages/98/29/9b366e70e243eb3d14a5cb488dfd3a0b6b2f1fb001a203f653b93ccfac88/cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453", size = 216475 }, + { url = "https://files.pythonhosted.org/packages/21/7a/13b24e70d2f90a322f2900c5d8e1f14fa7e2a6b3332b7309ba7b2ba51a5a/cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495", size = 218829 }, + { url = "https://files.pythonhosted.org/packages/60/99/c9dc110974c59cc981b1f5b66e1d8af8af764e00f0293266824d9c4254bc/cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5", size = 211211 }, + { url = "https://files.pythonhosted.org/packages/49/72/ff2d12dbf21aca1b32a40ed792ee6b40f6dc3a9cf1644bd7ef6e95e0ac5e/cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb", size = 218036 }, + { url = "https://files.pythonhosted.org/packages/e2/cc/027d7fb82e58c48ea717149b03bcadcbdc293553edb283af792bd4bcbb3f/cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a", size = 172184 }, + { url = "https://files.pythonhosted.org/packages/33/fa/072dd15ae27fbb4e06b437eb6e944e75b068deb09e2a2826039e49ee2045/cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739", size = 182790 }, + { url = "https://files.pythonhosted.org/packages/12/4a/3dfd5f7850cbf0d06dc84ba9aa00db766b52ca38d8b86e3a38314d52498c/cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe", size = 184344 }, + { url = "https://files.pythonhosted.org/packages/4f/8b/f0e4c441227ba756aafbe78f117485b25bb26b1c059d01f137fa6d14896b/cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c", size = 180560 }, + { url = "https://files.pythonhosted.org/packages/b1/b7/1200d354378ef52ec227395d95c2576330fd22a869f7a70e88e1447eb234/cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92", size = 209613 }, + { url = "https://files.pythonhosted.org/packages/b8/56/6033f5e86e8cc9bb629f0077ba71679508bdf54a9a5e112a3c0b91870332/cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93", size = 216476 }, + { url = "https://files.pythonhosted.org/packages/dc/7f/55fecd70f7ece178db2f26128ec41430d8720f2d12ca97bf8f0a628207d5/cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5", size = 203374 }, + { url = "https://files.pythonhosted.org/packages/84/ef/a7b77c8bdc0f77adc3b46888f1ad54be8f3b7821697a7b89126e829e676a/cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664", size = 202597 }, + { url = "https://files.pythonhosted.org/packages/d7/91/500d892b2bf36529a75b77958edfcd5ad8e2ce4064ce2ecfeab2125d72d1/cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26", size = 215574 }, + { url = "https://files.pythonhosted.org/packages/44/64/58f6255b62b101093d5df22dcb752596066c7e89dd725e0afaed242a61be/cffi-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9", size = 218971 }, + { url = "https://files.pythonhosted.org/packages/ab/49/fa72cebe2fd8a55fbe14956f9970fe8eb1ac59e5df042f603ef7c8ba0adc/cffi-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414", size = 211972 }, + { url = "https://files.pythonhosted.org/packages/0b/28/dd0967a76aab36731b6ebfe64dec4e981aff7e0608f60c2d46b46982607d/cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743", size = 217078 }, + { url = "https://files.pythonhosted.org/packages/2b/c0/015b25184413d7ab0a410775fdb4a50fca20f5589b5dab1dbbfa3baad8ce/cffi-2.0.0-cp311-cp311-win32.whl", hash = "sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5", size = 172076 }, + { url = "https://files.pythonhosted.org/packages/ae/8f/dc5531155e7070361eb1b7e4c1a9d896d0cb21c49f807a6c03fd63fc877e/cffi-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5", size = 182820 }, + { url = "https://files.pythonhosted.org/packages/95/5c/1b493356429f9aecfd56bc171285a4c4ac8697f76e9bbbbb105e537853a1/cffi-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d", size = 177635 }, + { url = "https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d", size = 185271 }, + { url = "https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c", size = 181048 }, + { url = "https://files.pythonhosted.org/packages/ff/df/a4f0fbd47331ceeba3d37c2e51e9dfc9722498becbeec2bd8bc856c9538a/cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe", size = 212529 }, + { url = "https://files.pythonhosted.org/packages/d5/72/12b5f8d3865bf0f87cf1404d8c374e7487dcf097a1c91c436e72e6badd83/cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062", size = 220097 }, + { url = "https://files.pythonhosted.org/packages/c2/95/7a135d52a50dfa7c882ab0ac17e8dc11cec9d55d2c18dda414c051c5e69e/cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e", size = 207983 }, + { url = "https://files.pythonhosted.org/packages/3a/c8/15cb9ada8895957ea171c62dc78ff3e99159ee7adb13c0123c001a2546c1/cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037", size = 206519 }, + { url = "https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba", size = 219572 }, + { url = "https://files.pythonhosted.org/packages/07/e0/267e57e387b4ca276b90f0434ff88b2c2241ad72b16d31836adddfd6031b/cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94", size = 222963 }, + { url = "https://files.pythonhosted.org/packages/b6/75/1f2747525e06f53efbd878f4d03bac5b859cbc11c633d0fb81432d98a795/cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187", size = 221361 }, + { url = "https://files.pythonhosted.org/packages/7b/2b/2b6435f76bfeb6bbf055596976da087377ede68df465419d192acf00c437/cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18", size = 172932 }, + { url = "https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5", size = 183557 }, + { url = "https://files.pythonhosted.org/packages/95/31/9f7f93ad2f8eff1dbc1c3656d7ca5bfd8fb52c9d786b4dcf19b2d02217fa/cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6", size = 177762 }, + { url = "https://files.pythonhosted.org/packages/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb", size = 185230 }, + { url = "https://files.pythonhosted.org/packages/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca", size = 181043 }, + { url = "https://files.pythonhosted.org/packages/b0/1e/d22cc63332bd59b06481ceaac49d6c507598642e2230f201649058a7e704/cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b", size = 212446 }, + { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", size = 220101 }, + { url = "https://files.pythonhosted.org/packages/f2/7f/e6647792fc5850d634695bc0e6ab4111ae88e89981d35ac269956605feba/cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2", size = 207948 }, + { url = "https://files.pythonhosted.org/packages/cb/1e/a5a1bd6f1fb30f22573f76533de12a00bf274abcdc55c8edab639078abb6/cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3", size = 206422 }, + { url = "https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26", size = 219499 }, + { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", size = 222928 }, + { url = "https://files.pythonhosted.org/packages/36/54/0362578dd2c9e557a28ac77698ed67323ed5b9775ca9d3fe73fe191bb5d8/cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b", size = 221302 }, + { url = "https://files.pythonhosted.org/packages/eb/6d/bf9bda840d5f1dfdbf0feca87fbdb64a918a69bca42cfa0ba7b137c48cb8/cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27", size = 172909 }, + { url = "https://files.pythonhosted.org/packages/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75", size = 183402 }, + { url = "https://files.pythonhosted.org/packages/cb/0e/02ceeec9a7d6ee63bb596121c2c8e9b3a9e150936f4fbef6ca1943e6137c/cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91", size = 177780 }, + { url = "https://files.pythonhosted.org/packages/92/c4/3ce07396253a83250ee98564f8d7e9789fab8e58858f35d07a9a2c78de9f/cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5", size = 185320 }, + { url = "https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13", size = 181487 }, + { url = "https://files.pythonhosted.org/packages/d6/43/0e822876f87ea8a4ef95442c3d766a06a51fc5298823f884ef87aaad168c/cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b", size = 220049 }, + { url = "https://files.pythonhosted.org/packages/b4/89/76799151d9c2d2d1ead63c2429da9ea9d7aac304603de0c6e8764e6e8e70/cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c", size = 207793 }, + { url = "https://files.pythonhosted.org/packages/bb/dd/3465b14bb9e24ee24cb88c9e3730f6de63111fffe513492bf8c808a3547e/cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef", size = 206300 }, + { url = "https://files.pythonhosted.org/packages/47/d9/d83e293854571c877a92da46fdec39158f8d7e68da75bf73581225d28e90/cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775", size = 219244 }, + { url = "https://files.pythonhosted.org/packages/2b/0f/1f177e3683aead2bb00f7679a16451d302c436b5cbf2505f0ea8146ef59e/cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205", size = 222828 }, + { url = "https://files.pythonhosted.org/packages/c6/0f/cafacebd4b040e3119dcb32fed8bdef8dfe94da653155f9d0b9dc660166e/cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1", size = 220926 }, + { url = "https://files.pythonhosted.org/packages/3e/aa/df335faa45b395396fcbc03de2dfcab242cd61a9900e914fe682a59170b1/cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f", size = 175328 }, + { url = "https://files.pythonhosted.org/packages/bb/92/882c2d30831744296ce713f0feb4c1cd30f346ef747b530b5318715cc367/cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25", size = 185650 }, + { url = "https://files.pythonhosted.org/packages/9f/2c/98ece204b9d35a7366b5b2c6539c350313ca13932143e79dc133ba757104/cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad", size = 180687 }, + { url = "https://files.pythonhosted.org/packages/3e/61/c768e4d548bfa607abcda77423448df8c471f25dbe64fb2ef6d555eae006/cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9", size = 188773 }, + { url = "https://files.pythonhosted.org/packages/2c/ea/5f76bce7cf6fcd0ab1a1058b5af899bfbef198bea4d5686da88471ea0336/cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d", size = 185013 }, + { url = "https://files.pythonhosted.org/packages/be/b4/c56878d0d1755cf9caa54ba71e5d049479c52f9e4afc230f06822162ab2f/cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c", size = 221593 }, + { url = "https://files.pythonhosted.org/packages/e0/0d/eb704606dfe8033e7128df5e90fee946bbcb64a04fcdaa97321309004000/cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8", size = 209354 }, + { url = "https://files.pythonhosted.org/packages/d8/19/3c435d727b368ca475fb8742ab97c9cb13a0de600ce86f62eab7fa3eea60/cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc", size = 208480 }, + { url = "https://files.pythonhosted.org/packages/d0/44/681604464ed9541673e486521497406fadcc15b5217c3e326b061696899a/cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592", size = 221584 }, + { url = "https://files.pythonhosted.org/packages/25/8e/342a504ff018a2825d395d44d63a767dd8ebc927ebda557fecdaca3ac33a/cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512", size = 224443 }, + { url = "https://files.pythonhosted.org/packages/e1/5e/b666bacbbc60fbf415ba9988324a132c9a7a0448a9a8f125074671c0f2c3/cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4", size = 223437 }, + { url = "https://files.pythonhosted.org/packages/a0/1d/ec1a60bd1a10daa292d3cd6bb0b359a81607154fb8165f3ec95fe003b85c/cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e", size = 180487 }, + { url = "https://files.pythonhosted.org/packages/bf/41/4c1168c74fac325c0c8156f04b6749c8b6a8f405bbf91413ba088359f60d/cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6", size = 191726 }, + { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195 }, + { url = "https://files.pythonhosted.org/packages/c0/cc/08ed5a43f2996a16b462f64a7055c6e962803534924b9b2f1371d8c00b7b/cffi-2.0.0-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf", size = 184288 }, + { url = "https://files.pythonhosted.org/packages/3d/de/38d9726324e127f727b4ecc376bc85e505bfe61ef130eaf3f290c6847dd4/cffi-2.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:de8dad4425a6ca6e4e5e297b27b5c824ecc7581910bf9aee86cb6835e6812aa7", size = 180509 }, + { url = "https://files.pythonhosted.org/packages/9b/13/c92e36358fbcc39cf0962e83223c9522154ee8630e1df7c0b3a39a8124e2/cffi-2.0.0-cp39-cp39-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:4647afc2f90d1ddd33441e5b0e85b16b12ddec4fca55f0d9671fef036ecca27c", size = 208813 }, + { url = "https://files.pythonhosted.org/packages/15/12/a7a79bd0df4c3bff744b2d7e52cc1b68d5e7e427b384252c42366dc1ecbc/cffi-2.0.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3f4d46d8b35698056ec29bca21546e1551a205058ae1a181d871e278b0b28165", size = 216498 }, + { url = "https://files.pythonhosted.org/packages/a3/ad/5c51c1c7600bdd7ed9a24a203ec255dccdd0ebf4527f7b922a0bde2fb6ed/cffi-2.0.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:e6e73b9e02893c764e7e8d5bb5ce277f1a009cd5243f8228f75f842bf937c534", size = 203243 }, + { url = "https://files.pythonhosted.org/packages/32/f2/81b63e288295928739d715d00952c8c6034cb6c6a516b17d37e0c8be5600/cffi-2.0.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:cb527a79772e5ef98fb1d700678fe031e353e765d1ca2d409c92263c6d43e09f", size = 203158 }, + { url = "https://files.pythonhosted.org/packages/1f/74/cc4096ce66f5939042ae094e2e96f53426a979864aa1f96a621ad128be27/cffi-2.0.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:61d028e90346df14fedc3d1e5441df818d095f3b87d286825dfcbd6459b7ef63", size = 216548 }, + { url = "https://files.pythonhosted.org/packages/e8/be/f6424d1dc46b1091ffcc8964fa7c0ab0cd36839dd2761b49c90481a6ba1b/cffi-2.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0f6084a0ea23d05d20c3edcda20c3d006f9b6f3fefeac38f59262e10cef47ee2", size = 218897 }, + { url = "https://files.pythonhosted.org/packages/f7/e0/dda537c2309817edf60109e39265f24f24aa7f050767e22c98c53fe7f48b/cffi-2.0.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1cd13c99ce269b3ed80b417dcd591415d3372bcac067009b6e0f59c7d4015e65", size = 211249 }, + { url = "https://files.pythonhosted.org/packages/2b/e7/7c769804eb75e4c4b35e658dba01de1640a351a9653c3d49ca89d16ccc91/cffi-2.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:89472c9762729b5ae1ad974b777416bfda4ac5642423fa93bd57a09204712322", size = 218041 }, + { url = "https://files.pythonhosted.org/packages/aa/d9/6218d78f920dcd7507fc16a766b5ef8f3b913cc7aa938e7fc80b9978d089/cffi-2.0.0-cp39-cp39-win32.whl", hash = "sha256:2081580ebb843f759b9f617314a24ed5738c51d2aee65d31e02f6f7a2b97707a", size = 172138 }, + { url = "https://files.pythonhosted.org/packages/54/8f/a1e836f82d8e32a97e6b29cc8f641779181ac7363734f12df27db803ebda/cffi-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9", size = 182794 }, +] + +[[package]] +name = "cfgv" +version = "3.4.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/11/74/539e56497d9bd1d484fd863dd69cbbfa653cd2aa27abfe35653494d85e94/cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560", size = 7114 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2456f06955289ca770a5dbd5fd267374/cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", size = 7249 }, +] + +[[package]] +name = "cfgv" +version = "3.5.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/4e/b5/721b8799b04bf9afe054a3899c6cf4e880fcf8563cc71c15610242490a0c/cfgv-3.5.0.tar.gz", hash = "sha256:d5b1034354820651caa73ede66a6294d6e95c1b00acc5e9b098e917404669132", size = 7334 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl", hash = "sha256:a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0", size = 7445 }, +] + +[[package]] +name = "chardet" +version = "5.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/f7b6ab21ec75897ed80c17d79b15951a719226b9fababf1e40ea74d69079/chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7", size = 2069618 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970", size = 199385 }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/a1/67fe25fac3c7642725500a3f6cfe5821ad557c3abb11c9d20d12c7008d3e/charset_normalizer-3.4.7.tar.gz", hash = "sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5", size = 144271 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/26/08/0f303cb0b529e456bb116f2d50565a482694fbb94340bf56d44677e7ed03/charset_normalizer-3.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cdd68a1fb318e290a2077696b7eb7a21a49163c455979c639bf5a5dcdc46617d", size = 315182 }, + { url = "https://files.pythonhosted.org/packages/24/47/b192933e94b546f1b1fe4df9cc1f84fcdbf2359f8d1081d46dd029b50207/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e17b8d5d6a8c47c85e68ca8379def1303fd360c3e22093a807cd34a71cd082b8", size = 209329 }, + { url = "https://files.pythonhosted.org/packages/c2/b4/01fa81c5ca6141024d89a8fc15968002b71da7f825dd14113207113fabbd/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:511ef87c8aec0783e08ac18565a16d435372bc1ac25a91e6ac7f5ef2b0bff790", size = 231230 }, + { url = "https://files.pythonhosted.org/packages/20/f7/7b991776844dfa058017e600e6e55ff01984a063290ca5622c0b63162f68/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:007d05ec7321d12a40227aae9e2bc6dca73f3cb21058999a1df9e193555a9dcc", size = 225890 }, + { url = "https://files.pythonhosted.org/packages/20/e7/bed0024a0f4ab0c8a9c64d4445f39b30c99bd1acd228291959e3de664247/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cf29836da5119f3c8a8a70667b0ef5fdca3bb12f80fd06487cfa575b3909b393", size = 216930 }, + { url = "https://files.pythonhosted.org/packages/e2/ab/b18f0ab31cdd7b3ddb8bb76c4a414aeb8160c9810fdf1bc62f269a539d87/charset_normalizer-3.4.7-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:12d8baf840cc7889b37c7c770f478adea7adce3dcb3944d02ec87508e2dcf153", size = 202109 }, + { url = "https://files.pythonhosted.org/packages/82/e5/7e9440768a06dfb3075936490cb82dbf0ee20a133bf0dd8551fa096914ec/charset_normalizer-3.4.7-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d560742f3c0d62afaccf9f41fe485ed69bd7661a241f86a3ef0f0fb8b1a397af", size = 214684 }, + { url = "https://files.pythonhosted.org/packages/71/94/8c61d8da9f062fdf457c80acfa25060ec22bf1d34bbeaca4350f13bcfd07/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b14b2d9dac08e28bb8046a1a0434b1750eb221c8f5b87a68f4fa11a6f97b5e34", size = 212785 }, + { url = "https://files.pythonhosted.org/packages/66/cd/6e9889c648e72c0ab2e5967528bb83508f354d706637bc7097190c874e13/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:bc17a677b21b3502a21f66a8cc64f5bfad4df8a0b8434d661666f8ce90ac3af1", size = 203055 }, + { url = "https://files.pythonhosted.org/packages/92/2e/7a951d6a08aefb7eb8e1b54cdfb580b1365afdd9dd484dc4bee9e5d8f258/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:750e02e074872a3fad7f233b47734166440af3cdea0add3e95163110816d6752", size = 232502 }, + { url = "https://files.pythonhosted.org/packages/58/d5/abcf2d83bf8e0a1286df55cd0dc1d49af0da4282aa77e986df343e7de124/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:4e5163c14bffd570ef2affbfdd77bba66383890797df43dc8b4cc7d6f500bf53", size = 214295 }, + { url = "https://files.pythonhosted.org/packages/47/3a/7d4cd7ed54be99973a0dc176032cba5cb1f258082c31fa6df35cff46acfc/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6ed74185b2db44f41ef35fd1617c5888e59792da9bbc9190d6c7300617182616", size = 227145 }, + { url = "https://files.pythonhosted.org/packages/1d/98/3a45bf8247889cf28262ebd3d0872edff11565b2a1e3064ccb132db3fbb0/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:94e1885b270625a9a828c9793b4d52a64445299baa1fea5a173bf1d3dd9a1a5a", size = 218884 }, + { url = "https://files.pythonhosted.org/packages/ad/80/2e8b7f8915ed5c9ef13aa828d82738e33888c485b65ebf744d615040c7ea/charset_normalizer-3.4.7-cp310-cp310-win32.whl", hash = "sha256:6785f414ae0f3c733c437e0f3929197934f526d19dfaa75e18fdb4f94c6fb374", size = 148343 }, + { url = "https://files.pythonhosted.org/packages/35/1b/3b8c8c77184af465ee9ad88b5aea46ea6b2e1f7b9dc9502891e37af21e30/charset_normalizer-3.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:6696b7688f54f5af4462118f0bfa7c1621eeb87154f77fa04b9295ce7a8f2943", size = 159174 }, + { url = "https://files.pythonhosted.org/packages/be/c1/feb40dca40dbb21e0a908801782d9288c64fc8d8e562c2098e9994c8c21b/charset_normalizer-3.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:66671f93accb62ed07da56613636f3641f1a12c13046ce91ffc923721f23c008", size = 147805 }, + { url = "https://files.pythonhosted.org/packages/c2/d7/b5b7020a0565c2e9fa8c09f4b5fa6232feb326b8c20081ccded47ea368fd/charset_normalizer-3.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7641bb8895e77f921102f72833904dcd9901df5d6d72a2ab8f31d04b7e51e4e7", size = 309705 }, + { url = "https://files.pythonhosted.org/packages/5a/53/58c29116c340e5456724ecd2fff4196d236b98f3da97b404bc5e51ac3493/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:202389074300232baeb53ae2569a60901f7efadd4245cf3a3bf0617d60b439d7", size = 206419 }, + { url = "https://files.pythonhosted.org/packages/b2/02/e8146dc6591a37a00e5144c63f29fb7c97a734ea8a111190783c0e60ab63/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:30b8d1d8c52a48c2c5690e152c169b673487a2a58de1ec7393196753063fcd5e", size = 227901 }, + { url = "https://files.pythonhosted.org/packages/fb/73/77486c4cd58f1267bf17db420e930c9afa1b3be3fe8c8b8ebbebc9624359/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:532bc9bf33a68613fd7d65e4b1c71a6a38d7d42604ecf239c77392e9b4e8998c", size = 222742 }, + { url = "https://files.pythonhosted.org/packages/a1/fa/f74eb381a7d94ded44739e9d94de18dc5edc9c17fb8c11f0a6890696c0a9/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2fe249cb4651fd12605b7288b24751d8bfd46d35f12a20b1ba33dea122e690df", size = 214061 }, + { url = "https://files.pythonhosted.org/packages/dc/92/42bd3cefcf7687253fb86694b45f37b733c97f59af3724f356fa92b8c344/charset_normalizer-3.4.7-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:65bcd23054beab4d166035cabbc868a09c1a49d1efe458fe8e4361215df40265", size = 199239 }, + { url = "https://files.pythonhosted.org/packages/4c/3d/069e7184e2aa3b3cddc700e3dd267413dc259854adc3380421c805c6a17d/charset_normalizer-3.4.7-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:08e721811161356f97b4059a9ba7bafb23ea5ee2255402c42881c214e173c6b4", size = 210173 }, + { url = "https://files.pythonhosted.org/packages/62/51/9d56feb5f2e7074c46f93e0ebdbe61f0848ee246e2f0d89f8e20b89ebb8f/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e060d01aec0a910bdccb8be71faf34e7799ce36950f8294c8bf612cba65a2c9e", size = 209841 }, + { url = "https://files.pythonhosted.org/packages/d2/59/893d8f99cc4c837dda1fe2f1139079703deb9f321aabcb032355de13b6c7/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:38c0109396c4cfc574d502df99742a45c72c08eff0a36158b6f04000043dbf38", size = 200304 }, + { url = "https://files.pythonhosted.org/packages/7d/1d/ee6f3be3464247578d1ed5c46de545ccc3d3ff933695395c402c21fa6b77/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:1c2a768fdd44ee4a9339a9b0b130049139b8ce3c01d2ce09f67f5a68048d477c", size = 229455 }, + { url = "https://files.pythonhosted.org/packages/54/bb/8fb0a946296ea96a488928bdce8ef99023998c48e4713af533e9bb98ef07/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:1a87ca9d5df6fe460483d9a5bbf2b18f620cbed41b432e2bddb686228282d10b", size = 210036 }, + { url = "https://files.pythonhosted.org/packages/9a/bc/015b2387f913749f82afd4fcba07846d05b6d784dd16123cb66860e0237d/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:d635aab80466bc95771bb78d5370e74d36d1fe31467b6b29b8b57b2a3cd7d22c", size = 224739 }, + { url = "https://files.pythonhosted.org/packages/17/ab/63133691f56baae417493cba6b7c641571a2130eb7bceba6773367ab9ec5/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ae196f021b5e7c78e918242d217db021ed2a6ace2bc6ae94c0fc596221c7f58d", size = 216277 }, + { url = "https://files.pythonhosted.org/packages/06/6d/3be70e827977f20db77c12a97e6a9f973631a45b8d186c084527e53e77a4/charset_normalizer-3.4.7-cp311-cp311-win32.whl", hash = "sha256:adb2597b428735679446b46c8badf467b4ca5f5056aae4d51a19f9570301b1ad", size = 147819 }, + { url = "https://files.pythonhosted.org/packages/20/d9/5f67790f06b735d7c7637171bbfd89882ad67201891b7275e51116ed8207/charset_normalizer-3.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:8e385e4267ab76874ae30db04c627faaaf0b509e1ccc11a95b3fc3e83f855c00", size = 159281 }, + { url = "https://files.pythonhosted.org/packages/ca/83/6413f36c5a34afead88ce6f66684d943d91f233d76dd083798f9602b75ae/charset_normalizer-3.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:d4a48e5b3c2a489fae013b7589308a40146ee081f6f509e047e0e096084ceca1", size = 147843 }, + { url = "https://files.pythonhosted.org/packages/0c/eb/4fc8d0a7110eb5fc9cc161723a34a8a6c200ce3b4fbf681bc86feee22308/charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:eca9705049ad3c7345d574e3510665cb2cf844c2f2dcfe675332677f081cbd46", size = 311328 }, + { url = "https://files.pythonhosted.org/packages/f8/e3/0fadc706008ac9d7b9b5be6dc767c05f9d3e5df51744ce4cc9605de7b9f4/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6178f72c5508bfc5fd446a5905e698c6212932f25bcdd4b47a757a50605a90e2", size = 208061 }, + { url = "https://files.pythonhosted.org/packages/42/f0/3dd1045c47f4a4604df85ec18ad093912ae1344ac706993aff91d38773a2/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e1421b502d83040e6d7fb2fb18dff63957f720da3d77b2fbd3187ceb63755d7b", size = 229031 }, + { url = "https://files.pythonhosted.org/packages/dc/67/675a46eb016118a2fbde5a277a5d15f4f69d5f3f5f338e5ee2f8948fcf43/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:edac0f1ab77644605be2cbba52e6b7f630731fc42b34cb0f634be1a6eface56a", size = 225239 }, + { url = "https://files.pythonhosted.org/packages/4b/f8/d0118a2f5f23b02cd166fa385c60f9b0d4f9194f574e2b31cef350ad7223/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5649fd1c7bade02f320a462fdefd0b4bd3ce036065836d4f42e0de958038e116", size = 216589 }, + { url = "https://files.pythonhosted.org/packages/b1/f1/6d2b0b261b6c4ceef0fcb0d17a01cc5bc53586c2d4796fa04b5c540bc13d/charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:203104ed3e428044fd943bc4bf45fa73c0730391f9621e37fe39ecf477b128cb", size = 202733 }, + { url = "https://files.pythonhosted.org/packages/6f/c0/7b1f943f7e87cc3db9626ba17807d042c38645f0a1d4415c7a14afb5591f/charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:298930cec56029e05497a76988377cbd7457ba864beeea92ad7e844fe74cd1f1", size = 212652 }, + { url = "https://files.pythonhosted.org/packages/38/dd/5a9ab159fe45c6e72079398f277b7d2b523e7f716acc489726115a910097/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:708838739abf24b2ceb208d0e22403dd018faeef86ddac04319a62ae884c4f15", size = 211229 }, + { url = "https://files.pythonhosted.org/packages/d5/ff/531a1cad5ca855d1c1a8b69cb71abfd6d85c0291580146fda7c82857caa1/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:0f7eb884681e3938906ed0434f20c63046eacd0111c4ba96f27b76084cd679f5", size = 203552 }, + { url = "https://files.pythonhosted.org/packages/c1/4c/a5fb52d528a8ca41f7598cb619409ece30a169fbdf9cdce592e53b46c3a6/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4dc1e73c36828f982bfe79fadf5919923f8a6f4df2860804db9a98c48824ce8d", size = 230806 }, + { url = "https://files.pythonhosted.org/packages/59/7a/071feed8124111a32b316b33ae4de83d36923039ef8cf48120266844285b/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:aed52fea0513bac0ccde438c188c8a471c4e0f457c2dd20cdbf6ea7a450046c7", size = 212316 }, + { url = "https://files.pythonhosted.org/packages/fd/35/f7dba3994312d7ba508e041eaac39a36b120f32d4c8662b8814dab876431/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:fea24543955a6a729c45a73fe90e08c743f0b3334bbf3201e6c4bc1b0c7fa464", size = 227274 }, + { url = "https://files.pythonhosted.org/packages/8a/2d/a572df5c9204ab7688ec1edc895a73ebded3b023bb07364710b05dd1c9be/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bb6d88045545b26da47aa879dd4a89a71d1dce0f0e549b1abcb31dfe4a8eac49", size = 218468 }, + { url = "https://files.pythonhosted.org/packages/86/eb/890922a8b03a568ca2f336c36585a4713c55d4d67bf0f0c78924be6315ca/charset_normalizer-3.4.7-cp312-cp312-win32.whl", hash = "sha256:2257141f39fe65a3fdf38aeccae4b953e5f3b3324f4ff0daf9f15b8518666a2c", size = 148460 }, + { url = "https://files.pythonhosted.org/packages/35/d9/0e7dffa06c5ab081f75b1b786f0aefc88365825dfcd0ac544bdb7b2b6853/charset_normalizer-3.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:5ed6ab538499c8644b8a3e18debabcd7ce684f3fa91cf867521a7a0279cab2d6", size = 159330 }, + { url = "https://files.pythonhosted.org/packages/9e/5d/481bcc2a7c88ea6b0878c299547843b2521ccbc40980cb406267088bc701/charset_normalizer-3.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:56be790f86bfb2c98fb742ce566dfb4816e5a83384616ab59c49e0604d49c51d", size = 147828 }, + { url = "https://files.pythonhosted.org/packages/c1/3b/66777e39d3ae1ddc77ee606be4ec6d8cbd4c801f65e5a1b6f2b11b8346dd/charset_normalizer-3.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f496c9c3cc02230093d8330875c4c3cdfc3b73612a5fd921c65d39cbcef08063", size = 309627 }, + { url = "https://files.pythonhosted.org/packages/2e/4e/b7f84e617b4854ade48a1b7915c8ccfadeba444d2a18c291f696e37f0d3b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ea948db76d31190bf08bd371623927ee1339d5f2a0b4b1b4a4439a65298703c", size = 207008 }, + { url = "https://files.pythonhosted.org/packages/c4/bb/ec73c0257c9e11b268f018f068f5d00aa0ef8c8b09f7753ebd5f2880e248/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a277ab8928b9f299723bc1a2dabb1265911b1a76341f90a510368ca44ad9ab66", size = 228303 }, + { url = "https://files.pythonhosted.org/packages/85/fb/32d1f5033484494619f701e719429c69b766bfc4dbc61aa9e9c8c166528b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3bec022aec2c514d9cf199522a802bd007cd588ab17ab2525f20f9c34d067c18", size = 224282 }, + { url = "https://files.pythonhosted.org/packages/fa/07/330e3a0dda4c404d6da83b327270906e9654a24f6c546dc886a0eb0ffb23/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e044c39e41b92c845bc815e5ae4230804e8e7bc29e399b0437d64222d92809dd", size = 215595 }, + { url = "https://files.pythonhosted.org/packages/e3/7c/fc890655786e423f02556e0216d4b8c6bcb6bdfa890160dc66bf52dee468/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:f495a1652cf3fbab2eb0639776dad966c2fb874d79d87ca07f9d5f059b8bd215", size = 201986 }, + { url = "https://files.pythonhosted.org/packages/d8/97/bfb18b3db2aed3b90cf54dc292ad79fdd5ad65c4eae454099475cbeadd0d/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e712b419df8ba5e42b226c510472b37bd57b38e897d3eca5e8cfd410a29fa859", size = 211711 }, + { url = "https://files.pythonhosted.org/packages/6f/a5/a581c13798546a7fd557c82614a5c65a13df2157e9ad6373166d2a3e645d/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7804338df6fcc08105c7745f1502ba68d900f45fd770d5bdd5288ddccb8a42d8", size = 210036 }, + { url = "https://files.pythonhosted.org/packages/8c/bf/b3ab5bcb478e4193d517644b0fb2bf5497fbceeaa7a1bc0f4d5b50953861/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:481551899c856c704d58119b5025793fa6730adda3571971af568f66d2424bb5", size = 202998 }, + { url = "https://files.pythonhosted.org/packages/e7/4e/23efd79b65d314fa320ec6017b4b5834d5c12a58ba4610aa353af2e2f577/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f59099f9b66f0d7145115e6f80dd8b1d847176df89b234a5a6b3f00437aa0832", size = 230056 }, + { url = "https://files.pythonhosted.org/packages/b9/9f/1e1941bc3f0e01df116e68dc37a55c4d249df5e6fa77f008841aef68264f/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:f59ad4c0e8f6bba240a9bb85504faa1ab438237199d4cce5f622761507b8f6a6", size = 211537 }, + { url = "https://files.pythonhosted.org/packages/80/0f/088cbb3020d44428964a6c97fe1edfb1b9550396bf6d278330281e8b709c/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:3dedcc22d73ec993f42055eff4fcfed9318d1eeb9a6606c55892a26964964e48", size = 226176 }, + { url = "https://files.pythonhosted.org/packages/6a/9f/130394f9bbe06f4f63e22641d32fc9b202b7e251c9aef4db044324dac493/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:64f02c6841d7d83f832cd97ccf8eb8a906d06eb95d5276069175c696b024b60a", size = 217723 }, + { url = "https://files.pythonhosted.org/packages/73/55/c469897448a06e49f8fa03f6caae97074fde823f432a98f979cc42b90e69/charset_normalizer-3.4.7-cp313-cp313-win32.whl", hash = "sha256:4042d5c8f957e15221d423ba781e85d553722fc4113f523f2feb7b188cc34c5e", size = 148085 }, + { url = "https://files.pythonhosted.org/packages/5d/78/1b74c5bbb3f99b77a1715c91b3e0b5bdb6fe302d95ace4f5b1bec37b0167/charset_normalizer-3.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:3946fa46a0cf3e4c8cb1cc52f56bb536310d34f25f01ca9b6c16afa767dab110", size = 158819 }, + { url = "https://files.pythonhosted.org/packages/68/86/46bd42279d323deb8687c4a5a811fd548cb7d1de10cf6535d099877a9a9f/charset_normalizer-3.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:80d04837f55fc81da168b98de4f4b797ef007fc8a79ab71c6ec9bc4dd662b15b", size = 147915 }, + { url = "https://files.pythonhosted.org/packages/97/c8/c67cb8c70e19ef1960b97b22ed2a1567711de46c4ddf19799923adc836c2/charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0", size = 309234 }, + { url = "https://files.pythonhosted.org/packages/99/85/c091fdee33f20de70d6c8b522743b6f831a2f1cd3ff86de4c6a827c48a76/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a", size = 208042 }, + { url = "https://files.pythonhosted.org/packages/87/1c/ab2ce611b984d2fd5d86a5a8a19c1ae26acac6bad967da4967562c75114d/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:54523e136b8948060c0fa0bc7b1b50c32c186f2fceee897a495406bb6e311d2b", size = 228706 }, + { url = "https://files.pythonhosted.org/packages/a8/29/2b1d2cb00bf085f59d29eb773ce58ec2d325430f8c216804a0a5cd83cbca/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:715479b9a2802ecac752a3b0efa2b0b60285cf962ee38414211abdfccc233b41", size = 224727 }, + { url = "https://files.pythonhosted.org/packages/47/5c/032c2d5a07fe4d4855fea851209cca2b6f03ebeb6d4e3afdb3358386a684/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e", size = 215882 }, + { url = "https://files.pythonhosted.org/packages/2c/c2/356065d5a8b78ed04499cae5f339f091946a6a74f91e03476c33f0ab7100/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:c45e9440fb78f8ddabcf714b68f936737a121355bf59f3907f4e17721b9d1aae", size = 200860 }, + { url = "https://files.pythonhosted.org/packages/0c/cd/a32a84217ced5039f53b29f460962abb2d4420def55afabe45b1c3c7483d/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3534e7dcbdcf757da6b85a0bbf5b6868786d5982dd959b065e65481644817a18", size = 211564 }, + { url = "https://files.pythonhosted.org/packages/44/86/58e6f13ce26cc3b8f4a36b94a0f22ae2f00a72534520f4ae6857c4b81f89/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b", size = 211276 }, + { url = "https://files.pythonhosted.org/packages/8f/fe/d17c32dc72e17e155e06883efa84514ca375f8a528ba2546bee73fc4df81/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53fd1749f5896adcdc2356", size = 201238 }, + { url = "https://files.pythonhosted.org/packages/6a/29/f33daa50b06525a237451cdb6c69da366c381a3dadcd833fa5676bc468b3/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57ddf5b1142ae3f86824fab", size = 230189 }, + { url = "https://files.pythonhosted.org/packages/b6/6e/52c84015394a6a0bdcd435210a7e944c5f94ea1055f5cc5d56c5fe368e7b/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e74327fb75de8986940def6e8dee4f127cc9752bee7355bb323cc5b2659b6d46", size = 211352 }, + { url = "https://files.pythonhosted.org/packages/8c/d7/4353be581b373033fb9198bf1da3cf8f09c1082561e8e922aa7b39bf9fe8/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d6038d37043bced98a66e68d3aa2b6a35505dc01328cd65217cefe82f25def44", size = 227024 }, + { url = "https://files.pythonhosted.org/packages/30/45/99d18aa925bd1740098ccd3060e238e21115fffbfdcb8f3ece837d0ace6c/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72", size = 217869 }, + { url = "https://files.pythonhosted.org/packages/5c/05/5ee478aa53f4bb7996482153d4bfe1b89e0f087f0ab6b294fcf92d595873/charset_normalizer-3.4.7-cp314-cp314-win32.whl", hash = "sha256:5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410ec10", size = 148541 }, + { url = "https://files.pythonhosted.org/packages/48/77/72dcb0921b2ce86420b2d79d454c7022bf5be40202a2a07906b9f2a35c97/charset_normalizer-3.4.7-cp314-cp314-win_amd64.whl", hash = "sha256:92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f", size = 159634 }, + { url = "https://files.pythonhosted.org/packages/c6/a3/c2369911cd72f02386e4e340770f6e158c7980267da16af8f668217abaa0/charset_normalizer-3.4.7-cp314-cp314-win_arm64.whl", hash = "sha256:67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba3e63c246", size = 148384 }, + { url = "https://files.pythonhosted.org/packages/94/09/7e8a7f73d24dba1f0035fbbf014d2c36828fc1bf9c88f84093e57d315935/charset_normalizer-3.4.7-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24", size = 330133 }, + { url = "https://files.pythonhosted.org/packages/8d/da/96975ddb11f8e977f706f45cddd8540fd8242f71ecdb5d18a80723dcf62c/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79", size = 216257 }, + { url = "https://files.pythonhosted.org/packages/e5/e8/1d63bf8ef2d388e95c64b2098f45f84758f6d102a087552da1485912637b/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:733784b6d6def852c814bce5f318d25da2ee65dd4839a0718641c696e09a2960", size = 234851 }, + { url = "https://files.pythonhosted.org/packages/9b/40/e5ff04233e70da2681fa43969ad6f66ca5611d7e669be0246c4c7aaf6dc8/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a89c23ef8d2c6b27fd200a42aa4ac72786e7c60d40efdc76e6011260b6e949c4", size = 233393 }, + { url = "https://files.pythonhosted.org/packages/be/c1/06c6c49d5a5450f76899992f1ee40b41d076aee9279b49cf9974d2f313d5/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e", size = 223251 }, + { url = "https://files.pythonhosted.org/packages/2b/9f/f2ff16fb050946169e3e1f82134d107e5d4ae72647ec8a1b1446c148480f/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:a180c5e59792af262bf263b21a3c49353f25945d8d9f70628e73de370d55e1e1", size = 206609 }, + { url = "https://files.pythonhosted.org/packages/69/d5/a527c0cd8d64d2eab7459784fb4169a0ac76e5a6fc5237337982fd61347e/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3c9a494bc5ec77d43cea229c4f6db1e4d8fe7e1bbffa8b6f0f0032430ff8ab44", size = 220014 }, + { url = "https://files.pythonhosted.org/packages/7e/80/8a7b8104a3e203074dc9aa2c613d4b726c0e136bad1cc734594b02867972/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e", size = 218979 }, + { url = "https://files.pythonhosted.org/packages/02/9a/b759b503d507f375b2b5c153e4d2ee0a75aa215b7f2489cf314f4541f2c0/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284cc94962cb73d20f9d4a3", size = 209238 }, + { url = "https://files.pythonhosted.org/packages/c2/4e/0f3f5d47b86bdb79256e7290b26ac847a2832d9a4033f7eb2cd4bcf4bb5b/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0c96c3b819b5c3e9e165495db84d41914d6894d55181d2d108cc1a69bfc9cce0", size = 236110 }, + { url = "https://files.pythonhosted.org/packages/96/23/bce28734eb3ed2c91dcf93abeb8a5cf393a7b2749725030bb630e554fdd8/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:752a45dc4a6934060b3b0dab47e04edc3326575f82be64bc4fc293914566503e", size = 219824 }, + { url = "https://files.pythonhosted.org/packages/2c/6f/6e897c6984cc4d41af319b077f2f600fc8214eb2fe2d6bcb79141b882400/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164b981b9c5ce059cd1fcb", size = 233103 }, + { url = "https://files.pythonhosted.org/packages/76/22/ef7bd0fe480a0ae9b656189ec00744b60933f68b4f42a7bb06589f6f576a/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe", size = 225194 }, + { url = "https://files.pythonhosted.org/packages/c5/a7/0e0ab3e0b5bc1219bd80a6a0d4d72ca74d9250cb2382b7c699c147e06017/charset_normalizer-3.4.7-cp314-cp314t-win32.whl", hash = "sha256:c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615339a0", size = 159827 }, + { url = "https://files.pythonhosted.org/packages/7a/1d/29d32e0fb40864b1f878c7f5a0b343ae676c6e2b271a2d55cc3a152391da/charset_normalizer-3.4.7-cp314-cp314t-win_amd64.whl", hash = "sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c", size = 174168 }, + { url = "https://files.pythonhosted.org/packages/de/32/d92444ad05c7a6e41fb2036749777c163baf7a0301a040cb672d6b2b1ae9/charset_normalizer-3.4.7-cp314-cp314t-win_arm64.whl", hash = "sha256:c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a763c1f083d", size = 153018 }, + { url = "https://files.pythonhosted.org/packages/01/1b/ef725f8eb19b5a261b30f78efa9252ef9d017985cb499102f6f49834cd12/charset_normalizer-3.4.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:177a0ba5f0211d488e295aaf82707237e331c24788d8d76c96c5a41594723217", size = 299121 }, + { url = "https://files.pythonhosted.org/packages/a3/22/2f12878fbc680fbbb52386cd39a379801f62eaca74fc8b323381325f0f04/charset_normalizer-3.4.7-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e0d51f618228538a3e8f46bd246f87a6cd030565e015803691603f55e12afb5", size = 200612 }, + { url = "https://files.pythonhosted.org/packages/bc/b6/10c84e789126ca97d4a7228863a30481e786980a8b8cfcbf4f30658ca63c/charset_normalizer-3.4.7-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:14265bfe1f09498b9d8ec91e9ec9fa52775edf90fcbde092b25f4a33d444fea9", size = 221041 }, + { url = "https://files.pythonhosted.org/packages/21/7b/c414866a138400b2e81973d006da7f694cfeaf895ef07d2cba9a8743841a/charset_normalizer-3.4.7-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:87fad7d9ba98c86bcb41b2dc8dbb326619be2562af1f8ff50776a39e55721c5a", size = 216323 }, + { url = "https://files.pythonhosted.org/packages/2e/92/bdcf94997e06b223d826df3abed45a5ad6e17f609b7df9d25cd23b5bde30/charset_normalizer-3.4.7-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f22dec1690b584cea26fade98b2435c132c1b5f68e39f5a0b7627cd7ae31f1dc", size = 208419 }, + { url = "https://files.pythonhosted.org/packages/1a/64/3f9142293c88b1b10e199649ed1330f070c2a68e305335a5819fa7f25fa7/charset_normalizer-3.4.7-cp39-cp39-manylinux_2_31_armv7l.whl", hash = "sha256:d61f00a0869d77422d9b2aba989e2d24afa6ffd552af442e0e58de4f35ea6d00", size = 195016 }, + { url = "https://files.pythonhosted.org/packages/c1/d1/d8a6b7dd5c5636b76ce0d080bc57d8e56c7bbd6bc2ac941529a35e41d84a/charset_normalizer-3.4.7-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6370e8686f662e6a3941ee48ed4742317cafbe5707e36406e9df792cdb535776", size = 206115 }, + { url = "https://files.pythonhosted.org/packages/dd/8c/60ebe912379627d023eb96995b40bc50308729f210f43d66109ca0a7bbd2/charset_normalizer-3.4.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a6c5863edfbe888d9eff9c8b8087354e27618d9da76425c119293f11712a6319", size = 204022 }, + { url = "https://files.pythonhosted.org/packages/d5/2a/41816ceda78a551cbfdfbeab6f3891152b0e3f758ce6580c2c18c829f774/charset_normalizer-3.4.7-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:ed065083d0898c9d5b4bbec7b026fd755ff7454e6e8b73a67f8c744b13986e24", size = 195914 }, + { url = "https://files.pythonhosted.org/packages/8f/9b/7c7f4b7f11525fcbdfba752455314ac60646bae91cdd671d531c1f7a97c6/charset_normalizer-3.4.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:2cd4a60d0e2fb04537162c62bbbb4182f53541fe0ede35cdf270a1c1e723cc42", size = 222159 }, + { url = "https://files.pythonhosted.org/packages/9f/57/301682e7469bdbfa2ce219a804f0668b2266ab8520570d85d3b3ef483ea3/charset_normalizer-3.4.7-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:813c0e0132266c08eb87469a642cb30aaff57c5f426255419572aaeceeaa7bf4", size = 206154 }, + { url = "https://files.pythonhosted.org/packages/20/ec/90339ff5cdc598b265748c1f231c7d7fbd9123a92cee10f757e0b1448de4/charset_normalizer-3.4.7-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:07d9e39b01743c3717745f4c530a6349eadbfa043c7577eef86c502c15df2c67", size = 217423 }, + { url = "https://files.pythonhosted.org/packages/2e/e7/a7a6147f8e3375676309cf584b25c72a3bab784ea4085b0011fa07b23aeb/charset_normalizer-3.4.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c0f081d69a6e58272819b70288d3221a6ee64b98df852631c80f293514d3b274", size = 210604 }, + { url = "https://files.pythonhosted.org/packages/1a/62/d9340c7a79c393e57807d7fb6c57e82060687891f81b74d3201958b919c1/charset_normalizer-3.4.7-cp39-cp39-win32.whl", hash = "sha256:8751d2787c9131302398b11e6c8068053dcb55d5a8964e114b6e196cf16cb366", size = 144631 }, + { url = "https://files.pythonhosted.org/packages/21/e7/92901117e2ddc8facfe8235a3ecd4eb482185b2ad5d5b6606b37c1afea06/charset_normalizer-3.4.7-cp39-cp39-win_amd64.whl", hash = "sha256:12a6fff75f6bc66711b73a2f0addfc4c8c15a20e805146a02d147a318962c444", size = 154710 }, + { url = "https://files.pythonhosted.org/packages/cc/4f/e1fb138201ad9a32499dd9a98aa4a5a5441fbf7f56b52b619a54b7ee8777/charset_normalizer-3.4.7-cp39-cp39-win_arm64.whl", hash = "sha256:bb8cc7534f51d9a017b93e3e85b260924f909601c3df002bcdb58ddb4dc41a5c", size = 143716 }, + { url = "https://files.pythonhosted.org/packages/db/8f/61959034484a4a7c527811f4721e75d02d653a35afb0b6054474d8185d4c/charset_normalizer-3.4.7-py3-none-any.whl", hash = "sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d", size = 61958 }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, +] + +[[package]] +name = "comm" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4c/13/7d740c5849255756bc17888787313b61fd38a0a8304fc4f073dfc46122aa/comm-0.2.3.tar.gz", hash = "sha256:2dc8048c10962d55d7ad693be1e7045d891b7ce8d999c97963a5e3e99c055971", size = 6319 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl", hash = "sha256:c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417", size = 7294 }, +] + +[[package]] +name = "coverage" +version = "7.10.7" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/51/26/d22c300112504f5f9a9fd2297ce33c35f3d353e4aeb987c8419453b2a7c2/coverage-7.10.7.tar.gz", hash = "sha256:f4ab143ab113be368a3e9b795f9cd7906c5ef407d6173fe9675a902e1fffc239", size = 827704 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/6c/3a3f7a46888e69d18abe3ccc6fe4cb16cccb1e6a2f99698931dafca489e6/coverage-7.10.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fc04cc7a3db33664e0c2d10eb8990ff6b3536f6842c9590ae8da4c614b9ed05a", size = 217987 }, + { url = "https://files.pythonhosted.org/packages/03/94/952d30f180b1a916c11a56f5c22d3535e943aa22430e9e3322447e520e1c/coverage-7.10.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e201e015644e207139f7e2351980feb7040e6f4b2c2978892f3e3789d1c125e5", size = 218388 }, + { url = "https://files.pythonhosted.org/packages/50/2b/9e0cf8ded1e114bcd8b2fd42792b57f1c4e9e4ea1824cde2af93a67305be/coverage-7.10.7-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:240af60539987ced2c399809bd34f7c78e8abe0736af91c3d7d0e795df633d17", size = 245148 }, + { url = "https://files.pythonhosted.org/packages/19/20/d0384ac06a6f908783d9b6aa6135e41b093971499ec488e47279f5b846e6/coverage-7.10.7-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8421e088bc051361b01c4b3a50fd39a4b9133079a2229978d9d30511fd05231b", size = 246958 }, + { url = "https://files.pythonhosted.org/packages/60/83/5c283cff3d41285f8eab897651585db908a909c572bdc014bcfaf8a8b6ae/coverage-7.10.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6be8ed3039ae7f7ac5ce058c308484787c86e8437e72b30bf5e88b8ea10f3c87", size = 248819 }, + { url = "https://files.pythonhosted.org/packages/60/22/02eb98fdc5ff79f423e990d877693e5310ae1eab6cb20ae0b0b9ac45b23b/coverage-7.10.7-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e28299d9f2e889e6d51b1f043f58d5f997c373cc12e6403b90df95b8b047c13e", size = 245754 }, + { url = "https://files.pythonhosted.org/packages/b4/bc/25c83bcf3ad141b32cd7dc45485ef3c01a776ca3aa8ef0a93e77e8b5bc43/coverage-7.10.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c4e16bd7761c5e454f4efd36f345286d6f7c5fa111623c355691e2755cae3b9e", size = 246860 }, + { url = "https://files.pythonhosted.org/packages/3c/b7/95574702888b58c0928a6e982038c596f9c34d52c5e5107f1eef729399b5/coverage-7.10.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b1c81d0e5e160651879755c9c675b974276f135558cf4ba79fee7b8413a515df", size = 244877 }, + { url = "https://files.pythonhosted.org/packages/47/b6/40095c185f235e085df0e0b158f6bd68cc6e1d80ba6c7721dc81d97ec318/coverage-7.10.7-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:606cc265adc9aaedcc84f1f064f0e8736bc45814f15a357e30fca7ecc01504e0", size = 245108 }, + { url = "https://files.pythonhosted.org/packages/c8/50/4aea0556da7a4b93ec9168420d170b55e2eb50ae21b25062513d020c6861/coverage-7.10.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:10b24412692df990dbc34f8fb1b6b13d236ace9dfdd68df5b28c2e39cafbba13", size = 245752 }, + { url = "https://files.pythonhosted.org/packages/6a/28/ea1a84a60828177ae3b100cb6723838523369a44ec5742313ed7db3da160/coverage-7.10.7-cp310-cp310-win32.whl", hash = "sha256:b51dcd060f18c19290d9b8a9dd1e0181538df2ce0717f562fff6cf74d9fc0b5b", size = 220497 }, + { url = "https://files.pythonhosted.org/packages/fc/1a/a81d46bbeb3c3fd97b9602ebaa411e076219a150489bcc2c025f151bd52d/coverage-7.10.7-cp310-cp310-win_amd64.whl", hash = "sha256:3a622ac801b17198020f09af3eaf45666b344a0d69fc2a6ffe2ea83aeef1d807", size = 221392 }, + { url = "https://files.pythonhosted.org/packages/d2/5d/c1a17867b0456f2e9ce2d8d4708a4c3a089947d0bec9c66cdf60c9e7739f/coverage-7.10.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a609f9c93113be646f44c2a0256d6ea375ad047005d7f57a5c15f614dc1b2f59", size = 218102 }, + { url = "https://files.pythonhosted.org/packages/54/f0/514dcf4b4e3698b9a9077f084429681bf3aad2b4a72578f89d7f643eb506/coverage-7.10.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:65646bb0359386e07639c367a22cf9b5bf6304e8630b565d0626e2bdf329227a", size = 218505 }, + { url = "https://files.pythonhosted.org/packages/20/f6/9626b81d17e2a4b25c63ac1b425ff307ecdeef03d67c9a147673ae40dc36/coverage-7.10.7-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5f33166f0dfcce728191f520bd2692914ec70fac2713f6bf3ce59c3deacb4699", size = 248898 }, + { url = "https://files.pythonhosted.org/packages/b0/ef/bd8e719c2f7417ba03239052e099b76ea1130ac0cbb183ee1fcaa58aaff3/coverage-7.10.7-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:35f5e3f9e455bb17831876048355dca0f758b6df22f49258cb5a91da23ef437d", size = 250831 }, + { url = "https://files.pythonhosted.org/packages/a5/b6/bf054de41ec948b151ae2b79a55c107f5760979538f5fb80c195f2517718/coverage-7.10.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4da86b6d62a496e908ac2898243920c7992499c1712ff7c2b6d837cc69d9467e", size = 252937 }, + { url = "https://files.pythonhosted.org/packages/0f/e5/3860756aa6f9318227443c6ce4ed7bf9e70bb7f1447a0353f45ac5c7974b/coverage-7.10.7-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6b8b09c1fad947c84bbbc95eca841350fad9cbfa5a2d7ca88ac9f8d836c92e23", size = 249021 }, + { url = "https://files.pythonhosted.org/packages/26/0f/bd08bd042854f7fd07b45808927ebcce99a7ed0f2f412d11629883517ac2/coverage-7.10.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4376538f36b533b46f8971d3a3e63464f2c7905c9800db97361c43a2b14792ab", size = 250626 }, + { url = "https://files.pythonhosted.org/packages/8e/a7/4777b14de4abcc2e80c6b1d430f5d51eb18ed1d75fca56cbce5f2db9b36e/coverage-7.10.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:121da30abb574f6ce6ae09840dae322bef734480ceafe410117627aa54f76d82", size = 248682 }, + { url = "https://files.pythonhosted.org/packages/34/72/17d082b00b53cd45679bad682fac058b87f011fd8b9fe31d77f5f8d3a4e4/coverage-7.10.7-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:88127d40df529336a9836870436fc2751c339fbaed3a836d42c93f3e4bd1d0a2", size = 248402 }, + { url = "https://files.pythonhosted.org/packages/81/7a/92367572eb5bdd6a84bfa278cc7e97db192f9f45b28c94a9ca1a921c3577/coverage-7.10.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ba58bbcd1b72f136080c0bccc2400d66cc6115f3f906c499013d065ac33a4b61", size = 249320 }, + { url = "https://files.pythonhosted.org/packages/2f/88/a23cc185f6a805dfc4fdf14a94016835eeb85e22ac3a0e66d5e89acd6462/coverage-7.10.7-cp311-cp311-win32.whl", hash = "sha256:972b9e3a4094b053a4e46832b4bc829fc8a8d347160eb39d03f1690316a99c14", size = 220536 }, + { url = "https://files.pythonhosted.org/packages/fe/ef/0b510a399dfca17cec7bc2f05ad8bd78cf55f15c8bc9a73ab20c5c913c2e/coverage-7.10.7-cp311-cp311-win_amd64.whl", hash = "sha256:a7b55a944a7f43892e28ad4bc0561dfd5f0d73e605d1aa5c3c976b52aea121d2", size = 221425 }, + { url = "https://files.pythonhosted.org/packages/51/7f/023657f301a276e4ba1850f82749bc136f5a7e8768060c2e5d9744a22951/coverage-7.10.7-cp311-cp311-win_arm64.whl", hash = "sha256:736f227fb490f03c6488f9b6d45855f8e0fd749c007f9303ad30efab0e73c05a", size = 220103 }, + { url = "https://files.pythonhosted.org/packages/13/e4/eb12450f71b542a53972d19117ea5a5cea1cab3ac9e31b0b5d498df1bd5a/coverage-7.10.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7bb3b9ddb87ef7725056572368040c32775036472d5a033679d1fa6c8dc08417", size = 218290 }, + { url = "https://files.pythonhosted.org/packages/37/66/593f9be12fc19fb36711f19a5371af79a718537204d16ea1d36f16bd78d2/coverage-7.10.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:18afb24843cbc175687225cab1138c95d262337f5473512010e46831aa0c2973", size = 218515 }, + { url = "https://files.pythonhosted.org/packages/66/80/4c49f7ae09cafdacc73fbc30949ffe77359635c168f4e9ff33c9ebb07838/coverage-7.10.7-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:399a0b6347bcd3822be369392932884b8216d0944049ae22925631a9b3d4ba4c", size = 250020 }, + { url = "https://files.pythonhosted.org/packages/a6/90/a64aaacab3b37a17aaedd83e8000142561a29eb262cede42d94a67f7556b/coverage-7.10.7-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:314f2c326ded3f4b09be11bc282eb2fc861184bc95748ae67b360ac962770be7", size = 252769 }, + { url = "https://files.pythonhosted.org/packages/98/2e/2dda59afd6103b342e096f246ebc5f87a3363b5412609946c120f4e7750d/coverage-7.10.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c41e71c9cfb854789dee6fc51e46743a6d138b1803fab6cb860af43265b42ea6", size = 253901 }, + { url = "https://files.pythonhosted.org/packages/53/dc/8d8119c9051d50f3119bb4a75f29f1e4a6ab9415cd1fa8bf22fcc3fb3b5f/coverage-7.10.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc01f57ca26269c2c706e838f6422e2a8788e41b3e3c65e2f41148212e57cd59", size = 250413 }, + { url = "https://files.pythonhosted.org/packages/98/b3/edaff9c5d79ee4d4b6d3fe046f2b1d799850425695b789d491a64225d493/coverage-7.10.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a6442c59a8ac8b85812ce33bc4d05bde3fb22321fa8294e2a5b487c3505f611b", size = 251820 }, + { url = "https://files.pythonhosted.org/packages/11/25/9a0728564bb05863f7e513e5a594fe5ffef091b325437f5430e8cfb0d530/coverage-7.10.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:78a384e49f46b80fb4c901d52d92abe098e78768ed829c673fbb53c498bef73a", size = 249941 }, + { url = "https://files.pythonhosted.org/packages/e0/fd/ca2650443bfbef5b0e74373aac4df67b08180d2f184b482c41499668e258/coverage-7.10.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:5e1e9802121405ede4b0133aa4340ad8186a1d2526de5b7c3eca519db7bb89fb", size = 249519 }, + { url = "https://files.pythonhosted.org/packages/24/79/f692f125fb4299b6f963b0745124998ebb8e73ecdfce4ceceb06a8c6bec5/coverage-7.10.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d41213ea25a86f69efd1575073d34ea11aabe075604ddf3d148ecfec9e1e96a1", size = 251375 }, + { url = "https://files.pythonhosted.org/packages/5e/75/61b9bbd6c7d24d896bfeec57acba78e0f8deac68e6baf2d4804f7aae1f88/coverage-7.10.7-cp312-cp312-win32.whl", hash = "sha256:77eb4c747061a6af8d0f7bdb31f1e108d172762ef579166ec84542f711d90256", size = 220699 }, + { url = "https://files.pythonhosted.org/packages/ca/f3/3bf7905288b45b075918d372498f1cf845b5b579b723c8fd17168018d5f5/coverage-7.10.7-cp312-cp312-win_amd64.whl", hash = "sha256:f51328ffe987aecf6d09f3cd9d979face89a617eacdaea43e7b3080777f647ba", size = 221512 }, + { url = "https://files.pythonhosted.org/packages/5c/44/3e32dbe933979d05cf2dac5e697c8599cfe038aaf51223ab901e208d5a62/coverage-7.10.7-cp312-cp312-win_arm64.whl", hash = "sha256:bda5e34f8a75721c96085903c6f2197dc398c20ffd98df33f866a9c8fd95f4bf", size = 220147 }, + { url = "https://files.pythonhosted.org/packages/9a/94/b765c1abcb613d103b64fcf10395f54d69b0ef8be6a0dd9c524384892cc7/coverage-7.10.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:981a651f543f2854abd3b5fcb3263aac581b18209be49863ba575de6edf4c14d", size = 218320 }, + { url = "https://files.pythonhosted.org/packages/72/4f/732fff31c119bb73b35236dd333030f32c4bfe909f445b423e6c7594f9a2/coverage-7.10.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:73ab1601f84dc804f7812dc297e93cd99381162da39c47040a827d4e8dafe63b", size = 218575 }, + { url = "https://files.pythonhosted.org/packages/87/02/ae7e0af4b674be47566707777db1aa375474f02a1d64b9323e5813a6cdd5/coverage-7.10.7-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a8b6f03672aa6734e700bbcd65ff050fd19cddfec4b031cc8cf1c6967de5a68e", size = 249568 }, + { url = "https://files.pythonhosted.org/packages/a2/77/8c6d22bf61921a59bce5471c2f1f7ac30cd4ac50aadde72b8c48d5727902/coverage-7.10.7-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:10b6ba00ab1132a0ce4428ff68cf50a25efd6840a42cdf4239c9b99aad83be8b", size = 252174 }, + { url = "https://files.pythonhosted.org/packages/b1/20/b6ea4f69bbb52dac0aebd62157ba6a9dddbfe664f5af8122dac296c3ee15/coverage-7.10.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c79124f70465a150e89340de5963f936ee97097d2ef76c869708c4248c63ca49", size = 253447 }, + { url = "https://files.pythonhosted.org/packages/f9/28/4831523ba483a7f90f7b259d2018fef02cb4d5b90bc7c1505d6e5a84883c/coverage-7.10.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:69212fbccdbd5b0e39eac4067e20a4a5256609e209547d86f740d68ad4f04911", size = 249779 }, + { url = "https://files.pythonhosted.org/packages/a7/9f/4331142bc98c10ca6436d2d620c3e165f31e6c58d43479985afce6f3191c/coverage-7.10.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7ea7c6c9d0d286d04ed3541747e6597cbe4971f22648b68248f7ddcd329207f0", size = 251604 }, + { url = "https://files.pythonhosted.org/packages/ce/60/bda83b96602036b77ecf34e6393a3836365481b69f7ed7079ab85048202b/coverage-7.10.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b9be91986841a75042b3e3243d0b3cb0b2434252b977baaf0cd56e960fe1e46f", size = 249497 }, + { url = "https://files.pythonhosted.org/packages/5f/af/152633ff35b2af63977edd835d8e6430f0caef27d171edf2fc76c270ef31/coverage-7.10.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:b281d5eca50189325cfe1f365fafade89b14b4a78d9b40b05ddd1fc7d2a10a9c", size = 249350 }, + { url = "https://files.pythonhosted.org/packages/9d/71/d92105d122bd21cebba877228990e1646d862e34a98bb3374d3fece5a794/coverage-7.10.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:99e4aa63097ab1118e75a848a28e40d68b08a5e19ce587891ab7fd04475e780f", size = 251111 }, + { url = "https://files.pythonhosted.org/packages/a2/9e/9fdb08f4bf476c912f0c3ca292e019aab6712c93c9344a1653986c3fd305/coverage-7.10.7-cp313-cp313-win32.whl", hash = "sha256:dc7c389dce432500273eaf48f410b37886be9208b2dd5710aaf7c57fd442c698", size = 220746 }, + { url = "https://files.pythonhosted.org/packages/b1/b1/a75fd25df44eab52d1931e89980d1ada46824c7a3210be0d3c88a44aaa99/coverage-7.10.7-cp313-cp313-win_amd64.whl", hash = "sha256:cac0fdca17b036af3881a9d2729a850b76553f3f716ccb0360ad4dbc06b3b843", size = 221541 }, + { url = "https://files.pythonhosted.org/packages/14/3a/d720d7c989562a6e9a14b2c9f5f2876bdb38e9367126d118495b89c99c37/coverage-7.10.7-cp313-cp313-win_arm64.whl", hash = "sha256:4b6f236edf6e2f9ae8fcd1332da4e791c1b6ba0dc16a2dc94590ceccb482e546", size = 220170 }, + { url = "https://files.pythonhosted.org/packages/bb/22/e04514bf2a735d8b0add31d2b4ab636fc02370730787c576bb995390d2d5/coverage-7.10.7-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a0ec07fd264d0745ee396b666d47cef20875f4ff2375d7c4f58235886cc1ef0c", size = 219029 }, + { url = "https://files.pythonhosted.org/packages/11/0b/91128e099035ece15da3445d9015e4b4153a6059403452d324cbb0a575fa/coverage-7.10.7-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:dd5e856ebb7bfb7672b0086846db5afb4567a7b9714b8a0ebafd211ec7ce6a15", size = 219259 }, + { url = "https://files.pythonhosted.org/packages/8b/51/66420081e72801536a091a0c8f8c1f88a5c4bf7b9b1bdc6222c7afe6dc9b/coverage-7.10.7-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f57b2a3c8353d3e04acf75b3fed57ba41f5c0646bbf1d10c7c282291c97936b4", size = 260592 }, + { url = "https://files.pythonhosted.org/packages/5d/22/9b8d458c2881b22df3db5bb3e7369e63d527d986decb6c11a591ba2364f7/coverage-7.10.7-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1ef2319dd15a0b009667301a3f84452a4dc6fddfd06b0c5c53ea472d3989fbf0", size = 262768 }, + { url = "https://files.pythonhosted.org/packages/f7/08/16bee2c433e60913c610ea200b276e8eeef084b0d200bdcff69920bd5828/coverage-7.10.7-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:83082a57783239717ceb0ad584de3c69cf581b2a95ed6bf81ea66034f00401c0", size = 264995 }, + { url = "https://files.pythonhosted.org/packages/20/9d/e53eb9771d154859b084b90201e5221bca7674ba449a17c101a5031d4054/coverage-7.10.7-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:50aa94fb1fb9a397eaa19c0d5ec15a5edd03a47bf1a3a6111a16b36e190cff65", size = 259546 }, + { url = "https://files.pythonhosted.org/packages/ad/b0/69bc7050f8d4e56a89fb550a1577d5d0d1db2278106f6f626464067b3817/coverage-7.10.7-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2120043f147bebb41c85b97ac45dd173595ff14f2a584f2963891cbcc3091541", size = 262544 }, + { url = "https://files.pythonhosted.org/packages/ef/4b/2514b060dbd1bc0aaf23b852c14bb5818f244c664cb16517feff6bb3a5ab/coverage-7.10.7-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2fafd773231dd0378fdba66d339f84904a8e57a262f583530f4f156ab83863e6", size = 260308 }, + { url = "https://files.pythonhosted.org/packages/54/78/7ba2175007c246d75e496f64c06e94122bdb914790a1285d627a918bd271/coverage-7.10.7-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:0b944ee8459f515f28b851728ad224fa2d068f1513ef6b7ff1efafeb2185f999", size = 258920 }, + { url = "https://files.pythonhosted.org/packages/c0/b3/fac9f7abbc841409b9a410309d73bfa6cfb2e51c3fada738cb607ce174f8/coverage-7.10.7-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4b583b97ab2e3efe1b3e75248a9b333bd3f8b0b1b8e5b45578e05e5850dfb2c2", size = 261434 }, + { url = "https://files.pythonhosted.org/packages/ee/51/a03bec00d37faaa891b3ff7387192cef20f01604e5283a5fabc95346befa/coverage-7.10.7-cp313-cp313t-win32.whl", hash = "sha256:2a78cd46550081a7909b3329e2266204d584866e8d97b898cd7fb5ac8d888b1a", size = 221403 }, + { url = "https://files.pythonhosted.org/packages/53/22/3cf25d614e64bf6d8e59c7c669b20d6d940bb337bdee5900b9ca41c820bb/coverage-7.10.7-cp313-cp313t-win_amd64.whl", hash = "sha256:33a5e6396ab684cb43dc7befa386258acb2d7fae7f67330ebb85ba4ea27938eb", size = 222469 }, + { url = "https://files.pythonhosted.org/packages/49/a1/00164f6d30d8a01c3c9c48418a7a5be394de5349b421b9ee019f380df2a0/coverage-7.10.7-cp313-cp313t-win_arm64.whl", hash = "sha256:86b0e7308289ddde73d863b7683f596d8d21c7d8664ce1dee061d0bcf3fbb4bb", size = 220731 }, + { url = "https://files.pythonhosted.org/packages/23/9c/5844ab4ca6a4dd97a1850e030a15ec7d292b5c5cb93082979225126e35dd/coverage-7.10.7-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:b06f260b16ead11643a5a9f955bd4b5fd76c1a4c6796aeade8520095b75de520", size = 218302 }, + { url = "https://files.pythonhosted.org/packages/f0/89/673f6514b0961d1f0e20ddc242e9342f6da21eaba3489901b565c0689f34/coverage-7.10.7-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:212f8f2e0612778f09c55dd4872cb1f64a1f2b074393d139278ce902064d5b32", size = 218578 }, + { url = "https://files.pythonhosted.org/packages/05/e8/261cae479e85232828fb17ad536765c88dd818c8470aca690b0ac6feeaa3/coverage-7.10.7-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3445258bcded7d4aa630ab8296dea4d3f15a255588dd535f980c193ab6b95f3f", size = 249629 }, + { url = "https://files.pythonhosted.org/packages/82/62/14ed6546d0207e6eda876434e3e8475a3e9adbe32110ce896c9e0c06bb9a/coverage-7.10.7-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:bb45474711ba385c46a0bfe696c695a929ae69ac636cda8f532be9e8c93d720a", size = 252162 }, + { url = "https://files.pythonhosted.org/packages/ff/49/07f00db9ac6478e4358165a08fb41b469a1b053212e8a00cb02f0d27a05f/coverage-7.10.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:813922f35bd800dca9994c5971883cbc0d291128a5de6b167c7aa697fcf59360", size = 253517 }, + { url = "https://files.pythonhosted.org/packages/a2/59/c5201c62dbf165dfbc91460f6dbbaa85a8b82cfa6131ac45d6c1bfb52deb/coverage-7.10.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:93c1b03552081b2a4423091d6fb3787265b8f86af404cff98d1b5342713bdd69", size = 249632 }, + { url = "https://files.pythonhosted.org/packages/07/ae/5920097195291a51fb00b3a70b9bbd2edbfe3c84876a1762bd1ef1565ebc/coverage-7.10.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:cc87dd1b6eaf0b848eebb1c86469b9f72a1891cb42ac7adcfbce75eadb13dd14", size = 251520 }, + { url = "https://files.pythonhosted.org/packages/b9/3c/a815dde77a2981f5743a60b63df31cb322c944843e57dbd579326625a413/coverage-7.10.7-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:39508ffda4f343c35f3236fe8d1a6634a51f4581226a1262769d7f970e73bffe", size = 249455 }, + { url = "https://files.pythonhosted.org/packages/aa/99/f5cdd8421ea656abefb6c0ce92556709db2265c41e8f9fc6c8ae0f7824c9/coverage-7.10.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:925a1edf3d810537c5a3abe78ec5530160c5f9a26b1f4270b40e62cc79304a1e", size = 249287 }, + { url = "https://files.pythonhosted.org/packages/c3/7a/e9a2da6a1fc5d007dd51fca083a663ab930a8c4d149c087732a5dbaa0029/coverage-7.10.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2c8b9a0636f94c43cd3576811e05b89aa9bc2d0a85137affc544ae5cb0e4bfbd", size = 250946 }, + { url = "https://files.pythonhosted.org/packages/ef/5b/0b5799aa30380a949005a353715095d6d1da81927d6dbed5def2200a4e25/coverage-7.10.7-cp314-cp314-win32.whl", hash = "sha256:b7b8288eb7cdd268b0304632da8cb0bb93fadcfec2fe5712f7b9cc8f4d487be2", size = 221009 }, + { url = "https://files.pythonhosted.org/packages/da/b0/e802fbb6eb746de006490abc9bb554b708918b6774b722bb3a0e6aa1b7de/coverage-7.10.7-cp314-cp314-win_amd64.whl", hash = "sha256:1ca6db7c8807fb9e755d0379ccc39017ce0a84dcd26d14b5a03b78563776f681", size = 221804 }, + { url = "https://files.pythonhosted.org/packages/9e/e8/71d0c8e374e31f39e3389bb0bd19e527d46f00ea8571ec7ec8fd261d8b44/coverage-7.10.7-cp314-cp314-win_arm64.whl", hash = "sha256:097c1591f5af4496226d5783d036bf6fd6cd0cbc132e071b33861de756efb880", size = 220384 }, + { url = "https://files.pythonhosted.org/packages/62/09/9a5608d319fa3eba7a2019addeacb8c746fb50872b57a724c9f79f146969/coverage-7.10.7-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:a62c6ef0d50e6de320c270ff91d9dd0a05e7250cac2a800b7784bae474506e63", size = 219047 }, + { url = "https://files.pythonhosted.org/packages/f5/6f/f58d46f33db9f2e3647b2d0764704548c184e6f5e014bef528b7f979ef84/coverage-7.10.7-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:9fa6e4dd51fe15d8738708a973470f67a855ca50002294852e9571cdbd9433f2", size = 219266 }, + { url = "https://files.pythonhosted.org/packages/74/5c/183ffc817ba68e0b443b8c934c8795553eb0c14573813415bd59941ee165/coverage-7.10.7-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8fb190658865565c549b6b4706856d6a7b09302c797eb2cf8e7fe9dabb043f0d", size = 260767 }, + { url = "https://files.pythonhosted.org/packages/0f/48/71a8abe9c1ad7e97548835e3cc1adbf361e743e9d60310c5f75c9e7bf847/coverage-7.10.7-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:affef7c76a9ef259187ef31599a9260330e0335a3011732c4b9effa01e1cd6e0", size = 262931 }, + { url = "https://files.pythonhosted.org/packages/84/fd/193a8fb132acfc0a901f72020e54be5e48021e1575bb327d8ee1097a28fd/coverage-7.10.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e16e07d85ca0cf8bafe5f5d23a0b850064e8e945d5677492b06bbe6f09cc699", size = 265186 }, + { url = "https://files.pythonhosted.org/packages/b1/8f/74ecc30607dd95ad50e3034221113ccb1c6d4e8085cc761134782995daae/coverage-7.10.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:03ffc58aacdf65d2a82bbeb1ffe4d01ead4017a21bfd0454983b88ca73af94b9", size = 259470 }, + { url = "https://files.pythonhosted.org/packages/0f/55/79ff53a769f20d71b07023ea115c9167c0bb56f281320520cf64c5298a96/coverage-7.10.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1b4fd784344d4e52647fd7857b2af5b3fbe6c239b0b5fa63e94eb67320770e0f", size = 262626 }, + { url = "https://files.pythonhosted.org/packages/88/e2/dac66c140009b61ac3fc13af673a574b00c16efdf04f9b5c740703e953c0/coverage-7.10.7-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:0ebbaddb2c19b71912c6f2518e791aa8b9f054985a0769bdb3a53ebbc765c6a1", size = 260386 }, + { url = "https://files.pythonhosted.org/packages/a2/f1/f48f645e3f33bb9ca8a496bc4a9671b52f2f353146233ebd7c1df6160440/coverage-7.10.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:a2d9a3b260cc1d1dbdb1c582e63ddcf5363426a1a68faa0f5da28d8ee3c722a0", size = 258852 }, + { url = "https://files.pythonhosted.org/packages/bb/3b/8442618972c51a7affeead957995cfa8323c0c9bcf8fa5a027421f720ff4/coverage-7.10.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a3cc8638b2480865eaa3926d192e64ce6c51e3d29c849e09d5b4ad95efae5399", size = 261534 }, + { url = "https://files.pythonhosted.org/packages/b2/dc/101f3fa3a45146db0cb03f5b4376e24c0aac818309da23e2de0c75295a91/coverage-7.10.7-cp314-cp314t-win32.whl", hash = "sha256:67f8c5cbcd3deb7a60b3345dffc89a961a484ed0af1f6f73de91705cc6e31235", size = 221784 }, + { url = "https://files.pythonhosted.org/packages/4c/a1/74c51803fc70a8a40d7346660379e144be772bab4ac7bb6e6b905152345c/coverage-7.10.7-cp314-cp314t-win_amd64.whl", hash = "sha256:e1ed71194ef6dea7ed2d5cb5f7243d4bcd334bfb63e59878519be558078f848d", size = 222905 }, + { url = "https://files.pythonhosted.org/packages/12/65/f116a6d2127df30bcafbceef0302d8a64ba87488bf6f73a6d8eebf060873/coverage-7.10.7-cp314-cp314t-win_arm64.whl", hash = "sha256:7fe650342addd8524ca63d77b2362b02345e5f1a093266787d210c70a50b471a", size = 220922 }, + { url = "https://files.pythonhosted.org/packages/a3/ad/d1c25053764b4c42eb294aae92ab617d2e4f803397f9c7c8295caa77a260/coverage-7.10.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fff7b9c3f19957020cac546c70025331113d2e61537f6e2441bc7657913de7d3", size = 217978 }, + { url = "https://files.pythonhosted.org/packages/52/2f/b9f9daa39b80ece0b9548bbb723381e29bc664822d9a12c2135f8922c22b/coverage-7.10.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bc91b314cef27742da486d6839b677b3f2793dfe52b51bbbb7cf736d5c29281c", size = 218370 }, + { url = "https://files.pythonhosted.org/packages/dd/6e/30d006c3b469e58449650642383dddf1c8fb63d44fdf92994bfd46570695/coverage-7.10.7-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:567f5c155eda8df1d3d439d40a45a6a5f029b429b06648235f1e7e51b522b396", size = 244802 }, + { url = "https://files.pythonhosted.org/packages/b0/49/8a070782ce7e6b94ff6a0b6d7c65ba6bc3091d92a92cef4cd4eb0767965c/coverage-7.10.7-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2af88deffcc8a4d5974cf2d502251bc3b2db8461f0b66d80a449c33757aa9f40", size = 246625 }, + { url = "https://files.pythonhosted.org/packages/6a/92/1c1c5a9e8677ce56d42b97bdaca337b2d4d9ebe703d8c174ede52dbabd5f/coverage-7.10.7-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7315339eae3b24c2d2fa1ed7d7a38654cba34a13ef19fbcb9425da46d3dc594", size = 248399 }, + { url = "https://files.pythonhosted.org/packages/c0/54/b140edee7257e815de7426d5d9846b58505dffc29795fff2dfb7f8a1c5a0/coverage-7.10.7-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:912e6ebc7a6e4adfdbb1aec371ad04c68854cd3bf3608b3514e7ff9062931d8a", size = 245142 }, + { url = "https://files.pythonhosted.org/packages/e4/9e/6d6b8295940b118e8b7083b29226c71f6154f7ff41e9ca431f03de2eac0d/coverage-7.10.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f49a05acd3dfe1ce9715b657e28d138578bc40126760efb962322c56e9ca344b", size = 246284 }, + { url = "https://files.pythonhosted.org/packages/db/e5/5e957ca747d43dbe4d9714358375c7546cb3cb533007b6813fc20fce37ad/coverage-7.10.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:cce2109b6219f22ece99db7644b9622f54a4e915dad65660ec435e89a3ea7cc3", size = 244353 }, + { url = "https://files.pythonhosted.org/packages/9a/45/540fc5cc92536a1b783b7ef99450bd55a4b3af234aae35a18a339973ce30/coverage-7.10.7-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:f3c887f96407cea3916294046fc7dab611c2552beadbed4ea901cbc6a40cc7a0", size = 244430 }, + { url = "https://files.pythonhosted.org/packages/75/0b/8287b2e5b38c8fe15d7e3398849bb58d382aedc0864ea0fa1820e8630491/coverage-7.10.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:635adb9a4507c9fd2ed65f39693fa31c9a3ee3a8e6dc64df033e8fdf52a7003f", size = 245311 }, + { url = "https://files.pythonhosted.org/packages/0c/1d/29724999984740f0c86d03e6420b942439bf5bd7f54d4382cae386a9d1e9/coverage-7.10.7-cp39-cp39-win32.whl", hash = "sha256:5a02d5a850e2979b0a014c412573953995174743a3f7fa4ea5a6e9a3c5617431", size = 220500 }, + { url = "https://files.pythonhosted.org/packages/43/11/4b1e6b129943f905ca54c339f343877b55b365ae2558806c1be4f7476ed5/coverage-7.10.7-cp39-cp39-win_amd64.whl", hash = "sha256:c134869d5ffe34547d14e174c866fd8fe2254918cc0a95e99052903bc1543e07", size = 221408 }, + { url = "https://files.pythonhosted.org/packages/ec/16/114df1c291c22cac3b0c127a73e0af5c12ed7bbb6558d310429a0ae24023/coverage-7.10.7-py3-none-any.whl", hash = "sha256:f7941f6f2fe6dd6807a1208737b8a0cbcf1cc6d7b07d24998ad2d63590868260", size = 209952 }, +] + +[package.optional-dependencies] +toml = [ + { name = "tomli", marker = "python_full_version < '3.10'" }, +] + +[[package]] +name = "coverage" +version = "7.13.5" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/9d/e0/70553e3000e345daff267cec284ce4cbf3fc141b6da229ac52775b5428f1/coverage-7.13.5.tar.gz", hash = "sha256:c81f6515c4c40141f83f502b07bbfa5c240ba25bbe73da7b33f1e5b6120ff179", size = 915967 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/33/e8c48488c29a73fd089f9d71f9653c1be7478f2ad6b5bc870db11a55d23d/coverage-7.13.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e0723d2c96324561b9aa76fb982406e11d93cdb388a7a7da2b16e04719cf7ca5", size = 219255 }, + { url = "https://files.pythonhosted.org/packages/da/bd/b0ebe9f677d7f4b74a3e115eec7ddd4bcf892074963a00d91e8b164a6386/coverage-7.13.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:52f444e86475992506b32d4e5ca55c24fc88d73bcbda0e9745095b28ef4dc0cf", size = 219772 }, + { url = "https://files.pythonhosted.org/packages/48/cc/5cb9502f4e01972f54eedd48218bb203fe81e294be606a2bc93970208013/coverage-7.13.5-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:704de6328e3d612a8f6c07000a878ff38181ec3263d5a11da1db294fa6a9bdf8", size = 246532 }, + { url = "https://files.pythonhosted.org/packages/7d/d8/3217636d86c7e7b12e126e4f30ef1581047da73140614523af7495ed5f2d/coverage-7.13.5-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a1a6d79a14e1ec1832cabc833898636ad5f3754a678ef8bb4908515208bf84f4", size = 248333 }, + { url = "https://files.pythonhosted.org/packages/2b/30/2002ac6729ba2d4357438e2ed3c447ad8562866c8c63fc16f6dfc33afe56/coverage-7.13.5-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:79060214983769c7ba3f0cee10b54c97609dca4d478fa1aa32b914480fd5738d", size = 250211 }, + { url = "https://files.pythonhosted.org/packages/6c/85/552496626d6b9359eb0e2f86f920037c9cbfba09b24d914c6e1528155f7d/coverage-7.13.5-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:356e76b46783a98c2a2fe81ec79df4883a1e62895ea952968fb253c114e7f930", size = 252125 }, + { url = "https://files.pythonhosted.org/packages/44/21/40256eabdcbccdb6acf6b381b3016a154399a75fe39d406f790ae84d1f3c/coverage-7.13.5-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0cef0cdec915d11254a7f549c1170afecce708d30610c6abdded1f74e581666d", size = 247219 }, + { url = "https://files.pythonhosted.org/packages/b1/e8/96e2a6c3f21a0ea77d7830b254a1542d0328acc8d7bdf6a284ba7e529f77/coverage-7.13.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:dc022073d063b25a402454e5712ef9e007113e3a676b96c5f29b2bda29352f40", size = 248248 }, + { url = "https://files.pythonhosted.org/packages/da/ba/8477f549e554827da390ec659f3c38e4b6d95470f4daafc2d8ff94eaa9c2/coverage-7.13.5-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9b74db26dfea4f4e50d48a4602207cd1e78be33182bc9cbf22da94f332f99878", size = 246254 }, + { url = "https://files.pythonhosted.org/packages/55/59/bc22aef0e6aa179d5b1b001e8b3654785e9adf27ef24c93dc4228ebd5d68/coverage-7.13.5-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ad146744ca4fd09b50c482650e3c1b1f4dfa1d4792e0a04a369c7f23336f0400", size = 250067 }, + { url = "https://files.pythonhosted.org/packages/de/1b/c6a023a160806a5137dca53468fd97530d6acad24a22003b1578a9c2e429/coverage-7.13.5-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:c555b48be1853fe3997c11c4bd521cdd9a9612352de01fa4508f16ec341e6fe0", size = 246521 }, + { url = "https://files.pythonhosted.org/packages/2d/3f/3532c85a55aa2f899fa17c186f831cfa1aa434d88ff792a709636f64130e/coverage-7.13.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7034b5c56a58ae5e85f23949d52c14aca2cfc6848a31764995b7de88f13a1ea0", size = 247126 }, + { url = "https://files.pythonhosted.org/packages/aa/2e/b9d56af4a24ef45dfbcda88e06870cb7d57b2b0bfa3a888d79b4c8debd76/coverage-7.13.5-cp310-cp310-win32.whl", hash = "sha256:eb7fdf1ef130660e7415e0253a01a7d5a88c9c4d158bcf75cbbd922fd65a5b58", size = 221860 }, + { url = "https://files.pythonhosted.org/packages/9f/cc/d938417e7a4d7f0433ad4edee8bb2acdc60dc7ac5af19e2a07a048ecbee3/coverage-7.13.5-cp310-cp310-win_amd64.whl", hash = "sha256:3e1bb5f6c78feeb1be3475789b14a0f0a5b47d505bfc7267126ccbd50289999e", size = 222788 }, + { url = "https://files.pythonhosted.org/packages/4b/37/d24c8f8220ff07b839b2c043ea4903a33b0f455abe673ae3c03bbdb7f212/coverage-7.13.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:66a80c616f80181f4d643b0f9e709d97bcea413ecd9631e1dedc7401c8e6695d", size = 219381 }, + { url = "https://files.pythonhosted.org/packages/35/8b/cd129b0ca4afe886a6ce9d183c44d8301acbd4ef248622e7c49a23145605/coverage-7.13.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:145ede53ccbafb297c1c9287f788d1bc3efd6c900da23bf6931b09eafc931587", size = 219880 }, + { url = "https://files.pythonhosted.org/packages/55/2f/e0e5b237bffdb5d6c530ce87cc1d413a5b7d7dfd60fb067ad6d254c35c76/coverage-7.13.5-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:0672854dc733c342fa3e957e0605256d2bf5934feeac328da9e0b5449634a642", size = 250303 }, + { url = "https://files.pythonhosted.org/packages/92/be/b1afb692be85b947f3401375851484496134c5554e67e822c35f28bf2fbc/coverage-7.13.5-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ec10e2a42b41c923c2209b846126c6582db5e43a33157e9870ba9fb70dc7854b", size = 252218 }, + { url = "https://files.pythonhosted.org/packages/da/69/2f47bb6fa1b8d1e3e5d0c4be8ccb4313c63d742476a619418f85740d597b/coverage-7.13.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:be3d4bbad9d4b037791794ddeedd7d64a56f5933a2c1373e18e9e568b9141686", size = 254326 }, + { url = "https://files.pythonhosted.org/packages/d5/d0/79db81da58965bd29dabc8f4ad2a2af70611a57cba9d1ec006f072f30a54/coverage-7.13.5-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4d2afbc5cc54d286bfb54541aa50b64cdb07a718227168c87b9e2fb8f25e1743", size = 256267 }, + { url = "https://files.pythonhosted.org/packages/e5/32/d0d7cc8168f91ddab44c0ce4806b969df5f5fdfdbb568eaca2dbc2a04936/coverage-7.13.5-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3ad050321264c49c2fa67bb599100456fc51d004b82534f379d16445da40fb75", size = 250430 }, + { url = "https://files.pythonhosted.org/packages/4d/06/a055311d891ddbe231cd69fdd20ea4be6e3603ffebddf8704b8ca8e10a3c/coverage-7.13.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7300c8a6d13335b29bb76d7651c66af6bd8658517c43499f110ddc6717bfc209", size = 252017 }, + { url = "https://files.pythonhosted.org/packages/d6/f6/d0fd2d21e29a657b5f77a2fe7082e1568158340dceb941954f776dce1b7b/coverage-7.13.5-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:eb07647a5738b89baab047f14edd18ded523de60f3b30e75c2acc826f79c839a", size = 250080 }, + { url = "https://files.pythonhosted.org/packages/4e/ab/0d7fb2efc2e9a5eb7ddcc6e722f834a69b454b7e6e5888c3a8567ecffb31/coverage-7.13.5-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:9adb6688e3b53adffefd4a52d72cbd8b02602bfb8f74dcd862337182fd4d1a4e", size = 253843 }, + { url = "https://files.pythonhosted.org/packages/ba/6f/7467b917bbf5408610178f62a49c0ed4377bb16c1657f689cc61470da8ce/coverage-7.13.5-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7c8d4bc913dd70b93488d6c496c77f3aff5ea99a07e36a18f865bca55adef8bd", size = 249802 }, + { url = "https://files.pythonhosted.org/packages/75/2c/1172fb689df92135f5bfbbd69fc83017a76d24ea2e2f3a1154007e2fb9f8/coverage-7.13.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0e3c426ffc4cd952f54ee9ffbdd10345709ecc78a3ecfd796a57236bfad0b9b8", size = 250707 }, + { url = "https://files.pythonhosted.org/packages/67/21/9ac389377380a07884e3b48ba7a620fcd9dbfaf1d40565facdc6b36ec9ef/coverage-7.13.5-cp311-cp311-win32.whl", hash = "sha256:259b69bb83ad9894c4b25be2528139eecba9a82646ebdda2d9db1ba28424a6bf", size = 221880 }, + { url = "https://files.pythonhosted.org/packages/af/7f/4cd8a92531253f9d7c1bbecd9fa1b472907fb54446ca768c59b531248dc5/coverage-7.13.5-cp311-cp311-win_amd64.whl", hash = "sha256:258354455f4e86e3e9d0d17571d522e13b4e1e19bf0f8596bcf9476d61e7d8a9", size = 222816 }, + { url = "https://files.pythonhosted.org/packages/12/a6/1d3f6155fb0010ca68eba7fe48ca6c9da7385058b77a95848710ecf189b1/coverage-7.13.5-cp311-cp311-win_arm64.whl", hash = "sha256:bff95879c33ec8da99fc9b6fe345ddb5be6414b41d6d1ad1c8f188d26f36e028", size = 221483 }, + { url = "https://files.pythonhosted.org/packages/a0/c3/a396306ba7db865bf96fc1fb3b7fd29bcbf3d829df642e77b13555163cd6/coverage-7.13.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:460cf0114c5016fa841214ff5564aa4864f11948da9440bc97e21ad1f4ba1e01", size = 219554 }, + { url = "https://files.pythonhosted.org/packages/a6/16/a68a19e5384e93f811dccc51034b1fd0b865841c390e3c931dcc4699e035/coverage-7.13.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0e223ce4b4ed47f065bfb123687686512e37629be25cc63728557ae7db261422", size = 219908 }, + { url = "https://files.pythonhosted.org/packages/29/72/20b917c6793af3a5ceb7fb9c50033f3ec7865f2911a1416b34a7cfa0813b/coverage-7.13.5-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:6e3370441f4513c6252bf042b9c36d22491142385049243253c7e48398a15a9f", size = 251419 }, + { url = "https://files.pythonhosted.org/packages/8c/49/cd14b789536ac6a4778c453c6a2338bc0a2fb60c5a5a41b4008328b9acc1/coverage-7.13.5-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:03ccc709a17a1de074fb1d11f217342fb0d2b1582ed544f554fc9fc3f07e95f5", size = 254159 }, + { url = "https://files.pythonhosted.org/packages/9d/00/7b0edcfe64e2ed4c0340dac14a52ad0f4c9bd0b8b5e531af7d55b703db7c/coverage-7.13.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3f4818d065964db3c1c66dc0fbdac5ac692ecbc875555e13374fdbe7eedb4376", size = 255270 }, + { url = "https://files.pythonhosted.org/packages/93/89/7ffc4ba0f5d0a55c1e84ea7cee39c9fc06af7b170513d83fbf3bbefce280/coverage-7.13.5-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:012d5319e66e9d5a218834642d6c35d265515a62f01157a45bcc036ecf947256", size = 257538 }, + { url = "https://files.pythonhosted.org/packages/81/bd/73ddf85f93f7e6fa83e77ccecb6162d9415c79007b4bc124008a4995e4a7/coverage-7.13.5-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8dd02af98971bdb956363e4827d34425cb3df19ee550ef92855b0acb9c7ce51c", size = 251821 }, + { url = "https://files.pythonhosted.org/packages/a0/81/278aff4e8dec4926a0bcb9486320752811f543a3ce5b602cc7a29978d073/coverage-7.13.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f08fd75c50a760c7eb068ae823777268daaf16a80b918fa58eea888f8e3919f5", size = 253191 }, + { url = "https://files.pythonhosted.org/packages/70/ee/fe1621488e2e0a58d7e94c4800f0d96f79671553488d401a612bebae324b/coverage-7.13.5-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:843ea8643cf967d1ac7e8ecd4bb00c99135adf4816c0c0593fdcc47b597fcf09", size = 251337 }, + { url = "https://files.pythonhosted.org/packages/37/a6/f79fb37aa104b562207cc23cb5711ab6793608e246cae1e93f26b2236ed9/coverage-7.13.5-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:9d44d7aa963820b1b971dbecd90bfe5fe8f81cff79787eb6cca15750bd2f79b9", size = 255404 }, + { url = "https://files.pythonhosted.org/packages/75/f0/ed15262a58ec81ce457ceb717b7f78752a1713556b19081b76e90896e8d4/coverage-7.13.5-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:7132bed4bd7b836200c591410ae7d97bf7ae8be6fc87d160b2bd881df929e7bf", size = 250903 }, + { url = "https://files.pythonhosted.org/packages/0f/e9/9129958f20e7e9d4d56d51d42ccf708d15cac355ff4ac6e736e97a9393d2/coverage-7.13.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a698e363641b98843c517817db75373c83254781426e94ada3197cabbc2c919c", size = 252780 }, + { url = "https://files.pythonhosted.org/packages/a4/d7/0ad9b15812d81272db94379fe4c6df8fd17781cc7671fdfa30c76ba5ff7b/coverage-7.13.5-cp312-cp312-win32.whl", hash = "sha256:bdba0a6b8812e8c7df002d908a9a2ea3c36e92611b5708633c50869e6d922fdf", size = 222093 }, + { url = "https://files.pythonhosted.org/packages/29/3d/821a9a5799fac2556bcf0bd37a70d1d11fa9e49784b6d22e92e8b2f85f18/coverage-7.13.5-cp312-cp312-win_amd64.whl", hash = "sha256:d2c87e0c473a10bffe991502eac389220533024c8082ec1ce849f4218dded810", size = 222900 }, + { url = "https://files.pythonhosted.org/packages/d4/fa/2238c2ad08e35cf4f020ea721f717e09ec3152aea75d191a7faf3ef009a8/coverage-7.13.5-cp312-cp312-win_arm64.whl", hash = "sha256:bf69236a9a81bdca3bff53796237aab096cdbf8d78a66ad61e992d9dac7eb2de", size = 221515 }, + { url = "https://files.pythonhosted.org/packages/74/8c/74fedc9663dcf168b0a059d4ea756ecae4da77a489048f94b5f512a8d0b3/coverage-7.13.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5ec4af212df513e399cf11610cc27063f1586419e814755ab362e50a85ea69c1", size = 219576 }, + { url = "https://files.pythonhosted.org/packages/0c/c9/44fb661c55062f0818a6ffd2685c67aa30816200d5f2817543717d4b92eb/coverage-7.13.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:941617e518602e2d64942c88ec8499f7fbd49d3f6c4327d3a71d43a1973032f3", size = 219942 }, + { url = "https://files.pythonhosted.org/packages/5f/13/93419671cee82b780bab7ea96b67c8ef448f5f295f36bf5031154ec9a790/coverage-7.13.5-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:da305e9937617ee95c2e39d8ff9f040e0487cbf1ac174f777ed5eddd7a7c1f26", size = 250935 }, + { url = "https://files.pythonhosted.org/packages/ac/68/1666e3a4462f8202d836920114fa7a5ee9275d1fa45366d336c551a162dd/coverage-7.13.5-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:78e696e1cc714e57e8b25760b33a8b1026b7048d270140d25dafe1b0a1ee05a3", size = 253541 }, + { url = "https://files.pythonhosted.org/packages/4e/5e/3ee3b835647be646dcf3c65a7c6c18f87c27326a858f72ab22c12730773d/coverage-7.13.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:02ca0eed225b2ff301c474aeeeae27d26e2537942aa0f87491d3e147e784a82b", size = 254780 }, + { url = "https://files.pythonhosted.org/packages/44/b3/cb5bd1a04cfcc49ede6cd8409d80bee17661167686741e041abc7ee1b9a9/coverage-7.13.5-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:04690832cbea4e4663d9149e05dba142546ca05cb1848816760e7f58285c970a", size = 256912 }, + { url = "https://files.pythonhosted.org/packages/1b/66/c1dceb7b9714473800b075f5c8a84f4588f887a90eb8645282031676e242/coverage-7.13.5-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0590e44dd2745c696a778f7bab6aa95256de2cbc8b8cff4f7db8ff09813d6969", size = 251165 }, + { url = "https://files.pythonhosted.org/packages/b7/62/5502b73b97aa2e53ea22a39cf8649ff44827bef76d90bf638777daa27a9d/coverage-7.13.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d7cfad2d6d81dd298ab6b89fe72c3b7b05ec7544bdda3b707ddaecff8d25c161", size = 252908 }, + { url = "https://files.pythonhosted.org/packages/7d/37/7792c2d69854397ca77a55c4646e5897c467928b0e27f2d235d83b5d08c6/coverage-7.13.5-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:e092b9499de38ae0fbfbc603a74660eb6ff3e869e507b50d85a13b6db9863e15", size = 250873 }, + { url = "https://files.pythonhosted.org/packages/a3/23/bc866fb6163be52a8a9e5d708ba0d3b1283c12158cefca0a8bbb6e247a43/coverage-7.13.5-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:48c39bc4a04d983a54a705a6389512883d4a3b9862991b3617d547940e9f52b1", size = 255030 }, + { url = "https://files.pythonhosted.org/packages/7d/8b/ef67e1c222ef49860701d346b8bbb70881bef283bd5f6cbba68a39a086c7/coverage-7.13.5-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:2d3807015f138ffea1ed9afeeb8624fd781703f2858b62a8dd8da5a0994c57b6", size = 250694 }, + { url = "https://files.pythonhosted.org/packages/46/0d/866d1f74f0acddbb906db212e096dee77a8e2158ca5e6bb44729f9d93298/coverage-7.13.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ee2aa19e03161671ec964004fb74b2257805d9710bf14a5c704558b9d8dbaf17", size = 252469 }, + { url = "https://files.pythonhosted.org/packages/7a/f5/be742fec31118f02ce42b21c6af187ad6a344fed546b56ca60caacc6a9a0/coverage-7.13.5-cp313-cp313-win32.whl", hash = "sha256:ce1998c0483007608c8382f4ff50164bfc5bd07a2246dd272aa4043b75e61e85", size = 222112 }, + { url = "https://files.pythonhosted.org/packages/66/40/7732d648ab9d069a46e686043241f01206348e2bbf128daea85be4d6414b/coverage-7.13.5-cp313-cp313-win_amd64.whl", hash = "sha256:631efb83f01569670a5e866ceb80fe483e7c159fac6f167e6571522636104a0b", size = 222923 }, + { url = "https://files.pythonhosted.org/packages/48/af/fea819c12a095781f6ccd504890aaddaf88b8fab263c4940e82c7b770124/coverage-7.13.5-cp313-cp313-win_arm64.whl", hash = "sha256:f4cd16206ad171cbc2470dbea9103cf9a7607d5fe8c242fdf1edf36174020664", size = 221540 }, + { url = "https://files.pythonhosted.org/packages/23/d2/17879af479df7fbbd44bd528a31692a48f6b25055d16482fdf5cdb633805/coverage-7.13.5-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0428cbef5783ad91fe240f673cc1f76b25e74bbfe1a13115e4aa30d3f538162d", size = 220262 }, + { url = "https://files.pythonhosted.org/packages/5b/4c/d20e554f988c8f91d6a02c5118f9abbbf73a8768a3048cb4962230d5743f/coverage-7.13.5-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e0b216a19534b2427cc201a26c25da4a48633f29a487c61258643e89d28200c0", size = 220617 }, + { url = "https://files.pythonhosted.org/packages/29/9c/f9f5277b95184f764b24e7231e166dfdb5780a46d408a2ac665969416d61/coverage-7.13.5-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:972a9cd27894afe4bc2b1480107054e062df08e671df7c2f18c205e805ccd806", size = 261912 }, + { url = "https://files.pythonhosted.org/packages/d5/f6/7f1ab39393eeb50cfe4747ae8ef0e4fc564b989225aa1152e13a180d74f8/coverage-7.13.5-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:4b59148601efcd2bac8c4dbf1f0ad6391693ccf7a74b8205781751637076aee3", size = 263987 }, + { url = "https://files.pythonhosted.org/packages/a0/d7/62c084fb489ed9c6fbdf57e006752e7c516ea46fd690e5ed8b8617c7d52e/coverage-7.13.5-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:505d7083c8b0c87a8fa8c07370c285847c1f77739b22e299ad75a6af6c32c5c9", size = 266416 }, + { url = "https://files.pythonhosted.org/packages/a9/f6/df63d8660e1a0bff6125947afda112a0502736f470d62ca68b288ea762d8/coverage-7.13.5-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:60365289c3741e4db327e7baff2a4aaacf22f788e80fa4683393891b70a89fbd", size = 267558 }, + { url = "https://files.pythonhosted.org/packages/5b/02/353ca81d36779bd108f6d384425f7139ac3c58c750dcfaafe5d0bee6436b/coverage-7.13.5-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1b88c69c8ef5d4b6fe7dea66d6636056a0f6a7527c440e890cf9259011f5e606", size = 261163 }, + { url = "https://files.pythonhosted.org/packages/2c/16/2e79106d5749bcaf3aee6d309123548e3276517cd7851faa8da213bc61bf/coverage-7.13.5-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5b13955d31d1633cf9376908089b7cebe7d15ddad7aeaabcbe969a595a97e95e", size = 263981 }, + { url = "https://files.pythonhosted.org/packages/29/c7/c29e0c59ffa6942030ae6f50b88ae49988e7e8da06de7ecdbf49c6d4feae/coverage-7.13.5-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:f70c9ab2595c56f81a89620e22899eea8b212a4041bd728ac6f4a28bf5d3ddd0", size = 261604 }, + { url = "https://files.pythonhosted.org/packages/40/48/097cdc3db342f34006a308ab41c3a7c11c3f0d84750d340f45d88a782e00/coverage-7.13.5-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:084b84a8c63e8d6fc7e3931b316a9bcafca1458d753c539db82d31ed20091a87", size = 265321 }, + { url = "https://files.pythonhosted.org/packages/bb/1f/4994af354689e14fd03a75f8ec85a9a68d94e0188bbdab3fc1516b55e512/coverage-7.13.5-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:ad14385487393e386e2ea988b09d62dd42c397662ac2dabc3832d71253eee479", size = 260502 }, + { url = "https://files.pythonhosted.org/packages/22/c6/9bb9ef55903e628033560885f5c31aa227e46878118b63ab15dc7ba87797/coverage-7.13.5-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:7f2c47b36fe7709a6e83bfadf4eefb90bd25fbe4014d715224c4316f808e59a2", size = 262688 }, + { url = "https://files.pythonhosted.org/packages/14/4f/f5df9007e50b15e53e01edea486814783a7f019893733d9e4d6caad75557/coverage-7.13.5-cp313-cp313t-win32.whl", hash = "sha256:67e9bc5449801fad0e5dff329499fb090ba4c5800b86805c80617b4e29809b2a", size = 222788 }, + { url = "https://files.pythonhosted.org/packages/e1/98/aa7fccaa97d0f3192bec013c4e6fd6d294a6ed44b640e6bb61f479e00ed5/coverage-7.13.5-cp313-cp313t-win_amd64.whl", hash = "sha256:da86cdcf10d2519e10cabb8ac2de03da1bcb6e4853790b7fbd48523332e3a819", size = 223851 }, + { url = "https://files.pythonhosted.org/packages/3d/8b/e5c469f7352651e5f013198e9e21f97510b23de957dd06a84071683b4b60/coverage-7.13.5-cp313-cp313t-win_arm64.whl", hash = "sha256:0ecf12ecb326fe2c339d93fc131816f3a7367d223db37817208905c89bded911", size = 222104 }, + { url = "https://files.pythonhosted.org/packages/8e/77/39703f0d1d4b478bfd30191d3c14f53caf596fac00efb3f8f6ee23646439/coverage-7.13.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fbabfaceaeb587e16f7008f7795cd80d20ec548dc7f94fbb0d4ec2e038ce563f", size = 219621 }, + { url = "https://files.pythonhosted.org/packages/e2/3e/51dff36d99ae14639a133d9b164d63e628532e2974d8b1edb99dd1ebc733/coverage-7.13.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:9bb2a28101a443669a423b665939381084412b81c3f8c0fcfbac57f4e30b5b8e", size = 219953 }, + { url = "https://files.pythonhosted.org/packages/6a/6c/1f1917b01eb647c2f2adc9962bd66c79eb978951cab61bdc1acab3290c07/coverage-7.13.5-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:bd3a2fbc1c6cccb3c5106140d87cc6a8715110373ef42b63cf5aea29df8c217a", size = 250992 }, + { url = "https://files.pythonhosted.org/packages/22/e5/06b1f88f42a5a99df42ce61208bdec3bddb3d261412874280a19796fc09c/coverage-7.13.5-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:6c36ddb64ed9d7e496028d1d00dfec3e428e0aabf4006583bb1839958d280510", size = 253503 }, + { url = "https://files.pythonhosted.org/packages/80/28/2a148a51e5907e504fa7b85490277734e6771d8844ebcc48764a15e28155/coverage-7.13.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:380e8e9084d8eb38db3a9176a1a4f3c0082c3806fa0dc882d1d87abc3c789247", size = 254852 }, + { url = "https://files.pythonhosted.org/packages/61/77/50e8d3d85cc0b7ebe09f30f151d670e302c7ff4a1bf6243f71dd8b0981fa/coverage-7.13.5-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e808af52a0513762df4d945ea164a24b37f2f518cbe97e03deaa0ee66139b4d6", size = 257161 }, + { url = "https://files.pythonhosted.org/packages/3b/c4/b5fd1d4b7bf8d0e75d997afd3925c59ba629fc8616f1b3aae7605132e256/coverage-7.13.5-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e301d30dd7e95ae068671d746ba8c34e945a82682e62918e41b2679acd2051a0", size = 251021 }, + { url = "https://files.pythonhosted.org/packages/f8/66/6ea21f910e92d69ef0b1c3346ea5922a51bad4446c9126db2ae96ee24c4c/coverage-7.13.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:800bc829053c80d240a687ceeb927a94fd108bbdc68dfbe505d0d75ab578a882", size = 252858 }, + { url = "https://files.pythonhosted.org/packages/9e/ea/879c83cb5d61aa2a35fb80e72715e92672daef8191b84911a643f533840c/coverage-7.13.5-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:0b67af5492adb31940ee418a5a655c28e48165da5afab8c7fa6fd72a142f8740", size = 250823 }, + { url = "https://files.pythonhosted.org/packages/8a/fb/616d95d3adb88b9803b275580bdeee8bd1b69a886d057652521f83d7322f/coverage-7.13.5-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:c9136ff29c3a91e25b1d1552b5308e53a1e0653a23e53b6366d7c2dcbbaf8a16", size = 255099 }, + { url = "https://files.pythonhosted.org/packages/1c/93/25e6917c90ec1c9a56b0b26f6cad6408e5f13bb6b35d484a0d75c9cf000d/coverage-7.13.5-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:cff784eef7f0b8f6cb28804fbddcfa99f89efe4cc35fb5627e3ac58f91ed3ac0", size = 250638 }, + { url = "https://files.pythonhosted.org/packages/fc/7b/dc1776b0464145a929deed214aef9fb1493f159b59ff3c7eeeedf91eddd0/coverage-7.13.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:68a4953be99b17ac3c23b6efbc8a38330d99680c9458927491d18700ef23ded0", size = 252295 }, + { url = "https://files.pythonhosted.org/packages/ea/fb/99cbbc56a26e07762a2740713f3c8f9f3f3106e3a3dd8cc4474954bccd34/coverage-7.13.5-cp314-cp314-win32.whl", hash = "sha256:35a31f2b1578185fbe6aa2e74cea1b1d0bbf4c552774247d9160d29b80ed56cc", size = 222360 }, + { url = "https://files.pythonhosted.org/packages/8d/b7/4758d4f73fb536347cc5e4ad63662f9d60ba9118cb6785e9616b2ce5d7fa/coverage-7.13.5-cp314-cp314-win_amd64.whl", hash = "sha256:2aa055ae1857258f9e0045be26a6d62bdb47a72448b62d7b55f4820f361a2633", size = 223174 }, + { url = "https://files.pythonhosted.org/packages/2c/f2/24d84e1dfe70f8ac9fdf30d338239860d0d1d5da0bda528959d0ebc9da28/coverage-7.13.5-cp314-cp314-win_arm64.whl", hash = "sha256:1b11eef33edeae9d142f9b4358edb76273b3bfd30bc3df9a4f95d0e49caf94e8", size = 221739 }, + { url = "https://files.pythonhosted.org/packages/60/5b/4a168591057b3668c2428bff25dd3ebc21b629d666d90bcdfa0217940e84/coverage-7.13.5-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:10a0c37f0b646eaff7cce1874c31d1f1ccb297688d4c747291f4f4c70741cc8b", size = 220351 }, + { url = "https://files.pythonhosted.org/packages/f5/21/1fd5c4dbfe4a58b6b99649125635df46decdfd4a784c3cd6d410d303e370/coverage-7.13.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b5db73ba3c41c7008037fa731ad5459fc3944cb7452fc0aa9f822ad3533c583c", size = 220612 }, + { url = "https://files.pythonhosted.org/packages/d6/fe/2a924b3055a5e7e4512655a9d4609781b0d62334fa0140c3e742926834e2/coverage-7.13.5-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:750db93a81e3e5a9831b534be7b1229df848b2e125a604fe6651e48aa070e5f9", size = 261985 }, + { url = "https://files.pythonhosted.org/packages/d7/0d/c8928f2bd518c45990fe1a2ab8db42e914ef9b726c975facc4282578c3eb/coverage-7.13.5-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9ddb4f4a5479f2539644be484da179b653273bca1a323947d48ab107b3ed1f29", size = 264107 }, + { url = "https://files.pythonhosted.org/packages/ef/ae/4ae35bbd9a0af9d820362751f0766582833c211224b38665c0f8de3d487f/coverage-7.13.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8a7a2049c14f413163e2bdabd37e41179b1d1ccb10ffc6ccc4b7a718429c607", size = 266513 }, + { url = "https://files.pythonhosted.org/packages/9c/20/d326174c55af36f74eac6ae781612d9492f060ce8244b570bb9d50d9d609/coverage-7.13.5-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e1c85e0b6c05c592ea6d8768a66a254bfb3874b53774b12d4c89c481eb78cb90", size = 267650 }, + { url = "https://files.pythonhosted.org/packages/7a/5e/31484d62cbd0eabd3412e30d74386ece4a0837d4f6c3040a653878bfc019/coverage-7.13.5-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:777c4d1eff1b67876139d24288aaf1817f6c03d6bae9c5cc8d27b83bcfe38fe3", size = 261089 }, + { url = "https://files.pythonhosted.org/packages/e9/d8/49a72d6de146eebb0b7e48cc0f4bc2c0dd858e3d4790ab2b39a2872b62bd/coverage-7.13.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:6697e29b93707167687543480a40f0db8f356e86d9f67ddf2e37e2dfd91a9dab", size = 263982 }, + { url = "https://files.pythonhosted.org/packages/06/3b/0351f1bd566e6e4dd39e978efe7958bde1d32f879e85589de147654f57bb/coverage-7.13.5-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:8fdf453a942c3e4d99bd80088141c4c6960bb232c409d9c3558e2dbaa3998562", size = 261579 }, + { url = "https://files.pythonhosted.org/packages/5d/ce/796a2a2f4017f554d7810f5c573449b35b1e46788424a548d4d19201b222/coverage-7.13.5-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:32ca0c0114c9834a43f045a87dcebd69d108d8ffb666957ea65aa132f50332e2", size = 265316 }, + { url = "https://files.pythonhosted.org/packages/3d/16/d5ae91455541d1a78bc90abf495be600588aff8f6db5c8b0dae739fa39c9/coverage-7.13.5-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:8769751c10f339021e2638cd354e13adeac54004d1941119b2c96fe5276d45ea", size = 260427 }, + { url = "https://files.pythonhosted.org/packages/48/11/07f413dba62db21fb3fad5d0de013a50e073cc4e2dc4306e770360f6dfc8/coverage-7.13.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cec2d83125531bd153175354055cdb7a09987af08a9430bd173c937c6d0fba2a", size = 262745 }, + { url = "https://files.pythonhosted.org/packages/91/15/d792371332eb4663115becf4bad47e047d16234b1aff687b1b18c58d60ae/coverage-7.13.5-cp314-cp314t-win32.whl", hash = "sha256:0cd9ed7a8b181775459296e402ca4fb27db1279740a24e93b3b41942ebe4b215", size = 223146 }, + { url = "https://files.pythonhosted.org/packages/db/51/37221f59a111dca5e85be7dbf09696323b5b9f13ff65e0641d535ed06ea8/coverage-7.13.5-cp314-cp314t-win_amd64.whl", hash = "sha256:301e3b7dfefecaca37c9f1aa6f0049b7d4ab8dd933742b607765d757aca77d43", size = 224254 }, + { url = "https://files.pythonhosted.org/packages/54/83/6acacc889de8987441aa7d5adfbdbf33d288dad28704a67e574f1df9bcbb/coverage-7.13.5-cp314-cp314t-win_arm64.whl", hash = "sha256:9dacc2ad679b292709e0f5fc1ac74a6d4d5562e424058962c7bb0c658ad25e45", size = 222276 }, + { url = "https://files.pythonhosted.org/packages/9e/ee/a4cf96b8ce1e566ed238f0659ac2d3f007ed1d14b181bcb684e19561a69a/coverage-7.13.5-py3-none-any.whl", hash = "sha256:34b02417cf070e173989b3db962f7ed56d2f644307b2cf9d5a0f258e13084a61", size = 211346 }, +] + +[package.optional-dependencies] +toml = [ + { name = "tomli", marker = "python_full_version >= '3.10' and python_full_version <= '3.11'" }, +] + +[[package]] +name = "debugpy" +version = "1.8.20" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/b7/cd8080344452e4874aae67c40d8940e2b4d47b01601a8fd9f44786c757c7/debugpy-1.8.20.tar.gz", hash = "sha256:55bc8701714969f1ab89a6d5f2f3d40c36f91b2cbe2f65d98bf8196f6a6a2c33", size = 1645207 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/be/8bd693a0b9d53d48c8978fa5d889e06f3b5b03e45fd1ea1e78267b4887cb/debugpy-1.8.20-cp310-cp310-macosx_15_0_x86_64.whl", hash = "sha256:157e96ffb7f80b3ad36d808646198c90acb46fdcfd8bb1999838f0b6f2b59c64", size = 2099192 }, + { url = "https://files.pythonhosted.org/packages/77/1b/85326d07432086a06361d493d2743edd0c4fc2ef62162be7f8618441ac37/debugpy-1.8.20-cp310-cp310-manylinux_2_34_x86_64.whl", hash = "sha256:c1178ae571aff42e61801a38b007af504ec8e05fde1c5c12e5a7efef21009642", size = 3088568 }, + { url = "https://files.pythonhosted.org/packages/e8/60/3e08462ee3eccd10998853eb35947c416e446bfe2bc37dbb886b9044586c/debugpy-1.8.20-cp310-cp310-win32.whl", hash = "sha256:c29dd9d656c0fbd77906a6e6a82ae4881514aa3294b94c903ff99303e789b4a2", size = 5284399 }, + { url = "https://files.pythonhosted.org/packages/72/43/09d49106e770fe558ced5e80df2e3c2ebee10e576eda155dcc5670473663/debugpy-1.8.20-cp310-cp310-win_amd64.whl", hash = "sha256:3ca85463f63b5dd0aa7aaa933d97cbc47c174896dcae8431695872969f981893", size = 5316388 }, + { url = "https://files.pythonhosted.org/packages/51/56/c3baf5cbe4dd77427fd9aef99fcdade259ad128feeb8a786c246adb838e5/debugpy-1.8.20-cp311-cp311-macosx_15_0_universal2.whl", hash = "sha256:eada6042ad88fa1571b74bd5402ee8b86eded7a8f7b827849761700aff171f1b", size = 2208318 }, + { url = "https://files.pythonhosted.org/packages/9a/7d/4fa79a57a8e69fe0d9763e98d1110320f9ecd7f1f362572e3aafd7417c9d/debugpy-1.8.20-cp311-cp311-manylinux_2_34_x86_64.whl", hash = "sha256:7de0b7dfeedc504421032afba845ae2a7bcc32ddfb07dae2c3ca5442f821c344", size = 3171493 }, + { url = "https://files.pythonhosted.org/packages/7d/f2/1e8f8affe51e12a26f3a8a8a4277d6e60aa89d0a66512f63b1e799d424a4/debugpy-1.8.20-cp311-cp311-win32.whl", hash = "sha256:773e839380cf459caf73cc533ea45ec2737a5cc184cf1b3b796cd4fd98504fec", size = 5209240 }, + { url = "https://files.pythonhosted.org/packages/d5/92/1cb532e88560cbee973396254b21bece8c5d7c2ece958a67afa08c9f10dc/debugpy-1.8.20-cp311-cp311-win_amd64.whl", hash = "sha256:1f7650546e0eded1902d0f6af28f787fa1f1dbdbc97ddabaf1cd963a405930cb", size = 5233481 }, + { url = "https://files.pythonhosted.org/packages/14/57/7f34f4736bfb6e00f2e4c96351b07805d83c9a7b33d28580ae01374430f7/debugpy-1.8.20-cp312-cp312-macosx_15_0_universal2.whl", hash = "sha256:4ae3135e2089905a916909ef31922b2d733d756f66d87345b3e5e52b7a55f13d", size = 2550686 }, + { url = "https://files.pythonhosted.org/packages/ab/78/b193a3975ca34458f6f0e24aaf5c3e3da72f5401f6054c0dfd004b41726f/debugpy-1.8.20-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:88f47850a4284b88bd2bfee1f26132147d5d504e4e86c22485dfa44b97e19b4b", size = 4310588 }, + { url = "https://files.pythonhosted.org/packages/c1/55/f14deb95eaf4f30f07ef4b90a8590fc05d9e04df85ee379712f6fb6736d7/debugpy-1.8.20-cp312-cp312-win32.whl", hash = "sha256:4057ac68f892064e5f98209ab582abfee3b543fb55d2e87610ddc133a954d390", size = 5331372 }, + { url = "https://files.pythonhosted.org/packages/a1/39/2bef246368bd42f9bd7cba99844542b74b84dacbdbea0833e610f384fee8/debugpy-1.8.20-cp312-cp312-win_amd64.whl", hash = "sha256:a1a8f851e7cf171330679ef6997e9c579ef6dd33c9098458bd9986a0f4ca52e3", size = 5372835 }, + { url = "https://files.pythonhosted.org/packages/15/e2/fc500524cc6f104a9d049abc85a0a8b3f0d14c0a39b9c140511c61e5b40b/debugpy-1.8.20-cp313-cp313-macosx_15_0_universal2.whl", hash = "sha256:5dff4bb27027821fdfcc9e8f87309a28988231165147c31730128b1c983e282a", size = 2539560 }, + { url = "https://files.pythonhosted.org/packages/90/83/fb33dcea789ed6018f8da20c5a9bc9d82adc65c0c990faed43f7c955da46/debugpy-1.8.20-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:84562982dd7cf5ebebfdea667ca20a064e096099997b175fe204e86817f64eaf", size = 4293272 }, + { url = "https://files.pythonhosted.org/packages/a6/25/b1e4a01bfb824d79a6af24b99ef291e24189080c93576dfd9b1a2815cd0f/debugpy-1.8.20-cp313-cp313-win32.whl", hash = "sha256:da11dea6447b2cadbf8ce2bec59ecea87cc18d2c574980f643f2d2dfe4862393", size = 5331208 }, + { url = "https://files.pythonhosted.org/packages/13/f7/a0b368ce54ffff9e9028c098bd2d28cfc5b54f9f6c186929083d4c60ba58/debugpy-1.8.20-cp313-cp313-win_amd64.whl", hash = "sha256:eb506e45943cab2efb7c6eafdd65b842f3ae779f020c82221f55aca9de135ed7", size = 5372930 }, + { url = "https://files.pythonhosted.org/packages/33/2e/f6cb9a8a13f5058f0a20fe09711a7b726232cd5a78c6a7c05b2ec726cff9/debugpy-1.8.20-cp314-cp314-macosx_15_0_universal2.whl", hash = "sha256:9c74df62fc064cd5e5eaca1353a3ef5a5d50da5eb8058fcef63106f7bebe6173", size = 2538066 }, + { url = "https://files.pythonhosted.org/packages/c5/56/6ddca50b53624e1ca3ce1d1e49ff22db46c47ea5fb4c0cc5c9b90a616364/debugpy-1.8.20-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:077a7447589ee9bc1ff0cdf443566d0ecf540ac8aa7333b775ebcb8ce9f4ecad", size = 4269425 }, + { url = "https://files.pythonhosted.org/packages/c5/d9/d64199c14a0d4c476df46c82470a3ce45c8d183a6796cfb5e66533b3663c/debugpy-1.8.20-cp314-cp314-win32.whl", hash = "sha256:352036a99dd35053b37b7803f748efc456076f929c6a895556932eaf2d23b07f", size = 5331407 }, + { url = "https://files.pythonhosted.org/packages/e0/d9/1f07395b54413432624d61524dfd98c1a7c7827d2abfdb8829ac92638205/debugpy-1.8.20-cp314-cp314-win_amd64.whl", hash = "sha256:a98eec61135465b062846112e5ecf2eebb855305acc1dfbae43b72903b8ab5be", size = 5372521 }, + { url = "https://files.pythonhosted.org/packages/2b/6b/668f21567e3250463beb6a401e7d598baa2a0907224000d7f68b9442c243/debugpy-1.8.20-cp39-cp39-macosx_15_0_x86_64.whl", hash = "sha256:bff8990f040dacb4c314864da95f7168c5a58a30a66e0eea0fb85e2586a92cd6", size = 2100484 }, + { url = "https://files.pythonhosted.org/packages/cf/49/223143d1da586b891f35a45515f152742ad85bfc10d2e02e697f65c83b32/debugpy-1.8.20-cp39-cp39-manylinux_2_34_x86_64.whl", hash = "sha256:70ad9ae09b98ac307b82c16c151d27ee9d68ae007a2e7843ba621b5ce65333b5", size = 3081272 }, + { url = "https://files.pythonhosted.org/packages/b1/24/9f219c9290fe8bee4f63f9af8ebac440c802e6181d7f39a79abcb5fdff2f/debugpy-1.8.20-cp39-cp39-win32.whl", hash = "sha256:9eeed9f953f9a23850c85d440bf51e3c56ed5d25f8560eeb29add815bd32f7ee", size = 5285196 }, + { url = "https://files.pythonhosted.org/packages/ba/f3/4a12d7b1b09e3b79ba6e3edfa0c677b8b8bdf110bc4b3607e0f29fb4e8b3/debugpy-1.8.20-cp39-cp39-win_amd64.whl", hash = "sha256:760813b4fff517c75bfe7923033c107104e76acfef7bda011ffea8736e9a66f8", size = 5317163 }, + { url = "https://files.pythonhosted.org/packages/e0/c3/7f67dea8ccf8fdcb9c99033bbe3e90b9e7395415843accb81428c441be2d/debugpy-1.8.20-py2.py3-none-any.whl", hash = "sha256:5be9bed9ae3be00665a06acaa48f8329d2b9632f15fd09f6a9a8c8d9907e54d7", size = 5337658 }, +] + +[[package]] +name = "decorator" +version = "5.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190 }, +] + +[[package]] +name = "defusedxml" +version = "0.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", size = 75520 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604 }, +] + +[[package]] +name = "distlib" +version = "0.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/96/8e/709914eb2b5749865801041647dc7f4e6d00b549cfe88b65ca192995f07c/distlib-0.4.0.tar.gz", hash = "sha256:feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d", size = 614605 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl", hash = "sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16", size = 469047 }, +] + +[[package]] +name = "docutils" +version = "0.21.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.10.*'", + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/ae/ed/aefcc8cd0ba62a0560c3c18c33925362d46c6075480bfa4df87b28e169a9/docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f", size = 2204444 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2", size = 587408 }, +] + +[[package]] +name = "docutils" +version = "0.22.4" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/ae/b6/03bb70946330e88ffec97aefd3ea75ba575cb2e762061e0e62a213befee8/docutils-0.22.4.tar.gz", hash = "sha256:4db53b1fde9abecbb74d91230d32ab626d94f6badfc575d6db9194a49df29968", size = 2291750 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl", hash = "sha256:d0013f540772d1420576855455d050a2180186c91c15779301ac2ccb3eeb68de", size = 633196 }, +] + +[[package]] +name = "exceptiongroup" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740 }, +] + +[[package]] +name = "executing" +version = "2.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cc/28/c14e053b6762b1044f34a13aab6859bbf40456d37d23aa286ac24cfd9a5d/executing-2.2.1.tar.gz", hash = "sha256:3632cc370565f6648cc328b32435bd120a1e4ebb20c77e3fdde9a13cd1e533c4", size = 1129488 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl", hash = "sha256:760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017", size = 28317 }, +] + +[[package]] +name = "fastjsonschema" +version = "2.21.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/b5/23b216d9d985a956623b6bd12d4086b60f0059b27799f23016af04a74ea1/fastjsonschema-2.21.2.tar.gz", hash = "sha256:b1eb43748041c880796cd077f1a07c3d94e93ae84bba5ed36800a33554ae05de", size = 374130 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl", hash = "sha256:1c797122d0a86c5cace2e54bf4e819c36223b552017172f32c5c024a6b77e463", size = 24024 }, +] + +[[package]] +name = "filelock" +version = "3.19.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/40/bb/0ab3e58d22305b6f5440629d20683af28959bf793d98d11950e305c1c326/filelock-3.19.1.tar.gz", hash = "sha256:66eda1888b0171c998b35be2bcc0f6d75c388a7ce20c3f3f37aa8e96c2dddf58", size = 17687 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/14/42b2651a2f46b022ccd948bca9f2d5af0fd8929c4eec235b8d6d844fbe67/filelock-3.19.1-py3-none-any.whl", hash = "sha256:d38e30481def20772f5baf097c122c3babc4fcdb7e14e57049eb9d88c6dc017d", size = 15988 }, +] + +[[package]] +name = "filelock" +version = "3.25.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/94/b8/00651a0f559862f3bb7d6f7477b192afe3f583cc5e26403b44e59a55ab34/filelock-3.25.2.tar.gz", hash = "sha256:b64ece2b38f4ca29dd3e810287aa8c48182bbecd1ae6e9ae126c9b35f1382694", size = 40480 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl", hash = "sha256:ca8afb0da15f229774c9ad1b455ed96e85a81373065fb10446672f64444ddf70", size = 26759 }, +] + +[[package]] +name = "fqdn" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/30/3e/a80a8c077fd798951169626cde3e239adeba7dab75deb3555716415bd9b0/fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f", size = 6015 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014", size = 9121 }, +] + +[[package]] +name = "h11" +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515 }, +] + +[[package]] +name = "httpcore" +version = "1.0.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784 }, +] + +[[package]] +name = "httpx" +version = "0.28.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio", version = "4.12.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "anyio", version = "4.13.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "certifi" }, + { name = "httpcore" }, + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517 }, +] + +[[package]] +name = "identify" +version = "2.6.15" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/ff/e7/685de97986c916a6d93b3876139e00eef26ad5bbbd61925d670ae8013449/identify-2.6.15.tar.gz", hash = "sha256:e4f4864b96c6557ef2a1e1c951771838f4edc9df3a72ec7118b338801b11c7bf", size = 99311 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/1c/e5fd8f973d4f375adb21565739498e2e9a1e54c858a97b9a8ccfdc81da9b/identify-2.6.15-py2.py3-none-any.whl", hash = "sha256:1181ef7608e00704db228516541eb83a88a9f94433a8c80bb9b5bd54b1d81757", size = 99183 }, +] + +[[package]] +name = "identify" +version = "2.6.18" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/46/c4/7fb4db12296cdb11893d61c92048fe617ee853f8523b9b296ac03b43757e/identify-2.6.18.tar.gz", hash = "sha256:873ac56a5e3fd63e7438a7ecbc4d91aca692eb3fefa4534db2b7913f3fc352fd", size = 99580 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/33/92ef41c6fad0233e41d3d84ba8e8ad18d1780f1e5d99b3c683e6d7f98b63/identify-2.6.18-py2.py3-none-any.whl", hash = "sha256:8db9d3c8ea9079db92cafb0ebf97abdc09d52e97f4dcf773a2e694048b7cd737", size = 99394 }, +] + +[[package]] +name = "idna" +version = "3.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008 }, +] + +[[package]] +name = "imagesize" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/cf/59/4b0dd64676aa6fb4986a755790cb6fc558559cf0084effad516820208ec3/imagesize-1.5.0.tar.gz", hash = "sha256:8bfc5363a7f2133a89f0098451e0bcb1cd71aba4dc02bbcecb39d99d40e1b94f", size = 1281127 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/b1/a0662b03103c66cf77101a187f396ea91167cd9b7d5d3a2e465ad2c7ee9b/imagesize-1.5.0-py2.py3-none-any.whl", hash = "sha256:32677681b3f434c2cb496f00e89c5a291247b35b1f527589909e008057da5899", size = 5763 }, +] + +[[package]] +name = "imagesize" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/6c/e6/7bf14eeb8f8b7251141944835abd42eb20a658d89084b7e1f3e5fe394090/imagesize-2.0.0.tar.gz", hash = "sha256:8e8358c4a05c304f1fccf7ff96f036e7243a189e9e42e90851993c558cfe9ee3", size = 1773045 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl", hash = "sha256:5667c5bbb57ab3f1fa4bc366f4fbc971db3d5ed011fd2715fd8001f782718d96", size = 9441 }, +] + +[[package]] +name = "importlib-metadata" +version = "8.7.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "zipp", marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f3/49/3b30cad09e7771a4982d9975a8cbf64f00d4a1ececb53297f1d9a7be1b10/importlib_metadata-8.7.1.tar.gz", hash = "sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb", size = 57107 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fa/5e/f8e9a1d23b9c20a551a8a02ea3637b4642e22c2626e3a13a9a29cdea99eb/importlib_metadata-8.7.1-py3-none-any.whl", hash = "sha256:5a1f80bf1daa489495071efbb095d75a634cf28a8bc299581244063b53176151", size = 27865 }, +] + +[[package]] +name = "iniconfig" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050 }, +] + +[[package]] +name = "iniconfig" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484 }, +] + +[[package]] +name = "ipykernel" +version = "6.31.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "appnope", marker = "python_full_version < '3.10' and sys_platform == 'darwin'" }, + { name = "comm", marker = "python_full_version < '3.10'" }, + { name = "debugpy", marker = "python_full_version < '3.10'" }, + { name = "ipython", version = "8.18.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "jupyter-client", version = "8.6.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "jupyter-core", version = "5.8.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "matplotlib-inline", marker = "python_full_version < '3.10'" }, + { name = "nest-asyncio", marker = "python_full_version < '3.10'" }, + { name = "packaging", marker = "python_full_version < '3.10'" }, + { name = "psutil", marker = "python_full_version < '3.10'" }, + { name = "pyzmq", marker = "python_full_version < '3.10'" }, + { name = "tornado", marker = "python_full_version < '3.10'" }, + { name = "traitlets", marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a5/1d/d5ba6edbfe6fae4c3105bca3a9c889563cc752c7f2de45e333164c7f4846/ipykernel-6.31.0.tar.gz", hash = "sha256:2372ce8bc1ff4f34e58cafed3a0feb2194b91fc7cad0fc72e79e47b45ee9e8f6", size = 167493 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f6/d8/502954a4ec0efcf264f99b65b41c3c54e65a647d9f0d6f62cd02227d242c/ipykernel-6.31.0-py3-none-any.whl", hash = "sha256:abe5386f6ced727a70e0eb0cf1da801fa7c5fa6ff82147747d5a0406cd8c94af", size = 117003 }, +] + +[[package]] +name = "ipykernel" +version = "7.2.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "appnope", marker = "python_full_version >= '3.10' and sys_platform == 'darwin'" }, + { name = "comm", marker = "python_full_version >= '3.10'" }, + { name = "debugpy", marker = "python_full_version >= '3.10'" }, + { name = "ipython", version = "8.39.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "ipython", version = "9.10.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, + { name = "ipython", version = "9.12.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "jupyter-client", version = "8.8.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "jupyter-core", version = "5.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "matplotlib-inline", marker = "python_full_version >= '3.10'" }, + { name = "nest-asyncio", marker = "python_full_version >= '3.10'" }, + { name = "packaging", marker = "python_full_version >= '3.10'" }, + { name = "psutil", marker = "python_full_version >= '3.10'" }, + { name = "pyzmq", marker = "python_full_version >= '3.10'" }, + { name = "tornado", marker = "python_full_version >= '3.10'" }, + { name = "traitlets", marker = "python_full_version >= '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ca/8d/b68b728e2d06b9e0051019640a40a9eb7a88fcd82c2e1b5ce70bef5ff044/ipykernel-7.2.0.tar.gz", hash = "sha256:18ed160b6dee2cbb16e5f3575858bc19d8f1fe6046a9a680c708494ce31d909e", size = 176046 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/82/b9/e73d5d9f405cba7706c539aa8b311b49d4c2f3d698d9c12f815231169c71/ipykernel-7.2.0-py3-none-any.whl", hash = "sha256:3bbd4420d2b3cc105cbdf3756bfc04500b1e52f090a90716851f3916c62e1661", size = 118788 }, +] + +[[package]] +name = "ipython" +version = "8.18.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "colorama", marker = "python_full_version < '3.10' and sys_platform == 'win32'" }, + { name = "decorator", marker = "python_full_version < '3.10'" }, + { name = "exceptiongroup", marker = "python_full_version < '3.10'" }, + { name = "jedi", marker = "python_full_version < '3.10'" }, + { name = "matplotlib-inline", marker = "python_full_version < '3.10'" }, + { name = "pexpect", marker = "python_full_version < '3.10' and sys_platform != 'win32'" }, + { name = "prompt-toolkit", marker = "python_full_version < '3.10'" }, + { name = "pygments", marker = "python_full_version < '3.10'" }, + { name = "stack-data", marker = "python_full_version < '3.10'" }, + { name = "traitlets", marker = "python_full_version < '3.10'" }, + { name = "typing-extensions", marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/b9/3ba6c45a6df813c09a48bac313c22ff83efa26cbb55011218d925a46e2ad/ipython-8.18.1.tar.gz", hash = "sha256:ca6f079bb33457c66e233e4580ebfc4128855b4cf6370dddd73842a9563e8a27", size = 5486330 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/47/6b/d9fdcdef2eb6a23f391251fde8781c38d42acd82abe84d054cb74f7863b0/ipython-8.18.1-py3-none-any.whl", hash = "sha256:e8267419d72d81955ec1177f8a29aaa90ac80ad647499201119e2f05e99aa397", size = 808161 }, +] + +[[package]] +name = "ipython" +version = "8.39.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "colorama", marker = "python_full_version == '3.10.*' and sys_platform == 'win32'" }, + { name = "decorator", marker = "python_full_version == '3.10.*'" }, + { name = "exceptiongroup", marker = "python_full_version == '3.10.*'" }, + { name = "jedi", marker = "python_full_version == '3.10.*'" }, + { name = "matplotlib-inline", marker = "python_full_version == '3.10.*'" }, + { name = "pexpect", marker = "python_full_version == '3.10.*' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit", marker = "python_full_version == '3.10.*'" }, + { name = "pygments", marker = "python_full_version == '3.10.*'" }, + { name = "stack-data", marker = "python_full_version == '3.10.*'" }, + { name = "traitlets", marker = "python_full_version == '3.10.*'" }, + { name = "typing-extensions", marker = "python_full_version == '3.10.*'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/40/18/f8598d287006885e7136451fdea0755af4ebcbfe342836f24deefaed1164/ipython-8.39.0.tar.gz", hash = "sha256:4110ae96012c379b8b6db898a07e186c40a2a1ef5d57a7fa83166047d9da7624", size = 5513971 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/56/4cc7fc9e9e3f38fd324f24f8afe0ad8bb5fa41283f37f1aaf9de0612c968/ipython-8.39.0-py3-none-any.whl", hash = "sha256:bb3c51c4fa8148ab1dea07a79584d1c854e234ea44aa1283bcb37bc75054651f", size = 831849 }, +] + +[[package]] +name = "ipython" +version = "9.10.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.11.*'", +] +dependencies = [ + { name = "colorama", marker = "python_full_version == '3.11.*' and sys_platform == 'win32'" }, + { name = "decorator", marker = "python_full_version == '3.11.*'" }, + { name = "ipython-pygments-lexers", marker = "python_full_version == '3.11.*'" }, + { name = "jedi", marker = "python_full_version == '3.11.*'" }, + { name = "matplotlib-inline", marker = "python_full_version == '3.11.*'" }, + { name = "pexpect", marker = "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit", marker = "python_full_version == '3.11.*'" }, + { name = "pygments", marker = "python_full_version == '3.11.*'" }, + { name = "stack-data", marker = "python_full_version == '3.11.*'" }, + { name = "traitlets", marker = "python_full_version == '3.11.*'" }, + { name = "typing-extensions", marker = "python_full_version == '3.11.*'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c5/25/daae0e764047b0a2480c7bbb25d48f4f509b5818636562eeac145d06dfee/ipython-9.10.1.tar.gz", hash = "sha256:e170e9b2a44312484415bdb750492699bf329233b03f2557a9692cce6466ada4", size = 4426663 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/01/09/ba70f8d662d5671687da55ad2cc0064cf795b15e1eea70907532202e7c97/ipython-9.10.1-py3-none-any.whl", hash = "sha256:82d18ae9fb9164ded080c71ef92a182ee35ee7db2395f67616034bebb020a232", size = 622827 }, +] + +[[package]] +name = "ipython" +version = "9.12.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", +] +dependencies = [ + { name = "colorama", marker = "python_full_version >= '3.12' and sys_platform == 'win32'" }, + { name = "decorator", marker = "python_full_version >= '3.12'" }, + { name = "ipython-pygments-lexers", marker = "python_full_version >= '3.12'" }, + { name = "jedi", marker = "python_full_version >= '3.12'" }, + { name = "matplotlib-inline", marker = "python_full_version >= '3.12'" }, + { name = "pexpect", marker = "python_full_version >= '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit", marker = "python_full_version >= '3.12'" }, + { name = "pygments", marker = "python_full_version >= '3.12'" }, + { name = "stack-data", marker = "python_full_version >= '3.12'" }, + { name = "traitlets", marker = "python_full_version >= '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3a/73/7114f80a8f9cabdb13c27732dce24af945b2923dcab80723602f7c8bc2d8/ipython-9.12.0.tar.gz", hash = "sha256:01daa83f504b693ba523b5a407246cabde4eb4513285a3c6acaff11a66735ee4", size = 4428879 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/59/22/906c8108974c673ebef6356c506cebb6870d48cedea3c41e949e2dd556bb/ipython-9.12.0-py3-none-any.whl", hash = "sha256:0f2701e8ee86e117e37f50563205d36feaa259d2e08d4a6bc6b6d74b18ce128d", size = 625661 }, +] + +[[package]] +name = "ipython-pygments-lexers" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pygments", marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074 }, +] + +[[package]] +name = "isoduration" +version = "20.11.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "arrow" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7c/1a/3c8edc664e06e6bd06cce40c6b22da5f1429aa4224d0c590f3be21c91ead/isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9", size = 11649 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042", size = 11321 }, +] + +[[package]] +name = "jedi" +version = "0.19.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "parso" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278 }, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899 }, +] + +[[package]] +name = "json5" +version = "0.14.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9c/4b/6f8906aaf67d501e259b0adab4d312945bb7211e8b8d4dcc77c92320edaa/json5-0.14.0.tar.gz", hash = "sha256:b3f492fad9f6cdbced8b7d40b28b9b1c9701c5f561bef0d33b81c2ff433fefcb", size = 52656 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b8/42/cf027b4ac873b076189d935b135397675dac80cb29acb13e1ab86ad6c631/json5-0.14.0-py3-none-any.whl", hash = "sha256:56cf861bab076b1178eb8c92e1311d273a9b9acea2ccc82c276abf839ebaef3a", size = 36271 }, +] + +[[package]] +name = "jsonpointer" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/6a/0a/eebeb1fa92507ea94016a2a790b93c2ae41a7e18778f85471dc54475ed25/jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef", size = 9114 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942", size = 7595 }, +] + +[[package]] +name = "jsonpointer" +version = "3.1.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/18/c7/af399a2e7a67fd18d63c40c5e62d3af4e67b836a2107468b6a5ea24c4304/jsonpointer-3.1.1.tar.gz", hash = "sha256:0b801c7db33a904024f6004d526dcc53bbb8a4a0f4e32bfd10beadf60adf1900", size = 9068 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/6a/a83720e953b1682d2d109d3c2dbb0bc9bf28cc1cbc205be4ef4be5da709d/jsonpointer-3.1.1-py3-none-any.whl", hash = "sha256:8ff8b95779d071ba472cf5bc913028df06031797532f08a7d5b602d8b2a488ca", size = 7659 }, +] + +[[package]] +name = "jsonschema" +version = "4.25.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "attrs", marker = "python_full_version < '3.10'" }, + { name = "jsonschema-specifications", marker = "python_full_version < '3.10'" }, + { name = "referencing", version = "0.36.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "rpds-py", version = "0.27.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/74/69/f7185de793a29082a9f3c7728268ffb31cb5095131a9c139a74078e27336/jsonschema-4.25.1.tar.gz", hash = "sha256:e4a9655ce0da0c0b67a085847e00a3a51449e1157f4f75e9fb5aa545e122eb85", size = 357342 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl", hash = "sha256:3fba0169e345c7175110351d456342c364814cfcf3b964ba4587f22915230a63", size = 90040 }, +] + +[package.optional-dependencies] +format-nongpl = [ + { name = "fqdn", marker = "python_full_version < '3.10'" }, + { name = "idna", marker = "python_full_version < '3.10'" }, + { name = "isoduration", marker = "python_full_version < '3.10'" }, + { name = "jsonpointer", version = "3.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "rfc3339-validator", marker = "python_full_version < '3.10'" }, + { name = "rfc3986-validator", marker = "python_full_version < '3.10'" }, + { name = "rfc3987-syntax", marker = "python_full_version < '3.10'" }, + { name = "uri-template", marker = "python_full_version < '3.10'" }, + { name = "webcolors", version = "24.11.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, +] + +[[package]] +name = "jsonschema" +version = "4.26.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "attrs", marker = "python_full_version >= '3.10'" }, + { name = "jsonschema-specifications", marker = "python_full_version >= '3.10'" }, + { name = "referencing", version = "0.37.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "rpds-py", version = "0.30.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b3/fc/e067678238fa451312d4c62bf6e6cf5ec56375422aee02f9cb5f909b3047/jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326", size = 366583 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl", hash = "sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce", size = 90630 }, +] + +[package.optional-dependencies] +format-nongpl = [ + { name = "fqdn", marker = "python_full_version >= '3.10'" }, + { name = "idna", marker = "python_full_version >= '3.10'" }, + { name = "isoduration", marker = "python_full_version >= '3.10'" }, + { name = "jsonpointer", version = "3.1.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "rfc3339-validator", marker = "python_full_version >= '3.10'" }, + { name = "rfc3986-validator", marker = "python_full_version >= '3.10'" }, + { name = "rfc3987-syntax", marker = "python_full_version >= '3.10'" }, + { name = "uri-template", marker = "python_full_version >= '3.10'" }, + { name = "webcolors", version = "25.10.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, +] + +[[package]] +name = "jsonschema-specifications" +version = "2025.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "referencing", version = "0.36.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "referencing", version = "0.37.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437 }, +] + +[[package]] +name = "jupyter-client" +version = "8.6.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, + { name = "jupyter-core", version = "5.8.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "python-dateutil", marker = "python_full_version < '3.10'" }, + { name = "pyzmq", marker = "python_full_version < '3.10'" }, + { name = "tornado", marker = "python_full_version < '3.10'" }, + { name = "traitlets", marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/71/22/bf9f12fdaeae18019a468b68952a60fe6dbab5d67cd2a103cac7659b41ca/jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419", size = 342019 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f", size = 106105 }, +] + +[[package]] +name = "jupyter-client" +version = "8.8.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "jupyter-core", version = "5.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "python-dateutil", marker = "python_full_version >= '3.10'" }, + { name = "pyzmq", marker = "python_full_version >= '3.10'" }, + { name = "tornado", marker = "python_full_version >= '3.10'" }, + { name = "traitlets", marker = "python_full_version >= '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/05/e4/ba649102a3bc3fbca54e7239fb924fd434c766f855693d86de0b1f2bec81/jupyter_client-8.8.0.tar.gz", hash = "sha256:d556811419a4f2d96c869af34e854e3f059b7cc2d6d01a9cd9c85c267691be3e", size = 348020 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2d/0b/ceb7694d864abc0a047649aec263878acb9f792e1fec3e676f22dc9015e3/jupyter_client-8.8.0-py3-none-any.whl", hash = "sha256:f93a5b99c5e23a507b773d3a1136bd6e16c67883ccdbd9a829b0bbdb98cd7d7a", size = 107371 }, +] + +[[package]] +name = "jupyter-core" +version = "5.8.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "platformdirs", version = "4.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "pywin32", marker = "python_full_version < '3.10' and platform_python_implementation != 'PyPy' and sys_platform == 'win32'" }, + { name = "traitlets", marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/99/1b/72906d554acfeb588332eaaa6f61577705e9ec752ddb486f302dafa292d9/jupyter_core-5.8.1.tar.gz", hash = "sha256:0a5f9706f70e64786b75acba995988915ebd4601c8a52e534a40b51c95f59941", size = 88923 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2f/57/6bffd4b20b88da3800c5d691e0337761576ee688eb01299eae865689d2df/jupyter_core-5.8.1-py3-none-any.whl", hash = "sha256:c28d268fc90fb53f1338ded2eb410704c5449a358406e8a948b75706e24863d0", size = 28880 }, +] + +[[package]] +name = "jupyter-core" +version = "5.9.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "platformdirs", version = "4.9.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "traitlets", marker = "python_full_version >= '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/02/49/9d1284d0dc65e2c757b74c6687b6d319b02f822ad039e5c512df9194d9dd/jupyter_core-5.9.1.tar.gz", hash = "sha256:4d09aaff303b9566c3ce657f580bd089ff5c91f5f89cf7d8846c3cdf465b5508", size = 89814 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl", hash = "sha256:ebf87fdc6073d142e114c72c9e29a9d7ca03fad818c5d300ce2adc1fb0743407", size = 29032 }, +] + +[[package]] +name = "jupyter-events" +version = "0.12.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jsonschema", version = "4.25.1", source = { registry = "https://pypi.org/simple" }, extra = ["format-nongpl"], marker = "python_full_version < '3.10'" }, + { name = "jsonschema", version = "4.26.0", source = { registry = "https://pypi.org/simple" }, extra = ["format-nongpl"], marker = "python_full_version >= '3.10'" }, + { name = "packaging" }, + { name = "python-json-logger", version = "4.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "python-json-logger", version = "4.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "pyyaml" }, + { name = "referencing", version = "0.36.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "referencing", version = "0.37.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "rfc3339-validator" }, + { name = "rfc3986-validator" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9d/c3/306d090461e4cf3cd91eceaff84bede12a8e52cd821c2d20c9a4fd728385/jupyter_events-0.12.0.tar.gz", hash = "sha256:fc3fce98865f6784c9cd0a56a20644fc6098f21c8c33834a8d9fe383c17e554b", size = 62196 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl", hash = "sha256:6464b2fa5ad10451c3d35fabc75eab39556ae1e2853ad0c0cc31b656731a97fb", size = 19430 }, +] + +[[package]] +name = "jupyter-lsp" +version = "2.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, + { name = "jupyter-server" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/36/ff/1e4a61f5170a9a1d978f3ac3872449de6c01fc71eaf89657824c878b1549/jupyter_lsp-2.3.1.tar.gz", hash = "sha256:fdf8a4aa7d85813976d6e29e95e6a2c8f752701f926f2715305249a3829805a6", size = 55677 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/23/e8/9d61dcbd1dce8ef418f06befd4ac084b4720429c26b0b1222bc218685eff/jupyter_lsp-2.3.1-py3-none-any.whl", hash = "sha256:71b954d834e85ff3096400554f2eefaf7fe37053036f9a782b0f7c5e42dadb81", size = 77513 }, +] + +[[package]] +name = "jupyter-server" +version = "2.17.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio", version = "4.12.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "anyio", version = "4.13.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "argon2-cffi" }, + { name = "jinja2" }, + { name = "jupyter-client", version = "8.6.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "jupyter-client", version = "8.8.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "jupyter-core", version = "5.8.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "jupyter-core", version = "5.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "jupyter-events" }, + { name = "jupyter-server-terminals" }, + { name = "nbconvert" }, + { name = "nbformat" }, + { name = "overrides", marker = "python_full_version < '3.12'" }, + { name = "packaging" }, + { name = "prometheus-client" }, + { name = "pywinpty", marker = "os_name == 'nt'" }, + { name = "pyzmq" }, + { name = "send2trash" }, + { name = "terminado" }, + { name = "tornado" }, + { name = "traitlets" }, + { name = "websocket-client" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5b/ac/e040ec363d7b6b1f11304cc9f209dac4517ece5d5e01821366b924a64a50/jupyter_server-2.17.0.tar.gz", hash = "sha256:c38ea898566964c888b4772ae1ed58eca84592e88251d2cfc4d171f81f7e99d5", size = 731949 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl", hash = "sha256:e8cb9c7db4251f51ed307e329b81b72ccf2056ff82d50524debde1ee1870e13f", size = 388221 }, +] + +[[package]] +name = "jupyter-server-terminals" +version = "0.5.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pywinpty", marker = "os_name == 'nt'" }, + { name = "terminado" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f4/a7/bcd0a9b0cbba88986fe944aaaf91bfda603e5a50bda8ed15123f381a3b2f/jupyter_server_terminals-0.5.4.tar.gz", hash = "sha256:bbda128ed41d0be9020349f9f1f2a4ab9952a73ed5f5ac9f1419794761fb87f5", size = 31770 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl", hash = "sha256:55be353fc74a80bc7f3b20e6be50a55a61cd525626f578dcb66a5708e2007d14", size = 13704 }, +] + +[[package]] +name = "jupyterlab" +version = "4.5.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "async-lru", version = "2.0.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "async-lru", version = "2.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "httpx" }, + { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, + { name = "ipykernel", version = "6.31.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "ipykernel", version = "7.2.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "jinja2" }, + { name = "jupyter-core", version = "5.8.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "jupyter-core", version = "5.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "jupyter-lsp" }, + { name = "jupyter-server" }, + { name = "jupyterlab-server" }, + { name = "notebook-shim" }, + { name = "packaging" }, + { name = "setuptools" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "tornado" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ac/d5/730628e03fff2e8a8e8ccdaedde1489ab1309f9a4fa2536248884e30b7c7/jupyterlab-4.5.6.tar.gz", hash = "sha256:642fe2cfe7f0f5922a8a558ba7a0d246c7bc133b708dfe43f7b3a826d163cf42", size = 23970670 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/1b/dad6fdcc658ed7af26fdf3841e7394072c9549a8b896c381ab49dd11e2d9/jupyterlab-4.5.6-py3-none-any.whl", hash = "sha256:d6b3dac883aa4d9993348e0f8e95b24624f75099aed64eab6a4351a9cdd1e580", size = 12447124 }, +] + +[[package]] +name = "jupyterlab-pygments" +version = "0.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/90/51/9187be60d989df97f5f0aba133fa54e7300f17616e065d1ada7d7646b6d6/jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d", size = 512900 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780", size = 15884 }, +] + +[[package]] +name = "jupyterlab-server" +version = "2.28.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "babel" }, + { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, + { name = "jinja2" }, + { name = "json5" }, + { name = "jsonschema", version = "4.25.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "jsonschema", version = "4.26.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "jupyter-server" }, + { name = "packaging" }, + { name = "requests", version = "2.32.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "requests", version = "2.33.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d6/2c/90153f189e421e93c4bb4f9e3f59802a1f01abd2ac5cf40b152d7f735232/jupyterlab_server-2.28.0.tar.gz", hash = "sha256:35baa81898b15f93573e2deca50d11ac0ae407ebb688299d3a5213265033712c", size = 76996 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/07/a000fe835f76b7e1143242ab1122e6362ef1c03f23f83a045c38859c2ae0/jupyterlab_server-2.28.0-py3-none-any.whl", hash = "sha256:e4355b148fdcf34d312bbbc80f22467d6d20460e8b8736bf235577dd18506968", size = 59830 }, +] + +[[package]] +name = "lark" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/da/34/28fff3ab31ccff1fd4f6c7c7b0ceb2b6968d8ea4950663eadcb5720591a0/lark-1.3.1.tar.gz", hash = "sha256:b426a7a6d6d53189d318f2b6236ab5d6429eaf09259f1ca33eb716eed10d2905", size = 382732 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/82/3d/14ce75ef66813643812f3093ab17e46d3a206942ce7376d31ec2d36229e7/lark-1.3.1-py3-none-any.whl", hash = "sha256:c629b661023a014c37da873b4ff58a817398d12635d3bbb2c5a03be7fe5d1e12", size = 113151 }, +] + +[[package]] +name = "markupsafe" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e8/4b/3541d44f3937ba468b75da9eebcae497dcf67adb65caa16760b0a6807ebb/markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559", size = 11631 }, + { url = "https://files.pythonhosted.org/packages/98/1b/fbd8eed11021cabd9226c37342fa6ca4e8a98d8188a8d9b66740494960e4/markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419", size = 12057 }, + { url = "https://files.pythonhosted.org/packages/40/01/e560d658dc0bb8ab762670ece35281dec7b6c1b33f5fbc09ebb57a185519/markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695", size = 22050 }, + { url = "https://files.pythonhosted.org/packages/af/cd/ce6e848bbf2c32314c9b237839119c5a564a59725b53157c856e90937b7a/markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591", size = 20681 }, + { url = "https://files.pythonhosted.org/packages/c9/2a/b5c12c809f1c3045c4d580b035a743d12fcde53cf685dbc44660826308da/markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c", size = 20705 }, + { url = "https://files.pythonhosted.org/packages/cf/e3/9427a68c82728d0a88c50f890d0fc072a1484de2f3ac1ad0bfc1a7214fd5/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f", size = 21524 }, + { url = "https://files.pythonhosted.org/packages/bc/36/23578f29e9e582a4d0278e009b38081dbe363c5e7165113fad546918a232/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6", size = 20282 }, + { url = "https://files.pythonhosted.org/packages/56/21/dca11354e756ebd03e036bd8ad58d6d7168c80ce1fe5e75218e4945cbab7/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1", size = 20745 }, + { url = "https://files.pythonhosted.org/packages/87/99/faba9369a7ad6e4d10b6a5fbf71fa2a188fe4a593b15f0963b73859a1bbd/markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa", size = 14571 }, + { url = "https://files.pythonhosted.org/packages/d6/25/55dc3ab959917602c96985cb1253efaa4ff42f71194bddeb61eb7278b8be/markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8", size = 15056 }, + { url = "https://files.pythonhosted.org/packages/d0/9e/0a02226640c255d1da0b8d12e24ac2aa6734da68bff14c05dd53b94a0fc3/markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1", size = 13932 }, + { url = "https://files.pythonhosted.org/packages/08/db/fefacb2136439fc8dd20e797950e749aa1f4997ed584c62cfb8ef7c2be0e/markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad", size = 11631 }, + { url = "https://files.pythonhosted.org/packages/e1/2e/5898933336b61975ce9dc04decbc0a7f2fee78c30353c5efba7f2d6ff27a/markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a", size = 12058 }, + { url = "https://files.pythonhosted.org/packages/1d/09/adf2df3699d87d1d8184038df46a9c80d78c0148492323f4693df54e17bb/markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50", size = 24287 }, + { url = "https://files.pythonhosted.org/packages/30/ac/0273f6fcb5f42e314c6d8cd99effae6a5354604d461b8d392b5ec9530a54/markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf", size = 22940 }, + { url = "https://files.pythonhosted.org/packages/19/ae/31c1be199ef767124c042c6c3e904da327a2f7f0cd63a0337e1eca2967a8/markupsafe-3.0.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f", size = 21887 }, + { url = "https://files.pythonhosted.org/packages/b2/76/7edcab99d5349a4532a459e1fe64f0b0467a3365056ae550d3bcf3f79e1e/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a", size = 23692 }, + { url = "https://files.pythonhosted.org/packages/a4/28/6e74cdd26d7514849143d69f0bf2399f929c37dc2b31e6829fd2045b2765/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115", size = 21471 }, + { url = "https://files.pythonhosted.org/packages/62/7e/a145f36a5c2945673e590850a6f8014318d5577ed7e5920a4b3448e0865d/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a", size = 22923 }, + { url = "https://files.pythonhosted.org/packages/0f/62/d9c46a7f5c9adbeeeda52f5b8d802e1094e9717705a645efc71b0913a0a8/markupsafe-3.0.3-cp311-cp311-win32.whl", hash = "sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19", size = 14572 }, + { url = "https://files.pythonhosted.org/packages/83/8a/4414c03d3f891739326e1783338e48fb49781cc915b2e0ee052aa490d586/markupsafe-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01", size = 15077 }, + { url = "https://files.pythonhosted.org/packages/35/73/893072b42e6862f319b5207adc9ae06070f095b358655f077f69a35601f0/markupsafe-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c", size = 13876 }, + { url = "https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615 }, + { url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020 }, + { url = "https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", size = 24332 }, + { url = "https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d", size = 22947 }, + { url = "https://files.pythonhosted.org/packages/2c/54/887f3092a85238093a0b2154bd629c89444f395618842e8b0c41783898ea/markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a", size = 21962 }, + { url = "https://files.pythonhosted.org/packages/c9/2f/336b8c7b6f4a4d95e91119dc8521402461b74a485558d8f238a68312f11c/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b", size = 23760 }, + { url = "https://files.pythonhosted.org/packages/32/43/67935f2b7e4982ffb50a4d169b724d74b62a3964bc1a9a527f5ac4f1ee2b/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f", size = 21529 }, + { url = "https://files.pythonhosted.org/packages/89/e0/4486f11e51bbba8b0c041098859e869e304d1c261e59244baa3d295d47b7/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b", size = 23015 }, + { url = "https://files.pythonhosted.org/packages/2f/e1/78ee7a023dac597a5825441ebd17170785a9dab23de95d2c7508ade94e0e/markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d", size = 14540 }, + { url = "https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c", size = 15105 }, + { url = "https://files.pythonhosted.org/packages/e5/f1/216fc1bbfd74011693a4fd837e7026152e89c4bcf3e77b6692fba9923123/markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f", size = 13906 }, + { url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622 }, + { url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029 }, + { url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374 }, + { url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980 }, + { url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990 }, + { url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784 }, + { url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588 }, + { url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041 }, + { url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543 }, + { url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113 }, + { url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911 }, + { url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658 }, + { url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066 }, + { url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639 }, + { url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569 }, + { url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284 }, + { url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801 }, + { url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769 }, + { url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642 }, + { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612 }, + { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200 }, + { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973 }, + { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619 }, + { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029 }, + { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408 }, + { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005 }, + { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048 }, + { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821 }, + { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606 }, + { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043 }, + { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747 }, + { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341 }, + { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073 }, + { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661 }, + { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069 }, + { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670 }, + { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598 }, + { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261 }, + { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835 }, + { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733 }, + { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672 }, + { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819 }, + { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426 }, + { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146 }, + { url = "https://files.pythonhosted.org/packages/56/23/0d8c13a44bde9154821586520840643467aee574d8ce79a17da539ee7fed/markupsafe-3.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15d939a21d546304880945ca1ecb8a039db6b4dc49b2c5a400387cdae6a62e26", size = 11623 }, + { url = "https://files.pythonhosted.org/packages/fd/23/07a2cb9a8045d5f3f0890a8c3bc0859d7a47bfd9a560b563899bec7b72ed/markupsafe-3.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f71a396b3bf33ecaa1626c255855702aca4d3d9fea5e051b41ac59a9c1c41edc", size = 12049 }, + { url = "https://files.pythonhosted.org/packages/bc/e4/6be85eb81503f8e11b61c0b6369b6e077dcf0a74adbd9ebf6b349937b4e9/markupsafe-3.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f4b68347f8c5eab4a13419215bdfd7f8c9b19f2b25520968adfad23eb0ce60c", size = 21923 }, + { url = "https://files.pythonhosted.org/packages/6f/bc/4dc914ead3fe6ddaef035341fee0fc956949bbd27335b611829292b89ee2/markupsafe-3.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e8fc20152abba6b83724d7ff268c249fa196d8259ff481f3b1476383f8f24e42", size = 20543 }, + { url = "https://files.pythonhosted.org/packages/89/6e/5fe81fbcfba4aef4093d5f856e5c774ec2057946052d18d168219b7bd9f9/markupsafe-3.0.3-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:949b8d66bc381ee8b007cd945914c721d9aba8e27f71959d750a46f7c282b20b", size = 20585 }, + { url = "https://files.pythonhosted.org/packages/f6/f6/e0e5a3d3ae9c4020f696cd055f940ef86b64fe88de26f3a0308b9d3d048c/markupsafe-3.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:3537e01efc9d4dccdf77221fb1cb3b8e1a38d5428920e0657ce299b20324d758", size = 21387 }, + { url = "https://files.pythonhosted.org/packages/c8/25/651753ef4dea08ea790f4fbb65146a9a44a014986996ca40102e237aa49a/markupsafe-3.0.3-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:591ae9f2a647529ca990bc681daebdd52c8791ff06c2bfa05b65163e28102ef2", size = 20133 }, + { url = "https://files.pythonhosted.org/packages/dc/0a/c3cf2b4fef5f0426e8a6d7fce3cb966a17817c568ce59d76b92a233fdbec/markupsafe-3.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a320721ab5a1aba0a233739394eb907f8c8da5c98c9181d1161e77a0c8e36f2d", size = 20588 }, + { url = "https://files.pythonhosted.org/packages/cd/1b/a7782984844bd519ad4ffdbebbba2671ec5d0ebbeac34736c15fb86399e8/markupsafe-3.0.3-cp39-cp39-win32.whl", hash = "sha256:df2449253ef108a379b8b5d6b43f4b1a8e81a061d6537becd5582fba5f9196d7", size = 14566 }, + { url = "https://files.pythonhosted.org/packages/18/1f/8d9c20e1c9440e215a44be5ab64359e207fcb4f675543f1cf9a2a7f648d0/markupsafe-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:7c3fb7d25180895632e5d3148dbdc29ea38ccb7fd210aa27acbd1201a1902c6e", size = 15053 }, + { url = "https://files.pythonhosted.org/packages/4e/d3/fe08482b5cd995033556d45041a4f4e76e7f0521112a9c9991d40d39825f/markupsafe-3.0.3-cp39-cp39-win_arm64.whl", hash = "sha256:38664109c14ffc9e7437e86b4dceb442b0096dfe3541d7864d9cbe1da4cf36c8", size = 13928 }, +] + +[[package]] +name = "matplotlib-inline" +version = "0.2.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c7/74/97e72a36efd4ae2bccb3463284300f8953f199b5ffbc04cbbb0ec78f74b1/matplotlib_inline-0.2.1.tar.gz", hash = "sha256:e1ee949c340d771fc39e241ea75683deb94762c8fa5f2927ec57c83c4dffa9fe", size = 8110 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/af/33/ee4519fa02ed11a94aef9559552f3b17bb863f2ecfe1a35dc7f548cde231/matplotlib_inline-0.2.1-py3-none-any.whl", hash = "sha256:d56ce5156ba6085e00a9d54fead6ed29a9c47e215cd1bba2e976ef39f5710a76", size = 9516 }, +] + +[[package]] +name = "mistune" +version = "3.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9d/55/d01f0c4b45ade6536c51170b9043db8b2ec6ddf4a35c7ea3f5f559ac935b/mistune-3.2.0.tar.gz", hash = "sha256:708487c8a8cdd99c9d90eb3ed4c3ed961246ff78ac82f03418f5183ab70e398a", size = 95467 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9b/f7/4a5e785ec9fbd65146a27b6b70b6cdc161a66f2024e4b04ac06a67f5578b/mistune-3.2.0-py3-none-any.whl", hash = "sha256:febdc629a3c78616b94393c6580551e0e34cc289987ec6c35ed3f4be42d0eee1", size = 53598 }, +] + +[[package]] +name = "nbclient" +version = "0.10.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "jupyter-client", version = "8.6.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "jupyter-core", version = "5.8.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "nbformat", marker = "python_full_version < '3.10'" }, + { name = "traitlets", marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/87/66/7ffd18d58eae90d5721f9f39212327695b749e23ad44b3881744eaf4d9e8/nbclient-0.10.2.tar.gz", hash = "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193", size = 62424 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/6d/e7fa07f03a4a7b221d94b4d586edb754a9b0dc3c9e2c93353e9fa4e0d117/nbclient-0.10.2-py3-none-any.whl", hash = "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d", size = 25434 }, +] + +[[package]] +name = "nbclient" +version = "0.10.4" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "jupyter-client", version = "8.8.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "jupyter-core", version = "5.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "nbformat", marker = "python_full_version >= '3.10'" }, + { name = "traitlets", marker = "python_full_version >= '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/56/91/1c1d5a4b9a9ebba2b4e32b8c852c2975c872aec1fe42ab5e516b2cecd193/nbclient-0.10.4.tar.gz", hash = "sha256:1e54091b16e6da39e297b0ece3e10f6f29f4ac4e8ee515d29f8a7099bd6553c9", size = 62554 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/83/a0/5b0c2f11142ed1dddec842457d3f65eaf71a0080894eb6f018755b319c3a/nbclient-0.10.4-py3-none-any.whl", hash = "sha256:9162df5a7373d70d606527300a95a975a47c137776cd942e52d9c7e29ff83440", size = 25465 }, +] + +[[package]] +name = "nbconvert" +version = "7.17.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "beautifulsoup4" }, + { name = "bleach", version = "6.2.0", source = { registry = "https://pypi.org/simple" }, extra = ["css"], marker = "python_full_version < '3.10'" }, + { name = "bleach", version = "6.3.0", source = { registry = "https://pypi.org/simple" }, extra = ["css"], marker = "python_full_version >= '3.10'" }, + { name = "defusedxml" }, + { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, + { name = "jinja2" }, + { name = "jupyter-core", version = "5.8.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "jupyter-core", version = "5.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "jupyterlab-pygments" }, + { name = "markupsafe" }, + { name = "mistune" }, + { name = "nbclient", version = "0.10.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "nbclient", version = "0.10.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "nbformat" }, + { name = "packaging" }, + { name = "pandocfilters" }, + { name = "pygments" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/01/b1/708e53fe2e429c103c6e6e159106bcf0357ac41aa4c28772bd8402339051/nbconvert-7.17.1.tar.gz", hash = "sha256:34d0d0a7e73ce3cbab6c5aae8f4f468797280b01fd8bd2ca746da8569eddd7d2", size = 865311 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/f8/bb0a9d5f46819c821dc1f004aa2cc29b1d91453297dbf5ff20470f00f193/nbconvert-7.17.1-py3-none-any.whl", hash = "sha256:aa85c087b435e7bf1ffd03319f658e285f2b89eccab33bc1ba7025495ab3e7c8", size = 261927 }, +] + +[[package]] +name = "nbformat" +version = "5.10.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fastjsonschema" }, + { name = "jsonschema", version = "4.25.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "jsonschema", version = "4.26.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "jupyter-core", version = "5.8.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "jupyter-core", version = "5.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6d/fd/91545e604bc3dad7dca9ed03284086039b294c6b3d75c0d2fa45f9e9caf3/nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a", size = 142749 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b", size = 78454 }, +] + +[[package]] +name = "nest-asyncio" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195 }, +] + +[[package]] +name = "nodeenv" +version = "1.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/24/bf/d1bda4f6168e0b2e9e5958945e01910052158313224ada5ce1fb2e1113b8/nodeenv-1.10.0.tar.gz", hash = "sha256:996c191ad80897d076bdfba80a41994c2b47c68e224c542b48feba42ba00f8bb", size = 55611 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl", hash = "sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827", size = 23438 }, +] + +[[package]] +name = "notebook" +version = "7.5.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-server" }, + { name = "jupyterlab" }, + { name = "jupyterlab-server" }, + { name = "notebook-shim" }, + { name = "tornado" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1f/6d/41052c48d6f6349ca0a7c4d1f6a78464de135e6d18f5829ba2510e62184c/notebook-7.5.5.tar.gz", hash = "sha256:dc0bfab0f2372c8278c457423d3256c34154ac2cc76bf20e9925260c461013c3", size = 14169167 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f8/aa/cbd1deb9f07446241e88f8d5fecccd95b249bca0b4e5482214a4d1714c49/notebook-7.5.5-py3-none-any.whl", hash = "sha256:a7c14dbeefa6592e87f72290ca982e0c10f5bbf3786be2a600fda9da2764a2b8", size = 14578929 }, +] + +[[package]] +name = "notebook-shim" +version = "0.2.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-server" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/54/d2/92fa3243712b9a3e8bafaf60aac366da1cada3639ca767ff4b5b3654ec28/notebook_shim-0.2.4.tar.gz", hash = "sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb", size = 13167 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef", size = 13307 }, +] + +[[package]] +name = "numpy" +version = "2.0.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/a9/75/10dd1f8116a8b796cb2c737b674e02d02e80454bda953fa7e65d8c12b016/numpy-2.0.2.tar.gz", hash = "sha256:883c987dee1880e2a864ab0dc9892292582510604156762362d9326444636e78", size = 18902015 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/21/91/3495b3237510f79f5d81f2508f9f13fea78ebfdf07538fc7444badda173d/numpy-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:51129a29dbe56f9ca83438b706e2e69a39892b5eda6cedcb6b0c9fdc9b0d3ece", size = 21165245 }, + { url = "https://files.pythonhosted.org/packages/05/33/26178c7d437a87082d11019292dce6d3fe6f0e9026b7b2309cbf3e489b1d/numpy-2.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f15975dfec0cf2239224d80e32c3170b1d168335eaedee69da84fbe9f1f9cd04", size = 13738540 }, + { url = "https://files.pythonhosted.org/packages/ec/31/cc46e13bf07644efc7a4bf68df2df5fb2a1a88d0cd0da9ddc84dc0033e51/numpy-2.0.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:8c5713284ce4e282544c68d1c3b2c7161d38c256d2eefc93c1d683cf47683e66", size = 5300623 }, + { url = "https://files.pythonhosted.org/packages/6e/16/7bfcebf27bb4f9d7ec67332ffebee4d1bf085c84246552d52dbb548600e7/numpy-2.0.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:becfae3ddd30736fe1889a37f1f580e245ba79a5855bff5f2a29cb3ccc22dd7b", size = 6901774 }, + { url = "https://files.pythonhosted.org/packages/f9/a3/561c531c0e8bf082c5bef509d00d56f82e0ea7e1e3e3a7fc8fa78742a6e5/numpy-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2da5960c3cf0df7eafefd806d4e612c5e19358de82cb3c343631188991566ccd", size = 13907081 }, + { url = "https://files.pythonhosted.org/packages/fa/66/f7177ab331876200ac7563a580140643d1179c8b4b6a6b0fc9838de2a9b8/numpy-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:496f71341824ed9f3d2fd36cf3ac57ae2e0165c143b55c3a035ee219413f3318", size = 19523451 }, + { url = "https://files.pythonhosted.org/packages/25/7f/0b209498009ad6453e4efc2c65bcdf0ae08a182b2b7877d7ab38a92dc542/numpy-2.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a61ec659f68ae254e4d237816e33171497e978140353c0c2038d46e63282d0c8", size = 19927572 }, + { url = "https://files.pythonhosted.org/packages/3e/df/2619393b1e1b565cd2d4c4403bdd979621e2c4dea1f8532754b2598ed63b/numpy-2.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d731a1c6116ba289c1e9ee714b08a8ff882944d4ad631fd411106a30f083c326", size = 14400722 }, + { url = "https://files.pythonhosted.org/packages/22/ad/77e921b9f256d5da36424ffb711ae79ca3f451ff8489eeca544d0701d74a/numpy-2.0.2-cp310-cp310-win32.whl", hash = "sha256:984d96121c9f9616cd33fbd0618b7f08e0cfc9600a7ee1d6fd9b239186d19d97", size = 6472170 }, + { url = "https://files.pythonhosted.org/packages/10/05/3442317535028bc29cf0c0dd4c191a4481e8376e9f0db6bcf29703cadae6/numpy-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:c7b0be4ef08607dd04da4092faee0b86607f111d5ae68036f16cc787e250a131", size = 15905558 }, + { url = "https://files.pythonhosted.org/packages/8b/cf/034500fb83041aa0286e0fb16e7c76e5c8b67c0711bb6e9e9737a717d5fe/numpy-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:49ca4decb342d66018b01932139c0961a8f9ddc7589611158cb3c27cbcf76448", size = 21169137 }, + { url = "https://files.pythonhosted.org/packages/4a/d9/32de45561811a4b87fbdee23b5797394e3d1504b4a7cf40c10199848893e/numpy-2.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:11a76c372d1d37437857280aa142086476136a8c0f373b2e648ab2c8f18fb195", size = 13703552 }, + { url = "https://files.pythonhosted.org/packages/c1/ca/2f384720020c7b244d22508cb7ab23d95f179fcfff33c31a6eeba8d6c512/numpy-2.0.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:807ec44583fd708a21d4a11d94aedf2f4f3c3719035c76a2bbe1fe8e217bdc57", size = 5298957 }, + { url = "https://files.pythonhosted.org/packages/0e/78/a3e4f9fb6aa4e6fdca0c5428e8ba039408514388cf62d89651aade838269/numpy-2.0.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8cafab480740e22f8d833acefed5cc87ce276f4ece12fdaa2e8903db2f82897a", size = 6905573 }, + { url = "https://files.pythonhosted.org/packages/a0/72/cfc3a1beb2caf4efc9d0b38a15fe34025230da27e1c08cc2eb9bfb1c7231/numpy-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a15f476a45e6e5a3a79d8a14e62161d27ad897381fecfa4a09ed5322f2085669", size = 13914330 }, + { url = "https://files.pythonhosted.org/packages/ba/a8/c17acf65a931ce551fee11b72e8de63bf7e8a6f0e21add4c937c83563538/numpy-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13e689d772146140a252c3a28501da66dfecd77490b498b168b501835041f951", size = 19534895 }, + { url = "https://files.pythonhosted.org/packages/ba/86/8767f3d54f6ae0165749f84648da9dcc8cd78ab65d415494962c86fac80f/numpy-2.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9ea91dfb7c3d1c56a0e55657c0afb38cf1eeae4544c208dc465c3c9f3a7c09f9", size = 19937253 }, + { url = "https://files.pythonhosted.org/packages/df/87/f76450e6e1c14e5bb1eae6836478b1028e096fd02e85c1c37674606ab752/numpy-2.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c1c9307701fec8f3f7a1e6711f9089c06e6284b3afbbcd259f7791282d660a15", size = 14414074 }, + { url = "https://files.pythonhosted.org/packages/5c/ca/0f0f328e1e59f73754f06e1adfb909de43726d4f24c6a3f8805f34f2b0fa/numpy-2.0.2-cp311-cp311-win32.whl", hash = "sha256:a392a68bd329eafac5817e5aefeb39038c48b671afd242710b451e76090e81f4", size = 6470640 }, + { url = "https://files.pythonhosted.org/packages/eb/57/3a3f14d3a759dcf9bf6e9eda905794726b758819df4663f217d658a58695/numpy-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:286cd40ce2b7d652a6f22efdfc6d1edf879440e53e76a75955bc0c826c7e64dc", size = 15910230 }, + { url = "https://files.pythonhosted.org/packages/45/40/2e117be60ec50d98fa08c2f8c48e09b3edea93cfcabd5a9ff6925d54b1c2/numpy-2.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:df55d490dea7934f330006d0f81e8551ba6010a5bf035a249ef61a94f21c500b", size = 20895803 }, + { url = "https://files.pythonhosted.org/packages/46/92/1b8b8dee833f53cef3e0a3f69b2374467789e0bb7399689582314df02651/numpy-2.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8df823f570d9adf0978347d1f926b2a867d5608f434a7cff7f7908c6570dcf5e", size = 13471835 }, + { url = "https://files.pythonhosted.org/packages/7f/19/e2793bde475f1edaea6945be141aef6c8b4c669b90c90a300a8954d08f0a/numpy-2.0.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:9a92ae5c14811e390f3767053ff54eaee3bf84576d99a2456391401323f4ec2c", size = 5038499 }, + { url = "https://files.pythonhosted.org/packages/e3/ff/ddf6dac2ff0dd50a7327bcdba45cb0264d0e96bb44d33324853f781a8f3c/numpy-2.0.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:a842d573724391493a97a62ebbb8e731f8a5dcc5d285dfc99141ca15a3302d0c", size = 6633497 }, + { url = "https://files.pythonhosted.org/packages/72/21/67f36eac8e2d2cd652a2e69595a54128297cdcb1ff3931cfc87838874bd4/numpy-2.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05e238064fc0610c840d1cf6a13bf63d7e391717d247f1bf0318172e759e692", size = 13621158 }, + { url = "https://files.pythonhosted.org/packages/39/68/e9f1126d757653496dbc096cb429014347a36b228f5a991dae2c6b6cfd40/numpy-2.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0123ffdaa88fa4ab64835dcbde75dcdf89c453c922f18dced6e27c90d1d0ec5a", size = 19236173 }, + { url = "https://files.pythonhosted.org/packages/d1/e9/1f5333281e4ebf483ba1c888b1d61ba7e78d7e910fdd8e6499667041cc35/numpy-2.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:96a55f64139912d61de9137f11bf39a55ec8faec288c75a54f93dfd39f7eb40c", size = 19634174 }, + { url = "https://files.pythonhosted.org/packages/71/af/a469674070c8d8408384e3012e064299f7a2de540738a8e414dcfd639996/numpy-2.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ec9852fb39354b5a45a80bdab5ac02dd02b15f44b3804e9f00c556bf24b4bded", size = 14099701 }, + { url = "https://files.pythonhosted.org/packages/d0/3d/08ea9f239d0e0e939b6ca52ad403c84a2bce1bde301a8eb4888c1c1543f1/numpy-2.0.2-cp312-cp312-win32.whl", hash = "sha256:671bec6496f83202ed2d3c8fdc486a8fc86942f2e69ff0e986140339a63bcbe5", size = 6174313 }, + { url = "https://files.pythonhosted.org/packages/b2/b5/4ac39baebf1fdb2e72585c8352c56d063b6126be9fc95bd2bb5ef5770c20/numpy-2.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:cfd41e13fdc257aa5778496b8caa5e856dc4896d4ccf01841daee1d96465467a", size = 15606179 }, + { url = "https://files.pythonhosted.org/packages/43/c1/41c8f6df3162b0c6ffd4437d729115704bd43363de0090c7f913cfbc2d89/numpy-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9059e10581ce4093f735ed23f3b9d283b9d517ff46009ddd485f1747eb22653c", size = 21169942 }, + { url = "https://files.pythonhosted.org/packages/39/bc/fd298f308dcd232b56a4031fd6ddf11c43f9917fbc937e53762f7b5a3bb1/numpy-2.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:423e89b23490805d2a5a96fe40ec507407b8ee786d66f7328be214f9679df6dd", size = 13711512 }, + { url = "https://files.pythonhosted.org/packages/96/ff/06d1aa3eeb1c614eda245c1ba4fb88c483bee6520d361641331872ac4b82/numpy-2.0.2-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:2b2955fa6f11907cf7a70dab0d0755159bca87755e831e47932367fc8f2f2d0b", size = 5306976 }, + { url = "https://files.pythonhosted.org/packages/2d/98/121996dcfb10a6087a05e54453e28e58694a7db62c5a5a29cee14c6e047b/numpy-2.0.2-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:97032a27bd9d8988b9a97a8c4d2c9f2c15a81f61e2f21404d7e8ef00cb5be729", size = 6906494 }, + { url = "https://files.pythonhosted.org/packages/15/31/9dffc70da6b9bbf7968f6551967fc21156207366272c2a40b4ed6008dc9b/numpy-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e795a8be3ddbac43274f18588329c72939870a16cae810c2b73461c40718ab1", size = 13912596 }, + { url = "https://files.pythonhosted.org/packages/b9/14/78635daab4b07c0930c919d451b8bf8c164774e6a3413aed04a6d95758ce/numpy-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26b258c385842546006213344c50655ff1555a9338e2e5e02a0756dc3e803dd", size = 19526099 }, + { url = "https://files.pythonhosted.org/packages/26/4c/0eeca4614003077f68bfe7aac8b7496f04221865b3a5e7cb230c9d055afd/numpy-2.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5fec9451a7789926bcf7c2b8d187292c9f93ea30284802a0ab3f5be8ab36865d", size = 19932823 }, + { url = "https://files.pythonhosted.org/packages/f1/46/ea25b98b13dccaebddf1a803f8c748680d972e00507cd9bc6dcdb5aa2ac1/numpy-2.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9189427407d88ff25ecf8f12469d4d39d35bee1db5d39fc5c168c6f088a6956d", size = 14404424 }, + { url = "https://files.pythonhosted.org/packages/c8/a6/177dd88d95ecf07e722d21008b1b40e681a929eb9e329684d449c36586b2/numpy-2.0.2-cp39-cp39-win32.whl", hash = "sha256:905d16e0c60200656500c95b6b8dca5d109e23cb24abc701d41c02d74c6b3afa", size = 6476809 }, + { url = "https://files.pythonhosted.org/packages/ea/2b/7fc9f4e7ae5b507c1a3a21f0f15ed03e794c1242ea8a242ac158beb56034/numpy-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:a3f4ab0caa7f053f6797fcd4e1e25caee367db3112ef2b6ef82d749530768c73", size = 15911314 }, + { url = "https://files.pythonhosted.org/packages/8f/3b/df5a870ac6a3be3a86856ce195ef42eec7ae50d2a202be1f5a4b3b340e14/numpy-2.0.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7f0a0c6f12e07fa94133c8a67404322845220c06a9e80e85999afe727f7438b8", size = 21025288 }, + { url = "https://files.pythonhosted.org/packages/2c/97/51af92f18d6f6f2d9ad8b482a99fb74e142d71372da5d834b3a2747a446e/numpy-2.0.2-pp39-pypy39_pp73-macosx_14_0_x86_64.whl", hash = "sha256:312950fdd060354350ed123c0e25a71327d3711584beaef30cdaa93320c392d4", size = 6762793 }, + { url = "https://files.pythonhosted.org/packages/12/46/de1fbd0c1b5ccaa7f9a005b66761533e2f6a3e560096682683a223631fe9/numpy-2.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26df23238872200f63518dd2aa984cfca675d82469535dc7162dc2ee52d9dd5c", size = 19334885 }, + { url = "https://files.pythonhosted.org/packages/cc/dc/d330a6faefd92b446ec0f0dfea4c3207bb1fef3c4771d19cf4543efd2c78/numpy-2.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a46288ec55ebbd58947d31d72be2c63cbf839f0a63b49cb755022310792a3385", size = 15828784 }, +] + +[[package]] +name = "numpy" +version = "2.2.6" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245 }, + { url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048 }, + { url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542 }, + { url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301 }, + { url = "https://files.pythonhosted.org/packages/eb/17/96a3acd228cec142fcb8723bd3cc39c2a474f7dcf0a5d16731980bcafa95/numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83", size = 14297320 }, + { url = "https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915", size = 16801050 }, + { url = "https://files.pythonhosted.org/packages/07/b6/89d837eddef52b3d0cec5c6ba0456c1bf1b9ef6a6672fc2b7873c3ec4e2e/numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680", size = 15807034 }, + { url = "https://files.pythonhosted.org/packages/01/c8/dc6ae86e3c61cfec1f178e5c9f7858584049b6093f843bca541f94120920/numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289", size = 18614185 }, + { url = "https://files.pythonhosted.org/packages/5b/c5/0064b1b7e7c89137b471ccec1fd2282fceaae0ab3a9550f2568782d80357/numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d", size = 6527149 }, + { url = "https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3", size = 12904620 }, + { url = "https://files.pythonhosted.org/packages/da/a8/4f83e2aa666a9fbf56d6118faaaf5f1974d456b1823fda0a176eff722839/numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae", size = 21176963 }, + { url = "https://files.pythonhosted.org/packages/b3/2b/64e1affc7972decb74c9e29e5649fac940514910960ba25cd9af4488b66c/numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a", size = 14406743 }, + { url = "https://files.pythonhosted.org/packages/4a/9f/0121e375000b5e50ffdd8b25bf78d8e1a5aa4cca3f185d41265198c7b834/numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42", size = 5352616 }, + { url = "https://files.pythonhosted.org/packages/31/0d/b48c405c91693635fbe2dcd7bc84a33a602add5f63286e024d3b6741411c/numpy-2.2.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:481b49095335f8eed42e39e8041327c05b0f6f4780488f61286ed3c01368d491", size = 6889579 }, + { url = "https://files.pythonhosted.org/packages/52/b8/7f0554d49b565d0171eab6e99001846882000883998e7b7d9f0d98b1f934/numpy-2.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b64d8d4d17135e00c8e346e0a738deb17e754230d7e0810ac5012750bbd85a5a", size = 14312005 }, + { url = "https://files.pythonhosted.org/packages/b3/dd/2238b898e51bd6d389b7389ffb20d7f4c10066d80351187ec8e303a5a475/numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf", size = 16821570 }, + { url = "https://files.pythonhosted.org/packages/83/6c/44d0325722cf644f191042bf47eedad61c1e6df2432ed65cbe28509d404e/numpy-2.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd48227a919f1bafbdda0583705e547892342c26fb127219d60a5c36882609d1", size = 15818548 }, + { url = "https://files.pythonhosted.org/packages/ae/9d/81e8216030ce66be25279098789b665d49ff19eef08bfa8cb96d4957f422/numpy-2.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9551a499bf125c1d4f9e250377c1ee2eddd02e01eac6644c080162c0c51778ab", size = 18620521 }, + { url = "https://files.pythonhosted.org/packages/6a/fd/e19617b9530b031db51b0926eed5345ce8ddc669bb3bc0044b23e275ebe8/numpy-2.2.6-cp311-cp311-win32.whl", hash = "sha256:0678000bb9ac1475cd454c6b8c799206af8107e310843532b04d49649c717a47", size = 6525866 }, + { url = "https://files.pythonhosted.org/packages/31/0a/f354fb7176b81747d870f7991dc763e157a934c717b67b58456bc63da3df/numpy-2.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:e8213002e427c69c45a52bbd94163084025f533a55a59d6f9c5b820774ef3303", size = 12907455 }, + { url = "https://files.pythonhosted.org/packages/82/5d/c00588b6cf18e1da539b45d3598d3557084990dcc4331960c15ee776ee41/numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff", size = 20875348 }, + { url = "https://files.pythonhosted.org/packages/66/ee/560deadcdde6c2f90200450d5938f63a34b37e27ebff162810f716f6a230/numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c", size = 14119362 }, + { url = "https://files.pythonhosted.org/packages/3c/65/4baa99f1c53b30adf0acd9a5519078871ddde8d2339dc5a7fde80d9d87da/numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3", size = 5084103 }, + { url = "https://files.pythonhosted.org/packages/cc/89/e5a34c071a0570cc40c9a54eb472d113eea6d002e9ae12bb3a8407fb912e/numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282", size = 6625382 }, + { url = "https://files.pythonhosted.org/packages/f8/35/8c80729f1ff76b3921d5c9487c7ac3de9b2a103b1cd05e905b3090513510/numpy-2.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87", size = 14018462 }, + { url = "https://files.pythonhosted.org/packages/8c/3d/1e1db36cfd41f895d266b103df00ca5b3cbe965184df824dec5c08c6b803/numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249", size = 16527618 }, + { url = "https://files.pythonhosted.org/packages/61/c6/03ed30992602c85aa3cd95b9070a514f8b3c33e31124694438d88809ae36/numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49", size = 15505511 }, + { url = "https://files.pythonhosted.org/packages/b7/25/5761d832a81df431e260719ec45de696414266613c9ee268394dd5ad8236/numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de", size = 18313783 }, + { url = "https://files.pythonhosted.org/packages/57/0a/72d5a3527c5ebffcd47bde9162c39fae1f90138c961e5296491ce778e682/numpy-2.2.6-cp312-cp312-win32.whl", hash = "sha256:4eeaae00d789f66c7a25ac5f34b71a7035bb474e679f410e5e1a94deb24cf2d4", size = 6246506 }, + { url = "https://files.pythonhosted.org/packages/36/fa/8c9210162ca1b88529ab76b41ba02d433fd54fecaf6feb70ef9f124683f1/numpy-2.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2", size = 12614190 }, + { url = "https://files.pythonhosted.org/packages/f9/5c/6657823f4f594f72b5471f1db1ab12e26e890bb2e41897522d134d2a3e81/numpy-2.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84", size = 20867828 }, + { url = "https://files.pythonhosted.org/packages/dc/9e/14520dc3dadf3c803473bd07e9b2bd1b69bc583cb2497b47000fed2fa92f/numpy-2.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b", size = 14143006 }, + { url = "https://files.pythonhosted.org/packages/4f/06/7e96c57d90bebdce9918412087fc22ca9851cceaf5567a45c1f404480e9e/numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d", size = 5076765 }, + { url = "https://files.pythonhosted.org/packages/73/ed/63d920c23b4289fdac96ddbdd6132e9427790977d5457cd132f18e76eae0/numpy-2.2.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566", size = 6617736 }, + { url = "https://files.pythonhosted.org/packages/85/c5/e19c8f99d83fd377ec8c7e0cf627a8049746da54afc24ef0a0cb73d5dfb5/numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f", size = 14010719 }, + { url = "https://files.pythonhosted.org/packages/19/49/4df9123aafa7b539317bf6d342cb6d227e49f7a35b99c287a6109b13dd93/numpy-2.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f", size = 16526072 }, + { url = "https://files.pythonhosted.org/packages/b2/6c/04b5f47f4f32f7c2b0e7260442a8cbcf8168b0e1a41ff1495da42f42a14f/numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868", size = 15503213 }, + { url = "https://files.pythonhosted.org/packages/17/0a/5cd92e352c1307640d5b6fec1b2ffb06cd0dabe7d7b8227f97933d378422/numpy-2.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d", size = 18316632 }, + { url = "https://files.pythonhosted.org/packages/f0/3b/5cba2b1d88760ef86596ad0f3d484b1cbff7c115ae2429678465057c5155/numpy-2.2.6-cp313-cp313-win32.whl", hash = "sha256:5beb72339d9d4fa36522fc63802f469b13cdbe4fdab4a288f0c441b74272ebfd", size = 6244532 }, + { url = "https://files.pythonhosted.org/packages/cb/3b/d58c12eafcb298d4e6d0d40216866ab15f59e55d148a5658bb3132311fcf/numpy-2.2.6-cp313-cp313-win_amd64.whl", hash = "sha256:b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c", size = 12610885 }, + { url = "https://files.pythonhosted.org/packages/6b/9e/4bf918b818e516322db999ac25d00c75788ddfd2d2ade4fa66f1f38097e1/numpy-2.2.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6", size = 20963467 }, + { url = "https://files.pythonhosted.org/packages/61/66/d2de6b291507517ff2e438e13ff7b1e2cdbdb7cb40b3ed475377aece69f9/numpy-2.2.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda", size = 14225144 }, + { url = "https://files.pythonhosted.org/packages/e4/25/480387655407ead912e28ba3a820bc69af9adf13bcbe40b299d454ec011f/numpy-2.2.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40", size = 5200217 }, + { url = "https://files.pythonhosted.org/packages/aa/4a/6e313b5108f53dcbf3aca0c0f3e9c92f4c10ce57a0a721851f9785872895/numpy-2.2.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8", size = 6712014 }, + { url = "https://files.pythonhosted.org/packages/b7/30/172c2d5c4be71fdf476e9de553443cf8e25feddbe185e0bd88b096915bcc/numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f", size = 14077935 }, + { url = "https://files.pythonhosted.org/packages/12/fb/9e743f8d4e4d3c710902cf87af3512082ae3d43b945d5d16563f26ec251d/numpy-2.2.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa", size = 16600122 }, + { url = "https://files.pythonhosted.org/packages/12/75/ee20da0e58d3a66f204f38916757e01e33a9737d0b22373b3eb5a27358f9/numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571", size = 15586143 }, + { url = "https://files.pythonhosted.org/packages/76/95/bef5b37f29fc5e739947e9ce5179ad402875633308504a52d188302319c8/numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1", size = 18385260 }, + { url = "https://files.pythonhosted.org/packages/09/04/f2f83279d287407cf36a7a8053a5abe7be3622a4363337338f2585e4afda/numpy-2.2.6-cp313-cp313t-win32.whl", hash = "sha256:038613e9fb8c72b0a41f025a7e4c3f0b7a1b5d768ece4796b674c8f3fe13efff", size = 6377225 }, + { url = "https://files.pythonhosted.org/packages/67/0e/35082d13c09c02c011cf21570543d202ad929d961c02a147493cb0c2bdf5/numpy-2.2.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06", size = 12771374 }, + { url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391 }, + { url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754 }, + { url = "https://files.pythonhosted.org/packages/af/30/feba75f143bdc868a1cc3f44ccfa6c4b9ec522b36458e738cd00f67b573f/numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543", size = 16643476 }, + { url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666 }, +] + +[[package]] +name = "numpy" +version = "2.4.4" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/d7/9f/b8cef5bffa569759033adda9481211426f12f53299629b410340795c2514/numpy-2.4.4.tar.gz", hash = "sha256:2d390634c5182175533585cc89f3608a4682ccb173cc9bb940b2881c8d6f8fa0", size = 20731587 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/c6/4218570d8c8ecc9704b5157a3348e486e84ef4be0ed3e38218ab473c83d2/numpy-2.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f983334aea213c99992053ede6168500e5f086ce74fbc4acc3f2b00f5762e9db", size = 16976799 }, + { url = "https://files.pythonhosted.org/packages/dd/92/b4d922c4a5f5dab9ed44e6153908a5c665b71acf183a83b93b690996e39b/numpy-2.4.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:72944b19f2324114e9dc86a159787333b77874143efcf89a5167ef83cfee8af0", size = 14971552 }, + { url = "https://files.pythonhosted.org/packages/8a/dc/df98c095978fa6ee7b9a9387d1d58cbb3d232d0e69ad169a4ce784bde4fd/numpy-2.4.4-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:86b6f55f5a352b48d7fbfd2dbc3d5b780b2d79f4d3c121f33eb6efb22e9a2015", size = 5476566 }, + { url = "https://files.pythonhosted.org/packages/28/34/b3fdcec6e725409223dd27356bdf5a3c2cc2282e428218ecc9cb7acc9763/numpy-2.4.4-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:ba1f4fc670ed79f876f70082eff4f9583c15fb9a4b89d6188412de4d18ae2f40", size = 6806482 }, + { url = "https://files.pythonhosted.org/packages/68/62/63417c13aa35d57bee1337c67446761dc25ea6543130cf868eace6e8157b/numpy-2.4.4-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a87ec22c87be071b6bdbd27920b129b94f2fc964358ce38f3822635a3e2e03d", size = 15973376 }, + { url = "https://files.pythonhosted.org/packages/cf/c5/9fcb7e0e69cef59cf10c746b84f7d58b08bc66a6b7d459783c5a4f6101a6/numpy-2.4.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:df3775294accfdd75f32c74ae39fcba920c9a378a2fc18a12b6820aa8c1fb502", size = 16925137 }, + { url = "https://files.pythonhosted.org/packages/7e/43/80020edacb3f84b9efdd1591120a4296462c23fd8db0dde1666f6ef66f13/numpy-2.4.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0d4e437e295f18ec29bc79daf55e8a47a9113df44d66f702f02a293d93a2d6dd", size = 17329414 }, + { url = "https://files.pythonhosted.org/packages/fd/06/af0658593b18a5f73532d377188b964f239eb0894e664a6c12f484472f97/numpy-2.4.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6aa3236c78803afbcb255045fbef97a9e25a1f6c9888357d205ddc42f4d6eba5", size = 18658397 }, + { url = "https://files.pythonhosted.org/packages/e6/ce/13a09ed65f5d0ce5c7dd0669250374c6e379910f97af2c08c57b0608eee4/numpy-2.4.4-cp311-cp311-win32.whl", hash = "sha256:30caa73029a225b2d40d9fae193e008e24b2026b7ee1a867b7ee8d96ca1a448e", size = 6239499 }, + { url = "https://files.pythonhosted.org/packages/bd/63/05d193dbb4b5eec1eca73822d80da98b511f8328ad4ae3ca4caf0f4db91d/numpy-2.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:6bbe4eb67390b0a0265a2c25458f6b90a409d5d069f1041e6aff1e27e3d9a79e", size = 12614257 }, + { url = "https://files.pythonhosted.org/packages/87/c5/8168052f080c26fa984c413305012be54741c9d0d74abd7fbeeccae3889f/numpy-2.4.4-cp311-cp311-win_arm64.whl", hash = "sha256:fcfe2045fd2e8f3cb0ce9d4ba6dba6333b8fa05bb8a4939c908cd43322d14c7e", size = 10486775 }, + { url = "https://files.pythonhosted.org/packages/28/05/32396bec30fb2263770ee910142f49c1476d08e8ad41abf8403806b520ce/numpy-2.4.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:15716cfef24d3a9762e3acdf87e27f58dc823d1348f765bbea6bef8c639bfa1b", size = 16689272 }, + { url = "https://files.pythonhosted.org/packages/c5/f3/a983d28637bfcd763a9c7aafdb6d5c0ebf3d487d1e1459ffdb57e2f01117/numpy-2.4.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:23cbfd4c17357c81021f21540da84ee282b9c8fba38a03b7b9d09ba6b951421e", size = 14699573 }, + { url = "https://files.pythonhosted.org/packages/9b/fd/e5ecca1e78c05106d98028114f5c00d3eddb41207686b2b7de3e477b0e22/numpy-2.4.4-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:8b3b60bb7cba2c8c81837661c488637eee696f59a877788a396d33150c35d842", size = 5204782 }, + { url = "https://files.pythonhosted.org/packages/de/2f/702a4594413c1a8632092beae8aba00f1d67947389369b3777aed783fdca/numpy-2.4.4-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:e4a010c27ff6f210ff4c6ef34394cd61470d01014439b192ec22552ee867f2a8", size = 6552038 }, + { url = "https://files.pythonhosted.org/packages/7f/37/eed308a8f56cba4d1fdf467a4fc67ef4ff4bf1c888f5fc980481890104b1/numpy-2.4.4-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f9e75681b59ddaa5e659898085ae0eaea229d054f2ac0c7e563a62205a700121", size = 15670666 }, + { url = "https://files.pythonhosted.org/packages/0a/0d/0e3ecece05b7a7e87ab9fb587855548da437a061326fff64a223b6dcb78a/numpy-2.4.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:81f4a14bee47aec54f883e0cad2d73986640c1590eb9bfaaba7ad17394481e6e", size = 16645480 }, + { url = "https://files.pythonhosted.org/packages/34/49/f2312c154b82a286758ee2f1743336d50651f8b5195db18cdb63675ff649/numpy-2.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:62d6b0f03b694173f9fcb1fb317f7222fd0b0b103e784c6549f5e53a27718c44", size = 17020036 }, + { url = "https://files.pythonhosted.org/packages/7b/e9/736d17bd77f1b0ec4f9901aaec129c00d59f5d84d5e79bba540ef12c2330/numpy-2.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fbc356aae7adf9e6336d336b9c8111d390a05df88f1805573ebb0807bd06fd1d", size = 18368643 }, + { url = "https://files.pythonhosted.org/packages/63/f6/d417977c5f519b17c8a5c3bc9e8304b0908b0e21136fe43bf628a1343914/numpy-2.4.4-cp312-cp312-win32.whl", hash = "sha256:0d35aea54ad1d420c812bfa0385c71cd7cc5bcf7c65fed95fc2cd02fe8c79827", size = 5961117 }, + { url = "https://files.pythonhosted.org/packages/2d/5b/e1deebf88ff431b01b7406ca3583ab2bbb90972bbe1c568732e49c844f7e/numpy-2.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:b5f0362dc928a6ecd9db58868fca5e48485205e3855957bdedea308f8672ea4a", size = 12320584 }, + { url = "https://files.pythonhosted.org/packages/58/89/e4e856ac82a68c3ed64486a544977d0e7bdd18b8da75b78a577ca31c4395/numpy-2.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:846300f379b5b12cc769334464656bc882e0735d27d9726568bc932fdc49d5ec", size = 10221450 }, + { url = "https://files.pythonhosted.org/packages/14/1d/d0a583ce4fefcc3308806a749a536c201ed6b5ad6e1322e227ee4848979d/numpy-2.4.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:08f2e31ed5e6f04b118e49821397f12767934cfdd12a1ce86a058f91e004ee50", size = 16684933 }, + { url = "https://files.pythonhosted.org/packages/c1/62/2b7a48fbb745d344742c0277f01286dead15f3f68e4f359fbfcf7b48f70f/numpy-2.4.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e823b8b6edc81e747526f70f71a9c0a07ac4e7ad13020aa736bb7c9d67196115", size = 14694532 }, + { url = "https://files.pythonhosted.org/packages/e5/87/499737bfba066b4a3bebff24a8f1c5b2dee410b209bc6668c9be692580f0/numpy-2.4.4-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:4a19d9dba1a76618dd86b164d608566f393f8ec6ac7c44f0cc879011c45e65af", size = 5199661 }, + { url = "https://files.pythonhosted.org/packages/cd/da/464d551604320d1491bc345efed99b4b7034143a85787aab78d5691d5a0e/numpy-2.4.4-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:d2a8490669bfe99a233298348acc2d824d496dee0e66e31b66a6022c2ad74a5c", size = 6547539 }, + { url = "https://files.pythonhosted.org/packages/7d/90/8d23e3b0dafd024bf31bdec225b3bb5c2dbfa6912f8a53b8659f21216cbf/numpy-2.4.4-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:45dbed2ab436a9e826e302fcdcbe9133f9b0006e5af7168afb8963a6520da103", size = 15668806 }, + { url = "https://files.pythonhosted.org/packages/d1/73/a9d864e42a01896bb5974475438f16086be9ba1f0d19d0bb7a07427c4a8b/numpy-2.4.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c901b15172510173f5cb310eae652908340f8dede90fff9e3bf6c0d8dfd92f83", size = 16632682 }, + { url = "https://files.pythonhosted.org/packages/34/fb/14570d65c3bde4e202a031210475ae9cde9b7686a2e7dc97ee67d2833b35/numpy-2.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:99d838547ace2c4aace6c4f76e879ddfe02bb58a80c1549928477862b7a6d6ed", size = 17019810 }, + { url = "https://files.pythonhosted.org/packages/8a/77/2ba9d87081fd41f6d640c83f26fb7351e536b7ce6dd9061b6af5904e8e46/numpy-2.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0aec54fd785890ecca25a6003fd9a5aed47ad607bbac5cd64f836ad8666f4959", size = 18357394 }, + { url = "https://files.pythonhosted.org/packages/a2/23/52666c9a41708b0853fa3b1a12c90da38c507a3074883823126d4e9d5b30/numpy-2.4.4-cp313-cp313-win32.whl", hash = "sha256:07077278157d02f65c43b1b26a3886bce886f95d20aabd11f87932750dfb14ed", size = 5959556 }, + { url = "https://files.pythonhosted.org/packages/57/fb/48649b4971cde70d817cf97a2a2fdc0b4d8308569f1dd2f2611959d2e0cf/numpy-2.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:5c70f1cc1c4efbe316a572e2d8b9b9cc44e89b95f79ca3331553fbb63716e2bf", size = 12317311 }, + { url = "https://files.pythonhosted.org/packages/ba/d8/11490cddd564eb4de97b4579ef6bfe6a736cc07e94c1598590ae25415e01/numpy-2.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:ef4059d6e5152fa1a39f888e344c73fdc926e1b2dd58c771d67b0acfbf2aa67d", size = 10222060 }, + { url = "https://files.pythonhosted.org/packages/99/5d/dab4339177a905aad3e2221c915b35202f1ec30d750dd2e5e9d9a72b804b/numpy-2.4.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4bbc7f303d125971f60ec0aaad5e12c62d0d2c925f0ab1273debd0e4ba37aba5", size = 14822302 }, + { url = "https://files.pythonhosted.org/packages/eb/e4/0564a65e7d3d97562ed6f9b0fd0fb0a6f559ee444092f105938b50043876/numpy-2.4.4-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:4d6d57903571f86180eb98f8f0c839fa9ebbfb031356d87f1361be91e433f5b7", size = 5327407 }, + { url = "https://files.pythonhosted.org/packages/29/8d/35a3a6ce5ad371afa58b4700f1c820f8f279948cca32524e0a695b0ded83/numpy-2.4.4-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:4636de7fd195197b7535f231b5de9e4b36d2c440b6e566d2e4e4746e6af0ca93", size = 6647631 }, + { url = "https://files.pythonhosted.org/packages/f4/da/477731acbd5a58a946c736edfdabb2ac5b34c3d08d1ba1a7b437fa0884df/numpy-2.4.4-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ad2e2ef14e0b04e544ea2fa0a36463f847f113d314aa02e5b402fdf910ef309e", size = 15727691 }, + { url = "https://files.pythonhosted.org/packages/e6/db/338535d9b152beabeb511579598418ba0212ce77cf9718edd70262cc4370/numpy-2.4.4-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a285b3b96f951841799528cd1f4f01cd70e7e0204b4abebac9463eecfcf2a40", size = 16681241 }, + { url = "https://files.pythonhosted.org/packages/e2/a9/ad248e8f58beb7a0219b413c9c7d8151c5d285f7f946c3e26695bdbbe2df/numpy-2.4.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:f8474c4241bc18b750be2abea9d7a9ec84f46ef861dbacf86a4f6e043401f79e", size = 17085767 }, + { url = "https://files.pythonhosted.org/packages/b5/1a/3b88ccd3694681356f70da841630e4725a7264d6a885c8d442a697e1146b/numpy-2.4.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4e874c976154687c1f71715b034739b45c7711bec81db01914770373d125e392", size = 18403169 }, + { url = "https://files.pythonhosted.org/packages/c2/c9/fcfd5d0639222c6eac7f304829b04892ef51c96a75d479214d77e3ce6e33/numpy-2.4.4-cp313-cp313t-win32.whl", hash = "sha256:9c585a1790d5436a5374bac930dad6ed244c046ed91b2b2a3634eb2971d21008", size = 6083477 }, + { url = "https://files.pythonhosted.org/packages/d5/e3/3938a61d1c538aaec8ed6fd6323f57b0c2d2d2219512434c5c878db76553/numpy-2.4.4-cp313-cp313t-win_amd64.whl", hash = "sha256:93e15038125dc1e5345d9b5b68aa7f996ec33b98118d18c6ca0d0b7d6198b7e8", size = 12457487 }, + { url = "https://files.pythonhosted.org/packages/97/6a/7e345032cc60501721ef94e0e30b60f6b0bd601f9174ebd36389a2b86d40/numpy-2.4.4-cp313-cp313t-win_arm64.whl", hash = "sha256:0dfd3f9d3adbe2920b68b5cd3d51444e13a10792ec7154cd0a2f6e74d4ab3233", size = 10292002 }, + { url = "https://files.pythonhosted.org/packages/6e/06/c54062f85f673dd5c04cbe2f14c3acb8c8b95e3384869bb8cc9bff8cb9df/numpy-2.4.4-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:f169b9a863d34f5d11b8698ead99febeaa17a13ca044961aa8e2662a6c7766a0", size = 16684353 }, + { url = "https://files.pythonhosted.org/packages/4c/39/8a320264a84404c74cc7e79715de85d6130fa07a0898f67fb5cd5bd79908/numpy-2.4.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2483e4584a1cb3092da4470b38866634bafb223cbcd551ee047633fd2584599a", size = 14704914 }, + { url = "https://files.pythonhosted.org/packages/91/fb/287076b2614e1d1044235f50f03748f31fa287e3dbe6abeb35cdfa351eca/numpy-2.4.4-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:2d19e6e2095506d1736b7d80595e0f252d76b89f5e715c35e06e937679ea7d7a", size = 5210005 }, + { url = "https://files.pythonhosted.org/packages/63/eb/fcc338595309910de6ecabfcef2419a9ce24399680bfb149421fa2df1280/numpy-2.4.4-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:6a246d5914aa1c820c9443ddcee9c02bec3e203b0c080349533fae17727dfd1b", size = 6544974 }, + { url = "https://files.pythonhosted.org/packages/44/5d/e7e9044032a716cdfaa3fba27a8e874bf1c5f1912a1ddd4ed071bf8a14a6/numpy-2.4.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:989824e9faf85f96ec9c7761cd8d29c531ad857bfa1daa930cba85baaecf1a9a", size = 15684591 }, + { url = "https://files.pythonhosted.org/packages/98/7c/21252050676612625449b4807d6b695b9ce8a7c9e1c197ee6216c8a65c7c/numpy-2.4.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:27a8d92cd10f1382a67d7cf4db7ce18341b66438bdd9f691d7b0e48d104c2a9d", size = 16637700 }, + { url = "https://files.pythonhosted.org/packages/b1/29/56d2bbef9465db24ef25393383d761a1af4f446a1df9b8cded4fe3a5a5d7/numpy-2.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e44319a2953c738205bf3354537979eaa3998ed673395b964c1176083dd46252", size = 17035781 }, + { url = "https://files.pythonhosted.org/packages/e3/2b/a35a6d7589d21f44cea7d0a98de5ddcbb3d421b2622a5c96b1edf18707c3/numpy-2.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e892aff75639bbef0d2a2cfd55535510df26ff92f63c92cd84ef8d4ba5a5557f", size = 18362959 }, + { url = "https://files.pythonhosted.org/packages/64/c9/d52ec581f2390e0f5f85cbfd80fb83d965fc15e9f0e1aec2195faa142cde/numpy-2.4.4-cp314-cp314-win32.whl", hash = "sha256:1378871da56ca8943c2ba674530924bb8ca40cd228358a3b5f302ad60cf875fc", size = 6008768 }, + { url = "https://files.pythonhosted.org/packages/fa/22/4cc31a62a6c7b74a8730e31a4274c5dc80e005751e277a2ce38e675e4923/numpy-2.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:715d1c092715954784bc79e1174fc2a90093dc4dc84ea15eb14dad8abdcdeb74", size = 12449181 }, + { url = "https://files.pythonhosted.org/packages/70/2e/14cda6f4d8e396c612d1bf97f22958e92148801d7e4f110cabebdc0eef4b/numpy-2.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:2c194dd721e54ecad9ad387c1d35e63dce5c4450c6dc7dd5611283dda239aabb", size = 10496035 }, + { url = "https://files.pythonhosted.org/packages/b1/e8/8fed8c8d848d7ecea092dc3469643f9d10bc3a134a815a3b033da1d2039b/numpy-2.4.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2aa0613a5177c264ff5921051a5719d20095ea586ca88cc802c5c218d1c67d3e", size = 14824958 }, + { url = "https://files.pythonhosted.org/packages/05/1a/d8007a5138c179c2bf33ef44503e83d70434d2642877ee8fbb230e7c0548/numpy-2.4.4-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:42c16925aa5a02362f986765f9ebabf20de75cdefdca827d14315c568dcab113", size = 5330020 }, + { url = "https://files.pythonhosted.org/packages/99/64/ffb99ac6ae93faf117bcbd5c7ba48a7f45364a33e8e458545d3633615dda/numpy-2.4.4-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:874f200b2a981c647340f841730fc3a2b54c9d940566a3c4149099591e2c4c3d", size = 6650758 }, + { url = "https://files.pythonhosted.org/packages/6e/6e/795cc078b78a384052e73b2f6281ff7a700e9bf53bcce2ee579d4f6dd879/numpy-2.4.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c9b39d38a9bd2ae1becd7eac1303d031c5c110ad31f2b319c6e7d98b135c934d", size = 15729948 }, + { url = "https://files.pythonhosted.org/packages/5f/86/2acbda8cc2af5f3d7bfc791192863b9e3e19674da7b5e533fded124d1299/numpy-2.4.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b268594bccac7d7cf5844c7732e3f20c50921d94e36d7ec9b79e9857694b1b2f", size = 16679325 }, + { url = "https://files.pythonhosted.org/packages/bc/59/cafd83018f4aa55e0ac6fa92aa066c0a1877b77a615ceff1711c260ffae8/numpy-2.4.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ac6b31e35612a26483e20750126d30d0941f949426974cace8e6b5c58a3657b0", size = 17084883 }, + { url = "https://files.pythonhosted.org/packages/f0/85/a42548db84e65ece46ab2caea3d3f78b416a47af387fcbb47ec28e660dc2/numpy-2.4.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:8e3ed142f2728df44263aaf5fb1f5b0b99f4070c553a0d7f033be65338329150", size = 18403474 }, + { url = "https://files.pythonhosted.org/packages/ed/ad/483d9e262f4b831000062e5d8a45e342166ec8aaa1195264982bca267e62/numpy-2.4.4-cp314-cp314t-win32.whl", hash = "sha256:dddbbd259598d7240b18c9d87c56a9d2fb3b02fe266f49a7c101532e78c1d871", size = 6155500 }, + { url = "https://files.pythonhosted.org/packages/c7/03/2fc4e14c7bd4ff2964b74ba90ecb8552540b6315f201df70f137faa5c589/numpy-2.4.4-cp314-cp314t-win_amd64.whl", hash = "sha256:a7164afb23be6e37ad90b2f10426149fd75aee07ca55653d2aa41e66c4ef697e", size = 12637755 }, + { url = "https://files.pythonhosted.org/packages/58/78/548fb8e07b1a341746bfbecb32f2c268470f45fa028aacdbd10d9bc73aab/numpy-2.4.4-cp314-cp314t-win_arm64.whl", hash = "sha256:ba203255017337d39f89bdd58417f03c4426f12beed0440cfd933cb15f8669c7", size = 10566643 }, + { url = "https://files.pythonhosted.org/packages/6b/33/8fae8f964a4f63ed528264ddf25d2b683d0b663e3cba26961eb838a7c1bd/numpy-2.4.4-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:58c8b5929fcb8287cbd6f0a3fae19c6e03a5c48402ae792962ac465224a629a4", size = 16854491 }, + { url = "https://files.pythonhosted.org/packages/bc/d0/1aabee441380b981cf8cdda3ae7a46aa827d1b5a8cce84d14598bc94d6d9/numpy-2.4.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:eea7ac5d2dce4189771cedb559c738a71512768210dc4e4753b107a2048b3d0e", size = 14895830 }, + { url = "https://files.pythonhosted.org/packages/a5/b8/aafb0d1065416894fccf4df6b49ef22b8db045187949545bced89c034b8e/numpy-2.4.4-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:51fc224f7ca4d92656d5a5eb315f12eb5fe2c97a66249aa7b5f562528a3be38c", size = 5400927 }, + { url = "https://files.pythonhosted.org/packages/d6/77/063baa20b08b431038c7f9ff5435540c7b7265c78cf56012a483019ca72d/numpy-2.4.4-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:28a650663f7314afc3e6ec620f44f333c386aad9f6fc472030865dc0ebb26ee3", size = 6715557 }, + { url = "https://files.pythonhosted.org/packages/c7/a8/379542d45a14f149444c5c4c4e7714707239ce9cc1de8c2803958889da14/numpy-2.4.4-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:19710a9ca9992d7174e9c52f643d4272dcd1558c5f7af7f6f8190f633bd651a7", size = 15804253 }, + { url = "https://files.pythonhosted.org/packages/a2/c8/f0a45426d6d21e7ea3310a15cf90c43a14d9232c31a837702dba437f3373/numpy-2.4.4-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9b2aec6af35c113b05695ebb5749a787acd63cafc83086a05771d1e1cd1e555f", size = 16753552 }, + { url = "https://files.pythonhosted.org/packages/04/74/f4c001f4714c3ad9ce037e18cf2b9c64871a84951eaa0baf683a9ca9301c/numpy-2.4.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:f2cf083b324a467e1ab358c105f6cad5ea950f50524668a80c486ff1db24e119", size = 12509075 }, +] + +[[package]] +name = "overrides" +version = "7.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/36/86/b585f53236dec60aba864e050778b25045f857e17f6e5ea0ae95fe80edd2/overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a", size = 22812 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/ab/fc8290c6a4c722e5514d80f62b2dc4c4df1a68a41d1364e625c35990fcf3/overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49", size = 17832 }, +] + +[[package]] +name = "packaging" +version = "26.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/65/ee/299d360cdc32edc7d2cf530f3accf79c4fca01e96ffc950d8a52213bd8e4/packaging-26.0.tar.gz", hash = "sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4", size = 143416 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl", hash = "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529", size = 74366 }, +] + +[[package]] +name = "pandocfilters" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/70/6f/3dd4940bbe001c06a65f88e36bad298bc7a0de5036115639926b0c5c0458/pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e", size = 8454 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/af/4fbc8cab944db5d21b7e2a5b8e9211a03a79852b1157e2c102fcc61ac440/pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc", size = 8663 }, +] + +[[package]] +name = "parso" +version = "0.8.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/81/76/a1e769043c0c0c9fe391b702539d594731a4362334cdf4dc25d0c09761e7/parso-0.8.6.tar.gz", hash = "sha256:2b9a0332696df97d454fa67b81618fd69c35a7b90327cbe6ba5c92d2c68a7bfd", size = 401621 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b6/61/fae042894f4296ec49e3f193aff5d7c18440da9e48102c3315e1bc4519a7/parso-0.8.6-py2.py3-none-any.whl", hash = "sha256:2c549f800b70a5c4952197248825584cb00f033b29c692671d3bf08bf380baff", size = 106894 }, +] + +[[package]] +name = "pexpect" +version = "4.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ptyprocess" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772 }, +] + +[[package]] +name = "platformdirs" +version = "4.4.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/23/e8/21db9c9987b0e728855bd57bff6984f67952bea55d6f75e055c46b5383e8/platformdirs-4.4.0.tar.gz", hash = "sha256:ca753cf4d81dc309bc67b0ea38fd15dc97bc30ce419a7f58d13eb3bf14c4febf", size = 21634 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/4b/2028861e724d3bd36227adfa20d3fd24c3fc6d52032f4a93c133be5d17ce/platformdirs-4.4.0-py3-none-any.whl", hash = "sha256:abd01743f24e5287cd7a5db3752faf1a2d65353f38ec26d98e25a6db65958c85", size = 18654 }, +] + +[[package]] +name = "platformdirs" +version = "4.9.6" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/9f/4a/0883b8e3802965322523f0b200ecf33d31f10991d0401162f4b23c698b42/platformdirs-4.9.6.tar.gz", hash = "sha256:3bfa75b0ad0db84096ae777218481852c0ebc6c727b3168c1b9e0118e458cf0a", size = 29400 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/75/a6/a0a304dc33b49145b21f4808d763822111e67d1c3a32b524a1baf947b6e1/platformdirs-4.9.6-py3-none-any.whl", hash = "sha256:e61adb1d5e5cb3441b4b7710bea7e4c12250ca49439228cc1021c00dcfac0917", size = 21348 }, +] + +[[package]] +name = "pluggy" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538 }, +] + +[[package]] +name = "pre-commit" +version = "4.3.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "cfgv", version = "3.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "identify", version = "2.6.15", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "nodeenv", marker = "python_full_version < '3.10'" }, + { name = "pyyaml", marker = "python_full_version < '3.10'" }, + { name = "virtualenv", marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ff/29/7cf5bbc236333876e4b41f56e06857a87937ce4bf91e117a6991a2dbb02a/pre_commit-4.3.0.tar.gz", hash = "sha256:499fe450cc9d42e9d58e606262795ecb64dd05438943c62b66f6a8673da30b16", size = 193792 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5b/a5/987a405322d78a73b66e39e4a90e4ef156fd7141bf71df987e50717c321b/pre_commit-4.3.0-py2.py3-none-any.whl", hash = "sha256:2b0747ad7e6e967169136edffee14c16e148a778a54e4f967921aa1ebf2308d8", size = 220965 }, +] + +[[package]] +name = "pre-commit" +version = "4.5.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "cfgv", version = "3.5.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "identify", version = "2.6.18", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "nodeenv", marker = "python_full_version >= '3.10'" }, + { name = "pyyaml", marker = "python_full_version >= '3.10'" }, + { name = "virtualenv", marker = "python_full_version >= '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/40/f1/6d86a29246dfd2e9b6237f0b5823717f60cad94d47ddc26afa916d21f525/pre_commit-4.5.1.tar.gz", hash = "sha256:eb545fcff725875197837263e977ea257a402056661f09dae08e4b149b030a61", size = 198232 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl", hash = "sha256:3b3afd891e97337708c1674210f8eba659b52a38ea5f822ff142d10786221f77", size = 226437 }, +] + +[[package]] +name = "prometheus-client" +version = "0.25.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1b/fb/d9aa83ffe43ce1f19e557c0971d04b90561b0cfd50762aafb01968285553/prometheus_client-0.25.0.tar.gz", hash = "sha256:5e373b75c31afb3c86f1a52fa1ad470c9aace18082d39ec0d2f918d11cc9ba28", size = 86035 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8d/9b/d4b1e644385499c8346fa9b622a3f030dce14cd6ef8a1871c221a17a67e7/prometheus_client-0.25.0-py3-none-any.whl", hash = "sha256:d5aec89e349a6ec230805d0df882f3807f74fd6c1a2fa86864e3c2279059fed1", size = 64154 }, +] + +[[package]] +name = "prompt-toolkit" +version = "3.0.52" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "wcwidth" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a1/96/06e01a7b38dce6fe1db213e061a4602dd6032a8a97ef6c1a862537732421/prompt_toolkit-3.0.52.tar.gz", hash = "sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855", size = 434198 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl", hash = "sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955", size = 391431 }, +] + +[[package]] +name = "psutil" +version = "7.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/c6/d1ddf4abb55e93cebc4f2ed8b5d6dbad109ecb8d63748dd2b20ab5e57ebe/psutil-7.2.2.tar.gz", hash = "sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372", size = 493740 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/08/510cbdb69c25a96f4ae523f733cdc963ae654904e8db864c07585ef99875/psutil-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b", size = 130595 }, + { url = "https://files.pythonhosted.org/packages/d6/f5/97baea3fe7a5a9af7436301f85490905379b1c6f2dd51fe3ecf24b4c5fbf/psutil-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea", size = 131082 }, + { url = "https://files.pythonhosted.org/packages/37/d6/246513fbf9fa174af531f28412297dd05241d97a75911ac8febefa1a53c6/psutil-7.2.2-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63", size = 181476 }, + { url = "https://files.pythonhosted.org/packages/b8/b5/9182c9af3836cca61696dabe4fd1304e17bc56cb62f17439e1154f225dd3/psutil-7.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312", size = 184062 }, + { url = "https://files.pythonhosted.org/packages/16/ba/0756dca669f5a9300d0cbcbfae9a4c30e446dfc7440ffe43ded5724bfd93/psutil-7.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b", size = 139893 }, + { url = "https://files.pythonhosted.org/packages/1c/61/8fa0e26f33623b49949346de05ec1ddaad02ed8ba64af45f40a147dbfa97/psutil-7.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9", size = 135589 }, + { url = "https://files.pythonhosted.org/packages/81/69/ef179ab5ca24f32acc1dac0c247fd6a13b501fd5534dbae0e05a1c48b66d/psutil-7.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00", size = 130664 }, + { url = "https://files.pythonhosted.org/packages/7b/64/665248b557a236d3fa9efc378d60d95ef56dd0a490c2cd37dafc7660d4a9/psutil-7.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9", size = 131087 }, + { url = "https://files.pythonhosted.org/packages/d5/2e/e6782744700d6759ebce3043dcfa661fb61e2fb752b91cdeae9af12c2178/psutil-7.2.2-cp314-cp314t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a", size = 182383 }, + { url = "https://files.pythonhosted.org/packages/57/49/0a41cefd10cb7505cdc04dab3eacf24c0c2cb158a998b8c7b1d27ee2c1f5/psutil-7.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf", size = 185210 }, + { url = "https://files.pythonhosted.org/packages/dd/2c/ff9bfb544f283ba5f83ba725a3c5fec6d6b10b8f27ac1dc641c473dc390d/psutil-7.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1", size = 141228 }, + { url = "https://files.pythonhosted.org/packages/f2/fc/f8d9c31db14fcec13748d373e668bc3bed94d9077dbc17fb0eebc073233c/psutil-7.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841", size = 136284 }, + { url = "https://files.pythonhosted.org/packages/e7/36/5ee6e05c9bd427237b11b3937ad82bb8ad2752d72c6969314590dd0c2f6e/psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486", size = 129090 }, + { url = "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979", size = 129859 }, + { url = "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9", size = 155560 }, + { url = "https://files.pythonhosted.org/packages/63/65/37648c0c158dc222aba51c089eb3bdfa238e621674dc42d48706e639204f/psutil-7.2.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e", size = 156997 }, + { url = "https://files.pythonhosted.org/packages/8e/13/125093eadae863ce03c6ffdbae9929430d116a246ef69866dad94da3bfbc/psutil-7.2.2-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8", size = 148972 }, + { url = "https://files.pythonhosted.org/packages/04/78/0acd37ca84ce3ddffaa92ef0f571e073faa6d8ff1f0559ab1272188ea2be/psutil-7.2.2-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc", size = 148266 }, + { url = "https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl", hash = "sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988", size = 137737 }, + { url = "https://files.pythonhosted.org/packages/8c/c7/7bb2e321574b10df20cbde462a94e2b71d05f9bbda251ef27d104668306a/psutil-7.2.2-cp37-abi3-win_arm64.whl", hash = "sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee", size = 134617 }, +] + +[[package]] +name = "ptyprocess" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993 }, +] + +[[package]] +name = "pure-eval" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842 }, +] + +[[package]] +name = "pyamapping" +source = { editable = "." } +dependencies = [ + { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "numpy", version = "2.4.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "scipy", version = "1.13.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] + +[package.optional-dependencies] +example-notebooks = [ + { name = "notebook" }, +] + +[package.dev-dependencies] +dev = [ + { name = "pre-commit", version = "4.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "pre-commit", version = "4.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "pytest", version = "8.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "pytest", version = "9.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "pytest-cov" }, + { name = "sphinx", version = "7.4.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, + { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "tox", version = "4.30.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "tox", version = "4.52.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, +] + +[package.metadata] +requires-dist = [ + { name = "notebook", marker = "extra == 'example-notebooks'" }, + { name = "numpy" }, + { name = "scipy" }, +] +provides-extras = ["example-notebooks"] + +[package.metadata.requires-dev] +dev = [ + { name = "pre-commit" }, + { name = "pytest" }, + { name = "pytest-cov" }, + { name = "sphinx" }, + { name = "tox" }, +] + +[[package]] +name = "pycparser" +version = "2.23" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/fe/cf/d2d3b9f5699fb1e4615c8e32ff220203e43b248e1dfcc6736ad9057731ca/pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2", size = 173734 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934", size = 118140 }, +] + +[[package]] +name = "pycparser" +version = "3.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", size = 103492 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172 }, +] + +[[package]] +name = "pygments" +version = "2.20.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151 }, +] + +[[package]] +name = "pyproject-api" +version = "1.9.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "packaging", marker = "python_full_version < '3.10'" }, + { name = "tomli", marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/fd/437901c891f58a7b9096511750247535e891d2d5a5a6eefbc9386a2b41d5/pyproject_api-1.9.1.tar.gz", hash = "sha256:43c9918f49daab37e302038fc1aed54a8c7a91a9fa935d00b9a485f37e0f5335", size = 22710 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/e6/c293c06695d4a3ab0260ef124a74ebadba5f4c511ce3a4259e976902c00b/pyproject_api-1.9.1-py3-none-any.whl", hash = "sha256:7d6238d92f8962773dd75b5f0c4a6a27cce092a14b623b811dba656f3b628948", size = 13158 }, +] + +[[package]] +name = "pyproject-api" +version = "1.10.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "packaging", marker = "python_full_version >= '3.10'" }, + { name = "tomli", marker = "python_full_version == '3.10.*'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/45/7b/c0e1333b61d41c69e59e5366e727b18c4992688caf0de1be10b3e5265f6b/pyproject_api-1.10.0.tar.gz", hash = "sha256:40c6f2d82eebdc4afee61c773ed208c04c19db4c4a60d97f8d7be3ebc0bbb330", size = 22785 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/cc/cecf97be298bee2b2a37dd360618c819a2a7fd95251d8e480c1f0eb88f3b/pyproject_api-1.10.0-py3-none-any.whl", hash = "sha256:8757c41a79c0f4ab71b99abed52b97ecf66bd20b04fa59da43b5840bac105a09", size = 13218 }, +] + +[[package]] +name = "pytest" +version = "8.4.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "colorama", marker = "python_full_version < '3.10' and sys_platform == 'win32'" }, + { name = "exceptiongroup", marker = "python_full_version < '3.10'" }, + { name = "iniconfig", version = "2.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "packaging", marker = "python_full_version < '3.10'" }, + { name = "pluggy", marker = "python_full_version < '3.10'" }, + { name = "pygments", marker = "python_full_version < '3.10'" }, + { name = "tomli", marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a3/5c/00a0e072241553e1a7496d638deababa67c5058571567b92a7eaa258397c/pytest-8.4.2.tar.gz", hash = "sha256:86c0d0b93306b961d58d62a4db4879f27fe25513d4b969df351abdddb3c30e01", size = 1519618 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a8/a4/20da314d277121d6534b3a980b29035dcd51e6744bd79075a6ce8fa4eb8d/pytest-8.4.2-py3-none-any.whl", hash = "sha256:872f880de3fc3a5bdc88a11b39c9710c3497a547cfa9320bc3c5e62fbf272e79", size = 365750 }, +] + +[[package]] +name = "pytest" +version = "9.0.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "colorama", marker = "python_full_version >= '3.10' and sys_platform == 'win32'" }, + { name = "exceptiongroup", marker = "python_full_version == '3.10.*'" }, + { name = "iniconfig", version = "2.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "packaging", marker = "python_full_version >= '3.10'" }, + { name = "pluggy", marker = "python_full_version >= '3.10'" }, + { name = "pygments", marker = "python_full_version >= '3.10'" }, + { name = "tomli", marker = "python_full_version == '3.10.*'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7d/0d/549bd94f1a0a402dc8cf64563a117c0f3765662e2e668477624baeec44d5/pytest-9.0.3.tar.gz", hash = "sha256:b86ada508af81d19edeb213c681b1d48246c1a91d304c6c81a427674c17eb91c", size = 1572165 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl", hash = "sha256:2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5d9", size = 375249 }, +] + +[[package]] +name = "pytest-cov" +version = "7.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "coverage", version = "7.10.7", source = { registry = "https://pypi.org/simple" }, extra = ["toml"], marker = "python_full_version < '3.10'" }, + { name = "coverage", version = "7.13.5", source = { registry = "https://pypi.org/simple" }, extra = ["toml"], marker = "python_full_version >= '3.10'" }, + { name = "pluggy" }, + { name = "pytest", version = "8.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "pytest", version = "9.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/51/a849f96e117386044471c8ec2bd6cfebacda285da9525c9106aeb28da671/pytest_cov-7.1.0.tar.gz", hash = "sha256:30674f2b5f6351aa09702a9c8c364f6a01c27aae0c1366ae8016160d1efc56b2", size = 55592 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl", hash = "sha256:a0461110b7865f9a271aa1b51e516c9a95de9d696734a2f71e3e78f46e1d4678", size = 22876 }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 }, +] + +[[package]] +name = "python-discovery" +version = "1.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock", version = "3.19.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "filelock", version = "3.25.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "platformdirs", version = "4.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "platformdirs", version = "4.9.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/de/ef/3bae0e537cfe91e8431efcba4434463d2c5a65f5a89edd47c6cf2f03c55f/python_discovery-1.2.2.tar.gz", hash = "sha256:876e9c57139eb757cb5878cbdd9ae5379e5d96266c99ef731119e04fffe533bb", size = 58872 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d8/db/795879cc3ddfe338599bddea6388cc5100b088db0a4caf6e6c1af1c27e04/python_discovery-1.2.2-py3-none-any.whl", hash = "sha256:e1ae95d9af875e78f15e19aed0c6137ab1bb49c200f21f5061786490c9585c7a", size = 31894 }, +] + +[[package]] +name = "python-json-logger" +version = "4.0.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/29/bf/eca6a3d43db1dae7070f70e160ab20b807627ba953663ba07928cdd3dc58/python_json_logger-4.0.0.tar.gz", hash = "sha256:f58e68eb46e1faed27e0f574a55a0455eecd7b8a5b88b85a784519ba3cff047f", size = 17683 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.0-py3-none-any.whl", hash = "sha256:af09c9daf6a813aa4cc7180395f50f2a9e5fa056034c9953aec92e381c5ba1e2", size = 15548 }, +] + +[[package]] +name = "python-json-logger" +version = "4.1.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/f7/ff/3cc9165fd44106973cd7ac9facb674a65ed853494592541d339bdc9a30eb/python_json_logger-4.1.0.tar.gz", hash = "sha256:b396b9e3ed782b09ff9d6e4f1683d46c83ad0d35d2e407c09a9ebbf038f88195", size = 17573 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/be/0631a861af4d1c875f096c07d34e9a63639560a717130e7a87cbc82b7e3f/python_json_logger-4.1.0-py3-none-any.whl", hash = "sha256:132994765cf75bf44554be9aa49b06ef2345d23661a96720262716438141b6b2", size = 15021 }, +] + +[[package]] +name = "pywin32" +version = "311" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/40/44efbb0dfbd33aca6a6483191dae0716070ed99e2ecb0c53683f400a0b4f/pywin32-311-cp310-cp310-win32.whl", hash = "sha256:d03ff496d2a0cd4a5893504789d4a15399133fe82517455e78bad62efbb7f0a3", size = 8760432 }, + { url = "https://files.pythonhosted.org/packages/5e/bf/360243b1e953bd254a82f12653974be395ba880e7ec23e3731d9f73921cc/pywin32-311-cp310-cp310-win_amd64.whl", hash = "sha256:797c2772017851984b97180b0bebe4b620bb86328e8a884bb626156295a63b3b", size = 9590103 }, + { url = "https://files.pythonhosted.org/packages/57/38/d290720e6f138086fb3d5ffe0b6caa019a791dd57866940c82e4eeaf2012/pywin32-311-cp310-cp310-win_arm64.whl", hash = "sha256:0502d1facf1fed4839a9a51ccbcc63d952cf318f78ffc00a7e78528ac27d7a2b", size = 8778557 }, + { url = "https://files.pythonhosted.org/packages/7c/af/449a6a91e5d6db51420875c54f6aff7c97a86a3b13a0b4f1a5c13b988de3/pywin32-311-cp311-cp311-win32.whl", hash = "sha256:184eb5e436dea364dcd3d2316d577d625c0351bf237c4e9a5fabbcfa5a58b151", size = 8697031 }, + { url = "https://files.pythonhosted.org/packages/51/8f/9bb81dd5bb77d22243d33c8397f09377056d5c687aa6d4042bea7fbf8364/pywin32-311-cp311-cp311-win_amd64.whl", hash = "sha256:3ce80b34b22b17ccbd937a6e78e7225d80c52f5ab9940fe0506a1a16f3dab503", size = 9508308 }, + { url = "https://files.pythonhosted.org/packages/44/7b/9c2ab54f74a138c491aba1b1cd0795ba61f144c711daea84a88b63dc0f6c/pywin32-311-cp311-cp311-win_arm64.whl", hash = "sha256:a733f1388e1a842abb67ffa8e7aad0e70ac519e09b0f6a784e65a136ec7cefd2", size = 8703930 }, + { url = "https://files.pythonhosted.org/packages/e7/ab/01ea1943d4eba0f850c3c61e78e8dd59757ff815ff3ccd0a84de5f541f42/pywin32-311-cp312-cp312-win32.whl", hash = "sha256:750ec6e621af2b948540032557b10a2d43b0cee2ae9758c54154d711cc852d31", size = 8706543 }, + { url = "https://files.pythonhosted.org/packages/d1/a8/a0e8d07d4d051ec7502cd58b291ec98dcc0c3fff027caad0470b72cfcc2f/pywin32-311-cp312-cp312-win_amd64.whl", hash = "sha256:b8c095edad5c211ff31c05223658e71bf7116daa0ecf3ad85f3201ea3190d067", size = 9495040 }, + { url = "https://files.pythonhosted.org/packages/ba/3a/2ae996277b4b50f17d61f0603efd8253cb2d79cc7ae159468007b586396d/pywin32-311-cp312-cp312-win_arm64.whl", hash = "sha256:e286f46a9a39c4a18b319c28f59b61de793654af2f395c102b4f819e584b5852", size = 8710102 }, + { url = "https://files.pythonhosted.org/packages/a5/be/3fd5de0979fcb3994bfee0d65ed8ca9506a8a1260651b86174f6a86f52b3/pywin32-311-cp313-cp313-win32.whl", hash = "sha256:f95ba5a847cba10dd8c4d8fefa9f2a6cf283b8b88ed6178fa8a6c1ab16054d0d", size = 8705700 }, + { url = "https://files.pythonhosted.org/packages/e3/28/e0a1909523c6890208295a29e05c2adb2126364e289826c0a8bc7297bd5c/pywin32-311-cp313-cp313-win_amd64.whl", hash = "sha256:718a38f7e5b058e76aee1c56ddd06908116d35147e133427e59a3983f703a20d", size = 9494700 }, + { url = "https://files.pythonhosted.org/packages/04/bf/90339ac0f55726dce7d794e6d79a18a91265bdf3aa70b6b9ca52f35e022a/pywin32-311-cp313-cp313-win_arm64.whl", hash = "sha256:7b4075d959648406202d92a2310cb990fea19b535c7f4a78d3f5e10b926eeb8a", size = 8709318 }, + { url = "https://files.pythonhosted.org/packages/c9/31/097f2e132c4f16d99a22bfb777e0fd88bd8e1c634304e102f313af69ace5/pywin32-311-cp314-cp314-win32.whl", hash = "sha256:b7a2c10b93f8986666d0c803ee19b5990885872a7de910fc460f9b0c2fbf92ee", size = 8840714 }, + { url = "https://files.pythonhosted.org/packages/90/4b/07c77d8ba0e01349358082713400435347df8426208171ce297da32c313d/pywin32-311-cp314-cp314-win_amd64.whl", hash = "sha256:3aca44c046bd2ed8c90de9cb8427f581c479e594e99b5c0bb19b29c10fd6cb87", size = 9656800 }, + { url = "https://files.pythonhosted.org/packages/c0/d2/21af5c535501a7233e734b8af901574572da66fcc254cb35d0609c9080dd/pywin32-311-cp314-cp314-win_arm64.whl", hash = "sha256:a508e2d9025764a8270f93111a970e1d0fbfc33f4153b388bb649b7eec4f9b42", size = 8932540 }, + { url = "https://files.pythonhosted.org/packages/59/42/b86689aac0cdaee7ae1c58d464b0ff04ca909c19bb6502d4973cdd9f9544/pywin32-311-cp39-cp39-win32.whl", hash = "sha256:aba8f82d551a942cb20d4a83413ccbac30790b50efb89a75e4f586ac0bb8056b", size = 8760837 }, + { url = "https://files.pythonhosted.org/packages/9f/8a/1403d0353f8c5a2f0829d2b1c4becbf9da2f0a4d040886404fc4a5431e4d/pywin32-311-cp39-cp39-win_amd64.whl", hash = "sha256:e0c4cfb0621281fe40387df582097fd796e80430597cb9944f0ae70447bacd91", size = 9590187 }, + { url = "https://files.pythonhosted.org/packages/60/22/e0e8d802f124772cec9c75430b01a212f86f9de7546bda715e54140d5aeb/pywin32-311-cp39-cp39-win_arm64.whl", hash = "sha256:62ea666235135fee79bb154e695f3ff67370afefd71bd7fea7512fc70ef31e3d", size = 8778162 }, +] + +[[package]] +name = "pywinpty" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f7/54/37c7370ba91f579235049dc26cd2c5e657d2a943e01820844ffc81f32176/pywinpty-3.0.3.tar.gz", hash = "sha256:523441dc34d231fb361b4b00f8c99d3f16de02f5005fd544a0183112bcc22412", size = 31309 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/28/a652709bd76ca7533cd1c443b03add9f5051fdf71bc6bdb8801dddd4e7a3/pywinpty-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:ff05f12d775b142b11c6fe085129bdd759b61cf7d41da6c745e78e3a1ef5bf40", size = 2114320 }, + { url = "https://files.pythonhosted.org/packages/b2/13/a0181cc5c2d5635d3dbc3802b97bc8e3ad4fa7502ccef576651a5e08e54c/pywinpty-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:340ccacb4d74278a631923794ccd758471cfc8eeeeee4610b280420a17ad1e82", size = 235670 }, + { url = "https://files.pythonhosted.org/packages/79/c3/3e75075c7f71735f22b66fab0481f2c98e3a4d58cba55cb50ba29114bcf6/pywinpty-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:dff25a9a6435f527d7c65608a7e62783fc12076e7d44487a4911ee91be5a8ac8", size = 2114430 }, + { url = "https://files.pythonhosted.org/packages/8d/1e/8a54166a8c5e4f5cb516514bdf4090be4d51a71e8d9f6d98c0aa00fe45d4/pywinpty-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:fbc1e230e5b193eef4431cba3f39996a288f9958f9c9f092c8a961d930ee8f68", size = 236191 }, + { url = "https://files.pythonhosted.org/packages/7c/d4/aeb5e1784d2c5bff6e189138a9ca91a090117459cea0c30378e1f2db3d54/pywinpty-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:c9081df0e49ffa86d15db4a6ba61530630e48707f987df42c9d3313537e81fc0", size = 2113098 }, + { url = "https://files.pythonhosted.org/packages/b9/53/7278223c493ccfe4883239cf06c823c56460a8010e0fc778eef67858dc14/pywinpty-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:15e79d870e18b678fb8a5a6105fd38496b55697c66e6fc0378236026bc4d59e9", size = 234901 }, + { url = "https://files.pythonhosted.org/packages/e5/cb/58d6ed3fd429c96a90ef01ac9a617af10a6d41469219c25e7dc162abbb71/pywinpty-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9c91dbb026050c77bdcef964e63a4f10f01a639113c4d3658332614544c467ab", size = 2112686 }, + { url = "https://files.pythonhosted.org/packages/fd/50/724ed5c38c504d4e58a88a072776a1e880d970789deaeb2b9f7bd9a5141a/pywinpty-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:fe1f7911805127c94cf51f89ab14096c6f91ffdcacf993d2da6082b2142a2523", size = 234591 }, + { url = "https://files.pythonhosted.org/packages/f7/ad/90a110538696b12b39fd8758a06d70ded899308198ad2305ac68e361126e/pywinpty-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:3f07a6cf1c1d470d284e614733c3d0f726d2c85e78508ea10a403140c3c0c18a", size = 2112360 }, + { url = "https://files.pythonhosted.org/packages/44/0f/7ffa221757a220402bc79fda44044c3f2cc57338d878ab7d622add6f4581/pywinpty-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:15c7c0b6f8e9d87aabbaff76468dabf6e6121332c40fc1d83548d02a9d6a3759", size = 233107 }, + { url = "https://files.pythonhosted.org/packages/28/88/2ff917caff61e55f38bcdb27de06ee30597881b2cae44fbba7627be015c4/pywinpty-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:d4b6b7b0fe0cdcd02e956bd57cfe9f4e5a06514eecf3b5ae174da4f951b58be9", size = 2113282 }, + { url = "https://files.pythonhosted.org/packages/63/32/40a775343ace542cc43ece3f1d1fce454021521ecac41c4c4573081c2336/pywinpty-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:34789d685fc0d547ce0c8a65e5a70e56f77d732fa6e03c8f74fefb8cbb252019", size = 234207 }, + { url = "https://files.pythonhosted.org/packages/8d/54/5d5e52f4cb75028104ca6faf36c10f9692389b1986d34471663b4ebebd6d/pywinpty-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:0c37e224a47a971d1a6e08649a1714dac4f63c11920780977829ed5c8cadead1", size = 2112910 }, + { url = "https://files.pythonhosted.org/packages/0a/44/dcd184824e21d4620b06c7db9fbb15c3ad0a0f1fa2e6de79969fb82647ec/pywinpty-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:c4e9c3dff7d86ba81937438d5819f19f385a39d8f592d4e8af67148ceb4f6ab5", size = 233425 }, + { url = "https://files.pythonhosted.org/packages/d7/48/57c3d4e63aa93280ad1b1c2b3a5412d9d1fdee9955fa0aef43a84518d31b/pywinpty-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:0f10e81d52d7f2c4d927f645f247028e64eaf205a3ed9e64dbd998122108a218", size = 2116037 }, +] + +[[package]] +name = "pyyaml" +version = "6.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227 }, + { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019 }, + { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646 }, + { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793 }, + { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293 }, + { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872 }, + { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828 }, + { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415 }, + { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561 }, + { url = "https://files.pythonhosted.org/packages/6d/16/a95b6757765b7b031c9374925bb718d55e0a9ba8a1b6a12d25962ea44347/pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e", size = 185826 }, + { url = "https://files.pythonhosted.org/packages/16/19/13de8e4377ed53079ee996e1ab0a9c33ec2faf808a4647b7b4c0d46dd239/pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824", size = 175577 }, + { url = "https://files.pythonhosted.org/packages/0c/62/d2eb46264d4b157dae1275b573017abec435397aa59cbcdab6fc978a8af4/pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c", size = 775556 }, + { url = "https://files.pythonhosted.org/packages/10/cb/16c3f2cf3266edd25aaa00d6c4350381c8b012ed6f5276675b9eba8d9ff4/pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00", size = 882114 }, + { url = "https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d", size = 806638 }, + { url = "https://files.pythonhosted.org/packages/dd/6f/529b0f316a9fd167281a6c3826b5583e6192dba792dd55e3203d3f8e655a/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a", size = 767463 }, + { url = "https://files.pythonhosted.org/packages/f2/6a/b627b4e0c1dd03718543519ffb2f1deea4a1e6d42fbab8021936a4d22589/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4", size = 794986 }, + { url = "https://files.pythonhosted.org/packages/45/91/47a6e1c42d9ee337c4839208f30d9f09caa9f720ec7582917b264defc875/pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b", size = 142543 }, + { url = "https://files.pythonhosted.org/packages/da/e3/ea007450a105ae919a72393cb06f122f288ef60bba2dc64b26e2646fa315/pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf", size = 158763 }, + { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063 }, + { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973 }, + { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116 }, + { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011 }, + { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870 }, + { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089 }, + { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181 }, + { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658 }, + { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003 }, + { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344 }, + { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669 }, + { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252 }, + { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081 }, + { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159 }, + { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626 }, + { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613 }, + { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115 }, + { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427 }, + { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090 }, + { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246 }, + { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814 }, + { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809 }, + { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454 }, + { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355 }, + { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175 }, + { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228 }, + { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194 }, + { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429 }, + { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912 }, + { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108 }, + { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641 }, + { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901 }, + { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132 }, + { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261 }, + { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272 }, + { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923 }, + { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062 }, + { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341 }, + { url = "https://files.pythonhosted.org/packages/9f/62/67fc8e68a75f738c9200422bf65693fb79a4cd0dc5b23310e5202e978090/pyyaml-6.0.3-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:b865addae83924361678b652338317d1bd7e79b1f4596f96b96c77a5a34b34da", size = 184450 }, + { url = "https://files.pythonhosted.org/packages/ae/92/861f152ce87c452b11b9d0977952259aa7df792d71c1053365cc7b09cc08/pyyaml-6.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c3355370a2c156cffb25e876646f149d5d68f5e0a3ce86a5084dd0b64a994917", size = 174319 }, + { url = "https://files.pythonhosted.org/packages/d0/cd/f0cfc8c74f8a030017a2b9c771b7f47e5dd702c3e28e5b2071374bda2948/pyyaml-6.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3c5677e12444c15717b902a5798264fa7909e41153cdf9ef7ad571b704a63dd9", size = 737631 }, + { url = "https://files.pythonhosted.org/packages/ef/b2/18f2bd28cd2055a79a46c9b0895c0b3d987ce40ee471cecf58a1a0199805/pyyaml-6.0.3-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5ed875a24292240029e4483f9d4a4b8a1ae08843b9c54f43fcc11e404532a8a5", size = 836795 }, + { url = "https://files.pythonhosted.org/packages/73/b9/793686b2d54b531203c160ef12bec60228a0109c79bae6c1277961026770/pyyaml-6.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0150219816b6a1fa26fb4699fb7daa9caf09eb1999f3b70fb6e786805e80375a", size = 750767 }, + { url = "https://files.pythonhosted.org/packages/a9/86/a137b39a611def2ed78b0e66ce2fe13ee701a07c07aebe55c340ed2a050e/pyyaml-6.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fa160448684b4e94d80416c0fa4aac48967a969efe22931448d853ada8baf926", size = 727982 }, + { url = "https://files.pythonhosted.org/packages/dd/62/71c27c94f457cf4418ef8ccc71735324c549f7e3ea9d34aba50874563561/pyyaml-6.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:27c0abcb4a5dac13684a37f76e701e054692a9b2d3064b70f5e4eb54810553d7", size = 755677 }, + { url = "https://files.pythonhosted.org/packages/29/3d/6f5e0d58bd924fb0d06c3a6bad00effbdae2de5adb5cda5648006ffbd8d3/pyyaml-6.0.3-cp39-cp39-win32.whl", hash = "sha256:1ebe39cb5fc479422b83de611d14e2c0d3bb2a18bbcb01f229ab3cfbd8fee7a0", size = 142592 }, + { url = "https://files.pythonhosted.org/packages/f0/0c/25113e0b5e103d7f1490c0e947e303fe4a696c10b501dea7a9f49d4e876c/pyyaml-6.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:2e71d11abed7344e42a8849600193d15b6def118602c4c176f748e4583246007", size = 158777 }, +] + +[[package]] +name = "pyzmq" +version = "27.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "implementation_name == 'pypy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/04/0b/3c9baedbdf613ecaa7aa07027780b8867f57b6293b6ee50de316c9f3222b/pyzmq-27.1.0.tar.gz", hash = "sha256:ac0765e3d44455adb6ddbf4417dcce460fc40a05978c08efdf2948072f6db540", size = 281750 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/b9/52aa9ec2867528b54f1e60846728d8b4d84726630874fee3a91e66c7df81/pyzmq-27.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:508e23ec9bc44c0005c4946ea013d9317ae00ac67778bd47519fdf5a0e930ff4", size = 1329850 }, + { url = "https://files.pythonhosted.org/packages/99/64/5653e7b7425b169f994835a2b2abf9486264401fdef18df91ddae47ce2cc/pyzmq-27.1.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:507b6f430bdcf0ee48c0d30e734ea89ce5567fd7b8a0f0044a369c176aa44556", size = 906380 }, + { url = "https://files.pythonhosted.org/packages/73/78/7d713284dbe022f6440e391bd1f3c48d9185673878034cfb3939cdf333b2/pyzmq-27.1.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf7b38f9fd7b81cb6d9391b2946382c8237fd814075c6aa9c3b746d53076023b", size = 666421 }, + { url = "https://files.pythonhosted.org/packages/30/76/8f099f9d6482450428b17c4d6b241281af7ce6a9de8149ca8c1c649f6792/pyzmq-27.1.0-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:03ff0b279b40d687691a6217c12242ee71f0fba28bf8626ff50e3ef0f4410e1e", size = 854149 }, + { url = "https://files.pythonhosted.org/packages/59/f0/37fbfff06c68016019043897e4c969ceab18bde46cd2aca89821fcf4fb2e/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:677e744fee605753eac48198b15a2124016c009a11056f93807000ab11ce6526", size = 1655070 }, + { url = "https://files.pythonhosted.org/packages/47/14/7254be73f7a8edc3587609554fcaa7bfd30649bf89cd260e4487ca70fdaa/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dd2fec2b13137416a1c5648b7009499bcc8fea78154cd888855fa32514f3dad1", size = 2033441 }, + { url = "https://files.pythonhosted.org/packages/22/dc/49f2be26c6f86f347e796a4d99b19167fc94503f0af3fd010ad262158822/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:08e90bb4b57603b84eab1d0ca05b3bbb10f60c1839dc471fc1c9e1507bef3386", size = 1891529 }, + { url = "https://files.pythonhosted.org/packages/a3/3e/154fb963ae25be70c0064ce97776c937ecc7d8b0259f22858154a9999769/pyzmq-27.1.0-cp310-cp310-win32.whl", hash = "sha256:a5b42d7a0658b515319148875fcb782bbf118dd41c671b62dae33666c2213bda", size = 567276 }, + { url = "https://files.pythonhosted.org/packages/62/b2/f4ab56c8c595abcb26b2be5fd9fa9e6899c1e5ad54964e93ae8bb35482be/pyzmq-27.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:c0bb87227430ee3aefcc0ade2088100e528d5d3298a0a715a64f3d04c60ba02f", size = 632208 }, + { url = "https://files.pythonhosted.org/packages/3b/e3/be2cc7ab8332bdac0522fdb64c17b1b6241a795bee02e0196636ec5beb79/pyzmq-27.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:9a916f76c2ab8d045b19f2286851a38e9ac94ea91faf65bd64735924522a8b32", size = 559766 }, + { url = "https://files.pythonhosted.org/packages/06/5d/305323ba86b284e6fcb0d842d6adaa2999035f70f8c38a9b6d21ad28c3d4/pyzmq-27.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:226b091818d461a3bef763805e75685e478ac17e9008f49fce2d3e52b3d58b86", size = 1333328 }, + { url = "https://files.pythonhosted.org/packages/bd/a0/fc7e78a23748ad5443ac3275943457e8452da67fda347e05260261108cbc/pyzmq-27.1.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:0790a0161c281ca9723f804871b4027f2e8b5a528d357c8952d08cd1a9c15581", size = 908803 }, + { url = "https://files.pythonhosted.org/packages/7e/22/37d15eb05f3bdfa4abea6f6d96eb3bb58585fbd3e4e0ded4e743bc650c97/pyzmq-27.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c895a6f35476b0c3a54e3eb6ccf41bf3018de937016e6e18748317f25d4e925f", size = 668836 }, + { url = "https://files.pythonhosted.org/packages/b1/c4/2a6fe5111a01005fc7af3878259ce17684fabb8852815eda6225620f3c59/pyzmq-27.1.0-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5bbf8d3630bf96550b3be8e1fc0fea5cbdc8d5466c1192887bd94869da17a63e", size = 857038 }, + { url = "https://files.pythonhosted.org/packages/cb/eb/bfdcb41d0db9cd233d6fb22dc131583774135505ada800ebf14dfb0a7c40/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:15c8bd0fe0dabf808e2d7a681398c4e5ded70a551ab47482067a572c054c8e2e", size = 1657531 }, + { url = "https://files.pythonhosted.org/packages/ab/21/e3180ca269ed4a0de5c34417dfe71a8ae80421198be83ee619a8a485b0c7/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:bafcb3dd171b4ae9f19ee6380dfc71ce0390fefaf26b504c0e5f628d7c8c54f2", size = 2034786 }, + { url = "https://files.pythonhosted.org/packages/3b/b1/5e21d0b517434b7f33588ff76c177c5a167858cc38ef740608898cd329f2/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e829529fcaa09937189178115c49c504e69289abd39967cd8a4c215761373394", size = 1894220 }, + { url = "https://files.pythonhosted.org/packages/03/f2/44913a6ff6941905efc24a1acf3d3cb6146b636c546c7406c38c49c403d4/pyzmq-27.1.0-cp311-cp311-win32.whl", hash = "sha256:6df079c47d5902af6db298ec92151db82ecb557af663098b92f2508c398bb54f", size = 567155 }, + { url = "https://files.pythonhosted.org/packages/23/6d/d8d92a0eb270a925c9b4dd039c0b4dc10abc2fcbc48331788824ef113935/pyzmq-27.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:190cbf120fbc0fc4957b56866830def56628934a9d112aec0e2507aa6a032b97", size = 633428 }, + { url = "https://files.pythonhosted.org/packages/ae/14/01afebc96c5abbbd713ecfc7469cfb1bc801c819a74ed5c9fad9a48801cb/pyzmq-27.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:eca6b47df11a132d1745eb3b5b5e557a7dae2c303277aa0e69c6ba91b8736e07", size = 559497 }, + { url = "https://files.pythonhosted.org/packages/92/e7/038aab64a946d535901103da16b953c8c9cc9c961dadcbf3609ed6428d23/pyzmq-27.1.0-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:452631b640340c928fa343801b0d07eb0c3789a5ffa843f6e1a9cee0ba4eb4fc", size = 1306279 }, + { url = "https://files.pythonhosted.org/packages/e8/5e/c3c49fdd0f535ef45eefcc16934648e9e59dace4a37ee88fc53f6cd8e641/pyzmq-27.1.0-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1c179799b118e554b66da67d88ed66cd37a169f1f23b5d9f0a231b4e8d44a113", size = 895645 }, + { url = "https://files.pythonhosted.org/packages/f8/e5/b0b2504cb4e903a74dcf1ebae157f9e20ebb6ea76095f6cfffea28c42ecd/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3837439b7f99e60312f0c926a6ad437b067356dc2bc2ec96eb395fd0fe804233", size = 652574 }, + { url = "https://files.pythonhosted.org/packages/f8/9b/c108cdb55560eaf253f0cbdb61b29971e9fb34d9c3499b0e96e4e60ed8a5/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43ad9a73e3da1fab5b0e7e13402f0b2fb934ae1c876c51d0afff0e7c052eca31", size = 840995 }, + { url = "https://files.pythonhosted.org/packages/c2/bb/b79798ca177b9eb0825b4c9998c6af8cd2a7f15a6a1a4272c1d1a21d382f/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0de3028d69d4cdc475bfe47a6128eb38d8bc0e8f4d69646adfbcd840facbac28", size = 1642070 }, + { url = "https://files.pythonhosted.org/packages/9c/80/2df2e7977c4ede24c79ae39dcef3899bfc5f34d1ca7a5b24f182c9b7a9ca/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:cf44a7763aea9298c0aa7dbf859f87ed7012de8bda0f3977b6fb1d96745df856", size = 2021121 }, + { url = "https://files.pythonhosted.org/packages/46/bd/2d45ad24f5f5ae7e8d01525eb76786fa7557136555cac7d929880519e33a/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f30f395a9e6fbca195400ce833c731e7b64c3919aa481af4d88c3759e0cb7496", size = 1878550 }, + { url = "https://files.pythonhosted.org/packages/e6/2f/104c0a3c778d7c2ab8190e9db4f62f0b6957b53c9d87db77c284b69f33ea/pyzmq-27.1.0-cp312-abi3-win32.whl", hash = "sha256:250e5436a4ba13885494412b3da5d518cd0d3a278a1ae640e113c073a5f88edd", size = 559184 }, + { url = "https://files.pythonhosted.org/packages/fc/7f/a21b20d577e4100c6a41795842028235998a643b1ad406a6d4163ea8f53e/pyzmq-27.1.0-cp312-abi3-win_amd64.whl", hash = "sha256:9ce490cf1d2ca2ad84733aa1d69ce6855372cb5ce9223802450c9b2a7cba0ccf", size = 619480 }, + { url = "https://files.pythonhosted.org/packages/78/c2/c012beae5f76b72f007a9e91ee9401cb88c51d0f83c6257a03e785c81cc2/pyzmq-27.1.0-cp312-abi3-win_arm64.whl", hash = "sha256:75a2f36223f0d535a0c919e23615fc85a1e23b71f40c7eb43d7b1dedb4d8f15f", size = 552993 }, + { url = "https://files.pythonhosted.org/packages/60/cb/84a13459c51da6cec1b7b1dc1a47e6db6da50b77ad7fd9c145842750a011/pyzmq-27.1.0-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:93ad4b0855a664229559e45c8d23797ceac03183c7b6f5b4428152a6b06684a5", size = 1122436 }, + { url = "https://files.pythonhosted.org/packages/dc/b6/94414759a69a26c3dd674570a81813c46a078767d931a6c70ad29fc585cb/pyzmq-27.1.0-cp313-cp313-android_24_x86_64.whl", hash = "sha256:fbb4f2400bfda24f12f009cba62ad5734148569ff4949b1b6ec3b519444342e6", size = 1156301 }, + { url = "https://files.pythonhosted.org/packages/a5/ad/15906493fd40c316377fd8a8f6b1f93104f97a752667763c9b9c1b71d42d/pyzmq-27.1.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:e343d067f7b151cfe4eb3bb796a7752c9d369eed007b91231e817071d2c2fec7", size = 1341197 }, + { url = "https://files.pythonhosted.org/packages/14/1d/d343f3ce13db53a54cb8946594e567410b2125394dafcc0268d8dda027e0/pyzmq-27.1.0-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:08363b2011dec81c354d694bdecaef4770e0ae96b9afea70b3f47b973655cc05", size = 897275 }, + { url = "https://files.pythonhosted.org/packages/69/2d/d83dd6d7ca929a2fc67d2c3005415cdf322af7751d773524809f9e585129/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d54530c8c8b5b8ddb3318f481297441af102517602b569146185fa10b63f4fa9", size = 660469 }, + { url = "https://files.pythonhosted.org/packages/3e/cd/9822a7af117f4bc0f1952dbe9ef8358eb50a24928efd5edf54210b850259/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f3afa12c392f0a44a2414056d730eebc33ec0926aae92b5ad5cf26ebb6cc128", size = 847961 }, + { url = "https://files.pythonhosted.org/packages/9a/12/f003e824a19ed73be15542f172fd0ec4ad0b60cf37436652c93b9df7c585/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c65047adafe573ff023b3187bb93faa583151627bc9c51fc4fb2c561ed689d39", size = 1650282 }, + { url = "https://files.pythonhosted.org/packages/d5/4a/e82d788ed58e9a23995cee70dbc20c9aded3d13a92d30d57ec2291f1e8a3/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:90e6e9441c946a8b0a667356f7078d96411391a3b8f80980315455574177ec97", size = 2024468 }, + { url = "https://files.pythonhosted.org/packages/d9/94/2da0a60841f757481e402b34bf4c8bf57fa54a5466b965de791b1e6f747d/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:add071b2d25f84e8189aaf0882d39a285b42fa3853016ebab234a5e78c7a43db", size = 1885394 }, + { url = "https://files.pythonhosted.org/packages/4f/6f/55c10e2e49ad52d080dc24e37adb215e5b0d64990b57598abc2e3f01725b/pyzmq-27.1.0-cp313-cp313t-win32.whl", hash = "sha256:7ccc0700cfdf7bd487bea8d850ec38f204478681ea02a582a8da8171b7f90a1c", size = 574964 }, + { url = "https://files.pythonhosted.org/packages/87/4d/2534970ba63dd7c522d8ca80fb92777f362c0f321900667c615e2067cb29/pyzmq-27.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:8085a9fba668216b9b4323be338ee5437a235fe275b9d1610e422ccc279733e2", size = 641029 }, + { url = "https://files.pythonhosted.org/packages/f6/fa/f8aea7a28b0641f31d40dea42d7ef003fded31e184ef47db696bc74cd610/pyzmq-27.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:6bb54ca21bcfe361e445256c15eedf083f153811c37be87e0514934d6913061e", size = 561541 }, + { url = "https://files.pythonhosted.org/packages/87/45/19efbb3000956e82d0331bafca5d9ac19ea2857722fa2caacefb6042f39d/pyzmq-27.1.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:ce980af330231615756acd5154f29813d553ea555485ae712c491cd483df6b7a", size = 1341197 }, + { url = "https://files.pythonhosted.org/packages/48/43/d72ccdbf0d73d1343936296665826350cb1e825f92f2db9db3e61c2162a2/pyzmq-27.1.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1779be8c549e54a1c38f805e56d2a2e5c009d26de10921d7d51cfd1c8d4632ea", size = 897175 }, + { url = "https://files.pythonhosted.org/packages/2f/2e/a483f73a10b65a9ef0161e817321d39a770b2acf8bcf3004a28d90d14a94/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7200bb0f03345515df50d99d3db206a0a6bee1955fbb8c453c76f5bf0e08fb96", size = 660427 }, + { url = "https://files.pythonhosted.org/packages/f5/d2/5f36552c2d3e5685abe60dfa56f91169f7a2d99bbaf67c5271022ab40863/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01c0e07d558b06a60773744ea6251f769cd79a41a97d11b8bf4ab8f034b0424d", size = 847929 }, + { url = "https://files.pythonhosted.org/packages/c4/2a/404b331f2b7bf3198e9945f75c4c521f0c6a3a23b51f7a4a401b94a13833/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:80d834abee71f65253c91540445d37c4c561e293ba6e741b992f20a105d69146", size = 1650193 }, + { url = "https://files.pythonhosted.org/packages/1c/0b/f4107e33f62a5acf60e3ded67ed33d79b4ce18de432625ce2fc5093d6388/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:544b4e3b7198dde4a62b8ff6685e9802a9a1ebf47e77478a5eb88eca2a82f2fd", size = 2024388 }, + { url = "https://files.pythonhosted.org/packages/0d/01/add31fe76512642fd6e40e3a3bd21f4b47e242c8ba33efb6809e37076d9b/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cedc4c68178e59a4046f97eca31b148ddcf51e88677de1ef4e78cf06c5376c9a", size = 1885316 }, + { url = "https://files.pythonhosted.org/packages/c4/59/a5f38970f9bf07cee96128de79590bb354917914a9be11272cfc7ff26af0/pyzmq-27.1.0-cp314-cp314t-win32.whl", hash = "sha256:1f0b2a577fd770aa6f053211a55d1c47901f4d537389a034c690291485e5fe92", size = 587472 }, + { url = "https://files.pythonhosted.org/packages/70/d8/78b1bad170f93fcf5e3536e70e8fadac55030002275c9a29e8f5719185de/pyzmq-27.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:19c9468ae0437f8074af379e986c5d3d7d7bfe033506af442e8c879732bedbe0", size = 661401 }, + { url = "https://files.pythonhosted.org/packages/81/d6/4bfbb40c9a0b42fc53c7cf442f6385db70b40f74a783130c5d0a5aa62228/pyzmq-27.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:dc5dbf68a7857b59473f7df42650c621d7e8923fb03fa74a526890f4d33cc4d7", size = 575170 }, + { url = "https://files.pythonhosted.org/packages/ac/4e/782eb6df91b6a9d9afa96c2dcfc5cac62562a68eb62a02210101f886014d/pyzmq-27.1.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:96c71c32fff75957db6ae33cd961439f386505c6e6b377370af9b24a1ef9eafb", size = 1330426 }, + { url = "https://files.pythonhosted.org/packages/8d/ca/2b8693d06b1db4e0c084871e4c9d7842b561d0a6ff9d780640f5e3e9eb55/pyzmq-27.1.0-cp39-cp39-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:49d3980544447f6bd2968b6ac913ab963a49dcaa2d4a2990041f16057b04c429", size = 906559 }, + { url = "https://files.pythonhosted.org/packages/6a/b3/b99b39e2cfdcebd512959780e4d299447fd7f46010b1d88d63324e2481ec/pyzmq-27.1.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:849ca054d81aa1c175c49484afaaa5db0622092b5eccb2055f9f3bb8f703782d", size = 863816 }, + { url = "https://files.pythonhosted.org/packages/61/b2/018fa8e8eefb34a625b1a45e2effcbc9885645b22cdd0a68283f758351e7/pyzmq-27.1.0-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3970778e74cb7f85934d2b926b9900e92bfe597e62267d7499acc39c9c28e345", size = 666735 }, + { url = "https://files.pythonhosted.org/packages/01/05/8ae778f7cd7c94030731ae2305e6a38f3a333b6825f56c0c03f2134ccf1b/pyzmq-27.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:da96ecdcf7d3919c3be2de91a8c513c186f6762aa6cf7c01087ed74fad7f0968", size = 1655425 }, + { url = "https://files.pythonhosted.org/packages/ad/ad/d69478a97a3f3142f9dbbbd9daa4fcf42541913a85567c36d4cfc19b2218/pyzmq-27.1.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:9541c444cfe1b1c0156c5c86ece2bb926c7079a18e7b47b0b1b3b1b875e5d098", size = 2033729 }, + { url = "https://files.pythonhosted.org/packages/9a/6d/e3c6ad05bc1cddd25094e66cc15ae8924e15c67e231e93ed2955c401007e/pyzmq-27.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e30a74a39b93e2e1591b58eb1acef4902be27c957a8720b0e368f579b82dc22f", size = 1891803 }, + { url = "https://files.pythonhosted.org/packages/7f/a7/97e8be0daaca157511563160b67a13d4fe76b195e3fa6873cb554ad46be3/pyzmq-27.1.0-cp39-cp39-win32.whl", hash = "sha256:b1267823d72d1e40701dcba7edc45fd17f71be1285557b7fe668887150a14b78", size = 567627 }, + { url = "https://files.pythonhosted.org/packages/5c/91/70bbf3a7c5b04c904261ef5ba224d8a76315f6c23454251bf5f55573a8a1/pyzmq-27.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:0c996ded912812a2fcd7ab6574f4ad3edc27cb6510349431e4930d4196ade7db", size = 632315 }, + { url = "https://files.pythonhosted.org/packages/cc/b5/a4173a83c7fd37f6bdb5a800ea338bc25603284e9ef8681377cec006ede4/pyzmq-27.1.0-cp39-cp39-win_arm64.whl", hash = "sha256:346e9ba4198177a07e7706050f35d733e08c1c1f8ceacd5eb6389d653579ffbc", size = 559833 }, + { url = "https://files.pythonhosted.org/packages/f3/81/a65e71c1552f74dec9dff91d95bafb6e0d33338a8dfefbc88aa562a20c92/pyzmq-27.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c17e03cbc9312bee223864f1a2b13a99522e0dc9f7c5df0177cd45210ac286e6", size = 836266 }, + { url = "https://files.pythonhosted.org/packages/58/ed/0202ca350f4f2b69faa95c6d931e3c05c3a397c184cacb84cb4f8f42f287/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:f328d01128373cb6763823b2b4e7f73bdf767834268c565151eacb3b7a392f90", size = 800206 }, + { url = "https://files.pythonhosted.org/packages/47/42/1ff831fa87fe8f0a840ddb399054ca0009605d820e2b44ea43114f5459f4/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c1790386614232e1b3a40a958454bdd42c6d1811837b15ddbb052a032a43f62", size = 567747 }, + { url = "https://files.pythonhosted.org/packages/d1/db/5c4d6807434751e3f21231bee98109aa57b9b9b55e058e450d0aef59b70f/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:448f9cb54eb0cee4732b46584f2710c8bc178b0e5371d9e4fc8125201e413a74", size = 747371 }, + { url = "https://files.pythonhosted.org/packages/26/af/78ce193dbf03567eb8c0dc30e3df2b9e56f12a670bf7eb20f9fb532c7e8a/pyzmq-27.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:05b12f2d32112bf8c95ef2e74ec4f1d4beb01f8b5e703b38537f8849f92cb9ba", size = 544862 }, + { url = "https://files.pythonhosted.org/packages/4c/c6/c4dcdecdbaa70969ee1fdced6d7b8f60cfabe64d25361f27ac4665a70620/pyzmq-27.1.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:18770c8d3563715387139060d37859c02ce40718d1faf299abddcdcc6a649066", size = 836265 }, + { url = "https://files.pythonhosted.org/packages/3e/79/f38c92eeaeb03a2ccc2ba9866f0439593bb08c5e3b714ac1d553e5c96e25/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:ac25465d42f92e990f8d8b0546b01c391ad431c3bf447683fdc40565941d0604", size = 800208 }, + { url = "https://files.pythonhosted.org/packages/49/0e/3f0d0d335c6b3abb9b7b723776d0b21fa7f3a6c819a0db6097059aada160/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53b40f8ae006f2734ee7608d59ed661419f087521edbfc2149c3932e9c14808c", size = 567747 }, + { url = "https://files.pythonhosted.org/packages/a1/cf/f2b3784d536250ffd4be70e049f3b60981235d70c6e8ce7e3ef21e1adb25/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f605d884e7c8be8fe1aa94e0a783bf3f591b84c24e4bc4f3e7564c82ac25e271", size = 747371 }, + { url = "https://files.pythonhosted.org/packages/01/1b/5dbe84eefc86f48473947e2f41711aded97eecef1231f4558f1f02713c12/pyzmq-27.1.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c9f7f6e13dff2e44a6afeaf2cf54cee5929ad64afaf4d40b50f93c58fc687355", size = 544862 }, + { url = "https://files.pythonhosted.org/packages/57/f4/c2e978cf6b833708bad7d6396c3a20c19750585a1775af3ff13c435e1912/pyzmq-27.1.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:722ea791aa233ac0a819fc2c475e1292c76930b31f1d828cb61073e2fe5e208f", size = 836257 }, + { url = "https://files.pythonhosted.org/packages/5f/5f/4e10c7f57a4c92ab0fbb2396297aa8d618e6f5b9b8f8e9756d56f3e6fc52/pyzmq-27.1.0-pp39-pypy39_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:01f9437501886d3a1dd4b02ef59fb8cc384fa718ce066d52f175ee49dd5b7ed8", size = 800203 }, + { url = "https://files.pythonhosted.org/packages/19/72/a74a007cd636f903448c6ab66628104b1fc5f2ba018733d5eabb94a0a6fb/pyzmq-27.1.0-pp39-pypy39_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4a19387a3dddcc762bfd2f570d14e2395b2c9701329b266f83dd87a2b3cbd381", size = 758756 }, + { url = "https://files.pythonhosted.org/packages/a9/d4/30c25b91f2b4786026372f5ef454134d7f576fcf4ac58539ad7dd5de4762/pyzmq-27.1.0-pp39-pypy39_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c618fbcd069e3a29dcd221739cacde52edcc681f041907867e0f5cc7e85f172", size = 567742 }, + { url = "https://files.pythonhosted.org/packages/92/aa/ee86edad943438cd0316964020c4b6d09854414f9f945f8e289ea6fcc019/pyzmq-27.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ff8d114d14ac671d88c89b9224c63d6c4e5a613fe8acd5594ce53d752a3aafe9", size = 544857 }, +] + +[[package]] +name = "referencing" +version = "0.36.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "attrs", marker = "python_full_version < '3.10'" }, + { name = "rpds-py", version = "0.27.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "typing-extensions", marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2f/db/98b5c277be99dd18bfd91dd04e1b759cad18d1a338188c936e92f921c7e2/referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa", size = 74744 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775 }, +] + +[[package]] +name = "referencing" +version = "0.37.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "attrs", marker = "python_full_version >= '3.10'" }, + { name = "rpds-py", version = "0.30.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "typing-extensions", marker = "python_full_version >= '3.10' and python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8", size = 78036 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231", size = 26766 }, +] + +[[package]] +name = "requests" +version = "2.32.5" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "certifi", marker = "python_full_version < '3.10'" }, + { name = "charset-normalizer", marker = "python_full_version < '3.10'" }, + { name = "idna", marker = "python_full_version < '3.10'" }, + { name = "urllib3", marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738 }, +] + +[[package]] +name = "requests" +version = "2.33.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "certifi", marker = "python_full_version >= '3.10'" }, + { name = "charset-normalizer", marker = "python_full_version >= '3.10'" }, + { name = "idna", marker = "python_full_version >= '3.10'" }, + { name = "urllib3", marker = "python_full_version >= '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5f/a4/98b9c7c6428a668bf7e42ebb7c79d576a1c3c1e3ae2d47e674b468388871/requests-2.33.1.tar.gz", hash = "sha256:18817f8c57c6263968bc123d237e3b8b08ac046f5456bd1e307ee8f4250d3517", size = 134120 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl", hash = "sha256:4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a", size = 64947 }, +] + +[[package]] +name = "rfc3339-validator" +version = "0.1.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/ea/a9387748e2d111c3c2b275ba970b735e04e15cdb1eb30693b6b5708c4dbd/rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b", size = 5513 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa", size = 3490 }, +] + +[[package]] +name = "rfc3986-validator" +version = "0.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/da/88/f270de456dd7d11dcc808abfa291ecdd3f45ff44e3b549ffa01b126464d0/rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055", size = 6760 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9", size = 4242 }, +] + +[[package]] +name = "rfc3987-syntax" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "lark" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2c/06/37c1a5557acf449e8e406a830a05bf885ac47d33270aec454ef78675008d/rfc3987_syntax-1.1.0.tar.gz", hash = "sha256:717a62cbf33cffdd16dfa3a497d81ce48a660ea691b1ddd7be710c22f00b4a0d", size = 14239 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/71/44ce230e1b7fadd372515a97e32a83011f906ddded8d03e3c6aafbdedbb7/rfc3987_syntax-1.1.0-py3-none-any.whl", hash = "sha256:6c3d97604e4c5ce9f714898e05401a0445a641cfa276432b0a648c80856f6a3f", size = 8046 }, +] + +[[package]] +name = "roman-numerals" +version = "4.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ae/f9/41dc953bbeb056c17d5f7a519f50fdf010bd0553be2d630bc69d1e022703/roman_numerals-4.1.0.tar.gz", hash = "sha256:1af8b147eb1405d5839e78aeb93131690495fe9da5c91856cb33ad55a7f1e5b2", size = 9077 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl", hash = "sha256:647ba99caddc2cc1e55a51e4360689115551bf4476d90e8162cf8c345fe233c7", size = 7676 }, +] + +[[package]] +name = "rpds-py" +version = "0.27.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/e9/dd/2c0cbe774744272b0ae725f44032c77bdcab6e8bcf544bffa3b6e70c8dba/rpds_py-0.27.1.tar.gz", hash = "sha256:26a1c73171d10b7acccbded82bf6a586ab8203601e565badc74bbbf8bc5a10f8", size = 27479 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a5/ed/3aef893e2dd30e77e35d20d4ddb45ca459db59cead748cad9796ad479411/rpds_py-0.27.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:68afeec26d42ab3b47e541b272166a0b4400313946871cba3ed3a4fc0cab1cef", size = 371606 }, + { url = "https://files.pythonhosted.org/packages/6d/82/9818b443e5d3eb4c83c3994561387f116aae9833b35c484474769c4a8faf/rpds_py-0.27.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:74e5b2f7bb6fa38b1b10546d27acbacf2a022a8b5543efb06cfebc72a59c85be", size = 353452 }, + { url = "https://files.pythonhosted.org/packages/99/c7/d2a110ffaaa397fc6793a83c7bd3545d9ab22658b7cdff05a24a4535cc45/rpds_py-0.27.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9024de74731df54546fab0bfbcdb49fae19159ecaecfc8f37c18d2c7e2c0bd61", size = 381519 }, + { url = "https://files.pythonhosted.org/packages/5a/bc/e89581d1f9d1be7d0247eaef602566869fdc0d084008ba139e27e775366c/rpds_py-0.27.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:31d3ebadefcd73b73928ed0b2fd696f7fefda8629229f81929ac9c1854d0cffb", size = 394424 }, + { url = "https://files.pythonhosted.org/packages/ac/2e/36a6861f797530e74bb6ed53495f8741f1ef95939eed01d761e73d559067/rpds_py-0.27.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2e7f8f169d775dd9092a1743768d771f1d1300453ddfe6325ae3ab5332b4657", size = 523467 }, + { url = "https://files.pythonhosted.org/packages/c4/59/c1bc2be32564fa499f988f0a5c6505c2f4746ef96e58e4d7de5cf923d77e/rpds_py-0.27.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d905d16f77eb6ab2e324e09bfa277b4c8e5e6b8a78a3e7ff8f3cdf773b4c013", size = 402660 }, + { url = "https://files.pythonhosted.org/packages/0a/ec/ef8bf895f0628dd0a59e54d81caed6891663cb9c54a0f4bb7da918cb88cf/rpds_py-0.27.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50c946f048209e6362e22576baea09193809f87687a95a8db24e5fbdb307b93a", size = 384062 }, + { url = "https://files.pythonhosted.org/packages/69/f7/f47ff154be8d9a5e691c083a920bba89cef88d5247c241c10b9898f595a1/rpds_py-0.27.1-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:3deab27804d65cd8289eb814c2c0e807c4b9d9916c9225e363cb0cf875eb67c1", size = 401289 }, + { url = "https://files.pythonhosted.org/packages/3b/d9/ca410363efd0615814ae579f6829cafb39225cd63e5ea5ed1404cb345293/rpds_py-0.27.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8b61097f7488de4be8244c89915da8ed212832ccf1e7c7753a25a394bf9b1f10", size = 417718 }, + { url = "https://files.pythonhosted.org/packages/e3/a0/8cb5c2ff38340f221cc067cc093d1270e10658ba4e8d263df923daa18e86/rpds_py-0.27.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8a3f29aba6e2d7d90528d3c792555a93497fe6538aa65eb675b44505be747808", size = 558333 }, + { url = "https://files.pythonhosted.org/packages/6f/8c/1b0de79177c5d5103843774ce12b84caa7164dfc6cd66378768d37db11bf/rpds_py-0.27.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dd6cd0485b7d347304067153a6dc1d73f7d4fd995a396ef32a24d24b8ac63ac8", size = 589127 }, + { url = "https://files.pythonhosted.org/packages/c8/5e/26abb098d5e01266b0f3a2488d299d19ccc26849735d9d2b95c39397e945/rpds_py-0.27.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6f4461bf931108c9fa226ffb0e257c1b18dc2d44cd72b125bec50ee0ab1248a9", size = 554899 }, + { url = "https://files.pythonhosted.org/packages/de/41/905cc90ced13550db017f8f20c6d8e8470066c5738ba480d7ba63e3d136b/rpds_py-0.27.1-cp310-cp310-win32.whl", hash = "sha256:ee5422d7fb21f6a00c1901bf6559c49fee13a5159d0288320737bbf6585bd3e4", size = 217450 }, + { url = "https://files.pythonhosted.org/packages/75/3d/6bef47b0e253616ccdf67c283e25f2d16e18ccddd38f92af81d5a3420206/rpds_py-0.27.1-cp310-cp310-win_amd64.whl", hash = "sha256:3e039aabf6d5f83c745d5f9a0a381d031e9ed871967c0a5c38d201aca41f3ba1", size = 228447 }, + { url = "https://files.pythonhosted.org/packages/b5/c1/7907329fbef97cbd49db6f7303893bd1dd5a4a3eae415839ffdfb0762cae/rpds_py-0.27.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:be898f271f851f68b318872ce6ebebbc62f303b654e43bf72683dbdc25b7c881", size = 371063 }, + { url = "https://files.pythonhosted.org/packages/11/94/2aab4bc86228bcf7c48760990273653a4900de89c7537ffe1b0d6097ed39/rpds_py-0.27.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:62ac3d4e3e07b58ee0ddecd71d6ce3b1637de2d373501412df395a0ec5f9beb5", size = 353210 }, + { url = "https://files.pythonhosted.org/packages/3a/57/f5eb3ecf434342f4f1a46009530e93fd201a0b5b83379034ebdb1d7c1a58/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4708c5c0ceb2d034f9991623631d3d23cb16e65c83736ea020cdbe28d57c0a0e", size = 381636 }, + { url = "https://files.pythonhosted.org/packages/ae/f4/ef95c5945e2ceb5119571b184dd5a1cc4b8541bbdf67461998cfeac9cb1e/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:abfa1171a9952d2e0002aba2ad3780820b00cc3d9c98c6630f2e93271501f66c", size = 394341 }, + { url = "https://files.pythonhosted.org/packages/5a/7e/4bd610754bf492d398b61725eb9598ddd5eb86b07d7d9483dbcd810e20bc/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b507d19f817ebaca79574b16eb2ae412e5c0835542c93fe9983f1e432aca195", size = 523428 }, + { url = "https://files.pythonhosted.org/packages/9f/e5/059b9f65a8c9149361a8b75094864ab83b94718344db511fd6117936ed2a/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:168b025f8fd8d8d10957405f3fdcef3dc20f5982d398f90851f4abc58c566c52", size = 402923 }, + { url = "https://files.pythonhosted.org/packages/f5/48/64cabb7daced2968dd08e8a1b7988bf358d7bd5bcd5dc89a652f4668543c/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb56c6210ef77caa58e16e8c17d35c63fe3f5b60fd9ba9d424470c3400bcf9ed", size = 384094 }, + { url = "https://files.pythonhosted.org/packages/ae/e1/dc9094d6ff566bff87add8a510c89b9e158ad2ecd97ee26e677da29a9e1b/rpds_py-0.27.1-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:d252f2d8ca0195faa707f8eb9368955760880b2b42a8ee16d382bf5dd807f89a", size = 401093 }, + { url = "https://files.pythonhosted.org/packages/37/8e/ac8577e3ecdd5593e283d46907d7011618994e1d7ab992711ae0f78b9937/rpds_py-0.27.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6e5e54da1e74b91dbc7996b56640f79b195d5925c2b78efaa8c5d53e1d88edde", size = 417969 }, + { url = "https://files.pythonhosted.org/packages/66/6d/87507430a8f74a93556fe55c6485ba9c259949a853ce407b1e23fea5ba31/rpds_py-0.27.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ffce0481cc6e95e5b3f0a47ee17ffbd234399e6d532f394c8dce320c3b089c21", size = 558302 }, + { url = "https://files.pythonhosted.org/packages/3a/bb/1db4781ce1dda3eecc735e3152659a27b90a02ca62bfeea17aee45cc0fbc/rpds_py-0.27.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:a205fdfe55c90c2cd8e540ca9ceba65cbe6629b443bc05db1f590a3db8189ff9", size = 589259 }, + { url = "https://files.pythonhosted.org/packages/7b/0e/ae1c8943d11a814d01b482e1f8da903f88047a962dff9bbdadf3bd6e6fd1/rpds_py-0.27.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:689fb5200a749db0415b092972e8eba85847c23885c8543a8b0f5c009b1a5948", size = 554983 }, + { url = "https://files.pythonhosted.org/packages/b2/d5/0b2a55415931db4f112bdab072443ff76131b5ac4f4dc98d10d2d357eb03/rpds_py-0.27.1-cp311-cp311-win32.whl", hash = "sha256:3182af66048c00a075010bc7f4860f33913528a4b6fc09094a6e7598e462fe39", size = 217154 }, + { url = "https://files.pythonhosted.org/packages/24/75/3b7ffe0d50dc86a6a964af0d1cc3a4a2cdf437cb7b099a4747bbb96d1819/rpds_py-0.27.1-cp311-cp311-win_amd64.whl", hash = "sha256:b4938466c6b257b2f5c4ff98acd8128ec36b5059e5c8f8372d79316b1c36bb15", size = 228627 }, + { url = "https://files.pythonhosted.org/packages/8d/3f/4fd04c32abc02c710f09a72a30c9a55ea3cc154ef8099078fd50a0596f8e/rpds_py-0.27.1-cp311-cp311-win_arm64.whl", hash = "sha256:2f57af9b4d0793e53266ee4325535a31ba48e2f875da81a9177c9926dfa60746", size = 220998 }, + { url = "https://files.pythonhosted.org/packages/bd/fe/38de28dee5df58b8198c743fe2bea0c785c6d40941b9950bac4cdb71a014/rpds_py-0.27.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ae2775c1973e3c30316892737b91f9283f9908e3cc7625b9331271eaaed7dc90", size = 361887 }, + { url = "https://files.pythonhosted.org/packages/7c/9a/4b6c7eedc7dd90986bf0fab6ea2a091ec11c01b15f8ba0a14d3f80450468/rpds_py-0.27.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2643400120f55c8a96f7c9d858f7be0c88d383cd4653ae2cf0d0c88f668073e5", size = 345795 }, + { url = "https://files.pythonhosted.org/packages/6f/0e/e650e1b81922847a09cca820237b0edee69416a01268b7754d506ade11ad/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16323f674c089b0360674a4abd28d5042947d54ba620f72514d69be4ff64845e", size = 385121 }, + { url = "https://files.pythonhosted.org/packages/1b/ea/b306067a712988e2bff00dcc7c8f31d26c29b6d5931b461aa4b60a013e33/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a1f4814b65eacac94a00fc9a526e3fdafd78e439469644032032d0d63de4881", size = 398976 }, + { url = "https://files.pythonhosted.org/packages/2c/0a/26dc43c8840cb8fe239fe12dbc8d8de40f2365e838f3d395835dde72f0e5/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ba32c16b064267b22f1850a34051121d423b6f7338a12b9459550eb2096e7ec", size = 525953 }, + { url = "https://files.pythonhosted.org/packages/22/14/c85e8127b573aaf3a0cbd7fbb8c9c99e735a4a02180c84da2a463b766e9e/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5c20f33fd10485b80f65e800bbe5f6785af510b9f4056c5a3c612ebc83ba6cb", size = 407915 }, + { url = "https://files.pythonhosted.org/packages/ed/7b/8f4fee9ba1fb5ec856eb22d725a4efa3deb47f769597c809e03578b0f9d9/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:466bfe65bd932da36ff279ddd92de56b042f2266d752719beb97b08526268ec5", size = 386883 }, + { url = "https://files.pythonhosted.org/packages/86/47/28fa6d60f8b74fcdceba81b272f8d9836ac0340570f68f5df6b41838547b/rpds_py-0.27.1-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:41e532bbdcb57c92ba3be62c42e9f096431b4cf478da9bc3bc6ce5c38ab7ba7a", size = 405699 }, + { url = "https://files.pythonhosted.org/packages/d0/fd/c5987b5e054548df56953a21fe2ebed51fc1ec7c8f24fd41c067b68c4a0a/rpds_py-0.27.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f149826d742b406579466283769a8ea448eed82a789af0ed17b0cd5770433444", size = 423713 }, + { url = "https://files.pythonhosted.org/packages/ac/ba/3c4978b54a73ed19a7d74531be37a8bcc542d917c770e14d372b8daea186/rpds_py-0.27.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:80c60cfb5310677bd67cb1e85a1e8eb52e12529545441b43e6f14d90b878775a", size = 562324 }, + { url = "https://files.pythonhosted.org/packages/b5/6c/6943a91768fec16db09a42b08644b960cff540c66aab89b74be6d4a144ba/rpds_py-0.27.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:7ee6521b9baf06085f62ba9c7a3e5becffbc32480d2f1b351559c001c38ce4c1", size = 593646 }, + { url = "https://files.pythonhosted.org/packages/11/73/9d7a8f4be5f4396f011a6bb7a19fe26303a0dac9064462f5651ced2f572f/rpds_py-0.27.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a512c8263249a9d68cac08b05dd59d2b3f2061d99b322813cbcc14c3c7421998", size = 558137 }, + { url = "https://files.pythonhosted.org/packages/6e/96/6772cbfa0e2485bcceef8071de7821f81aeac8bb45fbfd5542a3e8108165/rpds_py-0.27.1-cp312-cp312-win32.whl", hash = "sha256:819064fa048ba01b6dadc5116f3ac48610435ac9a0058bbde98e569f9e785c39", size = 221343 }, + { url = "https://files.pythonhosted.org/packages/67/b6/c82f0faa9af1c6a64669f73a17ee0eeef25aff30bb9a1c318509efe45d84/rpds_py-0.27.1-cp312-cp312-win_amd64.whl", hash = "sha256:d9199717881f13c32c4046a15f024971a3b78ad4ea029e8da6b86e5aa9cf4594", size = 232497 }, + { url = "https://files.pythonhosted.org/packages/e1/96/2817b44bd2ed11aebacc9251da03689d56109b9aba5e311297b6902136e2/rpds_py-0.27.1-cp312-cp312-win_arm64.whl", hash = "sha256:33aa65b97826a0e885ef6e278fbd934e98cdcfed80b63946025f01e2f5b29502", size = 222790 }, + { url = "https://files.pythonhosted.org/packages/cc/77/610aeee8d41e39080c7e14afa5387138e3c9fa9756ab893d09d99e7d8e98/rpds_py-0.27.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:e4b9fcfbc021633863a37e92571d6f91851fa656f0180246e84cbd8b3f6b329b", size = 361741 }, + { url = "https://files.pythonhosted.org/packages/3a/fc/c43765f201c6a1c60be2043cbdb664013def52460a4c7adace89d6682bf4/rpds_py-0.27.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1441811a96eadca93c517d08df75de45e5ffe68aa3089924f963c782c4b898cf", size = 345574 }, + { url = "https://files.pythonhosted.org/packages/20/42/ee2b2ca114294cd9847d0ef9c26d2b0851b2e7e00bf14cc4c0b581df0fc3/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55266dafa22e672f5a4f65019015f90336ed31c6383bd53f5e7826d21a0e0b83", size = 385051 }, + { url = "https://files.pythonhosted.org/packages/fd/e8/1e430fe311e4799e02e2d1af7c765f024e95e17d651612425b226705f910/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d78827d7ac08627ea2c8e02c9e5b41180ea5ea1f747e9db0915e3adf36b62dcf", size = 398395 }, + { url = "https://files.pythonhosted.org/packages/82/95/9dc227d441ff2670651c27a739acb2535ccaf8b351a88d78c088965e5996/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae92443798a40a92dc5f0b01d8a7c93adde0c4dc965310a29ae7c64d72b9fad2", size = 524334 }, + { url = "https://files.pythonhosted.org/packages/87/01/a670c232f401d9ad461d9a332aa4080cd3cb1d1df18213dbd0d2a6a7ab51/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c46c9dd2403b66a2a3b9720ec4b74d4ab49d4fabf9f03dfdce2d42af913fe8d0", size = 407691 }, + { url = "https://files.pythonhosted.org/packages/03/36/0a14aebbaa26fe7fab4780c76f2239e76cc95a0090bdb25e31d95c492fcd/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2efe4eb1d01b7f5f1939f4ef30ecea6c6b3521eec451fb93191bf84b2a522418", size = 386868 }, + { url = "https://files.pythonhosted.org/packages/3b/03/8c897fb8b5347ff6c1cc31239b9611c5bf79d78c984430887a353e1409a1/rpds_py-0.27.1-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:15d3b4d83582d10c601f481eca29c3f138d44c92187d197aff663a269197c02d", size = 405469 }, + { url = "https://files.pythonhosted.org/packages/da/07/88c60edc2df74850d496d78a1fdcdc7b54360a7f610a4d50008309d41b94/rpds_py-0.27.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4ed2e16abbc982a169d30d1a420274a709949e2cbdef119fe2ec9d870b42f274", size = 422125 }, + { url = "https://files.pythonhosted.org/packages/6b/86/5f4c707603e41b05f191a749984f390dabcbc467cf833769b47bf14ba04f/rpds_py-0.27.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a75f305c9b013289121ec0f1181931975df78738cdf650093e6b86d74aa7d8dd", size = 562341 }, + { url = "https://files.pythonhosted.org/packages/b2/92/3c0cb2492094e3cd9baf9e49bbb7befeceb584ea0c1a8b5939dca4da12e5/rpds_py-0.27.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:67ce7620704745881a3d4b0ada80ab4d99df390838839921f99e63c474f82cf2", size = 592511 }, + { url = "https://files.pythonhosted.org/packages/10/bb/82e64fbb0047c46a168faa28d0d45a7851cd0582f850b966811d30f67ad8/rpds_py-0.27.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9d992ac10eb86d9b6f369647b6a3f412fc0075cfd5d799530e84d335e440a002", size = 557736 }, + { url = "https://files.pythonhosted.org/packages/00/95/3c863973d409210da7fb41958172c6b7dbe7fc34e04d3cc1f10bb85e979f/rpds_py-0.27.1-cp313-cp313-win32.whl", hash = "sha256:4f75e4bd8ab8db624e02c8e2fc4063021b58becdbe6df793a8111d9343aec1e3", size = 221462 }, + { url = "https://files.pythonhosted.org/packages/ce/2c/5867b14a81dc217b56d95a9f2a40fdbc56a1ab0181b80132beeecbd4b2d6/rpds_py-0.27.1-cp313-cp313-win_amd64.whl", hash = "sha256:f9025faafc62ed0b75a53e541895ca272815bec18abe2249ff6501c8f2e12b83", size = 232034 }, + { url = "https://files.pythonhosted.org/packages/c7/78/3958f3f018c01923823f1e47f1cc338e398814b92d83cd278364446fac66/rpds_py-0.27.1-cp313-cp313-win_arm64.whl", hash = "sha256:ed10dc32829e7d222b7d3b93136d25a406ba9788f6a7ebf6809092da1f4d279d", size = 222392 }, + { url = "https://files.pythonhosted.org/packages/01/76/1cdf1f91aed5c3a7bf2eba1f1c4e4d6f57832d73003919a20118870ea659/rpds_py-0.27.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:92022bbbad0d4426e616815b16bc4127f83c9a74940e1ccf3cfe0b387aba0228", size = 358355 }, + { url = "https://files.pythonhosted.org/packages/c3/6f/bf142541229374287604caf3bb2a4ae17f0a580798fd72d3b009b532db4e/rpds_py-0.27.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:47162fdab9407ec3f160805ac3e154df042e577dd53341745fc7fb3f625e6d92", size = 342138 }, + { url = "https://files.pythonhosted.org/packages/1a/77/355b1c041d6be40886c44ff5e798b4e2769e497b790f0f7fd1e78d17e9a8/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb89bec23fddc489e5d78b550a7b773557c9ab58b7946154a10a6f7a214a48b2", size = 380247 }, + { url = "https://files.pythonhosted.org/packages/d6/a4/d9cef5c3946ea271ce2243c51481971cd6e34f21925af2783dd17b26e815/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e48af21883ded2b3e9eb48cb7880ad8598b31ab752ff3be6457001d78f416723", size = 390699 }, + { url = "https://files.pythonhosted.org/packages/3a/06/005106a7b8c6c1a7e91b73169e49870f4af5256119d34a361ae5240a0c1d/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6f5b7bd8e219ed50299e58551a410b64daafb5017d54bbe822e003856f06a802", size = 521852 }, + { url = "https://files.pythonhosted.org/packages/e5/3e/50fb1dac0948e17a02eb05c24510a8fe12d5ce8561c6b7b7d1339ab7ab9c/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08f1e20bccf73b08d12d804d6e1c22ca5530e71659e6673bce31a6bb71c1e73f", size = 402582 }, + { url = "https://files.pythonhosted.org/packages/cb/b0/f4e224090dc5b0ec15f31a02d746ab24101dd430847c4d99123798661bfc/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dc5dceeaefcc96dc192e3a80bbe1d6c410c469e97bdd47494a7d930987f18b2", size = 384126 }, + { url = "https://files.pythonhosted.org/packages/54/77/ac339d5f82b6afff1df8f0fe0d2145cc827992cb5f8eeb90fc9f31ef7a63/rpds_py-0.27.1-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:d76f9cc8665acdc0c9177043746775aa7babbf479b5520b78ae4002d889f5c21", size = 399486 }, + { url = "https://files.pythonhosted.org/packages/d6/29/3e1c255eee6ac358c056a57d6d6869baa00a62fa32eea5ee0632039c50a3/rpds_py-0.27.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:134fae0e36022edad8290a6661edf40c023562964efea0cc0ec7f5d392d2aaef", size = 414832 }, + { url = "https://files.pythonhosted.org/packages/3f/db/6d498b844342deb3fa1d030598db93937a9964fcf5cb4da4feb5f17be34b/rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:eb11a4f1b2b63337cfd3b4d110af778a59aae51c81d195768e353d8b52f88081", size = 557249 }, + { url = "https://files.pythonhosted.org/packages/60/f3/690dd38e2310b6f68858a331399b4d6dbb9132c3e8ef8b4333b96caf403d/rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:13e608ac9f50a0ed4faec0e90ece76ae33b34c0e8656e3dceb9a7db994c692cd", size = 587356 }, + { url = "https://files.pythonhosted.org/packages/86/e3/84507781cccd0145f35b1dc32c72675200c5ce8d5b30f813e49424ef68fc/rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dd2135527aa40f061350c3f8f89da2644de26cd73e4de458e79606384f4f68e7", size = 555300 }, + { url = "https://files.pythonhosted.org/packages/e5/ee/375469849e6b429b3516206b4580a79e9ef3eb12920ddbd4492b56eaacbe/rpds_py-0.27.1-cp313-cp313t-win32.whl", hash = "sha256:3020724ade63fe320a972e2ffd93b5623227e684315adce194941167fee02688", size = 216714 }, + { url = "https://files.pythonhosted.org/packages/21/87/3fc94e47c9bd0742660e84706c311a860dcae4374cf4a03c477e23ce605a/rpds_py-0.27.1-cp313-cp313t-win_amd64.whl", hash = "sha256:8ee50c3e41739886606388ba3ab3ee2aae9f35fb23f833091833255a31740797", size = 228943 }, + { url = "https://files.pythonhosted.org/packages/70/36/b6e6066520a07cf029d385de869729a895917b411e777ab1cde878100a1d/rpds_py-0.27.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:acb9aafccaae278f449d9c713b64a9e68662e7799dbd5859e2c6b3c67b56d334", size = 362472 }, + { url = "https://files.pythonhosted.org/packages/af/07/b4646032e0dcec0df9c73a3bd52f63bc6c5f9cda992f06bd0e73fe3fbebd/rpds_py-0.27.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:b7fb801aa7f845ddf601c49630deeeccde7ce10065561d92729bfe81bd21fb33", size = 345676 }, + { url = "https://files.pythonhosted.org/packages/b0/16/2f1003ee5d0af4bcb13c0cf894957984c32a6751ed7206db2aee7379a55e/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe0dd05afb46597b9a2e11c351e5e4283c741237e7f617ffb3252780cca9336a", size = 385313 }, + { url = "https://files.pythonhosted.org/packages/05/cd/7eb6dd7b232e7f2654d03fa07f1414d7dfc980e82ba71e40a7c46fd95484/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b6dfb0e058adb12d8b1d1b25f686e94ffa65d9995a5157afe99743bf7369d62b", size = 399080 }, + { url = "https://files.pythonhosted.org/packages/20/51/5829afd5000ec1cb60f304711f02572d619040aa3ec033d8226817d1e571/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed090ccd235f6fa8bb5861684567f0a83e04f52dfc2e5c05f2e4b1309fcf85e7", size = 523868 }, + { url = "https://files.pythonhosted.org/packages/05/2c/30eebca20d5db95720ab4d2faec1b5e4c1025c473f703738c371241476a2/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf876e79763eecf3e7356f157540d6a093cef395b65514f17a356f62af6cc136", size = 408750 }, + { url = "https://files.pythonhosted.org/packages/90/1a/cdb5083f043597c4d4276eae4e4c70c55ab5accec078da8611f24575a367/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:12ed005216a51b1d6e2b02a7bd31885fe317e45897de81d86dcce7d74618ffff", size = 387688 }, + { url = "https://files.pythonhosted.org/packages/7c/92/cf786a15320e173f945d205ab31585cc43969743bb1a48b6888f7a2b0a2d/rpds_py-0.27.1-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:ee4308f409a40e50593c7e3bb8cbe0b4d4c66d1674a316324f0c2f5383b486f9", size = 407225 }, + { url = "https://files.pythonhosted.org/packages/33/5c/85ee16df5b65063ef26017bef33096557a4c83fbe56218ac7cd8c235f16d/rpds_py-0.27.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0b08d152555acf1f455154d498ca855618c1378ec810646fcd7c76416ac6dc60", size = 423361 }, + { url = "https://files.pythonhosted.org/packages/4b/8e/1c2741307fcabd1a334ecf008e92c4f47bb6f848712cf15c923becfe82bb/rpds_py-0.27.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:dce51c828941973a5684d458214d3a36fcd28da3e1875d659388f4f9f12cc33e", size = 562493 }, + { url = "https://files.pythonhosted.org/packages/04/03/5159321baae9b2222442a70c1f988cbbd66b9be0675dd3936461269be360/rpds_py-0.27.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:c1476d6f29eb81aa4151c9a31219b03f1f798dc43d8af1250a870735516a1212", size = 592623 }, + { url = "https://files.pythonhosted.org/packages/ff/39/c09fd1ad28b85bc1d4554a8710233c9f4cefd03d7717a1b8fbfd171d1167/rpds_py-0.27.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:3ce0cac322b0d69b63c9cdb895ee1b65805ec9ffad37639f291dd79467bee675", size = 558800 }, + { url = "https://files.pythonhosted.org/packages/c5/d6/99228e6bbcf4baa764b18258f519a9035131d91b538d4e0e294313462a98/rpds_py-0.27.1-cp314-cp314-win32.whl", hash = "sha256:dfbfac137d2a3d0725758cd141f878bf4329ba25e34979797c89474a89a8a3a3", size = 221943 }, + { url = "https://files.pythonhosted.org/packages/be/07/c802bc6b8e95be83b79bdf23d1aa61d68324cb1006e245d6c58e959e314d/rpds_py-0.27.1-cp314-cp314-win_amd64.whl", hash = "sha256:a6e57b0abfe7cc513450fcf529eb486b6e4d3f8aee83e92eb5f1ef848218d456", size = 233739 }, + { url = "https://files.pythonhosted.org/packages/c8/89/3e1b1c16d4c2d547c5717377a8df99aee8099ff050f87c45cb4d5fa70891/rpds_py-0.27.1-cp314-cp314-win_arm64.whl", hash = "sha256:faf8d146f3d476abfee026c4ae3bdd9ca14236ae4e4c310cbd1cf75ba33d24a3", size = 223120 }, + { url = "https://files.pythonhosted.org/packages/62/7e/dc7931dc2fa4a6e46b2a4fa744a9fe5c548efd70e0ba74f40b39fa4a8c10/rpds_py-0.27.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:ba81d2b56b6d4911ce735aad0a1d4495e808b8ee4dc58715998741a26874e7c2", size = 358944 }, + { url = "https://files.pythonhosted.org/packages/e6/22/4af76ac4e9f336bfb1a5f240d18a33c6b2fcaadb7472ac7680576512b49a/rpds_py-0.27.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:84f7d509870098de0e864cad0102711c1e24e9b1a50ee713b65928adb22269e4", size = 342283 }, + { url = "https://files.pythonhosted.org/packages/1c/15/2a7c619b3c2272ea9feb9ade67a45c40b3eeb500d503ad4c28c395dc51b4/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9e960fc78fecd1100539f14132425e1d5fe44ecb9239f8f27f079962021523e", size = 380320 }, + { url = "https://files.pythonhosted.org/packages/a2/7d/4c6d243ba4a3057e994bb5bedd01b5c963c12fe38dde707a52acdb3849e7/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:62f85b665cedab1a503747617393573995dac4600ff51869d69ad2f39eb5e817", size = 391760 }, + { url = "https://files.pythonhosted.org/packages/b4/71/b19401a909b83bcd67f90221330bc1ef11bc486fe4e04c24388d28a618ae/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fed467af29776f6556250c9ed85ea5a4dd121ab56a5f8b206e3e7a4c551e48ec", size = 522476 }, + { url = "https://files.pythonhosted.org/packages/e4/44/1a3b9715c0455d2e2f0f6df5ee6d6f5afdc423d0773a8a682ed2b43c566c/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2729615f9d430af0ae6b36cf042cb55c0936408d543fb691e1a9e36648fd35a", size = 403418 }, + { url = "https://files.pythonhosted.org/packages/1c/4b/fb6c4f14984eb56673bc868a66536f53417ddb13ed44b391998100a06a96/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b207d881a9aef7ba753d69c123a35d96ca7cb808056998f6b9e8747321f03b8", size = 384771 }, + { url = "https://files.pythonhosted.org/packages/c0/56/d5265d2d28b7420d7b4d4d85cad8ef891760f5135102e60d5c970b976e41/rpds_py-0.27.1-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:639fd5efec029f99b79ae47e5d7e00ad8a773da899b6309f6786ecaf22948c48", size = 400022 }, + { url = "https://files.pythonhosted.org/packages/8f/e9/9f5fc70164a569bdd6ed9046486c3568d6926e3a49bdefeeccfb18655875/rpds_py-0.27.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fecc80cb2a90e28af8a9b366edacf33d7a91cbfe4c2c4544ea1246e949cfebeb", size = 416787 }, + { url = "https://files.pythonhosted.org/packages/d4/64/56dd03430ba491db943a81dcdef115a985aac5f44f565cd39a00c766d45c/rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:42a89282d711711d0a62d6f57d81aa43a1368686c45bc1c46b7f079d55692734", size = 557538 }, + { url = "https://files.pythonhosted.org/packages/3f/36/92cc885a3129993b1d963a2a42ecf64e6a8e129d2c7cc980dbeba84e55fb/rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:cf9931f14223de59551ab9d38ed18d92f14f055a5f78c1d8ad6493f735021bbb", size = 588512 }, + { url = "https://files.pythonhosted.org/packages/dd/10/6b283707780a81919f71625351182b4f98932ac89a09023cb61865136244/rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f39f58a27cc6e59f432b568ed8429c7e1641324fbe38131de852cd77b2d534b0", size = 555813 }, + { url = "https://files.pythonhosted.org/packages/04/2e/30b5ea18c01379da6272a92825dd7e53dc9d15c88a19e97932d35d430ef7/rpds_py-0.27.1-cp314-cp314t-win32.whl", hash = "sha256:d5fa0ee122dc09e23607a28e6d7b150da16c662e66409bbe85230e4c85bb528a", size = 217385 }, + { url = "https://files.pythonhosted.org/packages/32/7d/97119da51cb1dd3f2f3c0805f155a3aa4a95fa44fe7d78ae15e69edf4f34/rpds_py-0.27.1-cp314-cp314t-win_amd64.whl", hash = "sha256:6567d2bb951e21232c2f660c24cf3470bb96de56cdcb3f071a83feeaff8a2772", size = 230097 }, + { url = "https://files.pythonhosted.org/packages/7f/6c/252e83e1ce7583c81f26d1d884b2074d40a13977e1b6c9c50bbf9a7f1f5a/rpds_py-0.27.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c918c65ec2e42c2a78d19f18c553d77319119bf43aa9e2edf7fb78d624355527", size = 372140 }, + { url = "https://files.pythonhosted.org/packages/9d/71/949c195d927c5aeb0d0629d329a20de43a64c423a6aa53836290609ef7ec/rpds_py-0.27.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1fea2b1a922c47c51fd07d656324531adc787e415c8b116530a1d29c0516c62d", size = 354086 }, + { url = "https://files.pythonhosted.org/packages/9f/02/e43e332ad8ce4f6c4342d151a471a7f2900ed1d76901da62eb3762663a71/rpds_py-0.27.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbf94c58e8e0cd6b6f38d8de67acae41b3a515c26169366ab58bdca4a6883bb8", size = 382117 }, + { url = "https://files.pythonhosted.org/packages/d0/05/b0fdeb5b577197ad72812bbdfb72f9a08fa1e64539cc3940b1b781cd3596/rpds_py-0.27.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c2a8fed130ce946d5c585eddc7c8eeef0051f58ac80a8ee43bd17835c144c2cc", size = 394520 }, + { url = "https://files.pythonhosted.org/packages/67/1f/4cfef98b2349a7585181e99294fa2a13f0af06902048a5d70f431a66d0b9/rpds_py-0.27.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:037a2361db72ee98d829bc2c5b7cc55598ae0a5e0ec1823a56ea99374cfd73c1", size = 522657 }, + { url = "https://files.pythonhosted.org/packages/44/55/ccf37ddc4c6dce7437b335088b5ca18da864b334890e2fe9aa6ddc3f79a9/rpds_py-0.27.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5281ed1cc1d49882f9997981c88df1a22e140ab41df19071222f7e5fc4e72125", size = 402967 }, + { url = "https://files.pythonhosted.org/packages/74/e5/5903f92e41e293b07707d5bf00ef39a0eb2af7190aff4beaf581a6591510/rpds_py-0.27.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fd50659a069c15eef8aa3d64bbef0d69fd27bb4a50c9ab4f17f83a16cbf8905", size = 384372 }, + { url = "https://files.pythonhosted.org/packages/8f/e3/fbb409e18aeefc01e49f5922ac63d2d914328430e295c12183ce56ebf76b/rpds_py-0.27.1-cp39-cp39-manylinux_2_31_riscv64.whl", hash = "sha256:c4b676c4ae3921649a15d28ed10025548e9b561ded473aa413af749503c6737e", size = 401264 }, + { url = "https://files.pythonhosted.org/packages/55/79/529ad07794e05cb0f38e2f965fc5bb20853d523976719400acecc447ec9d/rpds_py-0.27.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:079bc583a26db831a985c5257797b2b5d3affb0386e7ff886256762f82113b5e", size = 418691 }, + { url = "https://files.pythonhosted.org/packages/33/39/6554a7fd6d9906fda2521c6d52f5d723dca123529fb719a5b5e074c15e01/rpds_py-0.27.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4e44099bd522cba71a2c6b97f68e19f40e7d85399de899d66cdb67b32d7cb786", size = 558989 }, + { url = "https://files.pythonhosted.org/packages/19/b2/76fa15173b6f9f445e5ef15120871b945fb8dd9044b6b8c7abe87e938416/rpds_py-0.27.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:e202e6d4188e53c6661af813b46c37ca2c45e497fc558bacc1a7630ec2695aec", size = 589835 }, + { url = "https://files.pythonhosted.org/packages/ee/9e/5560a4b39bab780405bed8a88ee85b30178061d189558a86003548dea045/rpds_py-0.27.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f41f814b8eaa48768d1bb551591f6ba45f87ac76899453e8ccd41dba1289b04b", size = 555227 }, + { url = "https://files.pythonhosted.org/packages/52/d7/cd9c36215111aa65724c132bf709c6f35175973e90b32115dedc4ced09cb/rpds_py-0.27.1-cp39-cp39-win32.whl", hash = "sha256:9e71f5a087ead99563c11fdaceee83ee982fd39cf67601f4fd66cb386336ee52", size = 217899 }, + { url = "https://files.pythonhosted.org/packages/5b/e0/d75ab7b4dd8ba777f6b365adbdfc7614bbfe7c5f05703031dfa4b61c3d6c/rpds_py-0.27.1-cp39-cp39-win_amd64.whl", hash = "sha256:71108900c9c3c8590697244b9519017a400d9ba26a36c48381b3f64743a44aab", size = 228725 }, + { url = "https://files.pythonhosted.org/packages/d5/63/b7cc415c345625d5e62f694ea356c58fb964861409008118f1245f8c3347/rpds_py-0.27.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7ba22cb9693df986033b91ae1d7a979bc399237d45fccf875b76f62bb9e52ddf", size = 371360 }, + { url = "https://files.pythonhosted.org/packages/e5/8c/12e1b24b560cf378b8ffbdb9dc73abd529e1adcfcf82727dfd29c4a7b88d/rpds_py-0.27.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5b640501be9288c77738b5492b3fd3abc4ba95c50c2e41273c8a1459f08298d3", size = 353933 }, + { url = "https://files.pythonhosted.org/packages/9b/85/1bb2210c1f7a1b99e91fea486b9f0f894aa5da3a5ec7097cbad7dec6d40f/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb08b65b93e0c6dd70aac7f7890a9c0938d5ec71d5cb32d45cf844fb8ae47636", size = 382962 }, + { url = "https://files.pythonhosted.org/packages/cc/c9/a839b9f219cf80ed65f27a7f5ddbb2809c1b85c966020ae2dff490e0b18e/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d7ff07d696a7a38152ebdb8212ca9e5baab56656749f3d6004b34ab726b550b8", size = 394412 }, + { url = "https://files.pythonhosted.org/packages/02/2d/b1d7f928b0b1f4fc2e0133e8051d199b01d7384875adc63b6ddadf3de7e5/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fb7c72262deae25366e3b6c0c0ba46007967aea15d1eea746e44ddba8ec58dcc", size = 523972 }, + { url = "https://files.pythonhosted.org/packages/a9/af/2cbf56edd2d07716df1aec8a726b3159deb47cb5c27e1e42b71d705a7c2f/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7b002cab05d6339716b03a4a3a2ce26737f6231d7b523f339fa061d53368c9d8", size = 403273 }, + { url = "https://files.pythonhosted.org/packages/c0/93/425e32200158d44ff01da5d9612c3b6711fe69f606f06e3895511f17473b/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23f6b69d1c26c4704fec01311963a41d7de3ee0570a84ebde4d544e5a1859ffc", size = 385278 }, + { url = "https://files.pythonhosted.org/packages/eb/1a/1a04a915ecd0551bfa9e77b7672d1937b4b72a0fc204a17deef76001cfb2/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:530064db9146b247351f2a0250b8f00b289accea4596a033e94be2389977de71", size = 402084 }, + { url = "https://files.pythonhosted.org/packages/51/f7/66585c0fe5714368b62951d2513b684e5215beaceab2c6629549ddb15036/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7b90b0496570bd6b0321724a330d8b545827c4df2034b6ddfc5f5275f55da2ad", size = 419041 }, + { url = "https://files.pythonhosted.org/packages/8e/7e/83a508f6b8e219bba2d4af077c35ba0e0cdd35a751a3be6a7cba5a55ad71/rpds_py-0.27.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:879b0e14a2da6a1102a3fc8af580fc1ead37e6d6692a781bd8c83da37429b5ab", size = 560084 }, + { url = "https://files.pythonhosted.org/packages/66/66/bb945683b958a1b19eb0fe715594630d0f36396ebdef4d9b89c2fa09aa56/rpds_py-0.27.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:0d807710df3b5faa66c731afa162ea29717ab3be17bdc15f90f2d9f183da4059", size = 590115 }, + { url = "https://files.pythonhosted.org/packages/12/00/ccfaafaf7db7e7adace915e5c2f2c2410e16402561801e9c7f96683002d3/rpds_py-0.27.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:3adc388fc3afb6540aec081fa59e6e0d3908722771aa1e37ffe22b220a436f0b", size = 556561 }, + { url = "https://files.pythonhosted.org/packages/e1/b7/92b6ed9aad103bfe1c45df98453dfae40969eef2cb6c6239c58d7e96f1b3/rpds_py-0.27.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c796c0c1cc68cb08b0284db4229f5af76168172670c74908fdbd4b7d7f515819", size = 229125 }, + { url = "https://files.pythonhosted.org/packages/0c/ed/e1fba02de17f4f76318b834425257c8ea297e415e12c68b4361f63e8ae92/rpds_py-0.27.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cdfe4bb2f9fe7458b7453ad3c33e726d6d1c7c0a72960bcc23800d77384e42df", size = 371402 }, + { url = "https://files.pythonhosted.org/packages/af/7c/e16b959b316048b55585a697e94add55a4ae0d984434d279ea83442e460d/rpds_py-0.27.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:8fabb8fd848a5f75a2324e4a84501ee3a5e3c78d8603f83475441866e60b94a3", size = 354084 }, + { url = "https://files.pythonhosted.org/packages/de/c1/ade645f55de76799fdd08682d51ae6724cb46f318573f18be49b1e040428/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eda8719d598f2f7f3e0f885cba8646644b55a187762bec091fa14a2b819746a9", size = 383090 }, + { url = "https://files.pythonhosted.org/packages/1f/27/89070ca9b856e52960da1472efcb6c20ba27cfe902f4f23ed095b9cfc61d/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3c64d07e95606ec402a0a1c511fe003873fa6af630bda59bac77fac8b4318ebc", size = 394519 }, + { url = "https://files.pythonhosted.org/packages/b3/28/be120586874ef906aa5aeeae95ae8df4184bc757e5b6bd1c729ccff45ed5/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:93a2ed40de81bcff59aabebb626562d48332f3d028ca2036f1d23cbb52750be4", size = 523817 }, + { url = "https://files.pythonhosted.org/packages/a8/ef/70cc197bc11cfcde02a86f36ac1eed15c56667c2ebddbdb76a47e90306da/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:387ce8c44ae94e0ec50532d9cb0edce17311024c9794eb196b90e1058aadeb66", size = 403240 }, + { url = "https://files.pythonhosted.org/packages/cf/35/46936cca449f7f518f2f4996e0e8344db4b57e2081e752441154089d2a5f/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aaf94f812c95b5e60ebaf8bfb1898a7d7cb9c1af5744d4a67fa47796e0465d4e", size = 385194 }, + { url = "https://files.pythonhosted.org/packages/e1/62/29c0d3e5125c3270b51415af7cbff1ec587379c84f55a5761cc9efa8cd06/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:4848ca84d6ded9b58e474dfdbad4b8bfb450344c0551ddc8d958bf4b36aa837c", size = 402086 }, + { url = "https://files.pythonhosted.org/packages/8f/66/03e1087679227785474466fdd04157fb793b3b76e3fcf01cbf4c693c1949/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2bde09cbcf2248b73c7c323be49b280180ff39fadcfe04e7b6f54a678d02a7cf", size = 419272 }, + { url = "https://files.pythonhosted.org/packages/6a/24/e3e72d265121e00b063aef3e3501e5b2473cf1b23511d56e529531acf01e/rpds_py-0.27.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:94c44ee01fd21c9058f124d2d4f0c9dc7634bec93cd4b38eefc385dabe71acbf", size = 560003 }, + { url = "https://files.pythonhosted.org/packages/26/ca/f5a344c534214cc2d41118c0699fffbdc2c1bc7046f2a2b9609765ab9c92/rpds_py-0.27.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:df8b74962e35c9249425d90144e721eed198e6555a0e22a563d29fe4486b51f6", size = 590482 }, + { url = "https://files.pythonhosted.org/packages/ce/08/4349bdd5c64d9d193c360aa9db89adeee6f6682ab8825dca0a3f535f434f/rpds_py-0.27.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:dc23e6820e3b40847e2f4a7726462ba0cf53089512abe9ee16318c366494c17a", size = 556523 }, + { url = "https://files.pythonhosted.org/packages/4e/ea/5463cd5048a7a2fcdae308b6e96432802132c141bfb9420260142632a0f1/rpds_py-0.27.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:aa8933159edc50be265ed22b401125c9eebff3171f570258854dbce3ecd55475", size = 371778 }, + { url = "https://files.pythonhosted.org/packages/0d/c8/f38c099db07f5114029c1467649d308543906933eebbc226d4527a5f4693/rpds_py-0.27.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a50431bf02583e21bf273c71b89d710e7a710ad5e39c725b14e685610555926f", size = 354394 }, + { url = "https://files.pythonhosted.org/packages/7d/79/b76f97704d9dd8ddbd76fed4c4048153a847c5d6003afe20a6b5c3339065/rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78af06ddc7fe5cc0e967085a9115accee665fb912c22a3f54bad70cc65b05fe6", size = 382348 }, + { url = "https://files.pythonhosted.org/packages/8a/3f/ef23d3c1be1b837b648a3016d5bbe7cfe711422ad110b4081c0a90ef5a53/rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:70d0738ef8fee13c003b100c2fbd667ec4f133468109b3472d249231108283a3", size = 394159 }, + { url = "https://files.pythonhosted.org/packages/74/8a/9e62693af1a34fd28b1a190d463d12407bd7cf561748cb4745845d9548d3/rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2f6fd8a1cea5bbe599b6e78a6e5ee08db434fc8ffea51ff201c8765679698b3", size = 522775 }, + { url = "https://files.pythonhosted.org/packages/36/0d/8d5bb122bf7a60976b54c5c99a739a3819f49f02d69df3ea2ca2aff47d5c/rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8177002868d1426305bb5de1e138161c2ec9eb2d939be38291d7c431c4712df8", size = 402633 }, + { url = "https://files.pythonhosted.org/packages/0f/0e/237948c1f425e23e0cf5a566d702652a6e55c6f8fbd332a1792eb7043daf/rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:008b839781d6c9bf3b6a8984d1d8e56f0ec46dc56df61fd669c49b58ae800400", size = 384867 }, + { url = "https://files.pythonhosted.org/packages/d6/0a/da0813efcd998d260cbe876d97f55b0f469ada8ba9cbc47490a132554540/rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:a55b9132bb1ade6c734ddd2759c8dc132aa63687d259e725221f106b83a0e485", size = 401791 }, + { url = "https://files.pythonhosted.org/packages/51/78/c6c9e8a8aaca416a6f0d1b6b4a6ee35b88fe2c5401d02235d0a056eceed2/rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a46fdec0083a26415f11d5f236b79fa1291c32aaa4a17684d82f7017a1f818b1", size = 419525 }, + { url = "https://files.pythonhosted.org/packages/a3/69/5af37e1d71487cf6d56dd1420dc7e0c2732c1b6ff612aa7a88374061c0a8/rpds_py-0.27.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:8a63b640a7845f2bdd232eb0d0a4a2dd939bcdd6c57e6bb134526487f3160ec5", size = 559255 }, + { url = "https://files.pythonhosted.org/packages/40/7f/8b7b136069ef7ac3960eda25d832639bdb163018a34c960ed042dd1707c8/rpds_py-0.27.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:7e32721e5d4922deaaf963469d795d5bde6093207c52fec719bd22e5d1bedbc4", size = 590384 }, + { url = "https://files.pythonhosted.org/packages/d8/06/c316d3f6ff03f43ccb0eba7de61376f8ec4ea850067dddfafe98274ae13c/rpds_py-0.27.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:2c426b99a068601b5f4623573df7a7c3d72e87533a2dd2253353a03e7502566c", size = 555959 }, + { url = "https://files.pythonhosted.org/packages/60/94/384cf54c430b9dac742bbd2ec26c23feb78ded0d43d6d78563a281aec017/rpds_py-0.27.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4fc9b7fe29478824361ead6e14e4f5aed570d477e06088826537e202d25fe859", size = 228784 }, +] + +[[package]] +name = "rpds-py" +version = "0.30.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/20/af/3f2f423103f1113b36230496629986e0ef7e199d2aa8392452b484b38ced/rpds_py-0.30.0.tar.gz", hash = "sha256:dd8ff7cf90014af0c0f787eea34794ebf6415242ee1d6fa91eaba725cc441e84", size = 69469 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/06/0c/0c411a0ec64ccb6d104dcabe0e713e05e153a9a2c3c2bd2b32ce412166fe/rpds_py-0.30.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:679ae98e00c0e8d68a7fda324e16b90fd5260945b45d3b824c892cec9eea3288", size = 370490 }, + { url = "https://files.pythonhosted.org/packages/19/6a/4ba3d0fb7297ebae71171822554abe48d7cab29c28b8f9f2c04b79988c05/rpds_py-0.30.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4cc2206b76b4f576934f0ed374b10d7ca5f457858b157ca52064bdfc26b9fc00", size = 359751 }, + { url = "https://files.pythonhosted.org/packages/cd/7c/e4933565ef7f7a0818985d87c15d9d273f1a649afa6a52ea35ad011195ea/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:389a2d49eded1896c3d48b0136ead37c48e221b391c052fba3f4055c367f60a6", size = 389696 }, + { url = "https://files.pythonhosted.org/packages/5e/01/6271a2511ad0815f00f7ed4390cf2567bec1d4b1da39e2c27a41e6e3b4de/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:32c8528634e1bf7121f3de08fa85b138f4e0dc47657866630611b03967f041d7", size = 403136 }, + { url = "https://files.pythonhosted.org/packages/55/64/c857eb7cd7541e9b4eee9d49c196e833128a55b89a9850a9c9ac33ccf897/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f207f69853edd6f6700b86efb84999651baf3789e78a466431df1331608e5324", size = 524699 }, + { url = "https://files.pythonhosted.org/packages/9c/ed/94816543404078af9ab26159c44f9e98e20fe47e2126d5d32c9d9948d10a/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:67b02ec25ba7a9e8fa74c63b6ca44cf5707f2fbfadae3ee8e7494297d56aa9df", size = 412022 }, + { url = "https://files.pythonhosted.org/packages/61/b5/707f6cf0066a6412aacc11d17920ea2e19e5b2f04081c64526eb35b5c6e7/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0e95f6819a19965ff420f65578bacb0b00f251fefe2c8b23347c37174271f3", size = 390522 }, + { url = "https://files.pythonhosted.org/packages/13/4e/57a85fda37a229ff4226f8cbcf09f2a455d1ed20e802ce5b2b4a7f5ed053/rpds_py-0.30.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:a452763cc5198f2f98898eb98f7569649fe5da666c2dc6b5ddb10fde5a574221", size = 404579 }, + { url = "https://files.pythonhosted.org/packages/f9/da/c9339293513ec680a721e0e16bf2bac3db6e5d7e922488de471308349bba/rpds_py-0.30.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e0b65193a413ccc930671c55153a03ee57cecb49e6227204b04fae512eb657a7", size = 421305 }, + { url = "https://files.pythonhosted.org/packages/f9/be/522cb84751114f4ad9d822ff5a1aa3c98006341895d5f084779b99596e5c/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:858738e9c32147f78b3ac24dc0edb6610000e56dc0f700fd5f651d0a0f0eb9ff", size = 572503 }, + { url = "https://files.pythonhosted.org/packages/a2/9b/de879f7e7ceddc973ea6e4629e9b380213a6938a249e94b0cdbcc325bb66/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:da279aa314f00acbb803da1e76fa18666778e8a8f83484fba94526da5de2cba7", size = 598322 }, + { url = "https://files.pythonhosted.org/packages/48/ac/f01fc22efec3f37d8a914fc1b2fb9bcafd56a299edbe96406f3053edea5a/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c64d38fb49b6cdeda16ab49e35fe0da2e1e9b34bc38bd78386530f218b37139", size = 560792 }, + { url = "https://files.pythonhosted.org/packages/e2/da/4e2b19d0f131f35b6146425f846563d0ce036763e38913d917187307a671/rpds_py-0.30.0-cp310-cp310-win32.whl", hash = "sha256:6de2a32a1665b93233cde140ff8b3467bdb9e2af2b91079f0333a0974d12d464", size = 221901 }, + { url = "https://files.pythonhosted.org/packages/96/cb/156d7a5cf4f78a7cc571465d8aec7a3c447c94f6749c5123f08438bcf7bc/rpds_py-0.30.0-cp310-cp310-win_amd64.whl", hash = "sha256:1726859cd0de969f88dc8673bdd954185b9104e05806be64bcd87badbe313169", size = 235823 }, + { url = "https://files.pythonhosted.org/packages/4d/6e/f964e88b3d2abee2a82c1ac8366da848fce1c6d834dc2132c3fda3970290/rpds_py-0.30.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a2bffea6a4ca9f01b3f8e548302470306689684e61602aa3d141e34da06cf425", size = 370157 }, + { url = "https://files.pythonhosted.org/packages/94/ba/24e5ebb7c1c82e74c4e4f33b2112a5573ddc703915b13a073737b59b86e0/rpds_py-0.30.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dc4f992dfe1e2bc3ebc7444f6c7051b4bc13cd8e33e43511e8ffd13bf407010d", size = 359676 }, + { url = "https://files.pythonhosted.org/packages/84/86/04dbba1b087227747d64d80c3b74df946b986c57af0a9f0c98726d4d7a3b/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:422c3cb9856d80b09d30d2eb255d0754b23e090034e1deb4083f8004bd0761e4", size = 389938 }, + { url = "https://files.pythonhosted.org/packages/42/bb/1463f0b1722b7f45431bdd468301991d1328b16cffe0b1c2918eba2c4eee/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07ae8a593e1c3c6b82ca3292efbe73c30b61332fd612e05abee07c79359f292f", size = 402932 }, + { url = "https://files.pythonhosted.org/packages/99/ee/2520700a5c1f2d76631f948b0736cdf9b0acb25abd0ca8e889b5c62ac2e3/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12f90dd7557b6bd57f40abe7747e81e0c0b119bef015ea7726e69fe550e394a4", size = 525830 }, + { url = "https://files.pythonhosted.org/packages/e0/ad/bd0331f740f5705cc555a5e17fdf334671262160270962e69a2bdef3bf76/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99b47d6ad9a6da00bec6aabe5a6279ecd3c06a329d4aa4771034a21e335c3a97", size = 412033 }, + { url = "https://files.pythonhosted.org/packages/f8/1e/372195d326549bb51f0ba0f2ecb9874579906b97e08880e7a65c3bef1a99/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33f559f3104504506a44bb666b93a33f5d33133765b0c216a5bf2f1e1503af89", size = 390828 }, + { url = "https://files.pythonhosted.org/packages/ab/2b/d88bb33294e3e0c76bc8f351a3721212713629ffca1700fa94979cb3eae8/rpds_py-0.30.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:946fe926af6e44f3697abbc305ea168c2c31d3e3ef1058cf68f379bf0335a78d", size = 404683 }, + { url = "https://files.pythonhosted.org/packages/50/32/c759a8d42bcb5289c1fac697cd92f6fe01a018dd937e62ae77e0e7f15702/rpds_py-0.30.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:495aeca4b93d465efde585977365187149e75383ad2684f81519f504f5c13038", size = 421583 }, + { url = "https://files.pythonhosted.org/packages/2b/81/e729761dbd55ddf5d84ec4ff1f47857f4374b0f19bdabfcf929164da3e24/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9a0ca5da0386dee0655b4ccdf46119df60e0f10da268d04fe7cc87886872ba7", size = 572496 }, + { url = "https://files.pythonhosted.org/packages/14/f6/69066a924c3557c9c30baa6ec3a0aa07526305684c6f86c696b08860726c/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8d6d1cc13664ec13c1b84241204ff3b12f9bb82464b8ad6e7a5d3486975c2eed", size = 598669 }, + { url = "https://files.pythonhosted.org/packages/5f/48/905896b1eb8a05630d20333d1d8ffd162394127b74ce0b0784ae04498d32/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3896fa1be39912cf0757753826bc8bdc8ca331a28a7c4ae46b7a21280b06bb85", size = 561011 }, + { url = "https://files.pythonhosted.org/packages/22/16/cd3027c7e279d22e5eb431dd3c0fbc677bed58797fe7581e148f3f68818b/rpds_py-0.30.0-cp311-cp311-win32.whl", hash = "sha256:55f66022632205940f1827effeff17c4fa7ae1953d2b74a8581baaefb7d16f8c", size = 221406 }, + { url = "https://files.pythonhosted.org/packages/fa/5b/e7b7aa136f28462b344e652ee010d4de26ee9fd16f1bfd5811f5153ccf89/rpds_py-0.30.0-cp311-cp311-win_amd64.whl", hash = "sha256:a51033ff701fca756439d641c0ad09a41d9242fa69121c7d8769604a0a629825", size = 236024 }, + { url = "https://files.pythonhosted.org/packages/14/a6/364bba985e4c13658edb156640608f2c9e1d3ea3c81b27aa9d889fff0e31/rpds_py-0.30.0-cp311-cp311-win_arm64.whl", hash = "sha256:47b0ef6231c58f506ef0b74d44e330405caa8428e770fec25329ed2cb971a229", size = 229069 }, + { url = "https://files.pythonhosted.org/packages/03/e7/98a2f4ac921d82f33e03f3835f5bf3a4a40aa1bfdc57975e74a97b2b4bdd/rpds_py-0.30.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a161f20d9a43006833cd7068375a94d035714d73a172b681d8881820600abfad", size = 375086 }, + { url = "https://files.pythonhosted.org/packages/4d/a1/bca7fd3d452b272e13335db8d6b0b3ecde0f90ad6f16f3328c6fb150c889/rpds_py-0.30.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6abc8880d9d036ecaafe709079969f56e876fcf107f7a8e9920ba6d5a3878d05", size = 359053 }, + { url = "https://files.pythonhosted.org/packages/65/1c/ae157e83a6357eceff62ba7e52113e3ec4834a84cfe07fa4b0757a7d105f/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca28829ae5f5d569bb62a79512c842a03a12576375d5ece7d2cadf8abe96ec28", size = 390763 }, + { url = "https://files.pythonhosted.org/packages/d4/36/eb2eb8515e2ad24c0bd43c3ee9cd74c33f7ca6430755ccdb240fd3144c44/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a1010ed9524c73b94d15919ca4d41d8780980e1765babf85f9a2f90d247153dd", size = 408951 }, + { url = "https://files.pythonhosted.org/packages/d6/65/ad8dc1784a331fabbd740ef6f71ce2198c7ed0890dab595adb9ea2d775a1/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8d1736cfb49381ba528cd5baa46f82fdc65c06e843dab24dd70b63d09121b3f", size = 514622 }, + { url = "https://files.pythonhosted.org/packages/63/8e/0cfa7ae158e15e143fe03993b5bcd743a59f541f5952e1546b1ac1b5fd45/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d948b135c4693daff7bc2dcfc4ec57237a29bd37e60c2fabf5aff2bbacf3e2f1", size = 414492 }, + { url = "https://files.pythonhosted.org/packages/60/1b/6f8f29f3f995c7ffdde46a626ddccd7c63aefc0efae881dc13b6e5d5bb16/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47f236970bccb2233267d89173d3ad2703cd36a0e2a6e92d0560d333871a3d23", size = 394080 }, + { url = "https://files.pythonhosted.org/packages/6d/d5/a266341051a7a3ca2f4b750a3aa4abc986378431fc2da508c5034d081b70/rpds_py-0.30.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:2e6ecb5a5bcacf59c3f912155044479af1d0b6681280048b338b28e364aca1f6", size = 408680 }, + { url = "https://files.pythonhosted.org/packages/10/3b/71b725851df9ab7a7a4e33cf36d241933da66040d195a84781f49c50490c/rpds_py-0.30.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a8fa71a2e078c527c3e9dc9fc5a98c9db40bcc8a92b4e8858e36d329f8684b51", size = 423589 }, + { url = "https://files.pythonhosted.org/packages/00/2b/e59e58c544dc9bd8bd8384ecdb8ea91f6727f0e37a7131baeff8d6f51661/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:73c67f2db7bc334e518d097c6d1e6fed021bbc9b7d678d6cc433478365d1d5f5", size = 573289 }, + { url = "https://files.pythonhosted.org/packages/da/3e/a18e6f5b460893172a7d6a680e86d3b6bc87a54c1f0b03446a3c8c7b588f/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5ba103fb455be00f3b1c2076c9d4264bfcb037c976167a6047ed82f23153f02e", size = 599737 }, + { url = "https://files.pythonhosted.org/packages/5c/e2/714694e4b87b85a18e2c243614974413c60aa107fd815b8cbc42b873d1d7/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7cee9c752c0364588353e627da8a7e808a66873672bcb5f52890c33fd965b394", size = 563120 }, + { url = "https://files.pythonhosted.org/packages/6f/ab/d5d5e3bcedb0a77f4f613706b750e50a5a3ba1c15ccd3665ecc636c968fd/rpds_py-0.30.0-cp312-cp312-win32.whl", hash = "sha256:1ab5b83dbcf55acc8b08fc62b796ef672c457b17dbd7820a11d6c52c06839bdf", size = 223782 }, + { url = "https://files.pythonhosted.org/packages/39/3b/f786af9957306fdc38a74cef405b7b93180f481fb48453a114bb6465744a/rpds_py-0.30.0-cp312-cp312-win_amd64.whl", hash = "sha256:a090322ca841abd453d43456ac34db46e8b05fd9b3b4ac0c78bcde8b089f959b", size = 240463 }, + { url = "https://files.pythonhosted.org/packages/f3/d2/b91dc748126c1559042cfe41990deb92c4ee3e2b415f6b5234969ffaf0cc/rpds_py-0.30.0-cp312-cp312-win_arm64.whl", hash = "sha256:669b1805bd639dd2989b281be2cfd951c6121b65e729d9b843e9639ef1fd555e", size = 230868 }, + { url = "https://files.pythonhosted.org/packages/ed/dc/d61221eb88ff410de3c49143407f6f3147acf2538c86f2ab7ce65ae7d5f9/rpds_py-0.30.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f83424d738204d9770830d35290ff3273fbb02b41f919870479fab14b9d303b2", size = 374887 }, + { url = "https://files.pythonhosted.org/packages/fd/32/55fb50ae104061dbc564ef15cc43c013dc4a9f4527a1f4d99baddf56fe5f/rpds_py-0.30.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e7536cd91353c5273434b4e003cbda89034d67e7710eab8761fd918ec6c69cf8", size = 358904 }, + { url = "https://files.pythonhosted.org/packages/58/70/faed8186300e3b9bdd138d0273109784eea2396c68458ed580f885dfe7ad/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2771c6c15973347f50fece41fc447c054b7ac2ae0502388ce3b6738cd366e3d4", size = 389945 }, + { url = "https://files.pythonhosted.org/packages/bd/a8/073cac3ed2c6387df38f71296d002ab43496a96b92c823e76f46b8af0543/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0a59119fc6e3f460315fe9d08149f8102aa322299deaa5cab5b40092345c2136", size = 407783 }, + { url = "https://files.pythonhosted.org/packages/77/57/5999eb8c58671f1c11eba084115e77a8899d6e694d2a18f69f0ba471ec8b/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76fec018282b4ead0364022e3c54b60bf368b9d926877957a8624b58419169b7", size = 515021 }, + { url = "https://files.pythonhosted.org/packages/e0/af/5ab4833eadc36c0a8ed2bc5c0de0493c04f6c06de223170bd0798ff98ced/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:692bef75a5525db97318e8cd061542b5a79812d711ea03dbc1f6f8dbb0c5f0d2", size = 414589 }, + { url = "https://files.pythonhosted.org/packages/b7/de/f7192e12b21b9e9a68a6d0f249b4af3fdcdff8418be0767a627564afa1f1/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9027da1ce107104c50c81383cae773ef5c24d296dd11c99e2629dbd7967a20c6", size = 394025 }, + { url = "https://files.pythonhosted.org/packages/91/c4/fc70cd0249496493500e7cc2de87504f5aa6509de1e88623431fec76d4b6/rpds_py-0.30.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:9cf69cdda1f5968a30a359aba2f7f9aa648a9ce4b580d6826437f2b291cfc86e", size = 408895 }, + { url = "https://files.pythonhosted.org/packages/58/95/d9275b05ab96556fefff73a385813eb66032e4c99f411d0795372d9abcea/rpds_py-0.30.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a4796a717bf12b9da9d3ad002519a86063dcac8988b030e405704ef7d74d2d9d", size = 422799 }, + { url = "https://files.pythonhosted.org/packages/06/c1/3088fc04b6624eb12a57eb814f0d4997a44b0d208d6cace713033ff1a6ba/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5d4c2aa7c50ad4728a094ebd5eb46c452e9cb7edbfdb18f9e1221f597a73e1e7", size = 572731 }, + { url = "https://files.pythonhosted.org/packages/d8/42/c612a833183b39774e8ac8fecae81263a68b9583ee343db33ab571a7ce55/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ba81a9203d07805435eb06f536d95a266c21e5b2dfbf6517748ca40c98d19e31", size = 599027 }, + { url = "https://files.pythonhosted.org/packages/5f/60/525a50f45b01d70005403ae0e25f43c0384369ad24ffe46e8d9068b50086/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:945dccface01af02675628334f7cf49c2af4c1c904748efc5cf7bbdf0b579f95", size = 563020 }, + { url = "https://files.pythonhosted.org/packages/0b/5d/47c4655e9bcd5ca907148535c10e7d489044243cc9941c16ed7cd53be91d/rpds_py-0.30.0-cp313-cp313-win32.whl", hash = "sha256:b40fb160a2db369a194cb27943582b38f79fc4887291417685f3ad693c5a1d5d", size = 223139 }, + { url = "https://files.pythonhosted.org/packages/f2/e1/485132437d20aa4d3e1d8b3fb5a5e65aa8139f1e097080c2a8443201742c/rpds_py-0.30.0-cp313-cp313-win_amd64.whl", hash = "sha256:806f36b1b605e2d6a72716f321f20036b9489d29c51c91f4dd29a3e3afb73b15", size = 240224 }, + { url = "https://files.pythonhosted.org/packages/24/95/ffd128ed1146a153d928617b0ef673960130be0009c77d8fbf0abe306713/rpds_py-0.30.0-cp313-cp313-win_arm64.whl", hash = "sha256:d96c2086587c7c30d44f31f42eae4eac89b60dabbac18c7669be3700f13c3ce1", size = 230645 }, + { url = "https://files.pythonhosted.org/packages/ff/1b/b10de890a0def2a319a2626334a7f0ae388215eb60914dbac8a3bae54435/rpds_py-0.30.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:eb0b93f2e5c2189ee831ee43f156ed34e2a89a78a66b98cadad955972548be5a", size = 364443 }, + { url = "https://files.pythonhosted.org/packages/0d/bf/27e39f5971dc4f305a4fb9c672ca06f290f7c4e261c568f3dea16a410d47/rpds_py-0.30.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:922e10f31f303c7c920da8981051ff6d8c1a56207dbdf330d9047f6d30b70e5e", size = 353375 }, + { url = "https://files.pythonhosted.org/packages/40/58/442ada3bba6e8e6615fc00483135c14a7538d2ffac30e2d933ccf6852232/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdc62c8286ba9bf7f47befdcea13ea0e26bf294bda99758fd90535cbaf408000", size = 383850 }, + { url = "https://files.pythonhosted.org/packages/14/14/f59b0127409a33c6ef6f5c1ebd5ad8e32d7861c9c7adfa9a624fc3889f6c/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:47f9a91efc418b54fb8190a6b4aa7813a23fb79c51f4bb84e418f5476c38b8db", size = 392812 }, + { url = "https://files.pythonhosted.org/packages/b3/66/e0be3e162ac299b3a22527e8913767d869e6cc75c46bd844aa43fb81ab62/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f3587eb9b17f3789ad50824084fa6f81921bbf9a795826570bda82cb3ed91f2", size = 517841 }, + { url = "https://files.pythonhosted.org/packages/3d/55/fa3b9cf31d0c963ecf1ba777f7cf4b2a2c976795ac430d24a1f43d25a6ba/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39c02563fc592411c2c61d26b6c5fe1e51eaa44a75aa2c8735ca88b0d9599daa", size = 408149 }, + { url = "https://files.pythonhosted.org/packages/60/ca/780cf3b1a32b18c0f05c441958d3758f02544f1d613abf9488cd78876378/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51a1234d8febafdfd33a42d97da7a43f5dcb120c1060e352a3fbc0c6d36e2083", size = 383843 }, + { url = "https://files.pythonhosted.org/packages/82/86/d5f2e04f2aa6247c613da0c1dd87fcd08fa17107e858193566048a1e2f0a/rpds_py-0.30.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:eb2c4071ab598733724c08221091e8d80e89064cd472819285a9ab0f24bcedb9", size = 396507 }, + { url = "https://files.pythonhosted.org/packages/4b/9a/453255d2f769fe44e07ea9785c8347edaf867f7026872e76c1ad9f7bed92/rpds_py-0.30.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6bdfdb946967d816e6adf9a3d8201bfad269c67efe6cefd7093ef959683c8de0", size = 414949 }, + { url = "https://files.pythonhosted.org/packages/a3/31/622a86cdc0c45d6df0e9ccb6becdba5074735e7033c20e401a6d9d0e2ca0/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c77afbd5f5250bf27bf516c7c4a016813eb2d3e116139aed0096940c5982da94", size = 565790 }, + { url = "https://files.pythonhosted.org/packages/1c/5d/15bbf0fb4a3f58a3b1c67855ec1efcc4ceaef4e86644665fff03e1b66d8d/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:61046904275472a76c8c90c9ccee9013d70a6d0f73eecefd38c1ae7c39045a08", size = 590217 }, + { url = "https://files.pythonhosted.org/packages/6d/61/21b8c41f68e60c8cc3b2e25644f0e3681926020f11d06ab0b78e3c6bbff1/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c5f36a861bc4b7da6516dbdf302c55313afa09b81931e8280361a4f6c9a2d27", size = 555806 }, + { url = "https://files.pythonhosted.org/packages/f9/39/7e067bb06c31de48de3eb200f9fc7c58982a4d3db44b07e73963e10d3be9/rpds_py-0.30.0-cp313-cp313t-win32.whl", hash = "sha256:3d4a69de7a3e50ffc214ae16d79d8fbb0922972da0356dcf4d0fdca2878559c6", size = 211341 }, + { url = "https://files.pythonhosted.org/packages/0a/4d/222ef0b46443cf4cf46764d9c630f3fe4abaa7245be9417e56e9f52b8f65/rpds_py-0.30.0-cp313-cp313t-win_amd64.whl", hash = "sha256:f14fc5df50a716f7ece6a80b6c78bb35ea2ca47c499e422aa4463455dd96d56d", size = 225768 }, + { url = "https://files.pythonhosted.org/packages/86/81/dad16382ebbd3d0e0328776d8fd7ca94220e4fa0798d1dc5e7da48cb3201/rpds_py-0.30.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:68f19c879420aa08f61203801423f6cd5ac5f0ac4ac82a2368a9fcd6a9a075e0", size = 362099 }, + { url = "https://files.pythonhosted.org/packages/2b/60/19f7884db5d5603edf3c6bce35408f45ad3e97e10007df0e17dd57af18f8/rpds_py-0.30.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ec7c4490c672c1a0389d319b3a9cfcd098dcdc4783991553c332a15acf7249be", size = 353192 }, + { url = "https://files.pythonhosted.org/packages/bf/c4/76eb0e1e72d1a9c4703c69607cec123c29028bff28ce41588792417098ac/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f251c812357a3fed308d684a5079ddfb9d933860fc6de89f2b7ab00da481e65f", size = 384080 }, + { url = "https://files.pythonhosted.org/packages/72/87/87ea665e92f3298d1b26d78814721dc39ed8d2c74b86e83348d6b48a6f31/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac98b175585ecf4c0348fd7b29c3864bda53b805c773cbf7bfdaffc8070c976f", size = 394841 }, + { url = "https://files.pythonhosted.org/packages/77/ad/7783a89ca0587c15dcbf139b4a8364a872a25f861bdb88ed99f9b0dec985/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3e62880792319dbeb7eb866547f2e35973289e7d5696c6e295476448f5b63c87", size = 516670 }, + { url = "https://files.pythonhosted.org/packages/5b/3c/2882bdac942bd2172f3da574eab16f309ae10a3925644e969536553cb4ee/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e7fc54e0900ab35d041b0601431b0a0eb495f0851a0639b6ef90f7741b39a18", size = 408005 }, + { url = "https://files.pythonhosted.org/packages/ce/81/9a91c0111ce1758c92516a3e44776920b579d9a7c09b2b06b642d4de3f0f/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47e77dc9822d3ad616c3d5759ea5631a75e5809d5a28707744ef79d7a1bcfcad", size = 382112 }, + { url = "https://files.pythonhosted.org/packages/cf/8e/1da49d4a107027e5fbc64daeab96a0706361a2918da10cb41769244b805d/rpds_py-0.30.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b4dc1a6ff022ff85ecafef7979a2c6eb423430e05f1165d6688234e62ba99a07", size = 399049 }, + { url = "https://files.pythonhosted.org/packages/df/5a/7ee239b1aa48a127570ec03becbb29c9d5a9eb092febbd1699d567cae859/rpds_py-0.30.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4559c972db3a360808309e06a74628b95eaccbf961c335c8fe0d590cf587456f", size = 415661 }, + { url = "https://files.pythonhosted.org/packages/70/ea/caa143cf6b772f823bc7929a45da1fa83569ee49b11d18d0ada7f5ee6fd6/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0ed177ed9bded28f8deb6ab40c183cd1192aa0de40c12f38be4d59cd33cb5c65", size = 565606 }, + { url = "https://files.pythonhosted.org/packages/64/91/ac20ba2d69303f961ad8cf55bf7dbdb4763f627291ba3d0d7d67333cced9/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ad1fa8db769b76ea911cb4e10f049d80bf518c104f15b3edb2371cc65375c46f", size = 591126 }, + { url = "https://files.pythonhosted.org/packages/21/20/7ff5f3c8b00c8a95f75985128c26ba44503fb35b8e0259d812766ea966c7/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:46e83c697b1f1c72b50e5ee5adb4353eef7406fb3f2043d64c33f20ad1c2fc53", size = 553371 }, + { url = "https://files.pythonhosted.org/packages/72/c7/81dadd7b27c8ee391c132a6b192111ca58d866577ce2d9b0ca157552cce0/rpds_py-0.30.0-cp314-cp314-win32.whl", hash = "sha256:ee454b2a007d57363c2dfd5b6ca4a5d7e2c518938f8ed3b706e37e5d470801ed", size = 215298 }, + { url = "https://files.pythonhosted.org/packages/3e/d2/1aaac33287e8cfb07aab2e6b8ac1deca62f6f65411344f1433c55e6f3eb8/rpds_py-0.30.0-cp314-cp314-win_amd64.whl", hash = "sha256:95f0802447ac2d10bcc69f6dc28fe95fdf17940367b21d34e34c737870758950", size = 228604 }, + { url = "https://files.pythonhosted.org/packages/e8/95/ab005315818cc519ad074cb7784dae60d939163108bd2b394e60dc7b5461/rpds_py-0.30.0-cp314-cp314-win_arm64.whl", hash = "sha256:613aa4771c99f03346e54c3f038e4cc574ac09a3ddfb0e8878487335e96dead6", size = 222391 }, + { url = "https://files.pythonhosted.org/packages/9e/68/154fe0194d83b973cdedcdcc88947a2752411165930182ae41d983dcefa6/rpds_py-0.30.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:7e6ecfcb62edfd632e56983964e6884851786443739dbfe3582947e87274f7cb", size = 364868 }, + { url = "https://files.pythonhosted.org/packages/83/69/8bbc8b07ec854d92a8b75668c24d2abcb1719ebf890f5604c61c9369a16f/rpds_py-0.30.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a1d0bc22a7cdc173fedebb73ef81e07faef93692b8c1ad3733b67e31e1b6e1b8", size = 353747 }, + { url = "https://files.pythonhosted.org/packages/ab/00/ba2e50183dbd9abcce9497fa5149c62b4ff3e22d338a30d690f9af970561/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d08f00679177226c4cb8c5265012eea897c8ca3b93f429e546600c971bcbae7", size = 383795 }, + { url = "https://files.pythonhosted.org/packages/05/6f/86f0272b84926bcb0e4c972262f54223e8ecc556b3224d281e6598fc9268/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5965af57d5848192c13534f90f9dd16464f3c37aaf166cc1da1cae1fd5a34898", size = 393330 }, + { url = "https://files.pythonhosted.org/packages/cb/e9/0e02bb2e6dc63d212641da45df2b0bf29699d01715913e0d0f017ee29438/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a4e86e34e9ab6b667c27f3211ca48f73dba7cd3d90f8d5b11be56e5dbc3fb4e", size = 518194 }, + { url = "https://files.pythonhosted.org/packages/ee/ca/be7bca14cf21513bdf9c0606aba17d1f389ea2b6987035eb4f62bd923f25/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d3e6b26f2c785d65cc25ef1e5267ccbe1b069c5c21b8cc724efee290554419", size = 408340 }, + { url = "https://files.pythonhosted.org/packages/c2/c7/736e00ebf39ed81d75544c0da6ef7b0998f8201b369acf842f9a90dc8fce/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:626a7433c34566535b6e56a1b39a7b17ba961e97ce3b80ec62e6f1312c025551", size = 383765 }, + { url = "https://files.pythonhosted.org/packages/4a/3f/da50dfde9956aaf365c4adc9533b100008ed31aea635f2b8d7b627e25b49/rpds_py-0.30.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:acd7eb3f4471577b9b5a41baf02a978e8bdeb08b4b355273994f8b87032000a8", size = 396834 }, + { url = "https://files.pythonhosted.org/packages/4e/00/34bcc2565b6020eab2623349efbdec810676ad571995911f1abdae62a3a0/rpds_py-0.30.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe5fa731a1fa8a0a56b0977413f8cacac1768dad38d16b3a296712709476fbd5", size = 415470 }, + { url = "https://files.pythonhosted.org/packages/8c/28/882e72b5b3e6f718d5453bd4d0d9cf8df36fddeb4ddbbab17869d5868616/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:74a3243a411126362712ee1524dfc90c650a503502f135d54d1b352bd01f2404", size = 565630 }, + { url = "https://files.pythonhosted.org/packages/3b/97/04a65539c17692de5b85c6e293520fd01317fd878ea1995f0367d4532fb1/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:3e8eeb0544f2eb0d2581774be4c3410356eba189529a6b3e36bbbf9696175856", size = 591148 }, + { url = "https://files.pythonhosted.org/packages/85/70/92482ccffb96f5441aab93e26c4d66489eb599efdcf96fad90c14bbfb976/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:dbd936cde57abfee19ab3213cf9c26be06d60750e60a8e4dd85d1ab12c8b1f40", size = 556030 }, + { url = "https://files.pythonhosted.org/packages/20/53/7c7e784abfa500a2b6b583b147ee4bb5a2b3747a9166bab52fec4b5b5e7d/rpds_py-0.30.0-cp314-cp314t-win32.whl", hash = "sha256:dc824125c72246d924f7f796b4f63c1e9dc810c7d9e2355864b3c3a73d59ade0", size = 211570 }, + { url = "https://files.pythonhosted.org/packages/d0/02/fa464cdfbe6b26e0600b62c528b72d8608f5cc49f96b8d6e38c95d60c676/rpds_py-0.30.0-cp314-cp314t-win_amd64.whl", hash = "sha256:27f4b0e92de5bfbc6f86e43959e6edd1425c33b5e69aab0984a72047f2bcf1e3", size = 226532 }, + { url = "https://files.pythonhosted.org/packages/69/71/3f34339ee70521864411f8b6992e7ab13ac30d8e4e3309e07c7361767d91/rpds_py-0.30.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c2262bdba0ad4fc6fb5545660673925c2d2a5d9e2e0fb603aad545427be0fc58", size = 372292 }, + { url = "https://files.pythonhosted.org/packages/57/09/f183df9b8f2d66720d2ef71075c59f7e1b336bec7ee4c48f0a2b06857653/rpds_py-0.30.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ee6af14263f25eedc3bb918a3c04245106a42dfd4f5c2285ea6f997b1fc3f89a", size = 362128 }, + { url = "https://files.pythonhosted.org/packages/7a/68/5c2594e937253457342e078f0cc1ded3dd7b2ad59afdbf2d354869110a02/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3adbb8179ce342d235c31ab8ec511e66c73faa27a47e076ccc92421add53e2bb", size = 391542 }, + { url = "https://files.pythonhosted.org/packages/49/5c/31ef1afd70b4b4fbdb2800249f34c57c64beb687495b10aec0365f53dfc4/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:250fa00e9543ac9b97ac258bd37367ff5256666122c2d0f2bc97577c60a1818c", size = 404004 }, + { url = "https://files.pythonhosted.org/packages/e3/63/0cfbea38d05756f3440ce6534d51a491d26176ac045e2707adc99bb6e60a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9854cf4f488b3d57b9aaeb105f06d78e5529d3145b1e4a41750167e8c213c6d3", size = 527063 }, + { url = "https://files.pythonhosted.org/packages/42/e6/01e1f72a2456678b0f618fc9a1a13f882061690893c192fcad9f2926553a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:993914b8e560023bc0a8bf742c5f303551992dcb85e247b1e5c7f4a7d145bda5", size = 413099 }, + { url = "https://files.pythonhosted.org/packages/b8/25/8df56677f209003dcbb180765520c544525e3ef21ea72279c98b9aa7c7fb/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58edca431fb9b29950807e301826586e5bbf24163677732429770a697ffe6738", size = 392177 }, + { url = "https://files.pythonhosted.org/packages/4a/b4/0a771378c5f16f8115f796d1f437950158679bcd2a7c68cf251cfb00ed5b/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:dea5b552272a944763b34394d04577cf0f9bd013207bc32323b5a89a53cf9c2f", size = 406015 }, + { url = "https://files.pythonhosted.org/packages/36/d8/456dbba0af75049dc6f63ff295a2f92766b9d521fa00de67a2bd6427d57a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ba3af48635eb83d03f6c9735dfb21785303e73d22ad03d489e88adae6eab8877", size = 423736 }, + { url = "https://files.pythonhosted.org/packages/13/64/b4d76f227d5c45a7e0b796c674fd81b0a6c4fbd48dc29271857d8219571c/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:dff13836529b921e22f15cb099751209a60009731a68519630a24d61f0b1b30a", size = 573981 }, + { url = "https://files.pythonhosted.org/packages/20/91/092bacadeda3edf92bf743cc96a7be133e13a39cdbfd7b5082e7ab638406/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:1b151685b23929ab7beec71080a8889d4d6d9fa9a983d213f07121205d48e2c4", size = 599782 }, + { url = "https://files.pythonhosted.org/packages/d1/b7/b95708304cd49b7b6f82fdd039f1748b66ec2b21d6a45180910802f1abf1/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ac37f9f516c51e5753f27dfdef11a88330f04de2d564be3991384b2f3535d02e", size = 562191 }, +] + +[[package]] +name = "scipy" +version = "1.13.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ae/00/48c2f661e2816ccf2ecd77982f6605b2950afe60f60a52b4cbbc2504aa8f/scipy-1.13.1.tar.gz", hash = "sha256:095a87a0312b08dfd6a6155cbbd310a8c51800fc931b8c0b84003014b874ed3c", size = 57210720 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/33/59/41b2529908c002ade869623b87eecff3e11e3ce62e996d0bdcb536984187/scipy-1.13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:20335853b85e9a49ff7572ab453794298bcf0354d8068c5f6775a0eabf350aca", size = 39328076 }, + { url = "https://files.pythonhosted.org/packages/d5/33/f1307601f492f764062ce7dd471a14750f3360e33cd0f8c614dae208492c/scipy-1.13.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d605e9c23906d1994f55ace80e0125c587f96c020037ea6aa98d01b4bd2e222f", size = 30306232 }, + { url = "https://files.pythonhosted.org/packages/c0/66/9cd4f501dd5ea03e4a4572ecd874936d0da296bd04d1c45ae1a4a75d9c3a/scipy-1.13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfa31f1def5c819b19ecc3a8b52d28ffdcc7ed52bb20c9a7589669dd3c250989", size = 33743202 }, + { url = "https://files.pythonhosted.org/packages/a3/ba/7255e5dc82a65adbe83771c72f384d99c43063648456796436c9a5585ec3/scipy-1.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26264b282b9da0952a024ae34710c2aff7d27480ee91a2e82b7b7073c24722f", size = 38577335 }, + { url = "https://files.pythonhosted.org/packages/49/a5/bb9ded8326e9f0cdfdc412eeda1054b914dfea952bda2097d174f8832cc0/scipy-1.13.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:eccfa1906eacc02de42d70ef4aecea45415f5be17e72b61bafcfd329bdc52e94", size = 38820728 }, + { url = "https://files.pythonhosted.org/packages/12/30/df7a8fcc08f9b4a83f5f27cfaaa7d43f9a2d2ad0b6562cced433e5b04e31/scipy-1.13.1-cp310-cp310-win_amd64.whl", hash = "sha256:2831f0dc9c5ea9edd6e51e6e769b655f08ec6db6e2e10f86ef39bd32eb11da54", size = 46210588 }, + { url = "https://files.pythonhosted.org/packages/b4/15/4a4bb1b15bbd2cd2786c4f46e76b871b28799b67891f23f455323a0cdcfb/scipy-1.13.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:27e52b09c0d3a1d5b63e1105f24177e544a222b43611aaf5bc44d4a0979e32f9", size = 39333805 }, + { url = "https://files.pythonhosted.org/packages/ba/92/42476de1af309c27710004f5cdebc27bec62c204db42e05b23a302cb0c9a/scipy-1.13.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:54f430b00f0133e2224c3ba42b805bfd0086fe488835effa33fa291561932326", size = 30317687 }, + { url = "https://files.pythonhosted.org/packages/80/ba/8be64fe225360a4beb6840f3cbee494c107c0887f33350d0a47d55400b01/scipy-1.13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e89369d27f9e7b0884ae559a3a956e77c02114cc60a6058b4e5011572eea9299", size = 33694638 }, + { url = "https://files.pythonhosted.org/packages/36/07/035d22ff9795129c5a847c64cb43c1fa9188826b59344fee28a3ab02e283/scipy-1.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a78b4b3345f1b6f68a763c6e25c0c9a23a9fd0f39f5f3d200efe8feda560a5fa", size = 38569931 }, + { url = "https://files.pythonhosted.org/packages/d9/10/f9b43de37e5ed91facc0cfff31d45ed0104f359e4f9a68416cbf4e790241/scipy-1.13.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45484bee6d65633752c490404513b9ef02475b4284c4cfab0ef946def50b3f59", size = 38838145 }, + { url = "https://files.pythonhosted.org/packages/4a/48/4513a1a5623a23e95f94abd675ed91cfb19989c58e9f6f7d03990f6caf3d/scipy-1.13.1-cp311-cp311-win_amd64.whl", hash = "sha256:5713f62f781eebd8d597eb3f88b8bf9274e79eeabf63afb4a737abc6c84ad37b", size = 46196227 }, + { url = "https://files.pythonhosted.org/packages/f2/7b/fb6b46fbee30fc7051913068758414f2721003a89dd9a707ad49174e3843/scipy-1.13.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5d72782f39716b2b3509cd7c33cdc08c96f2f4d2b06d51e52fb45a19ca0c86a1", size = 39357301 }, + { url = "https://files.pythonhosted.org/packages/dc/5a/2043a3bde1443d94014aaa41e0b50c39d046dda8360abd3b2a1d3f79907d/scipy-1.13.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:017367484ce5498445aade74b1d5ab377acdc65e27095155e448c88497755a5d", size = 30363348 }, + { url = "https://files.pythonhosted.org/packages/e7/cb/26e4a47364bbfdb3b7fb3363be6d8a1c543bcd70a7753ab397350f5f189a/scipy-1.13.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:949ae67db5fa78a86e8fa644b9a6b07252f449dcf74247108c50e1d20d2b4627", size = 33406062 }, + { url = "https://files.pythonhosted.org/packages/88/ab/6ecdc526d509d33814835447bbbeedbebdec7cca46ef495a61b00a35b4bf/scipy-1.13.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de3ade0e53bc1f21358aa74ff4830235d716211d7d077e340c7349bc3542e884", size = 38218311 }, + { url = "https://files.pythonhosted.org/packages/0b/00/9f54554f0f8318100a71515122d8f4f503b1a2c4b4cfab3b4b68c0eb08fa/scipy-1.13.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2ac65fb503dad64218c228e2dc2d0a0193f7904747db43014645ae139c8fad16", size = 38442493 }, + { url = "https://files.pythonhosted.org/packages/3e/df/963384e90733e08eac978cd103c34df181d1fec424de383cdc443f418dd4/scipy-1.13.1-cp312-cp312-win_amd64.whl", hash = "sha256:cdd7dacfb95fea358916410ec61bbc20440f7860333aee6d882bb8046264e949", size = 45910955 }, + { url = "https://files.pythonhosted.org/packages/7f/29/c2ea58c9731b9ecb30b6738113a95d147e83922986b34c685b8f6eefde21/scipy-1.13.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:436bbb42a94a8aeef855d755ce5a465479c721e9d684de76bf61a62e7c2b81d5", size = 39352927 }, + { url = "https://files.pythonhosted.org/packages/5c/c0/e71b94b20ccf9effb38d7147c0064c08c622309fd487b1b677771a97d18c/scipy-1.13.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:8335549ebbca860c52bf3d02f80784e91a004b71b059e3eea9678ba994796a24", size = 30324538 }, + { url = "https://files.pythonhosted.org/packages/6d/0f/aaa55b06d474817cea311e7b10aab2ea1fd5d43bc6a2861ccc9caec9f418/scipy-1.13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d533654b7d221a6a97304ab63c41c96473ff04459e404b83275b60aa8f4b7004", size = 33732190 }, + { url = "https://files.pythonhosted.org/packages/35/f5/d0ad1a96f80962ba65e2ce1de6a1e59edecd1f0a7b55990ed208848012e0/scipy-1.13.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637e98dcf185ba7f8e663e122ebf908c4702420477ae52a04f9908707456ba4d", size = 38612244 }, + { url = "https://files.pythonhosted.org/packages/8d/02/1165905f14962174e6569076bcc3315809ae1291ed14de6448cc151eedfd/scipy-1.13.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a014c2b3697bde71724244f63de2476925596c24285c7a637364761f8710891c", size = 38845637 }, + { url = "https://files.pythonhosted.org/packages/3e/77/dab54fe647a08ee4253963bcd8f9cf17509c8ca64d6335141422fe2e2114/scipy-1.13.1-cp39-cp39-win_amd64.whl", hash = "sha256:392e4ec766654852c25ebad4f64e4e584cf19820b980bc04960bca0b0cd6eaa2", size = 46227440 }, +] + +[[package]] +name = "scipy" +version = "1.15.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0f/37/6964b830433e654ec7485e45a00fc9a27cf868d622838f6b6d9c5ec0d532/scipy-1.15.3.tar.gz", hash = "sha256:eae3cf522bc7df64b42cad3925c876e1b0b6c35c1337c93e12c0f366f55b0eaf", size = 59419214 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/2f/4966032c5f8cc7e6a60f1b2e0ad686293b9474b65246b0c642e3ef3badd0/scipy-1.15.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:a345928c86d535060c9c2b25e71e87c39ab2f22fc96e9636bd74d1dbf9de448c", size = 38702770 }, + { url = "https://files.pythonhosted.org/packages/a0/6e/0c3bf90fae0e910c274db43304ebe25a6b391327f3f10b5dcc638c090795/scipy-1.15.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:ad3432cb0f9ed87477a8d97f03b763fd1d57709f1bbde3c9369b1dff5503b253", size = 30094511 }, + { url = "https://files.pythonhosted.org/packages/ea/b1/4deb37252311c1acff7f101f6453f0440794f51b6eacb1aad4459a134081/scipy-1.15.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:aef683a9ae6eb00728a542b796f52a5477b78252edede72b8327a886ab63293f", size = 22368151 }, + { url = "https://files.pythonhosted.org/packages/38/7d/f457626e3cd3c29b3a49ca115a304cebb8cc6f31b04678f03b216899d3c6/scipy-1.15.3-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:1c832e1bd78dea67d5c16f786681b28dd695a8cb1fb90af2e27580d3d0967e92", size = 25121732 }, + { url = "https://files.pythonhosted.org/packages/db/0a/92b1de4a7adc7a15dcf5bddc6e191f6f29ee663b30511ce20467ef9b82e4/scipy-1.15.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:263961f658ce2165bbd7b99fa5135195c3a12d9bef045345016b8b50c315cb82", size = 35547617 }, + { url = "https://files.pythonhosted.org/packages/8e/6d/41991e503e51fc1134502694c5fa7a1671501a17ffa12716a4a9151af3df/scipy-1.15.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e2abc762b0811e09a0d3258abee2d98e0c703eee49464ce0069590846f31d40", size = 37662964 }, + { url = "https://files.pythonhosted.org/packages/25/e1/3df8f83cb15f3500478c889be8fb18700813b95e9e087328230b98d547ff/scipy-1.15.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ed7284b21a7a0c8f1b6e5977ac05396c0d008b89e05498c8b7e8f4a1423bba0e", size = 37238749 }, + { url = "https://files.pythonhosted.org/packages/93/3e/b3257cf446f2a3533ed7809757039016b74cd6f38271de91682aa844cfc5/scipy-1.15.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5380741e53df2c566f4d234b100a484b420af85deb39ea35a1cc1be84ff53a5c", size = 40022383 }, + { url = "https://files.pythonhosted.org/packages/d1/84/55bc4881973d3f79b479a5a2e2df61c8c9a04fcb986a213ac9c02cfb659b/scipy-1.15.3-cp310-cp310-win_amd64.whl", hash = "sha256:9d61e97b186a57350f6d6fd72640f9e99d5a4a2b8fbf4b9ee9a841eab327dc13", size = 41259201 }, + { url = "https://files.pythonhosted.org/packages/96/ab/5cc9f80f28f6a7dff646c5756e559823614a42b1939d86dd0ed550470210/scipy-1.15.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:993439ce220d25e3696d1b23b233dd010169b62f6456488567e830654ee37a6b", size = 38714255 }, + { url = "https://files.pythonhosted.org/packages/4a/4a/66ba30abe5ad1a3ad15bfb0b59d22174012e8056ff448cb1644deccbfed2/scipy-1.15.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:34716e281f181a02341ddeaad584205bd2fd3c242063bd3423d61ac259ca7eba", size = 30111035 }, + { url = "https://files.pythonhosted.org/packages/4b/fa/a7e5b95afd80d24313307f03624acc65801846fa75599034f8ceb9e2cbf6/scipy-1.15.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3b0334816afb8b91dab859281b1b9786934392aa3d527cd847e41bb6f45bee65", size = 22384499 }, + { url = "https://files.pythonhosted.org/packages/17/99/f3aaddccf3588bb4aea70ba35328c204cadd89517a1612ecfda5b2dd9d7a/scipy-1.15.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:6db907c7368e3092e24919b5e31c76998b0ce1684d51a90943cb0ed1b4ffd6c1", size = 25152602 }, + { url = "https://files.pythonhosted.org/packages/56/c5/1032cdb565f146109212153339f9cb8b993701e9fe56b1c97699eee12586/scipy-1.15.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:721d6b4ef5dc82ca8968c25b111e307083d7ca9091bc38163fb89243e85e3889", size = 35503415 }, + { url = "https://files.pythonhosted.org/packages/bd/37/89f19c8c05505d0601ed5650156e50eb881ae3918786c8fd7262b4ee66d3/scipy-1.15.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39cb9c62e471b1bb3750066ecc3a3f3052b37751c7c3dfd0fd7e48900ed52982", size = 37652622 }, + { url = "https://files.pythonhosted.org/packages/7e/31/be59513aa9695519b18e1851bb9e487de66f2d31f835201f1b42f5d4d475/scipy-1.15.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:795c46999bae845966368a3c013e0e00947932d68e235702b5c3f6ea799aa8c9", size = 37244796 }, + { url = "https://files.pythonhosted.org/packages/10/c0/4f5f3eeccc235632aab79b27a74a9130c6c35df358129f7ac8b29f562ac7/scipy-1.15.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:18aaacb735ab38b38db42cb01f6b92a2d0d4b6aabefeb07f02849e47f8fb3594", size = 40047684 }, + { url = "https://files.pythonhosted.org/packages/ab/a7/0ddaf514ce8a8714f6ed243a2b391b41dbb65251affe21ee3077ec45ea9a/scipy-1.15.3-cp311-cp311-win_amd64.whl", hash = "sha256:ae48a786a28412d744c62fd7816a4118ef97e5be0bee968ce8f0a2fba7acf3bb", size = 41246504 }, + { url = "https://files.pythonhosted.org/packages/37/4b/683aa044c4162e10ed7a7ea30527f2cbd92e6999c10a8ed8edb253836e9c/scipy-1.15.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6ac6310fdbfb7aa6612408bd2f07295bcbd3fda00d2d702178434751fe48e019", size = 38766735 }, + { url = "https://files.pythonhosted.org/packages/7b/7e/f30be3d03de07f25dc0ec926d1681fed5c732d759ac8f51079708c79e680/scipy-1.15.3-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:185cd3d6d05ca4b44a8f1595af87f9c372bb6acf9c808e99aa3e9aa03bd98cf6", size = 30173284 }, + { url = "https://files.pythonhosted.org/packages/07/9c/0ddb0d0abdabe0d181c1793db51f02cd59e4901da6f9f7848e1f96759f0d/scipy-1.15.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:05dc6abcd105e1a29f95eada46d4a3f251743cfd7d3ae8ddb4088047f24ea477", size = 22446958 }, + { url = "https://files.pythonhosted.org/packages/af/43/0bce905a965f36c58ff80d8bea33f1f9351b05fad4beaad4eae34699b7a1/scipy-1.15.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:06efcba926324df1696931a57a176c80848ccd67ce6ad020c810736bfd58eb1c", size = 25242454 }, + { url = "https://files.pythonhosted.org/packages/56/30/a6f08f84ee5b7b28b4c597aca4cbe545535c39fe911845a96414700b64ba/scipy-1.15.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05045d8b9bfd807ee1b9f38761993297b10b245f012b11b13b91ba8945f7e45", size = 35210199 }, + { url = "https://files.pythonhosted.org/packages/0b/1f/03f52c282437a168ee2c7c14a1a0d0781a9a4a8962d84ac05c06b4c5b555/scipy-1.15.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:271e3713e645149ea5ea3e97b57fdab61ce61333f97cfae392c28ba786f9bb49", size = 37309455 }, + { url = "https://files.pythonhosted.org/packages/89/b1/fbb53137f42c4bf630b1ffdfc2151a62d1d1b903b249f030d2b1c0280af8/scipy-1.15.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6cfd56fc1a8e53f6e89ba3a7a7251f7396412d655bca2aa5611c8ec9a6784a1e", size = 36885140 }, + { url = "https://files.pythonhosted.org/packages/2e/2e/025e39e339f5090df1ff266d021892694dbb7e63568edcfe43f892fa381d/scipy-1.15.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0ff17c0bb1cb32952c09217d8d1eed9b53d1463e5f1dd6052c7857f83127d539", size = 39710549 }, + { url = "https://files.pythonhosted.org/packages/e6/eb/3bf6ea8ab7f1503dca3a10df2e4b9c3f6b3316df07f6c0ded94b281c7101/scipy-1.15.3-cp312-cp312-win_amd64.whl", hash = "sha256:52092bc0472cfd17df49ff17e70624345efece4e1a12b23783a1ac59a1b728ed", size = 40966184 }, + { url = "https://files.pythonhosted.org/packages/73/18/ec27848c9baae6e0d6573eda6e01a602e5649ee72c27c3a8aad673ebecfd/scipy-1.15.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2c620736bcc334782e24d173c0fdbb7590a0a436d2fdf39310a8902505008759", size = 38728256 }, + { url = "https://files.pythonhosted.org/packages/74/cd/1aef2184948728b4b6e21267d53b3339762c285a46a274ebb7863c9e4742/scipy-1.15.3-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:7e11270a000969409d37ed399585ee530b9ef6aa99d50c019de4cb01e8e54e62", size = 30109540 }, + { url = "https://files.pythonhosted.org/packages/5b/d8/59e452c0a255ec352bd0a833537a3bc1bfb679944c4938ab375b0a6b3a3e/scipy-1.15.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8c9ed3ba2c8a2ce098163a9bdb26f891746d02136995df25227a20e71c396ebb", size = 22383115 }, + { url = "https://files.pythonhosted.org/packages/08/f5/456f56bbbfccf696263b47095291040655e3cbaf05d063bdc7c7517f32ac/scipy-1.15.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:0bdd905264c0c9cfa74a4772cdb2070171790381a5c4d312c973382fc6eaf730", size = 25163884 }, + { url = "https://files.pythonhosted.org/packages/a2/66/a9618b6a435a0f0c0b8a6d0a2efb32d4ec5a85f023c2b79d39512040355b/scipy-1.15.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79167bba085c31f38603e11a267d862957cbb3ce018d8b38f79ac043bc92d825", size = 35174018 }, + { url = "https://files.pythonhosted.org/packages/b5/09/c5b6734a50ad4882432b6bb7c02baf757f5b2f256041da5df242e2d7e6b6/scipy-1.15.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9deabd6d547aee2c9a81dee6cc96c6d7e9a9b1953f74850c179f91fdc729cb7", size = 37269716 }, + { url = "https://files.pythonhosted.org/packages/77/0a/eac00ff741f23bcabd352731ed9b8995a0a60ef57f5fd788d611d43d69a1/scipy-1.15.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dde4fc32993071ac0c7dd2d82569e544f0bdaff66269cb475e0f369adad13f11", size = 36872342 }, + { url = "https://files.pythonhosted.org/packages/fe/54/4379be86dd74b6ad81551689107360d9a3e18f24d20767a2d5b9253a3f0a/scipy-1.15.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f77f853d584e72e874d87357ad70f44b437331507d1c311457bed8ed2b956126", size = 39670869 }, + { url = "https://files.pythonhosted.org/packages/87/2e/892ad2862ba54f084ffe8cc4a22667eaf9c2bcec6d2bff1d15713c6c0703/scipy-1.15.3-cp313-cp313-win_amd64.whl", hash = "sha256:b90ab29d0c37ec9bf55424c064312930ca5f4bde15ee8619ee44e69319aab163", size = 40988851 }, + { url = "https://files.pythonhosted.org/packages/1b/e9/7a879c137f7e55b30d75d90ce3eb468197646bc7b443ac036ae3fe109055/scipy-1.15.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3ac07623267feb3ae308487c260ac684b32ea35fd81e12845039952f558047b8", size = 38863011 }, + { url = "https://files.pythonhosted.org/packages/51/d1/226a806bbd69f62ce5ef5f3ffadc35286e9fbc802f606a07eb83bf2359de/scipy-1.15.3-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:6487aa99c2a3d509a5227d9a5e889ff05830a06b2ce08ec30df6d79db5fcd5c5", size = 30266407 }, + { url = "https://files.pythonhosted.org/packages/e5/9b/f32d1d6093ab9eeabbd839b0f7619c62e46cc4b7b6dbf05b6e615bbd4400/scipy-1.15.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:50f9e62461c95d933d5c5ef4a1f2ebf9a2b4e83b0db374cb3f1de104d935922e", size = 22540030 }, + { url = "https://files.pythonhosted.org/packages/e7/29/c278f699b095c1a884f29fda126340fcc201461ee8bfea5c8bdb1c7c958b/scipy-1.15.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:14ed70039d182f411ffc74789a16df3835e05dc469b898233a245cdfd7f162cb", size = 25218709 }, + { url = "https://files.pythonhosted.org/packages/24/18/9e5374b617aba742a990581373cd6b68a2945d65cc588482749ef2e64467/scipy-1.15.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a769105537aa07a69468a0eefcd121be52006db61cdd8cac8a0e68980bbb723", size = 34809045 }, + { url = "https://files.pythonhosted.org/packages/e1/fe/9c4361e7ba2927074360856db6135ef4904d505e9b3afbbcb073c4008328/scipy-1.15.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9db984639887e3dffb3928d118145ffe40eff2fa40cb241a306ec57c219ebbbb", size = 36703062 }, + { url = "https://files.pythonhosted.org/packages/b7/8e/038ccfe29d272b30086b25a4960f757f97122cb2ec42e62b460d02fe98e9/scipy-1.15.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:40e54d5c7e7ebf1aa596c374c49fa3135f04648a0caabcb66c52884b943f02b4", size = 36393132 }, + { url = "https://files.pythonhosted.org/packages/10/7e/5c12285452970be5bdbe8352c619250b97ebf7917d7a9a9e96b8a8140f17/scipy-1.15.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5e721fed53187e71d0ccf382b6bf977644c533e506c4d33c3fb24de89f5c3ed5", size = 38979503 }, + { url = "https://files.pythonhosted.org/packages/81/06/0a5e5349474e1cbc5757975b21bd4fad0e72ebf138c5592f191646154e06/scipy-1.15.3-cp313-cp313t-win_amd64.whl", hash = "sha256:76ad1fb5f8752eabf0fa02e4cc0336b4e8f021e2d5f061ed37d6d264db35e3ca", size = 40308097 }, +] + +[[package]] +name = "scipy" +version = "1.17.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", +] +dependencies = [ + { name = "numpy", version = "2.4.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7a/97/5a3609c4f8d58b039179648e62dd220f89864f56f7357f5d4f45c29eb2cc/scipy-1.17.1.tar.gz", hash = "sha256:95d8e012d8cb8816c226aef832200b1d45109ed4464303e997c5b13122b297c0", size = 30573822 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/75/b4ce781849931fef6fd529afa6b63711d5a733065722d0c3e2724af9e40a/scipy-1.17.1-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:1f95b894f13729334fb990162e911c9e5dc1ab390c58aa6cbecb389c5b5e28ec", size = 31613675 }, + { url = "https://files.pythonhosted.org/packages/f7/58/bccc2861b305abdd1b8663d6130c0b3d7cc22e8d86663edbc8401bfd40d4/scipy-1.17.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:e18f12c6b0bc5a592ed23d3f7b891f68fd7f8241d69b7883769eb5d5dfb52696", size = 28162057 }, + { url = "https://files.pythonhosted.org/packages/6d/ee/18146b7757ed4976276b9c9819108adbc73c5aad636e5353e20746b73069/scipy-1.17.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:a3472cfbca0a54177d0faa68f697d8ba4c80bbdc19908c3465556d9f7efce9ee", size = 20334032 }, + { url = "https://files.pythonhosted.org/packages/ec/e6/cef1cf3557f0c54954198554a10016b6a03b2ec9e22a4e1df734936bd99c/scipy-1.17.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:766e0dc5a616d026a3a1cffa379af959671729083882f50307e18175797b3dfd", size = 22709533 }, + { url = "https://files.pythonhosted.org/packages/4d/60/8804678875fc59362b0fb759ab3ecce1f09c10a735680318ac30da8cd76b/scipy-1.17.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:744b2bf3640d907b79f3fd7874efe432d1cf171ee721243e350f55234b4cec4c", size = 33062057 }, + { url = "https://files.pythonhosted.org/packages/09/7d/af933f0f6e0767995b4e2d705a0665e454d1c19402aa7e895de3951ebb04/scipy-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43af8d1f3bea642559019edfe64e9b11192a8978efbd1539d7bc2aaa23d92de4", size = 35349300 }, + { url = "https://files.pythonhosted.org/packages/b4/3d/7ccbbdcbb54c8fdc20d3b6930137c782a163fa626f0aef920349873421ba/scipy-1.17.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cd96a1898c0a47be4520327e01f874acfd61fb48a9420f8aa9f6483412ffa444", size = 35127333 }, + { url = "https://files.pythonhosted.org/packages/e8/19/f926cb11c42b15ba08e3a71e376d816ac08614f769b4f47e06c3580c836a/scipy-1.17.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4eb6c25dd62ee8d5edf68a8e1c171dd71c292fdae95d8aeb3dd7d7de4c364082", size = 37741314 }, + { url = "https://files.pythonhosted.org/packages/95/da/0d1df507cf574b3f224ccc3d45244c9a1d732c81dcb26b1e8a766ae271a8/scipy-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:d30e57c72013c2a4fe441c2fcb8e77b14e152ad48b5464858e07e2ad9fbfceff", size = 36607512 }, + { url = "https://files.pythonhosted.org/packages/68/7f/bdd79ceaad24b671543ffe0ef61ed8e659440eb683b66f033454dcee90eb/scipy-1.17.1-cp311-cp311-win_arm64.whl", hash = "sha256:9ecb4efb1cd6e8c4afea0daa91a87fbddbce1b99d2895d151596716c0b2e859d", size = 24599248 }, + { url = "https://files.pythonhosted.org/packages/35/48/b992b488d6f299dbe3f11a20b24d3dda3d46f1a635ede1c46b5b17a7b163/scipy-1.17.1-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:35c3a56d2ef83efc372eaec584314bd0ef2e2f0d2adb21c55e6ad5b344c0dcb8", size = 31610954 }, + { url = "https://files.pythonhosted.org/packages/b2/02/cf107b01494c19dc100f1d0b7ac3cc08666e96ba2d64db7626066cee895e/scipy-1.17.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:fcb310ddb270a06114bb64bbe53c94926b943f5b7f0842194d585c65eb4edd76", size = 28172662 }, + { url = "https://files.pythonhosted.org/packages/cf/a9/599c28631bad314d219cf9ffd40e985b24d603fc8a2f4ccc5ae8419a535b/scipy-1.17.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:cc90d2e9c7e5c7f1a482c9875007c095c3194b1cfedca3c2f3291cdc2bc7c086", size = 20344366 }, + { url = "https://files.pythonhosted.org/packages/35/f5/906eda513271c8deb5af284e5ef0206d17a96239af79f9fa0aebfe0e36b4/scipy-1.17.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:c80be5ede8f3f8eded4eff73cc99a25c388ce98e555b17d31da05287015ffa5b", size = 22704017 }, + { url = "https://files.pythonhosted.org/packages/da/34/16f10e3042d2f1d6b66e0428308ab52224b6a23049cb2f5c1756f713815f/scipy-1.17.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e19ebea31758fac5893a2ac360fedd00116cbb7628e650842a6691ba7ca28a21", size = 32927842 }, + { url = "https://files.pythonhosted.org/packages/01/8e/1e35281b8ab6d5d72ebe9911edcdffa3f36b04ed9d51dec6dd140396e220/scipy-1.17.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:02ae3b274fde71c5e92ac4d54bc06c42d80e399fec704383dcd99b301df37458", size = 35235890 }, + { url = "https://files.pythonhosted.org/packages/c5/5c/9d7f4c88bea6e0d5a4f1bc0506a53a00e9fcb198de372bfe4d3652cef482/scipy-1.17.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8a604bae87c6195d8b1045eddece0514d041604b14f2727bbc2b3020172045eb", size = 35003557 }, + { url = "https://files.pythonhosted.org/packages/65/94/7698add8f276dbab7a9de9fb6b0e02fc13ee61d51c7c3f85ac28b65e1239/scipy-1.17.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f590cd684941912d10becc07325a3eeb77886fe981415660d9265c4c418d0bea", size = 37625856 }, + { url = "https://files.pythonhosted.org/packages/a2/84/dc08d77fbf3d87d3ee27f6a0c6dcce1de5829a64f2eae85a0ecc1f0daa73/scipy-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:41b71f4a3a4cab9d366cd9065b288efc4d4f3c0b37a91a8e0947fb5bd7f31d87", size = 36549682 }, + { url = "https://files.pythonhosted.org/packages/bc/98/fe9ae9ffb3b54b62559f52dedaebe204b408db8109a8c66fdd04869e6424/scipy-1.17.1-cp312-cp312-win_arm64.whl", hash = "sha256:f4115102802df98b2b0db3cce5cb9b92572633a1197c77b7553e5203f284a5b3", size = 24547340 }, + { url = "https://files.pythonhosted.org/packages/76/27/07ee1b57b65e92645f219b37148a7e7928b82e2b5dbeccecb4dff7c64f0b/scipy-1.17.1-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:5e3c5c011904115f88a39308379c17f91546f77c1667cea98739fe0fccea804c", size = 31590199 }, + { url = "https://files.pythonhosted.org/packages/ec/ae/db19f8ab842e9b724bf5dbb7db29302a91f1e55bc4d04b1025d6d605a2c5/scipy-1.17.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:6fac755ca3d2c3edcb22f479fceaa241704111414831ddd3bc6056e18516892f", size = 28154001 }, + { url = "https://files.pythonhosted.org/packages/5b/58/3ce96251560107b381cbd6e8413c483bbb1228a6b919fa8652b0d4090e7f/scipy-1.17.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:7ff200bf9d24f2e4d5dc6ee8c3ac64d739d3a89e2326ba68aaf6c4a2b838fd7d", size = 20325719 }, + { url = "https://files.pythonhosted.org/packages/b2/83/15087d945e0e4d48ce2377498abf5ad171ae013232ae31d06f336e64c999/scipy-1.17.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4b400bdc6f79fa02a4d86640310dde87a21fba0c979efff5248908c6f15fad1b", size = 22683595 }, + { url = "https://files.pythonhosted.org/packages/b4/e0/e58fbde4a1a594c8be8114eb4aac1a55bcd6587047efc18a61eb1f5c0d30/scipy-1.17.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2b64ca7d4aee0102a97f3ba22124052b4bd2152522355073580bf4845e2550b6", size = 32896429 }, + { url = "https://files.pythonhosted.org/packages/f5/5f/f17563f28ff03c7b6799c50d01d5d856a1d55f2676f537ca8d28c7f627cd/scipy-1.17.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:581b2264fc0aa555f3f435a5944da7504ea3a065d7029ad60e7c3d1ae09c5464", size = 35203952 }, + { url = "https://files.pythonhosted.org/packages/8d/a5/9afd17de24f657fdfe4df9a3f1ea049b39aef7c06000c13db1530d81ccca/scipy-1.17.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:beeda3d4ae615106d7094f7e7cef6218392e4465cc95d25f900bebabfded0950", size = 34979063 }, + { url = "https://files.pythonhosted.org/packages/8b/13/88b1d2384b424bf7c924f2038c1c409f8d88bb2a8d49d097861dd64a57b2/scipy-1.17.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6609bc224e9568f65064cfa72edc0f24ee6655b47575954ec6339534b2798369", size = 37598449 }, + { url = "https://files.pythonhosted.org/packages/35/e5/d6d0e51fc888f692a35134336866341c08655d92614f492c6860dc45bb2c/scipy-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:37425bc9175607b0268f493d79a292c39f9d001a357bebb6b88fdfaff13f6448", size = 36510943 }, + { url = "https://files.pythonhosted.org/packages/2a/fd/3be73c564e2a01e690e19cc618811540ba5354c67c8680dce3281123fb79/scipy-1.17.1-cp313-cp313-win_arm64.whl", hash = "sha256:5cf36e801231b6a2059bf354720274b7558746f3b1a4efb43fcf557ccd484a87", size = 24545621 }, + { url = "https://files.pythonhosted.org/packages/6f/6b/17787db8b8114933a66f9dcc479a8272e4b4da75fe03b0c282f7b0ade8cd/scipy-1.17.1-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:d59c30000a16d8edc7e64152e30220bfbd724c9bbb08368c054e24c651314f0a", size = 31936708 }, + { url = "https://files.pythonhosted.org/packages/38/2e/524405c2b6392765ab1e2b722a41d5da33dc5c7b7278184a8ad29b6cb206/scipy-1.17.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:010f4333c96c9bb1a4516269e33cb5917b08ef2166d5556ca2fd9f082a9e6ea0", size = 28570135 }, + { url = "https://files.pythonhosted.org/packages/fd/c3/5bd7199f4ea8556c0c8e39f04ccb014ac37d1468e6cfa6a95c6b3562b76e/scipy-1.17.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:2ceb2d3e01c5f1d83c4189737a42d9cb2fc38a6eeed225e7515eef71ad301dce", size = 20741977 }, + { url = "https://files.pythonhosted.org/packages/d9/b8/8ccd9b766ad14c78386599708eb745f6b44f08400a5fd0ade7cf89b6fc93/scipy-1.17.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:844e165636711ef41f80b4103ed234181646b98a53c8f05da12ca5ca289134f6", size = 23029601 }, + { url = "https://files.pythonhosted.org/packages/6d/a0/3cb6f4d2fb3e17428ad2880333cac878909ad1a89f678527b5328b93c1d4/scipy-1.17.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:158dd96d2207e21c966063e1635b1063cd7787b627b6f07305315dd73d9c679e", size = 33019667 }, + { url = "https://files.pythonhosted.org/packages/f3/c3/2d834a5ac7bf3a0c806ad1508efc02dda3c8c61472a56132d7894c312dea/scipy-1.17.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:74cbb80d93260fe2ffa334efa24cb8f2f0f622a9b9febf8b483c0b865bfb3475", size = 35264159 }, + { url = "https://files.pythonhosted.org/packages/4d/77/d3ed4becfdbd217c52062fafe35a72388d1bd82c2d0ba5ca19d6fcc93e11/scipy-1.17.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:dbc12c9f3d185f5c737d801da555fb74b3dcfa1a50b66a1a93e09190f41fab50", size = 35102771 }, + { url = "https://files.pythonhosted.org/packages/bd/12/d19da97efde68ca1ee5538bb261d5d2c062f0c055575128f11a2730e3ac1/scipy-1.17.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:94055a11dfebe37c656e70317e1996dc197e1a15bbcc351bcdd4610e128fe1ca", size = 37665910 }, + { url = "https://files.pythonhosted.org/packages/06/1c/1172a88d507a4baaf72c5a09bb6c018fe2ae0ab622e5830b703a46cc9e44/scipy-1.17.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e30bdeaa5deed6bc27b4cc490823cd0347d7dae09119b8803ae576ea0ce52e4c", size = 36562980 }, + { url = "https://files.pythonhosted.org/packages/70/b0/eb757336e5a76dfa7911f63252e3b7d1de00935d7705cf772db5b45ec238/scipy-1.17.1-cp313-cp313t-win_arm64.whl", hash = "sha256:a720477885a9d2411f94a93d16f9d89bad0f28ca23c3f8daa521e2dcc3f44d49", size = 24856543 }, + { url = "https://files.pythonhosted.org/packages/cf/83/333afb452af6f0fd70414dc04f898647ee1423979ce02efa75c3b0f2c28e/scipy-1.17.1-cp314-cp314-macosx_10_14_x86_64.whl", hash = "sha256:a48a72c77a310327f6a3a920092fa2b8fd03d7deaa60f093038f22d98e096717", size = 31584510 }, + { url = "https://files.pythonhosted.org/packages/ed/a6/d05a85fd51daeb2e4ea71d102f15b34fedca8e931af02594193ae4fd25f7/scipy-1.17.1-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:45abad819184f07240d8a696117a7aacd39787af9e0b719d00285549ed19a1e9", size = 28170131 }, + { url = "https://files.pythonhosted.org/packages/db/7b/8624a203326675d7746a254083a187398090a179335b2e4a20e2ddc46e83/scipy-1.17.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:3fd1fcdab3ea951b610dc4cef356d416d5802991e7e32b5254828d342f7b7e0b", size = 20342032 }, + { url = "https://files.pythonhosted.org/packages/c9/35/2c342897c00775d688d8ff3987aced3426858fd89d5a0e26e020b660b301/scipy-1.17.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:7bdf2da170b67fdf10bca777614b1c7d96ae3ca5794fd9587dce41eb2966e866", size = 22678766 }, + { url = "https://files.pythonhosted.org/packages/ef/f2/7cdb8eb308a1a6ae1e19f945913c82c23c0c442a462a46480ce487fdc0ac/scipy-1.17.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:adb2642e060a6549c343603a3851ba76ef0b74cc8c079a9a58121c7ec9fe2350", size = 32957007 }, + { url = "https://files.pythonhosted.org/packages/0b/2e/7eea398450457ecb54e18e9d10110993fa65561c4f3add5e8eccd2b9cd41/scipy-1.17.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eee2cfda04c00a857206a4330f0c5e3e56535494e30ca445eb19ec624ae75118", size = 35221333 }, + { url = "https://files.pythonhosted.org/packages/d9/77/5b8509d03b77f093a0d52e606d3c4f79e8b06d1d38c441dacb1e26cacf46/scipy-1.17.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d2650c1fb97e184d12d8ba010493ee7b322864f7d3d00d3f9bb97d9c21de4068", size = 35042066 }, + { url = "https://files.pythonhosted.org/packages/f9/df/18f80fb99df40b4070328d5ae5c596f2f00fffb50167e31439e932f29e7d/scipy-1.17.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:08b900519463543aa604a06bec02461558a6e1cef8fdbb8098f77a48a83c8118", size = 37612763 }, + { url = "https://files.pythonhosted.org/packages/4b/39/f0e8ea762a764a9dc52aa7dabcfad51a354819de1f0d4652b6a1122424d6/scipy-1.17.1-cp314-cp314-win_amd64.whl", hash = "sha256:3877ac408e14da24a6196de0ddcace62092bfc12a83823e92e49e40747e52c19", size = 37290984 }, + { url = "https://files.pythonhosted.org/packages/7c/56/fe201e3b0f93d1a8bcf75d3379affd228a63d7e2d80ab45467a74b494947/scipy-1.17.1-cp314-cp314-win_arm64.whl", hash = "sha256:f8885db0bc2bffa59d5c1b72fad7a6a92d3e80e7257f967dd81abb553a90d293", size = 25192877 }, + { url = "https://files.pythonhosted.org/packages/96/ad/f8c414e121f82e02d76f310f16db9899c4fcde36710329502a6b2a3c0392/scipy-1.17.1-cp314-cp314t-macosx_10_14_x86_64.whl", hash = "sha256:1cc682cea2ae55524432f3cdff9e9a3be743d52a7443d0cba9017c23c87ae2f6", size = 31949750 }, + { url = "https://files.pythonhosted.org/packages/7c/b0/c741e8865d61b67c81e255f4f0a832846c064e426636cd7de84e74d209be/scipy-1.17.1-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:2040ad4d1795a0ae89bfc7e8429677f365d45aa9fd5e4587cf1ea737f927b4a1", size = 28585858 }, + { url = "https://files.pythonhosted.org/packages/ed/1b/3985219c6177866628fa7c2595bfd23f193ceebbe472c98a08824b9466ff/scipy-1.17.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:131f5aaea57602008f9822e2115029b55d4b5f7c070287699fe45c661d051e39", size = 20757723 }, + { url = "https://files.pythonhosted.org/packages/c0/19/2a04aa25050d656d6f7b9e7b685cc83d6957fb101665bfd9369ca6534563/scipy-1.17.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:9cdc1a2fcfd5c52cfb3045feb399f7b3ce822abdde3a193a6b9a60b3cb5854ca", size = 23043098 }, + { url = "https://files.pythonhosted.org/packages/86/f1/3383beb9b5d0dbddd030335bf8a8b32d4317185efe495374f134d8be6cce/scipy-1.17.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e3dcd57ab780c741fde8dc68619de988b966db759a3c3152e8e9142c26295ad", size = 33030397 }, + { url = "https://files.pythonhosted.org/packages/41/68/8f21e8a65a5a03f25a79165ec9d2b28c00e66dc80546cf5eb803aeeff35b/scipy-1.17.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a9956e4d4f4a301ebf6cde39850333a6b6110799d470dbbb1e25326ac447f52a", size = 35281163 }, + { url = "https://files.pythonhosted.org/packages/84/8d/c8a5e19479554007a5632ed7529e665c315ae7492b4f946b0deb39870e39/scipy-1.17.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:a4328d245944d09fd639771de275701ccadf5f781ba0ff092ad141e017eccda4", size = 35116291 }, + { url = "https://files.pythonhosted.org/packages/52/52/e57eceff0e342a1f50e274264ed47497b59e6a4e3118808ee58ddda7b74a/scipy-1.17.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a77cbd07b940d326d39a1d1b37817e2ee4d79cb30e7338f3d0cddffae70fcaa2", size = 37682317 }, + { url = "https://files.pythonhosted.org/packages/11/2f/b29eafe4a3fbc3d6de9662b36e028d5f039e72d345e05c250e121a230dd4/scipy-1.17.1-cp314-cp314t-win_amd64.whl", hash = "sha256:eb092099205ef62cd1782b006658db09e2fed75bffcae7cc0d44052d8aa0f484", size = 37345327 }, + { url = "https://files.pythonhosted.org/packages/07/39/338d9219c4e87f3e708f18857ecd24d22a0c3094752393319553096b98af/scipy-1.17.1-cp314-cp314t-win_arm64.whl", hash = "sha256:200e1050faffacc162be6a486a984a0497866ec54149a01270adc8a59b7c7d21", size = 25489165 }, +] + +[[package]] +name = "send2trash" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c5/f0/184b4b5f8d00f2a92cf96eec8967a3d550b52cf94362dad1100df9e48d57/send2trash-2.1.0.tar.gz", hash = "sha256:1c72b39f09457db3c05ce1d19158c2cbef4c32b8bedd02c155e49282b7ea7459", size = 17255 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1c/78/504fdd027da3b84ff1aecd9f6957e65f35134534ccc6da8628eb71e76d3f/send2trash-2.1.0-py3-none-any.whl", hash = "sha256:0da2f112e6d6bb22de6aa6daa7e144831a4febf2a87261451c4ad849fe9a873c", size = 17610 }, +] + +[[package]] +name = "setuptools" +version = "82.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4f/db/cfac1baf10650ab4d1c111714410d2fbb77ac5a616db26775db562c8fab2/setuptools-82.0.1.tar.gz", hash = "sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9", size = 1152316 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl", hash = "sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb", size = 1006223 }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 }, +] + +[[package]] +name = "snowballstemmer" +version = "3.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/75/a7/9810d872919697c9d01295633f5d574fb416d47e535f258272ca1f01f447/snowballstemmer-3.0.1.tar.gz", hash = "sha256:6d5eeeec8e9f84d4d56b847692bacf79bc2c8e90c7f80ca4444ff8b6f2e52895", size = 105575 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl", hash = "sha256:6cd7b3897da8d6c9ffb968a6781fa6532dce9c3618a4b127d920dab764a19064", size = 103274 }, +] + +[[package]] +name = "soupsieve" +version = "2.8.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7b/ae/2d9c981590ed9999a0d91755b47fc74f74de286b0f5cee14c9269041e6c4/soupsieve-2.8.3.tar.gz", hash = "sha256:3267f1eeea4251fb42728b6dfb746edc9acaffc4a45b27e19450b676586e8349", size = 118627 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl", hash = "sha256:ed64f2ba4eebeab06cc4962affce381647455978ffc1e36bb79a545b91f45a95", size = 37016 }, +] + +[[package]] +name = "sphinx" +version = "7.4.7" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "alabaster", version = "0.7.16", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "babel", marker = "python_full_version < '3.10'" }, + { name = "colorama", marker = "python_full_version < '3.10' and sys_platform == 'win32'" }, + { name = "docutils", version = "0.21.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "imagesize", version = "1.5.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, + { name = "jinja2", marker = "python_full_version < '3.10'" }, + { name = "packaging", marker = "python_full_version < '3.10'" }, + { name = "pygments", marker = "python_full_version < '3.10'" }, + { name = "requests", version = "2.32.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "snowballstemmer", marker = "python_full_version < '3.10'" }, + { name = "sphinxcontrib-applehelp", marker = "python_full_version < '3.10'" }, + { name = "sphinxcontrib-devhelp", marker = "python_full_version < '3.10'" }, + { name = "sphinxcontrib-htmlhelp", marker = "python_full_version < '3.10'" }, + { name = "sphinxcontrib-jsmath", marker = "python_full_version < '3.10'" }, + { name = "sphinxcontrib-qthelp", marker = "python_full_version < '3.10'" }, + { name = "sphinxcontrib-serializinghtml", marker = "python_full_version < '3.10'" }, + { name = "tomli", marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5b/be/50e50cb4f2eff47df05673d361095cafd95521d2a22521b920c67a372dcb/sphinx-7.4.7.tar.gz", hash = "sha256:242f92a7ea7e6c5b406fdc2615413890ba9f699114a9c09192d7dfead2ee9cfe", size = 8067911 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/ef/153f6803c5d5f8917dbb7f7fcf6d34a871ede3296fa89c2c703f5f8a6c8e/sphinx-7.4.7-py3-none-any.whl", hash = "sha256:c2419e2135d11f1951cd994d6eb18a1835bd8fdd8429f9ca375dc1f3281bd239", size = 3401624 }, +] + +[[package]] +name = "sphinx" +version = "8.1.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "alabaster", version = "1.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "babel", marker = "python_full_version == '3.10.*'" }, + { name = "colorama", marker = "python_full_version == '3.10.*' and sys_platform == 'win32'" }, + { name = "docutils", version = "0.21.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "imagesize", version = "2.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "jinja2", marker = "python_full_version == '3.10.*'" }, + { name = "packaging", marker = "python_full_version == '3.10.*'" }, + { name = "pygments", marker = "python_full_version == '3.10.*'" }, + { name = "requests", version = "2.33.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "snowballstemmer", marker = "python_full_version == '3.10.*'" }, + { name = "sphinxcontrib-applehelp", marker = "python_full_version == '3.10.*'" }, + { name = "sphinxcontrib-devhelp", marker = "python_full_version == '3.10.*'" }, + { name = "sphinxcontrib-htmlhelp", marker = "python_full_version == '3.10.*'" }, + { name = "sphinxcontrib-jsmath", marker = "python_full_version == '3.10.*'" }, + { name = "sphinxcontrib-qthelp", marker = "python_full_version == '3.10.*'" }, + { name = "sphinxcontrib-serializinghtml", marker = "python_full_version == '3.10.*'" }, + { name = "tomli", marker = "python_full_version == '3.10.*'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/be0b61178fe2cdcb67e2a92fc9ebb488e3c51c4f74a36a7824c0adf23425/sphinx-8.1.3.tar.gz", hash = "sha256:43c1911eecb0d3e161ad78611bc905d1ad0e523e4ddc202a58a821773dc4c927", size = 8184611 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/26/60/1ddff83a56d33aaf6f10ec8ce84b4c007d9368b21008876fceda7e7381ef/sphinx-8.1.3-py3-none-any.whl", hash = "sha256:09719015511837b76bf6e03e42eb7595ac8c2e41eeb9c29c5b755c6b677992a2", size = 3487125 }, +] + +[[package]] +name = "sphinx" +version = "9.0.4" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.11.*'", +] +dependencies = [ + { name = "alabaster", version = "1.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, + { name = "babel", marker = "python_full_version == '3.11.*'" }, + { name = "colorama", marker = "python_full_version == '3.11.*' and sys_platform == 'win32'" }, + { name = "docutils", version = "0.22.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, + { name = "imagesize", version = "2.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, + { name = "jinja2", marker = "python_full_version == '3.11.*'" }, + { name = "packaging", marker = "python_full_version == '3.11.*'" }, + { name = "pygments", marker = "python_full_version == '3.11.*'" }, + { name = "requests", version = "2.33.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, + { name = "roman-numerals", marker = "python_full_version == '3.11.*'" }, + { name = "snowballstemmer", marker = "python_full_version == '3.11.*'" }, + { name = "sphinxcontrib-applehelp", marker = "python_full_version == '3.11.*'" }, + { name = "sphinxcontrib-devhelp", marker = "python_full_version == '3.11.*'" }, + { name = "sphinxcontrib-htmlhelp", marker = "python_full_version == '3.11.*'" }, + { name = "sphinxcontrib-jsmath", marker = "python_full_version == '3.11.*'" }, + { name = "sphinxcontrib-qthelp", marker = "python_full_version == '3.11.*'" }, + { name = "sphinxcontrib-serializinghtml", marker = "python_full_version == '3.11.*'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/50/a8c6ccc36d5eacdfd7913ddccd15a9cee03ecafc5ee2bc40e1f168d85022/sphinx-9.0.4.tar.gz", hash = "sha256:594ef59d042972abbc581d8baa577404abe4e6c3b04ef61bd7fc2acbd51f3fa3", size = 8710502 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl", hash = "sha256:5bebc595a5e943ea248b99c13814c1c5e10b3ece718976824ffa7959ff95fffb", size = 3917713 }, +] + +[[package]] +name = "sphinx" +version = "9.1.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", +] +dependencies = [ + { name = "alabaster", version = "1.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "babel", marker = "python_full_version >= '3.12'" }, + { name = "colorama", marker = "python_full_version >= '3.12' and sys_platform == 'win32'" }, + { name = "docutils", version = "0.22.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "imagesize", version = "2.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "jinja2", marker = "python_full_version >= '3.12'" }, + { name = "packaging", marker = "python_full_version >= '3.12'" }, + { name = "pygments", marker = "python_full_version >= '3.12'" }, + { name = "requests", version = "2.33.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "roman-numerals", marker = "python_full_version >= '3.12'" }, + { name = "snowballstemmer", marker = "python_full_version >= '3.12'" }, + { name = "sphinxcontrib-applehelp", marker = "python_full_version >= '3.12'" }, + { name = "sphinxcontrib-devhelp", marker = "python_full_version >= '3.12'" }, + { name = "sphinxcontrib-htmlhelp", marker = "python_full_version >= '3.12'" }, + { name = "sphinxcontrib-jsmath", marker = "python_full_version >= '3.12'" }, + { name = "sphinxcontrib-qthelp", marker = "python_full_version >= '3.12'" }, + { name = "sphinxcontrib-serializinghtml", marker = "python_full_version >= '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cd/bd/f08eb0f4eed5c83f1ba2a3bd18f7745a2b1525fad70660a1c00224ec468a/sphinx-9.1.0.tar.gz", hash = "sha256:7741722357dd75f8190766926071fed3bdc211c74dd2d7d4df5404da95930ddb", size = 8718324 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl", hash = "sha256:c84fdd4e782504495fe4f2c0b3413d6c2bf388589bb352d439b2a3bb99991978", size = 3921742 }, +] + +[[package]] +name = "sphinxcontrib-applehelp" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ba/6e/b837e84a1a704953c62ef8776d45c3e8d759876b4a84fe14eba2859106fe/sphinxcontrib_applehelp-2.0.0.tar.gz", hash = "sha256:2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1", size = 20053 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl", hash = "sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5", size = 119300 }, +] + +[[package]] +name = "sphinxcontrib-devhelp" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/d2/5beee64d3e4e747f316bae86b55943f51e82bb86ecd325883ef65741e7da/sphinxcontrib_devhelp-2.0.0.tar.gz", hash = "sha256:411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad", size = 12967 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl", hash = "sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2", size = 82530 }, +] + +[[package]] +name = "sphinxcontrib-htmlhelp" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/93/983afd9aa001e5201eab16b5a444ed5b9b0a7a010541e0ddfbbfd0b2470c/sphinxcontrib_htmlhelp-2.1.0.tar.gz", hash = "sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9", size = 22617 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", hash = "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8", size = 98705 }, +] + +[[package]] +name = "sphinxcontrib-jsmath" +version = "1.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/e8/9ed3830aeed71f17c026a07a5097edcf44b692850ef215b161b8ad875729/sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8", size = 5787 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178", size = 5071 }, +] + +[[package]] +name = "sphinxcontrib-qthelp" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/68/bc/9104308fc285eb3e0b31b67688235db556cd5b0ef31d96f30e45f2e51cae/sphinxcontrib_qthelp-2.0.0.tar.gz", hash = "sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab", size = 17165 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl", hash = "sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb", size = 88743 }, +] + +[[package]] +name = "sphinxcontrib-serializinghtml" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3b/44/6716b257b0aa6bfd51a1b31665d1c205fb12cb5ad56de752dfa15657de2f/sphinxcontrib_serializinghtml-2.0.0.tar.gz", hash = "sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d", size = 16080 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", hash = "sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331", size = 92072 }, +] + +[[package]] +name = "stack-data" +version = "0.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "asttokens" }, + { name = "executing" }, + { name = "pure-eval" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521 }, +] + +[[package]] +name = "terminado" +version = "0.18.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ptyprocess", marker = "os_name != 'nt'" }, + { name = "pywinpty", marker = "os_name == 'nt'" }, + { name = "tornado" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8a/11/965c6fd8e5cc254f1fe142d547387da17a8ebfd75a3455f637c663fb38a0/terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e", size = 32701 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/9e/2064975477fdc887e47ad42157e214526dcad8f317a948dee17e1659a62f/terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0", size = 14154 }, +] + +[[package]] +name = "tinycss2" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "webencodings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7a/fd/7a5ee21fd08ff70d3d33a5781c255cbe779659bd03278feb98b19ee550f4/tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7", size = 87085 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289", size = 26610 }, +] + +[[package]] +name = "tomli" +version = "2.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/11/db3d5885d8528263d8adc260bb2d28ebf1270b96e98f0e0268d32b8d9900/tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30", size = 154704 }, + { url = "https://files.pythonhosted.org/packages/6d/f7/675db52c7e46064a9aa928885a9b20f4124ecb9bc2e1ce74c9106648d202/tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a", size = 149454 }, + { url = "https://files.pythonhosted.org/packages/61/71/81c50943cf953efa35bce7646caab3cf457a7d8c030b27cfb40d7235f9ee/tomli-2.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076", size = 237561 }, + { url = "https://files.pythonhosted.org/packages/48/c1/f41d9cb618acccca7df82aaf682f9b49013c9397212cb9f53219e3abac37/tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9", size = 243824 }, + { url = "https://files.pythonhosted.org/packages/22/e4/5a816ecdd1f8ca51fb756ef684b90f2780afc52fc67f987e3c61d800a46d/tomli-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c", size = 242227 }, + { url = "https://files.pythonhosted.org/packages/6b/49/2b2a0ef529aa6eec245d25f0c703e020a73955ad7edf73e7f54ddc608aa5/tomli-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc", size = 247859 }, + { url = "https://files.pythonhosted.org/packages/83/bd/6c1a630eaca337e1e78c5903104f831bda934c426f9231429396ce3c3467/tomli-2.4.1-cp311-cp311-win32.whl", hash = "sha256:ff2983983d34813c1aeb0fa89091e76c3a22889ee83ab27c5eeb45100560c049", size = 97204 }, + { url = "https://files.pythonhosted.org/packages/42/59/71461df1a885647e10b6bb7802d0b8e66480c61f3f43079e0dcd315b3954/tomli-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e", size = 108084 }, + { url = "https://files.pythonhosted.org/packages/b8/83/dceca96142499c069475b790e7913b1044c1a4337e700751f48ed723f883/tomli-2.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:c2541745709bad0264b7d4705ad453b76ccd191e64aa6f0fc66b69a293a45ece", size = 95285 }, + { url = "https://files.pythonhosted.org/packages/c1/ba/42f134a3fe2b370f555f44b1d72feebb94debcab01676bf918d0cb70e9aa/tomli-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c742f741d58a28940ce01d58f0ab2ea3ced8b12402f162f4d534dfe18ba1cd6a", size = 155924 }, + { url = "https://files.pythonhosted.org/packages/dc/c7/62d7a17c26487ade21c5422b646110f2162f1fcc95980ef7f63e73c68f14/tomli-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7f86fd587c4ed9dd76f318225e7d9b29cfc5a9d43de44e5754db8d1128487085", size = 150018 }, + { url = "https://files.pythonhosted.org/packages/5c/05/79d13d7c15f13bdef410bdd49a6485b1c37d28968314eabee452c22a7fda/tomli-2.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff18e6a727ee0ab0388507b89d1bc6a22b138d1e2fa56d1ad494586d61d2eae9", size = 244948 }, + { url = "https://files.pythonhosted.org/packages/10/90/d62ce007a1c80d0b2c93e02cab211224756240884751b94ca72df8a875ca/tomli-2.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:136443dbd7e1dee43c68ac2694fde36b2849865fa258d39bf822c10e8068eac5", size = 253341 }, + { url = "https://files.pythonhosted.org/packages/1a/7e/caf6496d60152ad4ed09282c1885cca4eea150bfd007da84aea07bcc0a3e/tomli-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e262d41726bc187e69af7825504c933b6794dc3fbd5945e41a79bb14c31f585", size = 248159 }, + { url = "https://files.pythonhosted.org/packages/99/e7/c6f69c3120de34bbd882c6fba7975f3d7a746e9218e56ab46a1bc4b42552/tomli-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5cb41aa38891e073ee49d55fbc7839cfdb2bc0e600add13874d048c94aadddd1", size = 253290 }, + { url = "https://files.pythonhosted.org/packages/d6/2f/4a3c322f22c5c66c4b836ec58211641a4067364f5dcdd7b974b4c5da300c/tomli-2.4.1-cp312-cp312-win32.whl", hash = "sha256:da25dc3563bff5965356133435b757a795a17b17d01dbc0f42fb32447ddfd917", size = 98141 }, + { url = "https://files.pythonhosted.org/packages/24/22/4daacd05391b92c55759d55eaee21e1dfaea86ce5c571f10083360adf534/tomli-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:52c8ef851d9a240f11a88c003eacb03c31fc1c9c4ec64a99a0f922b93874fda9", size = 108847 }, + { url = "https://files.pythonhosted.org/packages/68/fd/70e768887666ddd9e9f5d85129e84910f2db2796f9096aa02b721a53098d/tomli-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:f758f1b9299d059cc3f6546ae2af89670cb1c4d48ea29c3cacc4fe7de3058257", size = 95088 }, + { url = "https://files.pythonhosted.org/packages/07/06/b823a7e818c756d9a7123ba2cda7d07bc2dd32835648d1a7b7b7a05d848d/tomli-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:36d2bd2ad5fb9eaddba5226aa02c8ec3fa4f192631e347b3ed28186d43be6b54", size = 155866 }, + { url = "https://files.pythonhosted.org/packages/14/6f/12645cf7f08e1a20c7eb8c297c6f11d31c1b50f316a7e7e1e1de6e2e7b7e/tomli-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eb0dc4e38e6a1fd579e5d50369aa2e10acfc9cace504579b2faabb478e76941a", size = 149887 }, + { url = "https://files.pythonhosted.org/packages/5c/e0/90637574e5e7212c09099c67ad349b04ec4d6020324539297b634a0192b0/tomli-2.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7f2c7f2b9ca6bdeef8f0fa897f8e05085923eb091721675170254cbc5b02897", size = 243704 }, + { url = "https://files.pythonhosted.org/packages/10/8f/d3ddb16c5a4befdf31a23307f72828686ab2096f068eaf56631e136c1fdd/tomli-2.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3c6818a1a86dd6dca7ddcaaf76947d5ba31aecc28cb1b67009a5877c9a64f3f", size = 251628 }, + { url = "https://files.pythonhosted.org/packages/e3/f1/dbeeb9116715abee2485bf0a12d07a8f31af94d71608c171c45f64c0469d/tomli-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d312ef37c91508b0ab2cee7da26ec0b3ed2f03ce12bd87a588d771ae15dcf82d", size = 247180 }, + { url = "https://files.pythonhosted.org/packages/d3/74/16336ffd19ed4da28a70959f92f506233bd7cfc2332b20bdb01591e8b1d1/tomli-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51529d40e3ca50046d7606fa99ce3956a617f9b36380da3b7f0dd3dd28e68cb5", size = 251674 }, + { url = "https://files.pythonhosted.org/packages/16/f9/229fa3434c590ddf6c0aa9af64d3af4b752540686cace29e6281e3458469/tomli-2.4.1-cp313-cp313-win32.whl", hash = "sha256:2190f2e9dd7508d2a90ded5ed369255980a1bcdd58e52f7fe24b8162bf9fedbd", size = 97976 }, + { url = "https://files.pythonhosted.org/packages/6a/1e/71dfd96bcc1c775420cb8befe7a9d35f2e5b1309798f009dca17b7708c1e/tomli-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d65a2fbf9d2f8352685bc1364177ee3923d6baf5e7f43ea4959d7d8bc326a36", size = 108755 }, + { url = "https://files.pythonhosted.org/packages/83/7a/d34f422a021d62420b78f5c538e5b102f62bea616d1d75a13f0a88acb04a/tomli-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:4b605484e43cdc43f0954ddae319fb75f04cc10dd80d830540060ee7cd0243cd", size = 95265 }, + { url = "https://files.pythonhosted.org/packages/3c/fb/9a5c8d27dbab540869f7c1f8eb0abb3244189ce780ba9cd73f3770662072/tomli-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fd0409a3653af6c147209d267a0e4243f0ae46b011aa978b1080359fddc9b6cf", size = 155726 }, + { url = "https://files.pythonhosted.org/packages/62/05/d2f816630cc771ad836af54f5001f47a6f611d2d39535364f148b6a92d6b/tomli-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a120733b01c45e9a0c34aeef92bf0cf1d56cfe81ed9d47d562f9ed591a9828ac", size = 149859 }, + { url = "https://files.pythonhosted.org/packages/ce/48/66341bdb858ad9bd0ceab5a86f90eddab127cf8b046418009f2125630ecb/tomli-2.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:559db847dc486944896521f68d8190be1c9e719fced785720d2216fe7022b662", size = 244713 }, + { url = "https://files.pythonhosted.org/packages/df/6d/c5fad00d82b3c7a3ab6189bd4b10e60466f22cfe8a08a9394185c8a8111c/tomli-2.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01f520d4f53ef97964a240a035ec2a869fe1a37dde002b57ebc4417a27ccd853", size = 252084 }, + { url = "https://files.pythonhosted.org/packages/00/71/3a69e86f3eafe8c7a59d008d245888051005bd657760e96d5fbfb0b740c2/tomli-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7f94b27a62cfad8496c8d2513e1a222dd446f095fca8987fceef261225538a15", size = 247973 }, + { url = "https://files.pythonhosted.org/packages/67/50/361e986652847fec4bd5e4a0208752fbe64689c603c7ae5ea7cb16b1c0ca/tomli-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ede3e6487c5ef5d28634ba3f31f989030ad6af71edfb0055cbbd14189ff240ba", size = 256223 }, + { url = "https://files.pythonhosted.org/packages/8c/9a/b4173689a9203472e5467217e0154b00e260621caa227b6fa01feab16998/tomli-2.4.1-cp314-cp314-win32.whl", hash = "sha256:3d48a93ee1c9b79c04bb38772ee1b64dcf18ff43085896ea460ca8dec96f35f6", size = 98973 }, + { url = "https://files.pythonhosted.org/packages/14/58/640ac93bf230cd27d002462c9af0d837779f8773bc03dee06b5835208214/tomli-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:88dceee75c2c63af144e456745e10101eb67361050196b0b6af5d717254dddf7", size = 109082 }, + { url = "https://files.pythonhosted.org/packages/d5/2f/702d5e05b227401c1068f0d386d79a589bb12bf64c3d2c72ce0631e3bc49/tomli-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:b8c198f8c1805dc42708689ed6864951fd2494f924149d3e4bce7710f8eb5232", size = 96490 }, + { url = "https://files.pythonhosted.org/packages/45/4b/b877b05c8ba62927d9865dd980e34a755de541eb65fffba52b4cc495d4d2/tomli-2.4.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d4d8fe59808a54658fcc0160ecfb1b30f9089906c50b23bcb4c69eddc19ec2b4", size = 164263 }, + { url = "https://files.pythonhosted.org/packages/24/79/6ab420d37a270b89f7195dec5448f79400d9e9c1826df982f3f8e97b24fd/tomli-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7008df2e7655c495dd12d2a4ad038ff878d4ca4b81fccaf82b714e07eae4402c", size = 160736 }, + { url = "https://files.pythonhosted.org/packages/02/e0/3630057d8eb170310785723ed5adcdfb7d50cb7e6455f85ba8a3deed642b/tomli-2.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d8591993e228b0c930c4bb0db464bdad97b3289fb981255d6c9a41aedc84b2d", size = 270717 }, + { url = "https://files.pythonhosted.org/packages/7a/b4/1613716072e544d1a7891f548d8f9ec6ce2faf42ca65acae01d76ea06bb0/tomli-2.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:734e20b57ba95624ecf1841e72b53f6e186355e216e5412de414e3c51e5e3c41", size = 278461 }, + { url = "https://files.pythonhosted.org/packages/05/38/30f541baf6a3f6df77b3df16b01ba319221389e2da59427e221ef417ac0c/tomli-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8a650c2dbafa08d42e51ba0b62740dae4ecb9338eefa093aa5c78ceb546fcd5c", size = 274855 }, + { url = "https://files.pythonhosted.org/packages/77/a3/ec9dd4fd2c38e98de34223b995a3b34813e6bdadf86c75314c928350ed14/tomli-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:504aa796fe0569bb43171066009ead363de03675276d2d121ac1a4572397870f", size = 283144 }, + { url = "https://files.pythonhosted.org/packages/ef/be/605a6261cac79fba2ec0c9827e986e00323a1945700969b8ee0b30d85453/tomli-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:b1d22e6e9387bf4739fbe23bfa80e93f6b0373a7f1b96c6227c32bef95a4d7a8", size = 108683 }, + { url = "https://files.pythonhosted.org/packages/12/64/da524626d3b9cc40c168a13da8335fe1c51be12c0a63685cc6db7308daae/tomli-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2c1c351919aca02858f740c6d33adea0c5deea37f9ecca1cc1ef9e884a619d26", size = 121196 }, + { url = "https://files.pythonhosted.org/packages/5a/cd/e80b62269fc78fc36c9af5a6b89c835baa8af28ff5ad28c7028d60860320/tomli-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:eab21f45c7f66c13f2a9e0e1535309cee140182a9cdae1e041d02e47291e8396", size = 100393 }, + { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583 }, +] + +[[package]] +name = "tomli-w" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/19/75/241269d1da26b624c0d5e110e8149093c759b7a286138f4efd61a60e75fe/tomli_w-1.2.0.tar.gz", hash = "sha256:2dd14fac5a47c27be9cd4c976af5a12d87fb1f0b4512f81d69cce3b35ae25021", size = 7184 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/18/c86eb8e0202e32dd3df50d43d7ff9854f8e0603945ff398974c1d91ac1ef/tomli_w-1.2.0-py3-none-any.whl", hash = "sha256:188306098d013b691fcadc011abd66727d3c414c571bb01b1a174ba8c983cf90", size = 6675 }, +] + +[[package]] +name = "tornado" +version = "6.5.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f8/f1/3173dfa4a18db4a9b03e5d55325559dab51ee653763bb8745a75af491286/tornado-6.5.5.tar.gz", hash = "sha256:192b8f3ea91bd7f1f50c06955416ed76c6b72f96779b962f07f911b91e8d30e9", size = 516006 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/59/8c/77f5097695f4dd8255ecbd08b2a1ed8ba8b953d337804dd7080f199e12bf/tornado-6.5.5-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:487dc9cc380e29f58c7ab88f9e27cdeef04b2140862e5076a66fb6bb68bb1bfa", size = 445983 }, + { url = "https://files.pythonhosted.org/packages/ab/5e/7625b76cd10f98f1516c36ce0346de62061156352353ef2da44e5c21523c/tornado-6.5.5-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:65a7f1d46d4bb41df1ac99f5fcb685fb25c7e61613742d5108b010975a9a6521", size = 444246 }, + { url = "https://files.pythonhosted.org/packages/b2/04/7b5705d5b3c0fab088f434f9c83edac1573830ca49ccf29fb83bf7178eec/tornado-6.5.5-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e74c92e8e65086b338fd56333fb9a68b9f6f2fe7ad532645a290a464bcf46be5", size = 447229 }, + { url = "https://files.pythonhosted.org/packages/34/01/74e034a30ef59afb4097ef8659515e96a39d910b712a89af76f5e4e1f93c/tornado-6.5.5-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:435319e9e340276428bbdb4e7fa732c2d399386d1de5686cb331ec8eee754f07", size = 448192 }, + { url = "https://files.pythonhosted.org/packages/be/00/fe9e02c5a96429fce1a1d15a517f5d8444f9c412e0bb9eadfbe3b0fc55bf/tornado-6.5.5-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3f54aa540bdbfee7b9eb268ead60e7d199de5021facd276819c193c0fb28ea4e", size = 448039 }, + { url = "https://files.pythonhosted.org/packages/82/9e/656ee4cec0398b1d18d0f1eb6372c41c6b889722641d84948351ae19556d/tornado-6.5.5-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:36abed1754faeb80fbd6e64db2758091e1320f6bba74a4cf8c09cd18ccce8aca", size = 447445 }, + { url = "https://files.pythonhosted.org/packages/5a/76/4921c00511f88af86a33de770d64141170f1cfd9c00311aea689949e274e/tornado-6.5.5-cp39-abi3-win32.whl", hash = "sha256:dd3eafaaeec1c7f2f8fdcd5f964e8907ad788fe8a5a32c4426fbbdda621223b7", size = 448582 }, + { url = "https://files.pythonhosted.org/packages/2c/23/f6c6112a04d28eed765e374435fb1a9198f73e1ec4b4024184f21faeb1ad/tornado-6.5.5-cp39-abi3-win_amd64.whl", hash = "sha256:6443a794ba961a9f619b1ae926a2e900ac20c34483eea67be4ed8f1e58d3ef7b", size = 448990 }, + { url = "https://files.pythonhosted.org/packages/b7/c8/876602cbc96469911f0939f703453c1157b0c826ecb05bdd32e023397d4e/tornado-6.5.5-cp39-abi3-win_arm64.whl", hash = "sha256:2c9a876e094109333f888539ddb2de4361743e5d21eece20688e3e351e4990a6", size = 448016 }, +] + +[[package]] +name = "tox" +version = "4.30.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +dependencies = [ + { name = "cachetools", version = "6.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "chardet", marker = "python_full_version < '3.10'" }, + { name = "colorama", marker = "python_full_version < '3.10'" }, + { name = "filelock", version = "3.19.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "packaging", marker = "python_full_version < '3.10'" }, + { name = "platformdirs", version = "4.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "pluggy", marker = "python_full_version < '3.10'" }, + { name = "pyproject-api", version = "1.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "tomli", marker = "python_full_version < '3.10'" }, + { name = "typing-extensions", marker = "python_full_version < '3.10'" }, + { name = "virtualenv", marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/51/b2/cee55172e5e10ce030b087cd3ac06641e47d08a3dc8d76c17b157dba7558/tox-4.30.3.tar.gz", hash = "sha256:f3dd0735f1cd4e8fbea5a3661b77f517456b5f0031a6256432533900e34b90bf", size = 202799 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e2/e4/8bb9ce952820df4165eb34610af347665d6cb436898a234db9d84d093ce6/tox-4.30.3-py3-none-any.whl", hash = "sha256:a9f17b4b2d0f74fe0d76207236925a119095011e5c2e661a133115a8061178c9", size = 175512 }, +] + +[[package]] +name = "tox" +version = "4.52.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "cachetools", version = "7.0.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "colorama", marker = "python_full_version >= '3.10'" }, + { name = "filelock", version = "3.25.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "packaging", marker = "python_full_version >= '3.10'" }, + { name = "platformdirs", version = "4.9.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "pluggy", marker = "python_full_version >= '3.10'" }, + { name = "pyproject-api", version = "1.10.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "python-discovery", marker = "python_full_version >= '3.10'" }, + { name = "tomli", marker = "python_full_version == '3.10.*'" }, + { name = "tomli-w", marker = "python_full_version >= '3.10'" }, + { name = "typing-extensions", marker = "python_full_version == '3.10.*'" }, + { name = "virtualenv", marker = "python_full_version >= '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bc/fb/d7d634eb513f741ffd40f4c262b7feea19d5c616882eb554045c620670a6/tox-4.52.1.tar.gz", hash = "sha256:297e71ea0ae4ef3acc45cb5fdf080b74537e6ecb5eea7d4646fa7322ca10473e", size = 273730 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/70/0d4fb1eefa05a24ca2f58272b4c4718090dd5ed7e38b54b9a7e757bfafc8/tox-4.52.1-py3-none-any.whl", hash = "sha256:3c4eef0a64f319df0b67dacdb7edcfeda87c8cc722581af5d98dd54f3ffdd8ef", size = 212179 }, +] + +[[package]] +name = "traitlets" +version = "5.14.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359 }, +] + +[[package]] +name = "typing-extensions" +version = "4.15.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614 }, +] + +[[package]] +name = "tzdata" +version = "2026.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/19/f5/cd531b2d15a671a40c0f66cf06bc3570a12cd56eef98960068ebbad1bf5a/tzdata-2026.1.tar.gz", hash = "sha256:67658a1903c75917309e753fdc349ac0efd8c27db7a0cb406a25be4840f87f98", size = 197639 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b0/70/d460bd685a170790ec89317e9bd33047988e4bce507b831f5db771e142de/tzdata-2026.1-py2.py3-none-any.whl", hash = "sha256:4b1d2be7ac37ceafd7327b961aa3a54e467efbdb563a23655fbfe0d39cfc42a9", size = 348952 }, +] + +[[package]] +name = "uri-template" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/31/c7/0336f2bd0bcbada6ccef7aaa25e443c118a704f828a0620c6fa0207c1b64/uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7", size = 21678 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363", size = 11140 }, +] + +[[package]] +name = "urllib3" +version = "2.6.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 435556 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584 }, +] + +[[package]] +name = "virtualenv" +version = "21.2.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "distlib" }, + { name = "filelock", version = "3.19.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "filelock", version = "3.25.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "platformdirs", version = "4.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "platformdirs", version = "4.9.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "python-discovery" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/60/8c/bdd9f89f89e4a787ac61bb2da4d884bc45e0c287ec694dfa3170dddd5cfe/virtualenv-21.2.3.tar.gz", hash = "sha256:9bb6d1414ab55ca624371e30c7719c32f183ef44da544ef8aa44a456de7ac191", size = 5844776 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/95/19/bc7c4e05f42532863cf2ae7e7e847beab25835934e0410160b47eeff1e35/virtualenv-21.2.3-py3-none-any.whl", hash = "sha256:486652347ea8526d91e9807c0274583cb7ba31dd4942ff10fb5621402f0fe0d8", size = 5828329 }, +] + +[[package]] +name = "wcwidth" +version = "0.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/35/a2/8e3becb46433538a38726c948d3399905a4c7cabd0df578ede5dc51f0ec2/wcwidth-0.6.0.tar.gz", hash = "sha256:cdc4e4262d6ef9a1a57e018384cbeb1208d8abbc64176027e2c2455c81313159", size = 159684 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/68/5a/199c59e0a824a3db2b89c5d2dade7ab5f9624dbf6448dc291b46d5ec94d3/wcwidth-0.6.0-py3-none-any.whl", hash = "sha256:1a3a1e510b553315f8e146c54764f4fb6264ffad731b3d78088cdb1478ffbdad", size = 94189 }, +] + +[[package]] +name = "webcolors" +version = "24.11.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] +sdist = { url = "https://files.pythonhosted.org/packages/7b/29/061ec845fb58521848f3739e466efd8250b4b7b98c1b6c5bf4d40b419b7e/webcolors-24.11.1.tar.gz", hash = "sha256:ecb3d768f32202af770477b8b65f318fa4f566c22948673a977b00d589dd80f6", size = 45064 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/e8/c0e05e4684d13459f93d312077a9a2efbe04d59c393bc2b8802248c908d4/webcolors-24.11.1-py3-none-any.whl", hash = "sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9", size = 14934 }, +] + +[[package]] +name = "webcolors" +version = "25.10.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/1d/7a/eb316761ec35664ea5174709a68bbd3389de60d4a1ebab8808bfc264ed67/webcolors-25.10.0.tar.gz", hash = "sha256:62abae86504f66d0f6364c2a8520de4a0c47b80c03fc3a5f1815fedbef7c19bf", size = 53491 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl", hash = "sha256:032c727334856fc0b968f63daa252a1ac93d33db2f5267756623c210e57a4f1d", size = 14905 }, +] + +[[package]] +name = "webencodings" +version = "0.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/02/ae6ceac1baeda530866a85075641cec12989bd8d31af6d5ab4a3e8c92f47/webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923", size = 9721 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", size = 11774 }, +] + +[[package]] +name = "websocket-client" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2c/41/aa4bf9664e4cda14c3b39865b12251e8e7d239f4cd0e3cc1b6c2ccde25c1/websocket_client-1.9.0.tar.gz", hash = "sha256:9e813624b6eb619999a97dc7958469217c3176312b3a16a4bd1bc7e08a46ec98", size = 70576 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/db/b10e48aa8fff7407e67470363eac595018441cf32d5e1001567a7aeba5d2/websocket_client-1.9.0-py3-none-any.whl", hash = "sha256:af248a825037ef591efbf6ed20cc5faa03d3b47b9e5a2230a529eeee1c1fc3ef", size = 82616 }, +] + +[[package]] +name = "zipp" +version = "3.23.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/30/21/093488dfc7cc8964ded15ab726fad40f25fd3d788fd741cc1c5a17d78ee8/zipp-3.23.1.tar.gz", hash = "sha256:32120e378d32cd9714ad503c1d024619063ec28aad2248dc6672ad13edfa5110", size = 25965 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/08/8a/0861bec20485572fbddf3dfba2910e38fe249796cb73ecdeb74e07eeb8d3/zipp-3.23.1-py3-none-any.whl", hash = "sha256:0b3596c50a5c700c9cb40ba8d86d9f2cc4807e9bedb06bcdf7fac85633e444dc", size = 10378 }, +] From 207c3350c60685f0c88d1d0ffdcd3a24f4e769e8 Mon Sep 17 00:00:00 2001 From: Fabian Hommel Date: Tue, 14 Apr 2026 13:25:42 +0200 Subject: [PATCH 75/87] Repaired uv.lock --- uv.lock | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/uv.lock b/uv.lock index cc10495..63d713a 100644 --- a/uv.lock +++ b/uv.lock @@ -1,5 +1,4 @@ version = 1 -revision = 1 requires-python = ">=3.9" resolution-markers = [ "python_full_version >= '3.14'", @@ -900,7 +899,7 @@ name = "exceptiongroup" version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371 } wheels = [ @@ -2298,6 +2297,7 @@ wheels = [ [[package]] name = "pyamapping" +version = "0.1.1.dev73+gf091222ad.d20260414" source = { editable = "." } dependencies = [ { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, @@ -2334,7 +2334,6 @@ requires-dist = [ { name = "numpy" }, { name = "scipy" }, ] -provides-extras = ["example-notebooks"] [package.metadata.requires-dev] dev = [ From e9028468a3b07de47d4992b3ffaa5c1e0e175693 Mon Sep 17 00:00:00 2001 From: Fabian Hommel Date: Wed, 15 Apr 2026 11:45:36 +0200 Subject: [PATCH 76/87] Deleted unnecessary files, updated coverage configuration --- .gitignore | 2 +- .isort.cfg | 3 - coverage.lcov | 654 ++++++++++++++++++++++++------------------------- pyproject.toml | 5 +- setup.cfg | 128 ---------- setup.py | 21 -- uv.lock | 5 +- 7 files changed, 335 insertions(+), 483 deletions(-) delete mode 100644 .isort.cfg delete mode 100644 setup.cfg delete mode 100644 setup.py diff --git a/.gitignore b/.gitignore index a8e4e65..c1b82e9 100644 --- a/.gitignore +++ b/.gitignore @@ -53,5 +53,5 @@ MANIFEST .conda*/ .python-version -# Ignore .env file +# .env file for Environment Variables .env diff --git a/.isort.cfg b/.isort.cfg deleted file mode 100644 index 45818b0..0000000 --- a/.isort.cfg +++ /dev/null @@ -1,3 +0,0 @@ -[settings] -profile = black -known_first_party = pyamapping diff --git a/coverage.lcov b/coverage.lcov index d15be63..0685970 100644 --- a/coverage.lcov +++ b/coverage.lcov @@ -1,91 +1,91 @@ SF:pyamapping/__init__.py -DA:1,1 -DA:3,1 -DA:9,1 -DA:11,1 -DA:12,1 +DA:6,1 +DA:8,1 +DA:14,1 DA:16,1 -DA:18,1 -DA:20,1 -DA:22,1 +DA:17,1 +DA:21,1 DA:23,1 -DA:72,1 -DA:120,1 -DA:122,1 -DA:123,1 +DA:25,1 +DA:27,1 +DA:28,1 +DA:77,1 DA:125,1 -DA:126,0 +DA:127,1 DA:128,1 DA:130,1 -DA:132,1 -DA:133,0 +DA:131,0 +DA:133,1 DA:135,1 +DA:137,1 DA:138,0 -DA:140,0 -DA:141,0 +DA:140,1 DA:143,0 -DA:145,1 -DA:146,1 +DA:145,0 +DA:146,0 +DA:148,0 +DA:150,1 DA:151,1 -DA:154,1 -DA:157,1 -DA:158,0 -DA:160,1 -DA:161,1 +DA:156,1 +DA:159,1 +DA:162,1 +DA:163,0 +DA:165,1 DA:166,1 -DA:169,1 DA:171,1 -DA:172,1 -DA:173,1 DA:174,1 -DA:175,1 DA:176,1 -DA:178,0 +DA:177,1 +DA:178,1 DA:179,1 -DA:183,1 +DA:180,1 +DA:181,1 +DA:183,0 DA:184,1 -DA:185,1 DA:188,1 DA:189,1 -DA:191,1 -DA:229,1 -DA:230,1 -DA:232,1 -DA:233,1 +DA:190,1 +DA:193,1 +DA:194,1 +DA:196,1 DA:234,1 DA:235,1 -DA:236,1 DA:237,1 DA:238,1 DA:239,1 +DA:240,1 +DA:241,1 +DA:242,1 +DA:243,1 +DA:244,1 LF:59 LH:51 -FN:120,151,register_numpy_ufunc +FN:125,156,register_numpy_ufunc FNDA:1,register_numpy_ufunc -FN:125,126,register_numpy_ufunc.method1 +FN:130,131,register_numpy_ufunc.method1 FNDA:0,register_numpy_ufunc.method1 -FN:154,166,register_chain_fn +FN:159,171,register_chain_fn FNDA:1,register_chain_fn -FN:157,158,register_chain_fn.method +FN:162,163,register_chain_fn.method FNDA:0,register_chain_fn.method -FN:169,179,_list_numpy_ufuncs +FN:174,184,_list_numpy_ufuncs FNDA:1,_list_numpy_ufuncs FNF:5 FNH:3 -BRDA:123,0,jump to line 125,1 -BRDA:123,0,jump to line 130,1 -BRDA:130,0,jump to line 132,1 -BRDA:130,0,jump to line 138,0 -BRDA:172,0,jump to line 173,1 -BRDA:172,0,jump to line 179,1 -BRDA:174,0,jump to line 172,1 -BRDA:174,0,jump to line 175,1 -BRDA:175,0,jump to line 176,1 -BRDA:175,0,jump to line 178,0 -BRDA:183,0,jump to line 184,1 -BRDA:183,0,jump to line 188,1 -BRDA:229,0,jump to line 230,1 -BRDA:229,0,jump to line 232,1 +BRDA:128,0,jump to line 130,1 +BRDA:128,0,jump to line 135,1 +BRDA:135,0,jump to line 137,1 +BRDA:135,0,jump to line 143,0 +BRDA:177,0,jump to line 178,1 +BRDA:177,0,jump to line 184,1 +BRDA:179,0,jump to line 177,1 +BRDA:179,0,jump to line 180,1 +BRDA:180,0,jump to line 181,1 +BRDA:180,0,jump to line 183,0 +BRDA:188,0,jump to line 189,1 +BRDA:188,0,jump to line 193,1 +BRDA:234,0,jump to line 235,1 +BRDA:234,0,jump to line 237,1 BRF:14 BRH:12 end_of_record @@ -96,13 +96,13 @@ DA:6,1 DA:8,1 DA:11,1 DA:14,1 -DA:16,1 -DA:17,1 +DA:16,0 +DA:17,0 DA:19,1 -DA:21,1 +DA:21,0 DA:22,0 DA:24,1 -DA:26,1 +DA:26,0 DA:28,1 DA:30,0 DA:32,0 @@ -119,50 +119,50 @@ DA:46,0 DA:48,0 DA:50,0 DA:52,1 -DA:66,1 +DA:66,0 DA:68,1 -DA:88,1 -DA:89,1 -DA:90,1 -DA:91,1 +DA:88,0 +DA:89,0 +DA:90,0 +DA:91,0 DA:96,1 -DA:98,1 -DA:99,1 -DA:100,1 +DA:98,0 +DA:99,0 +DA:100,0 DA:105,1 -DA:108,1 +DA:108,0 LF:41 -LH:27 +LH:14 FN:14,17,ChainableArray.__new__ -FNDA:1,ChainableArray.__new__ +FNDA:0,ChainableArray.__new__ FN:19,22,ChainableArray.__array_finalize__ -FNDA:1,ChainableArray.__array_finalize__ +FNDA:0,ChainableArray.__array_finalize__ FN:24,26,ChainableArray.to_array -FNDA:1,ChainableArray.to_array +FNDA:0,ChainableArray.to_array FN:28,32,ChainableArray.to_asig FNDA:0,ChainableArray.to_asig FN:34,50,ChainableArray.plot FNDA:0,ChainableArray.plot FN:52,66,ChainableArray.mapvec -FNDA:1,ChainableArray.mapvec +FNDA:0,ChainableArray.mapvec FN:68,94,ChainableArray.map -FNDA:1,ChainableArray.map +FNDA:0,ChainableArray.map FN:96,102,ChainableArray.__getattr__ -FNDA:1,ChainableArray.__getattr__ +FNDA:0,ChainableArray.__getattr__ FN:105,108,chain -FNDA:1,chain +FNDA:0,chain FNF:9 -FNH:7 -BRDA:21,0,jump to line 22,0 -BRDA:21,0,return from function '__array_finalize__',1 +FNH:0 +BRDA:21,0,jump to line 22,- +BRDA:21,0,return from function '__array_finalize__',- BRDA:39,0,jump to line 40,- BRDA:39,0,jump to line 44,- BRDA:45,0,jump to line 46,- BRDA:45,0,jump to line 48,- -BRDA:98,0,jump to line 99,1 -BRDA:98,0,jump to line 100,1 +BRDA:98,0,jump to line 99,- +BRDA:98,0,jump to line 100,- BRF:8 -BRH:3 +BRH:0 end_of_record SF:pyamapping/mappings.py DA:3,1 @@ -170,329 +170,329 @@ DA:5,1 DA:6,1 DA:8,1 DA:11,1 -DA:48,1 -DA:49,1 -DA:50,1 -DA:51,1 -DA:52,1 -DA:53,1 -DA:54,1 -DA:55,1 -DA:56,1 -DA:58,1 +DA:48,0 +DA:49,0 +DA:50,0 +DA:51,0 +DA:52,0 +DA:53,0 +DA:54,0 +DA:55,0 +DA:56,0 +DA:58,0 DA:61,1 -DA:98,1 -DA:99,1 -DA:100,1 -DA:101,1 -DA:102,1 -DA:103,1 -DA:104,1 -DA:105,1 -DA:106,1 -DA:108,1 +DA:98,0 +DA:99,0 +DA:100,0 +DA:101,0 +DA:102,0 +DA:103,0 +DA:104,0 +DA:105,0 +DA:106,0 +DA:108,0 DA:111,1 -DA:148,1 -DA:150,1 -DA:151,1 -DA:152,1 -DA:153,1 -DA:154,1 -DA:155,1 -DA:156,1 -DA:157,1 -DA:159,1 +DA:148,0 +DA:150,0 +DA:151,0 +DA:152,0 +DA:153,0 +DA:154,0 +DA:155,0 +DA:156,0 +DA:157,0 +DA:159,0 DA:162,1 -DA:206,1 -DA:207,1 -DA:209,1 -DA:213,1 -DA:214,1 -DA:215,1 -DA:216,1 -DA:217,1 -DA:218,1 -DA:219,1 -DA:221,1 -DA:222,1 +DA:206,0 +DA:207,0 +DA:209,0 +DA:213,0 +DA:214,0 +DA:215,0 +DA:216,0 +DA:217,0 +DA:218,0 +DA:219,0 +DA:221,0 +DA:222,0 DA:225,1 -DA:267,1 -DA:268,1 -DA:270,1 -DA:271,1 -DA:273,1 -DA:274,1 -DA:275,1 -DA:276,1 -DA:277,1 -DA:278,1 -DA:279,1 -DA:281,1 -DA:282,1 +DA:267,0 +DA:268,0 +DA:270,0 +DA:271,0 +DA:273,0 +DA:274,0 +DA:275,0 +DA:276,0 +DA:277,0 +DA:278,0 +DA:279,0 +DA:281,0 +DA:282,0 DA:285,1 -DA:315,1 -DA:316,1 -DA:317,1 -DA:318,1 -DA:319,1 +DA:315,0 +DA:316,0 +DA:317,0 +DA:318,0 +DA:319,0 DA:320,0 -DA:321,1 -DA:322,1 -DA:323,1 -DA:324,1 -DA:326,1 +DA:321,0 +DA:322,0 +DA:323,0 +DA:324,0 +DA:326,0 DA:329,1 -DA:358,1 -DA:360,1 -DA:361,1 +DA:358,0 +DA:360,0 +DA:361,0 DA:364,1 -DA:391,1 +DA:391,0 DA:394,1 -DA:423,1 +DA:423,0 DA:426,1 -DA:447,1 -DA:448,1 -DA:450,1 -DA:451,1 -DA:452,1 -DA:453,1 -DA:454,1 +DA:447,0 +DA:448,0 +DA:450,0 +DA:451,0 +DA:452,0 +DA:453,0 +DA:454,0 DA:457,1 -DA:470,1 +DA:470,0 DA:473,1 DA:476,1 -DA:489,1 +DA:489,0 DA:492,1 DA:495,1 -DA:508,1 +DA:508,0 DA:511,1 DA:514,1 -DA:527,1 +DA:527,0 DA:530,1 DA:533,1 -DA:548,1 +DA:548,0 DA:551,1 DA:554,1 -DA:569,1 +DA:569,0 DA:572,1 DA:575,1 -DA:592,1 -DA:593,1 -DA:595,1 -DA:596,1 -DA:601,1 +DA:592,0 +DA:593,0 +DA:595,0 +DA:596,0 +DA:601,0 DA:604,1 -DA:620,1 -DA:621,1 -DA:623,1 -DA:624,1 -DA:629,1 +DA:620,0 +DA:621,0 +DA:623,0 +DA:624,0 +DA:629,0 DA:632,1 -DA:645,1 +DA:645,0 DA:648,1 DA:651,1 -DA:664,1 +DA:664,0 DA:667,1 DA:670,1 -DA:684,1 +DA:684,0 DA:687,1 -DA:701,1 -DA:702,1 -DA:703,1 -DA:704,1 -DA:705,1 -DA:706,1 +DA:701,0 +DA:702,0 +DA:703,0 +DA:704,0 +DA:705,0 +DA:706,0 DA:709,1 -DA:722,1 -DA:723,1 +DA:722,0 +DA:723,0 DA:726,1 -DA:747,1 +DA:747,0 DA:750,1 -DA:767,1 +DA:767,0 DA:770,1 -DA:785,1 -DA:786,1 +DA:785,0 +DA:786,0 DA:789,1 -DA:807,1 +DA:807,0 DA:810,1 -DA:828,1 -DA:829,1 -DA:830,1 -DA:831,1 +DA:828,0 +DA:829,0 +DA:830,0 +DA:831,0 DA:834,1 -DA:845,1 +DA:845,0 DA:848,1 -DA:860,1 -DA:861,1 +DA:860,0 +DA:861,0 DA:864,1 -DA:876,1 -DA:877,1 +DA:876,0 +DA:877,0 DA:880,1 -DA:895,1 -DA:896,1 -DA:898,1 -DA:899,1 -DA:900,1 -DA:901,1 +DA:895,0 +DA:896,0 +DA:898,0 +DA:899,0 +DA:900,0 +DA:901,0 DA:904,1 -DA:923,1 -DA:924,1 -DA:928,1 +DA:923,0 +DA:924,0 +DA:928,0 DA:931,1 -DA:951,1 -DA:952,1 -DA:956,1 -DA:957,1 +DA:951,0 +DA:952,0 +DA:956,0 +DA:957,0 DA:960,1 -DA:985,1 -DA:986,1 -DA:987,1 +DA:985,0 +DA:986,0 +DA:987,0 LF:182 -LH:181 +LH:47 FN:11,58,linlin -FNDA:1,linlin +FNDA:0,linlin FN:61,108,linexp -FNDA:1,linexp +FNDA:0,linexp FN:111,159,explin -FNDA:1,explin +FNDA:0,explin FN:162,222,lincurve -FNDA:1,lincurve +FNDA:0,lincurve FN:225,282,curvelin -FNDA:1,curvelin +FNDA:0,curvelin FN:285,326,linpoly -FNDA:1,linpoly +FNDA:0,linpoly FN:329,361,interp_spline -FNDA:1,interp_spline +FNDA:0,interp_spline FN:364,391,interp -FNDA:1,interp +FNDA:0,interp FN:394,423,bilin -FNDA:1,bilin +FNDA:0,bilin FN:426,454,clip -FNDA:1,clip +FNDA:0,clip FN:457,470,midi_to_cps -FNDA:1,midi_to_cps +FNDA:0,midi_to_cps FN:476,489,cps_to_midi -FNDA:1,cps_to_midi +FNDA:0,cps_to_midi FN:495,508,midi_to_ratio -FNDA:1,midi_to_ratio +FNDA:0,midi_to_ratio FN:514,527,ratio_to_midi -FNDA:1,ratio_to_midi +FNDA:0,ratio_to_midi FN:533,548,cps_to_octave -FNDA:1,cps_to_octave +FNDA:0,cps_to_octave FN:554,569,octave_to_cps -FNDA:1,octave_to_cps +FNDA:0,octave_to_cps FN:575,601,hz_to_mel -FNDA:1,hz_to_mel +FNDA:0,hz_to_mel FN:604,629,mel_to_hz -FNDA:1,mel_to_hz +FNDA:0,mel_to_hz FN:632,645,db_to_amp -FNDA:1,db_to_amp +FNDA:0,db_to_amp FN:651,664,amp_to_db -FNDA:1,amp_to_db +FNDA:0,amp_to_db FN:670,684,distort -FNDA:1,distort +FNDA:0,distort FN:687,706,softclip -FNDA:1,softclip +FNDA:0,softclip FN:709,723,scurve -FNDA:1,scurve +FNDA:0,scurve FN:726,747,lcurve -FNDA:1,lcurve +FNDA:0,lcurve FN:750,767,fermi -FNDA:1,fermi +FNDA:0,fermi FN:770,786,normalize -FNDA:1,normalize +FNDA:0,normalize FN:789,807,wrap -FNDA:1,wrap +FNDA:0,wrap FN:810,831,fold -FNDA:1,fold +FNDA:0,fold FN:834,845,remove_dc -FNDA:1,remove_dc +FNDA:0,remove_dc FN:848,861,norm_peak -FNDA:1,norm_peak +FNDA:0,norm_peak FN:864,877,norm_rms -FNDA:1,norm_rms +FNDA:0,norm_rms FN:880,901,gain -FNDA:1,gain +FNDA:0,gain FN:904,928,lin_to_ecdf -FNDA:1,lin_to_ecdf +FNDA:0,lin_to_ecdf FN:931,957,ecdf_to_lin -FNDA:1,ecdf_to_lin +FNDA:0,ecdf_to_lin FN:960,987,ecdf -FNDA:1,ecdf +FNDA:0,ecdf FNF:35 -FNH:35 -BRDA:49,0,jump to line 50,1 -BRDA:49,0,jump to line 51,1 -BRDA:51,0,jump to line 52,1 -BRDA:51,0,jump to line 53,1 -BRDA:53,0,jump to line 54,1 -BRDA:53,0,jump to line 55,1 -BRDA:55,0,jump to line 56,1 -BRDA:55,0,jump to line 58,1 -BRDA:99,0,jump to line 100,1 -BRDA:99,0,jump to line 101,1 -BRDA:101,0,jump to line 102,1 -BRDA:101,0,jump to line 103,1 -BRDA:103,0,jump to line 104,1 -BRDA:103,0,jump to line 105,1 -BRDA:105,0,jump to line 106,1 -BRDA:105,0,jump to line 108,1 -BRDA:150,0,jump to line 151,1 -BRDA:150,0,jump to line 152,1 -BRDA:152,0,jump to line 153,1 -BRDA:152,0,jump to line 154,1 -BRDA:154,0,jump to line 155,1 -BRDA:154,0,jump to line 156,1 -BRDA:156,0,jump to line 157,1 -BRDA:156,0,jump to line 159,1 -BRDA:206,0,jump to line 207,1 -BRDA:206,0,jump to line 209,1 -BRDA:213,0,jump to line 214,1 -BRDA:213,0,jump to line 215,1 -BRDA:215,0,jump to line 216,1 -BRDA:215,0,jump to line 222,1 -BRDA:216,0,jump to line 217,1 -BRDA:216,0,jump to line 218,1 -BRDA:218,0,jump to line 219,1 -BRDA:218,0,jump to line 221,1 -BRDA:267,0,jump to line 268,1 -BRDA:267,0,jump to line 270,1 -BRDA:273,0,jump to line 274,1 -BRDA:273,0,jump to line 275,1 -BRDA:275,0,jump to line 276,1 -BRDA:275,0,jump to line 282,1 -BRDA:276,0,jump to line 277,1 -BRDA:276,0,jump to line 278,1 -BRDA:278,0,jump to line 279,1 -BRDA:278,0,jump to line 281,1 -BRDA:317,0,jump to line 318,1 -BRDA:317,0,jump to line 319,1 -BRDA:319,0,jump to line 320,0 -BRDA:319,0,jump to line 321,1 -BRDA:321,0,jump to line 322,1 -BRDA:321,0,jump to line 323,1 -BRDA:323,0,jump to line 324,1 -BRDA:323,0,jump to line 326,1 -BRDA:447,0,jump to line 448,1 -BRDA:447,0,jump to line 450,1 -BRDA:450,0,jump to line 451,1 -BRDA:450,0,jump to line 452,1 -BRDA:452,0,jump to line 453,1 -BRDA:452,0,jump to line 454,1 -BRDA:592,0,jump to line 593,1 -BRDA:592,0,jump to line 595,1 -BRDA:620,0,jump to line 621,1 -BRDA:620,0,jump to line 623,1 -BRDA:828,0,jump to line 829,1 -BRDA:828,0,jump to line 830,1 -BRDA:895,0,jump to line 896,1 -BRDA:895,0,jump to line 898,1 -BRDA:899,0,jump to line 900,1 -BRDA:899,0,jump to line 901,1 -BRDA:923,0,jump to line 924,1 -BRDA:923,0,jump to line 928,1 -BRDA:951,0,jump to line 952,1 -BRDA:951,0,jump to line 956,1 +FNH:0 +BRDA:49,0,jump to line 50,- +BRDA:49,0,jump to line 51,- +BRDA:51,0,jump to line 52,- +BRDA:51,0,jump to line 53,- +BRDA:53,0,jump to line 54,- +BRDA:53,0,jump to line 55,- +BRDA:55,0,jump to line 56,- +BRDA:55,0,jump to line 58,- +BRDA:99,0,jump to line 100,- +BRDA:99,0,jump to line 101,- +BRDA:101,0,jump to line 102,- +BRDA:101,0,jump to line 103,- +BRDA:103,0,jump to line 104,- +BRDA:103,0,jump to line 105,- +BRDA:105,0,jump to line 106,- +BRDA:105,0,jump to line 108,- +BRDA:150,0,jump to line 151,- +BRDA:150,0,jump to line 152,- +BRDA:152,0,jump to line 153,- +BRDA:152,0,jump to line 154,- +BRDA:154,0,jump to line 155,- +BRDA:154,0,jump to line 156,- +BRDA:156,0,jump to line 157,- +BRDA:156,0,jump to line 159,- +BRDA:206,0,jump to line 207,- +BRDA:206,0,jump to line 209,- +BRDA:213,0,jump to line 214,- +BRDA:213,0,jump to line 215,- +BRDA:215,0,jump to line 216,- +BRDA:215,0,jump to line 222,- +BRDA:216,0,jump to line 217,- +BRDA:216,0,jump to line 218,- +BRDA:218,0,jump to line 219,- +BRDA:218,0,jump to line 221,- +BRDA:267,0,jump to line 268,- +BRDA:267,0,jump to line 270,- +BRDA:273,0,jump to line 274,- +BRDA:273,0,jump to line 275,- +BRDA:275,0,jump to line 276,- +BRDA:275,0,jump to line 282,- +BRDA:276,0,jump to line 277,- +BRDA:276,0,jump to line 278,- +BRDA:278,0,jump to line 279,- +BRDA:278,0,jump to line 281,- +BRDA:317,0,jump to line 318,- +BRDA:317,0,jump to line 319,- +BRDA:319,0,jump to line 320,- +BRDA:319,0,jump to line 321,- +BRDA:321,0,jump to line 322,- +BRDA:321,0,jump to line 323,- +BRDA:323,0,jump to line 324,- +BRDA:323,0,jump to line 326,- +BRDA:447,0,jump to line 448,- +BRDA:447,0,jump to line 450,- +BRDA:450,0,jump to line 451,- +BRDA:450,0,jump to line 452,- +BRDA:452,0,jump to line 453,- +BRDA:452,0,jump to line 454,- +BRDA:592,0,jump to line 593,- +BRDA:592,0,jump to line 595,- +BRDA:620,0,jump to line 621,- +BRDA:620,0,jump to line 623,- +BRDA:828,0,jump to line 829,- +BRDA:828,0,jump to line 830,- +BRDA:895,0,jump to line 896,- +BRDA:895,0,jump to line 898,- +BRDA:899,0,jump to line 900,- +BRDA:899,0,jump to line 901,- +BRDA:923,0,jump to line 924,- +BRDA:923,0,jump to line 928,- +BRDA:951,0,jump to line 952,- +BRDA:951,0,jump to line 956,- BRF:72 -BRH:71 +BRH:0 end_of_record diff --git a/pyproject.toml b/pyproject.toml index ab41486..74fe6da 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -50,9 +50,12 @@ dev-dependencies = ["tox", "pytest", "pytest-cov", "pre-commit", "sphinx"] line-length = 88 lint.select = ["E", "F", "I", "T10"] # E/F = flake8, I = isort +[tool.ruff.lint.isort] +known_first_party = "pyamapping" + [tool.ruff.lint.pydocstyle] convention = "numpy" [tool.pytest.ini_options] -addopts = "--cov=mypackage --cov-report=lcov" +addopts = "--cov=pyamapping --cov-report=lcov --cov-report=term-missing" testpaths = ["tests"] diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index cf14e4b..0000000 --- a/setup.cfg +++ /dev/null @@ -1,128 +0,0 @@ -# This file is used to configure your project. -# Read more about the various options under: -# https://setuptools.pypa.io/en/latest/userguide/declarative_config.html -# https://setuptools.pypa.io/en/latest/references/keywords.html - -[metadata] -name = pyamapping -description = A Python package containing audio related functions and mappings -author = Dennis Reinsch -author_email = dreinsch@techfak.uni-bielefeld.de -license = MIT -license_files = LICENSE.txt -long_description = file: README.rst -long_description_content_type = text/x-rst; charset=UTF-8 -url = https://github.com/interactive-sonification/pyamapping -# Add here related links, for example: -project_urls = - Documentation = https://pyscaffold.org/ -# Source = https://github.com/pyscaffold/pyscaffold/ -# Changelog = https://pyscaffold.org/en/latest/changelog.html -# Tracker = https://github.com/pyscaffold/pyscaffold/issues -# Conda-Forge = https://anaconda.org/conda-forge/pyscaffold -# Download = https://pypi.org/project/PyScaffold/#files -# Twitter = https://twitter.com/PyScaffold - -# Change if running only on Windows, Mac or Linux (comma-separated) -platforms = any - -# Add here all kinds of additional classifiers as defined under -# https://pypi.org/classifiers/ -classifiers = - Development Status :: 4 - Beta - Programming Language :: Python - - -[options] -zip_safe = False -packages = find_namespace: -include_package_data = True -package_dir = - =src - -# Require a min/specific Python version (comma-separated conditions) -# python_requires = >=3.8 - -# Add here dependencies of your project (line-separated), e.g. requests>=2.2,<3.0. -# Version specifiers like >=2.2,<3.0 avoid problems due to API changes in -# new major versions. This works if the required packages follow Semantic Versioning. -# For more information, check out https://semver.org/. -install_requires = - numpy - scipy - importlib-metadata; python_version<"3.8" - - -[options.packages.find] -where = src -exclude = - tests - -[options.extras_require] -# Add here additional requirements for extra features, to install with: -# `pip install pyamapping[PDF]` like: -# PDF = ReportLab; RXP - -# Add here test requirements (semicolon/line-separated) -testing = - setuptools - pytest - pytest-cov - -[options.entry_points] -# Add here console scripts like: -# console_scripts = -# script_name = pyamapping.module:function -# For example: -# console_scripts = -# fibonacci = pyamapping.skeleton:run -# And any other entry points, for example: -# pyscaffold.cli = -# awesome = pyscaffoldext.awesome.extension:AwesomeExtension - -[tool:pytest] -# Specify command line options as you would do when invoking pytest directly. -# e.g. --cov-report html (or xml) for html/xml output or --junitxml junit.xml -# in order to write a coverage file that can be read by Jenkins. -# CAUTION: --cov flags may prohibit setting breakpoints while debugging. -# Comment those flags to avoid this pytest issue. -addopts = - --cov pyamapping --cov-report term-missing - --verbose -norecursedirs = - dist - build - .tox -testpaths = tests -# Use pytest markers to select/deselect specific tests -# markers = -# slow: mark tests as slow (deselect with '-m "not slow"') -# system: mark end-to-end system tests - -[devpi:upload] -# Options for the devpi: PyPI server and packaging tool -# VCS export must be deactivated since we are using setuptools-scm -no_vcs = 1 -formats = bdist_wheel - -[flake8] -# Some sane defaults for the code style checker flake8 -max_line_length = 88 -extend_ignore = E203, W503 -# ^ Black-compatible -# E203 and W503 have edge cases handled by black -exclude = - .tox - build - dist - .eggs - docs/conf.py - -[pyscaffold] -# PyScaffold's parameters when the project was created. -# This will be used when updating. Do not change! -version = 4.5 -package = pyamapping -extensions = - github_actions - pre_commit diff --git a/setup.py b/setup.py deleted file mode 100644 index ad38f6f..0000000 --- a/setup.py +++ /dev/null @@ -1,21 +0,0 @@ -""" - Setup file for pyamapping. - Use setup.cfg to configure your project. - - This file was generated with PyScaffold 4.5. - PyScaffold helps you to put up the scaffold of your new Python project. - Learn more under: https://pyscaffold.org/ -""" -from setuptools import setup - -if __name__ == "__main__": - try: - setup(use_scm_version={"version_scheme": "no-guess-dev"}) - except: # noqa - print( - "\n\nAn error occurred while building the project, " - "please ensure you have the most updated version of setuptools, " - "setuptools_scm and wheel with:\n" - " pip install -U setuptools setuptools_scm wheel\n\n" - ) - raise diff --git a/uv.lock b/uv.lock index 63d713a..cc10495 100644 --- a/uv.lock +++ b/uv.lock @@ -1,4 +1,5 @@ version = 1 +revision = 1 requires-python = ">=3.9" resolution-markers = [ "python_full_version >= '3.14'", @@ -899,7 +900,7 @@ name = "exceptiongroup" version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371 } wheels = [ @@ -2297,7 +2298,6 @@ wheels = [ [[package]] name = "pyamapping" -version = "0.1.1.dev73+gf091222ad.d20260414" source = { editable = "." } dependencies = [ { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, @@ -2334,6 +2334,7 @@ requires-dist = [ { name = "numpy" }, { name = "scipy" }, ] +provides-extras = ["example-notebooks"] [package.metadata.requires-dev] dev = [ From 228c06cdf4efdbcdf7b59da813c6f7d03027a80a Mon Sep 17 00:00:00 2001 From: Fabian Hommel Date: Wed, 15 Apr 2026 12:11:28 +0200 Subject: [PATCH 77/87] Updated readme --- README.rst | 64 +++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 56 insertions(+), 8 deletions(-) diff --git a/README.rst b/README.rst index de8a7a8..59aa57a 100644 --- a/README.rst +++ b/README.rst @@ -45,20 +45,68 @@ pyamapping Making Changes & Contributing ============================= -This project uses `pre-commit`_, please make sure to install it before making any -changes:: +To setup your development environment, you need to have `uv `_ installed. +First, clone the repository and then change into the root directory: + +.. code-block:: bash - pip install pre-commit cd pyamapping - pre-commit install -It is a good idea to update the hooks to the latest version:: +Afterwards, sync your environment: + +.. code-block:: bash + + uv sync + +This will install all required dependencies (dev dependencies included). +Also, please install the pre-commit hooks: + +.. code-block:: bash + + uv run pre-commit install + +Experimentation in Scratchpad / Jupyter +---------------------------------------- + +uv automatically installs the ``pyamapping`` package to the ``.venv`` in editable mode. +During development, any changes to the ``pyamapping`` source will be reflected automatically. +To write playground / exploratory code, just make sure to run your REPL environment with ``uv run``, e.g.: + +.. code-block:: bash + + uv run python + +or + +.. code-block:: bash + + uv run jupyter notebook + +Then, you should be able to: + +.. code-block:: python + + import pyamapping as pam + +And get the current state of the source code. + +Running Tests +------------- + +Tests can be run via: + +.. code-block:: bash + + uv run tox -e tests + +Building Documentation +---------------------- - pre-commit autoupdate +Documentation can be built via: -Don't forget to tell your contributors to also install and use pre-commit. +.. code-block:: bash -.. _pre-commit: https://pre-commit.com/ + uv run tox -e docs Note ==== From b81a35b9175cd27ee5895100660192870e730b3b Mon Sep 17 00:00:00 2001 From: Fabian Hommel Date: Wed, 15 Apr 2026 12:12:31 +0200 Subject: [PATCH 78/87] Updated readme --- README.rst | 6 ------ 1 file changed, 6 deletions(-) diff --git a/README.rst b/README.rst index 59aa57a..e098bb5 100644 --- a/README.rst +++ b/README.rst @@ -107,9 +107,3 @@ Documentation can be built via: .. code-block:: bash uv run tox -e docs - -Note -==== - -This project has been set up using PyScaffold 4.5. For details and usage -information on PyScaffold see https://pyscaffold.org/. From b23207d6732a4ea632bcc39a60167ce150fb0276 Mon Sep 17 00:00:00 2001 From: Fabian Hommel Date: Tue, 28 Apr 2026 11:28:45 +0200 Subject: [PATCH 79/87] Udpated github actions --- .github/workflows/ci.yml | 48 ++++++++++++++++++---------------------- 1 file changed, 21 insertions(+), 27 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3b4b299..ce0eb01 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,24 +32,20 @@ jobs: outputs: wheel-distribution: ${{ steps.wheel-distribution.outputs.path }} steps: - - uses: actions/checkout@v3 - with: {fetch-depth: 0} # deep clone for setuptools-scm - - uses: actions/setup-python@v4 - id: setup-python - with: {python-version: "3.11"} + - uses: actions/checkout@v4 + with: {fetch-depth: 0} # deep clone for hatch-scm + - uses: astral-sh/setup-uv@v5 - name: Run static analysis and format checkers - run: pipx run pre-commit run --all-files --show-diff-on-failure + run: uv run pre-commit run --all-files --show-diff-on-failure - name: Build package distribution files - run: >- - pipx run --python '${{ steps.setup-python.outputs.python-path }}' - tox -e clean,build + run: uv run tox -e clean,build - name: Record the path of wheel distribution id: wheel-distribution run: echo "path=$(ls dist/*.whl)" >> $GITHUB_OUTPUT - name: Store the distribution files for use in other stages # `tests` and `publish` will use the same pre-built distributions, # so we make sure to release the exact same package that was tested - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: python-distribution-files path: dist/ @@ -60,7 +56,10 @@ jobs: strategy: matrix: python: - - "3.7" # oldest Python supported by PSF + - "3.10" + - "3.11" # oldest Python supported by PSF + - "3.12" # oldest Python supported by PSF + - "3.13" # oldest Python supported by PSF - "3.14" # newest Python that is stable platform: - ubuntu-latest @@ -68,21 +67,17 @@ jobs: - windows-latest runs-on: ${{ matrix.platform }} steps: - - uses: actions/checkout@v3 - - uses: actions/setup-python@v4 - id: setup-python + - uses: actions/checkout@v4 + - uses: astral-sh/setup-uv@v5 with: python-version: ${{ matrix.python }} - name: Retrieve pre-built distribution files - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: {name: python-distribution-files, path: dist/} - name: Run tests run: >- - pipx run --python '${{ steps.setup-python.outputs.python-path }}' - tox --installpkg '${{ needs.prepare.outputs.wheel-distribution }}' + uv run tox --installpkg '${{ needs.prepare.outputs.wheel-distribution }}' -- -rFEx --durations 10 --color yes # pytest args - - name: Generate coverage report - run: pipx run coverage lcov -o coverage.lcov - name: Upload partial coverage report uses: coverallsapp/github-action@master with: @@ -108,18 +103,17 @@ jobs: permissions: contents: write steps: - - uses: actions/checkout@v3 - - uses: actions/setup-python@v4 - with: {python-version: "3.12"} + - uses: actions/checkout@v4 + - uses: astral-sh/setup-uv@v5 - name: Retrieve pre-built distribution files - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: {name: python-distribution-files, path: dist/} - name: Publish Package env: # TODO: Set your PYPI_TOKEN as a secret using GitHub UI # - https://pypi.org/help/#apitoken # - https://docs.github.com/en/actions/security-guides/encrypted-secrets - TWINE_REPOSITORY: pypi - TWINE_USERNAME: __token__ - TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }} - run: pipx run tox -e publish + UV_PUBLISH_URL: https://upload.pypi.org/legacy/ + UV_PUBLISH_USERNAME: __token__ + UV_PUBLISH_PASSWORD: ${{ secrets.PYPI_TOKEN }} + run: uv run tox -e publish From b81d687de35a13133350fd03eca7cf69862858f3 Mon Sep 17 00:00:00 2001 From: Fabian Hommel Date: Tue, 28 Apr 2026 11:36:54 +0200 Subject: [PATCH 80/87] Updated versions of various actions, because older versions are using Node.js 20, which is not supported anymore by the github runner --- .github/workflows/ci.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ce0eb01..f9b1444 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,9 +32,9 @@ jobs: outputs: wheel-distribution: ${{ steps.wheel-distribution.outputs.path }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: {fetch-depth: 0} # deep clone for hatch-scm - - uses: astral-sh/setup-uv@v5 + - uses: astral-sh/setup-uv@v8 - name: Run static analysis and format checkers run: uv run pre-commit run --all-files --show-diff-on-failure - name: Build package distribution files @@ -67,8 +67,8 @@ jobs: - windows-latest runs-on: ${{ matrix.platform }} steps: - - uses: actions/checkout@v4 - - uses: astral-sh/setup-uv@v5 + - uses: actions/checkout@v5 + - uses: astral-sh/setup-uv@v8 with: python-version: ${{ matrix.python }} - name: Retrieve pre-built distribution files @@ -103,8 +103,8 @@ jobs: permissions: contents: write steps: - - uses: actions/checkout@v4 - - uses: astral-sh/setup-uv@v5 + - uses: actions/checkout@v5 + - uses: astral-sh/setup-uv@v8 - name: Retrieve pre-built distribution files uses: actions/download-artifact@v4 with: {name: python-distribution-files, path: dist/} From ecf9d73754df2497ecb52417b051835f367609bd Mon Sep 17 00:00:00 2001 From: Fabian Hommel Date: Tue, 28 Apr 2026 11:46:09 +0200 Subject: [PATCH 81/87] Pinned exact version of uv github action --- .github/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f9b1444..ef2fd2e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -34,7 +34,7 @@ jobs: steps: - uses: actions/checkout@v5 with: {fetch-depth: 0} # deep clone for hatch-scm - - uses: astral-sh/setup-uv@v8 + - uses: astral-sh/setup-uv@v8.1.0 - name: Run static analysis and format checkers run: uv run pre-commit run --all-files --show-diff-on-failure - name: Build package distribution files @@ -68,7 +68,7 @@ jobs: runs-on: ${{ matrix.platform }} steps: - uses: actions/checkout@v5 - - uses: astral-sh/setup-uv@v8 + - uses: astral-sh/setup-uv@v8.1.0 with: python-version: ${{ matrix.python }} - name: Retrieve pre-built distribution files @@ -104,7 +104,7 @@ jobs: contents: write steps: - uses: actions/checkout@v5 - - uses: astral-sh/setup-uv@v8 + - uses: astral-sh/setup-uv@v8.1.0 - name: Retrieve pre-built distribution files uses: actions/download-artifact@v4 with: {name: python-distribution-files, path: dist/} From cb65c2a13fde2c6b471f794a2b4144244c287497 Mon Sep 17 00:00:00 2001 From: Fabian Hommel Date: Tue, 28 Apr 2026 11:56:48 +0200 Subject: [PATCH 82/87] fixed ruff error in pyproject.toml --- pyproject.toml | 6 ++++-- tests/test_bilin.py | 16 ++++++++++------ tests/test_chainable_array.py | 13 +++++++++---- tests/test_clip.py | 3 ++- tests/test_cps_octave_cps.py | 4 +++- tests/test_curvelin.py | 19 ++++++++++++++----- tests/test_db_amp_db.py | 4 ++-- tests/test_distort.py | 8 ++++---- tests/test_ecdf.py | 7 +++---- tests/test_explin.py | 10 +++++----- tests/test_fermi.py | 5 +++-- tests/test_fold.py | 2 +- tests/test_gain.py | 5 ++--- tests/test_hz_mel_hz.py | 22 +++++++++++++++------- tests/test_lcurve.py | 4 ++-- tests/test_lincurve.py | 6 ++++-- tests/test_linexp.py | 5 +++-- tests/test_linlin.py | 3 ++- tests/test_linpoly.py | 22 ++++++++++++++++------ tests/test_midi_cps_midi.py | 5 ++--- tests/test_midi_ratio_midi.py | 6 ++---- tests/test_norm_peak.py | 5 ++--- tests/test_normalize.py | 4 ++-- tests/test_remove_dc.py | 2 +- tests/test_scurve.py | 4 ++-- tests/test_softclip.py | 4 ++-- tests/test_wrap.py | 5 ++--- 27 files changed, 119 insertions(+), 80 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 74fe6da..0e97942 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -48,10 +48,12 @@ dev-dependencies = ["tox", "pytest", "pytest-cov", "pre-commit", "sphinx"] [tool.ruff] line-length = 88 -lint.select = ["E", "F", "I", "T10"] # E/F = flake8, I = isort + +[tool.ruff.lint] +select = ["E", "F", "I", "T10"] # E/F = flake8, I = isort [tool.ruff.lint.isort] -known_first_party = "pyamapping" +known-first-party = ["pyamapping"] [tool.ruff.lint.pydocstyle] convention = "numpy" diff --git a/tests/test_bilin.py b/tests/test_bilin.py index e88dc99..296bbfb 100644 --- a/tests/test_bilin.py +++ b/tests/test_bilin.py @@ -2,8 +2,8 @@ import pytest from numpy.testing import assert_allclose -from pyamapping.mappings import interp_spline, bilin -from pyamapping.chainable_array import ChainableArray, chain +from pyamapping.chainable_array import ChainableArray +from pyamapping.mappings import bilin, interp_spline class TestInterpSplineLinear: @@ -46,7 +46,7 @@ class TestInterpSplineReturnType: def test_chainable_array_input_returns_plain_ndarray(self): x = ChainableArray(np.array([0.0, 0.5, 1.0])) result = interp_spline(x, [-1, 0, 1], [-1, 0, 1]) - assert type(result) == np.ndarray + assert isinstance(result, np.ndarray) def test_plain_array_input_returns_chainable_array(self): x = np.array([0.0, 0.5, 1.0]) @@ -87,6 +87,10 @@ def test_symmetric_mapping(self): def test_two_slopes_differ(self): # slope left of xcenter: (-20-0)/(20-60) = 0.5 # slope right of xcenter: (60-0)/(80-60) = 3.0 - slope_left = (bilin(40, 60, 20, 80, 0, -20, 60) - bilin(20, 60, 20, 80, 0, -20, 60)) / 20 - slope_right = (bilin(80, 60, 20, 80, 0, -20, 60) - bilin(60, 60, 20, 80, 0, -20, 60)) / 20 - assert slope_left != pytest.approx(slope_right) \ No newline at end of file + slope_left = ( + bilin(40, 60, 20, 80, 0, -20, 60) - bilin(20, 60, 20, 80, 0, -20, 60) + ) / 20 + slope_right = ( + bilin(80, 60, 20, 80, 0, -20, 60) - bilin(60, 60, 20, 80, 0, -20, 60) + ) / 20 + assert slope_left != pytest.approx(slope_right) diff --git a/tests/test_chainable_array.py b/tests/test_chainable_array.py index 3587028..81657e2 100644 --- a/tests/test_chainable_array.py +++ b/tests/test_chainable_array.py @@ -1,9 +1,10 @@ -import pytest import numpy as np +import pytest from numpy.testing import assert_allclose from pyamapping.chainable_array import ChainableArray, chain + class TestChainableArrayCreation: """Test ChainableArray instantiation and type.""" @@ -84,7 +85,11 @@ def test_passes_args(self): def test_raises_type_error_for_scalar_only_function(self): a = ChainableArray([1.0, 2.0, 3.0]) with pytest.raises(TypeError, match="Use .mapvec()"): - a.map(lambda x: x + 1 if isinstance(x, float) else (_ for _ in ()).throw(TypeError())) + a.map( + lambda x: x + 1 + if isinstance(x, float) + else (_ for _ in ()).throw(TypeError()) + ) def test_chaining(self): a = ChainableArray([1.0, 2.0, 3.0]) @@ -97,7 +102,7 @@ class TestChainableArrayMapvec: def test_applies_scalar_function_elementwise(self): a = ChainableArray([1.0, 2.0, 3.0]) - result = a.mapvec(lambda x: x ** 2) + result = a.mapvec(lambda x: x**2) assert_allclose(result, [1.0, 4.0, 9.0]) def test_returns_chainable_array(self): @@ -130,4 +135,4 @@ def test_dynamic_method_returns_string(self): def test_unknown_attribute_raises_attribute_error(self): a = ChainableArray([1.0, 2.0]) with pytest.raises(AttributeError): - _ = a.nonexistent_method \ No newline at end of file + _ = a.nonexistent_method diff --git a/tests/test_clip.py b/tests/test_clip.py index f37358d..b059a61 100644 --- a/tests/test_clip.py +++ b/tests/test_clip.py @@ -4,6 +4,7 @@ from pyamapping.mappings import clip + class TestClipScalar: """Test clipping of scalar float/int values.""" @@ -86,4 +87,4 @@ def test_same_result_for_value_within(self): assert clip(4, 3, 5) == clip(np.array([4]), 3, 5)[0] def test_same_result_for_value_above(self): - assert clip(7, 3, 5) == clip(np.array([7]), 3, 5)[0] \ No newline at end of file + assert clip(7, 3, 5) == clip(np.array([7]), 3, 5)[0] diff --git a/tests/test_cps_octave_cps.py b/tests/test_cps_octave_cps.py index ca09010..da8b332 100644 --- a/tests/test_cps_octave_cps.py +++ b/tests/test_cps_octave_cps.py @@ -58,4 +58,6 @@ def test_cps_to_octave_to_cps(self): def test_octave_to_cps_to_octave(self): for octave in [1.0, 2.75, 3.75, 4.0, 4.75, 5.75, 7.0]: - assert cps_to_octave(octave_to_cps(octave)) == pytest.approx(octave, rel=1e-9) \ No newline at end of file + assert cps_to_octave(octave_to_cps(octave)) == pytest.approx( + octave, rel=1e-9 + ) diff --git a/tests/test_curvelin.py b/tests/test_curvelin.py index a3c9cbf..32b9d88 100644 --- a/tests/test_curvelin.py +++ b/tests/test_curvelin.py @@ -1,9 +1,10 @@ -import pytest import numpy as np +import pytest from numpy.testing import assert_allclose from pyamapping.mappings import curvelin, lincurve + class TestCurvelinEndpoints: """Test that x1->y1 and x2->y2 mappings are exact.""" @@ -93,7 +94,9 @@ def test_clip_min_does_not_affect_upper_values(self): assert curvelin(0.5, 0, 1, 0, 1, curve=0.0, clip="min") == pytest.approx(0.5) def test_clip_minmax_caps_both_sides(self): - assert curvelin(-1.0, 0, 1, 0, 1, curve=0.0, clip="minmax") == pytest.approx(0.0) + assert curvelin(-1.0, 0, 1, 0, 1, curve=0.0, clip="minmax") == pytest.approx( + 0.0 + ) assert curvelin(2.0, 0, 1, 0, 1, curve=0.0, clip="minmax") == pytest.approx(1.0) def test_clip_unknown_string_implies_minmax(self): @@ -101,7 +104,9 @@ def test_clip_unknown_string_implies_minmax(self): assert curvelin(2.0, 0, 1, 0, 1, curve=0.0, clip="both") == pytest.approx(1.0) def test_clip_minmax_array_input(self): - result = curvelin(np.array([-1.0, 0.5, 2.0]), 0, 1, 0, 1, curve=0.0, clip="minmax") + result = curvelin( + np.array([-1.0, 0.5, 2.0]), 0, 1, 0, 1, curve=0.0, clip="minmax" + ) assert_allclose(result, [0.0, 0.5, 1.0]) @@ -110,8 +115,12 @@ class TestCurvelinVsLincurve: def test_curvelin_is_inverse_of_lincurve(self): for x in [0.1, 0.3, 0.5, 0.7, 0.9]: - assert curvelin(lincurve(x, 0, 1, 0, 1), 0, 1, 0, 1) == pytest.approx(x, rel=1e-6) + assert curvelin(lincurve(x, 0, 1, 0, 1), 0, 1, 0, 1) == pytest.approx( + x, rel=1e-6 + ) def test_lincurve_is_inverse_of_curvelin(self): for x in [0.1, 0.3, 0.5, 0.7, 0.9]: - assert lincurve(curvelin(x, 0, 1, 0, 1), 0, 1, 0, 1) == pytest.approx(x, rel=1e-6) \ No newline at end of file + assert lincurve(curvelin(x, 0, 1, 0, 1), 0, 1, 0, 1) == pytest.approx( + x, rel=1e-6 + ) diff --git a/tests/test_db_amp_db.py b/tests/test_db_amp_db.py index c984eb6..e976ba2 100644 --- a/tests/test_db_amp_db.py +++ b/tests/test_db_amp_db.py @@ -1,6 +1,6 @@ import pytest -from pyamapping.mappings import db_to_amp, amp_to_db +from pyamapping.mappings import amp_to_db, db_to_amp class TestDbToAmp: @@ -65,4 +65,4 @@ def test_amp_to_db_to_amp(self): def test_negative_db_roundtrip(self): for db in [-60, -40, -20, -6]: - assert amp_to_db(db_to_amp(db)) == pytest.approx(db, rel=1e-9) \ No newline at end of file + assert amp_to_db(db_to_amp(db)) == pytest.approx(db, rel=1e-9) diff --git a/tests/test_distort.py b/tests/test_distort.py index 1c002b0..718606f 100644 --- a/tests/test_distort.py +++ b/tests/test_distort.py @@ -1,5 +1,5 @@ -import pytest import numpy as np +import pytest from numpy.testing import assert_allclose from pyamapping.mappings import distort @@ -42,7 +42,7 @@ class TestDistortArray: def test_known_values(self): assert_allclose( distort([0, 1, 2, 3], threshold=1), - [0.0, 0.5, 2/3, 0.75], + [0.0, 0.5, 2 / 3, 0.75], rtol=1e-6, ) @@ -59,7 +59,7 @@ def test_array_output_bounded(self): def test_custom_threshold_array(self): assert_allclose( distort(np.array([0, 1, 2]), threshold=2.0), - [0.0, 1/3, 0.5], + [0.0, 1 / 3, 0.5], rtol=1e-6, ) @@ -79,4 +79,4 @@ def test_output_range_is_open_minus_one_to_one(self): def test_monotonically_increasing(self): x = np.linspace(-10, 10, 100) - result = distort(x) \ No newline at end of file + _ = distort(x) diff --git a/tests/test_ecdf.py b/tests/test_ecdf.py index 749724c..180940f 100644 --- a/tests/test_ecdf.py +++ b/tests/test_ecdf.py @@ -2,7 +2,7 @@ import pytest from numpy.testing import assert_allclose -from pyamapping.mappings import interp, ecdf, ecdf_to_lin, lin_to_ecdf +from pyamapping.mappings import ecdf, ecdf_to_lin, interp, lin_to_ecdf class TestEcdf: @@ -89,7 +89,7 @@ def test_max_maps_to_one(self): def test_below_min_clips_to_zero(self): ref = np.array([1.0, 2.0, 3.0]) - assert lin_to_ecdf(0.0, ref) == pytest.approx(1/3) + assert lin_to_ecdf(0.0, ref) == pytest.approx(1 / 3) def test_above_max_clips_to_one(self): ref = np.array([1.0, 2.0, 3.0]) @@ -110,7 +110,6 @@ def test_monotonically_increasing(self): assert np.all(np.diff(result) >= 0) - class TestEcdfToLin: """Test inverse ECDF mapping (quantiles back to feature values).""" @@ -172,4 +171,4 @@ def test_ecdf_to_lin_to_ecdf(self): def test_roundtrip_unsorted_ref(self): ref = np.array([3.0, 1.0, 4.0, 2.0, 5.0]) quantiles = lin_to_ecdf(np.sort(ref), ref) - assert_allclose(ecdf_to_lin(quantiles, ref), np.sort(ref), rtol=1e-6) \ No newline at end of file + assert_allclose(ecdf_to_lin(quantiles, ref), np.sort(ref), rtol=1e-6) diff --git a/tests/test_explin.py b/tests/test_explin.py index 0dc3ad6..ee1dfac 100644 --- a/tests/test_explin.py +++ b/tests/test_explin.py @@ -1,5 +1,5 @@ -import pytest import numpy as np +import pytest from numpy.testing import assert_allclose from pyamapping.mappings import explin, linexp @@ -88,9 +88,7 @@ def test_clip_inverted_y_range(self): ) def test_clip_minmax_array_input(self): - result = explin( - np.array([0.0001, 0.01, 2.0]), 0.001, 1.0, 0, 1, clip="minmax" - ) + result = explin(np.array([0.0001, 0.01, 2.0]), 0.001, 1.0, 0, 1, clip="minmax") assert_allclose(result, [0.0, explin(0.01, 0.001, 1.0, 0, 1), 1.0]) @@ -111,4 +109,6 @@ def test_equal_ratios_in_x_give_equal_steps_in_y(self): def test_explin_is_inverse_of_linexp(self): # explin and linexp should be inverses of each other for x in [220.0, 311.0, 440.0]: - assert explin(linexp(x, 220, 440, 220, 440), 220, 440, 220, 440) == pytest.approx(x, rel=1e-9) \ No newline at end of file + assert explin( + linexp(x, 220, 440, 220, 440), 220, 440, 220, 440 + ) == pytest.approx(x, rel=1e-9) diff --git a/tests/test_fermi.py b/tests/test_fermi.py index e246804..bdb2252 100644 --- a/tests/test_fermi.py +++ b/tests/test_fermi.py @@ -1,9 +1,10 @@ -import pytest import numpy as np +import pytest from numpy.testing import assert_allclose from pyamapping.mappings import fermi, lcurve + class TestFermiDefaultParams: """Test fermi function with default parameters (tau=1, mu=0).""" @@ -86,4 +87,4 @@ def test_default_params_match_lcurve(self): def test_tau_param_matches_lcurve(self): x = np.linspace(-3, 3, 50) - assert_allclose(fermi(x, tau=2.0), lcurve(x, tau=2.0), rtol=1e-9) \ No newline at end of file + assert_allclose(fermi(x, tau=2.0), lcurve(x, tau=2.0), rtol=1e-9) diff --git a/tests/test_fold.py b/tests/test_fold.py index e4dae97..2761b31 100644 --- a/tests/test_fold.py +++ b/tests/test_fold.py @@ -89,4 +89,4 @@ def test_array_input_returns_ndarray(self): assert isinstance(fold(np.array([0.0, 1.0])), np.ndarray) def test_scalar_input_returns_scalar(self): - assert isinstance(float(fold(0.5)), float) \ No newline at end of file + assert isinstance(float(fold(0.5)), float) diff --git a/tests/test_gain.py b/tests/test_gain.py index 27a7efd..1b7f7cb 100644 --- a/tests/test_gain.py +++ b/tests/test_gain.py @@ -1,8 +1,7 @@ import numpy as np -import pytest from numpy.testing import assert_allclose -from pyamapping.mappings import gain, db_to_amp +from pyamapping.mappings import db_to_amp, gain class TestGainAmp: @@ -76,4 +75,4 @@ def test_shape_preserved(self): def test_negative_amp_inverts_polarity(self): x = np.array([1.0, -2.0, 3.0]) - assert_allclose(gain(x, amp=-1.0), [-1.0, 2.0, -3.0]) \ No newline at end of file + assert_allclose(gain(x, amp=-1.0), [-1.0, 2.0, -3.0]) diff --git a/tests/test_hz_mel_hz.py b/tests/test_hz_mel_hz.py index 3d40850..7fc1bb3 100644 --- a/tests/test_hz_mel_hz.py +++ b/tests/test_hz_mel_hz.py @@ -1,8 +1,9 @@ -import pytest import numpy as np +import pytest from pyamapping.mappings import hz_to_mel, mel_to_hz + class TestHzToMel: """Test Hz to mel conversion for both Slaney and HTK formulas.""" @@ -17,7 +18,9 @@ def test_known_value_slaney(self): def test_known_value_htk(self): # 440 Hz -> mel via O'Shaughnessy formula - assert hz_to_mel(440, htk=True) == pytest.approx(2595 * np.log10(1 + 440 / 700), rel=1e-6) + assert hz_to_mel(440, htk=True) == pytest.approx( + 2595 * np.log10(1 + 440 / 700), rel=1e-6 + ) def test_linear_regime_below_1000hz(self): # Slaney: linear law applies below 1000 Hz @@ -49,9 +52,10 @@ def test_zero_mel_is_zero_hz_htk(self): def test_known_value_slaney(self): assert mel_to_hz(6.6) == pytest.approx(440.0, rel=1e-6) - def test_known_value_htk(self): - assert mel_to_hz(2595 * np.log10(1 + 440 / 700), htk=True) == pytest.approx(440, rel=1e-6) + assert mel_to_hz(2595 * np.log10(1 + 440 / 700), htk=True) == pytest.approx( + 440, rel=1e-6 + ) def test_linear_regime_below_mel_15(self): # Slaney: linear law applies below mel=15 @@ -79,12 +83,16 @@ def test_mel_to_hz_to_mel_slaney(self): def test_hz_to_mel_to_hz_htk(self): for hz in [100, 440, 1000, 4000, 8000]: - assert mel_to_hz(hz_to_mel(hz, htk=True), htk=True) == pytest.approx(hz, rel=1e-9) + assert mel_to_hz(hz_to_mel(hz, htk=True), htk=True) == pytest.approx( + hz, rel=1e-9 + ) def test_mel_to_hz_to_mel_htk(self): for mel in [100, 500, 1000, 2000]: - assert hz_to_mel(mel_to_hz(mel, htk=True), htk=True) == pytest.approx(mel, rel=1e-9) + assert hz_to_mel(mel_to_hz(mel, htk=True), htk=True) == pytest.approx( + mel, rel=1e-9 + ) def test_htk_and_slaney_differ(self): # The two formulas are different — their results should not be equal - assert hz_to_mel(440, htk=True) != pytest.approx(hz_to_mel(440, htk=False)) \ No newline at end of file + assert hz_to_mel(440, htk=True) != pytest.approx(hz_to_mel(440, htk=False)) diff --git a/tests/test_lcurve.py b/tests/test_lcurve.py index 71773cd..ceb185c 100644 --- a/tests/test_lcurve.py +++ b/tests/test_lcurve.py @@ -1,5 +1,5 @@ -import pytest import numpy as np +import pytest from numpy.testing import assert_allclose from pyamapping.mappings import lcurve @@ -73,4 +73,4 @@ def test_scalar_input_returns_scalar(self): assert isinstance(float(lcurve(0.5)), float) def test_array_input_returns_ndarray(self): - assert isinstance(lcurve(np.array([0.0, 1.0])), np.ndarray) \ No newline at end of file + assert isinstance(lcurve(np.array([0.0, 1.0])), np.ndarray) diff --git a/tests/test_lincurve.py b/tests/test_lincurve.py index 946b97d..42ae8e0 100644 --- a/tests/test_lincurve.py +++ b/tests/test_lincurve.py @@ -114,7 +114,9 @@ def test_clip_min_does_not_affect_upper_values(self): assert result == pytest.approx(0.5) def test_clip_minmax_caps_both_sides(self): - assert lincurve(-1.0, 0, 1, 0, 1, curve=0.0, clip="minmax") == pytest.approx(0.0) + assert lincurve(-1.0, 0, 1, 0, 1, curve=0.0, clip="minmax") == pytest.approx( + 0.0 + ) assert lincurve(2.0, 0, 1, 0, 1, curve=0.0, clip="minmax") == pytest.approx(1.0) def test_clip_unknown_string_implies_minmax(self): @@ -125,4 +127,4 @@ def test_clip_unknown_string_implies_minmax(self): def test_clip_minmax_array_input(self): x = np.array([-1.0, 0.0, 0.5, 1.0, 2.0]) result = lincurve(x, 0, 1, 0, 1, curve=0.0, clip="minmax") - assert_allclose(result, [0.0, 0.0, 0.5, 1.0, 1.0]) \ No newline at end of file + assert_allclose(result, [0.0, 0.0, 0.5, 1.0, 1.0]) diff --git a/tests/test_linexp.py b/tests/test_linexp.py index d215111..b493c99 100644 --- a/tests/test_linexp.py +++ b/tests/test_linexp.py @@ -1,9 +1,10 @@ -import pytest import numpy as np +import pytest from numpy.testing import assert_allclose from pyamapping.mappings import linexp + class TestLinexpEndpoints: """Test that x1->y1 and x2->y2 mappings are exact.""" @@ -101,4 +102,4 @@ def test_ratio_of_outputs_depends_only_on_ratio_of_inputs(self): y1 = linexp(1.0, 0, 3, 1, 8) y2 = linexp(2.0, 0, 3, 1, 8) y3 = linexp(3.0, 0, 3, 1, 8) - assert y2 / y1 == pytest.approx(y3 / y2, rel=1e-6) \ No newline at end of file + assert y2 / y1 == pytest.approx(y3 / y2, rel=1e-6) diff --git a/tests/test_linlin.py b/tests/test_linlin.py index 51eaa08..6cdc47f 100644 --- a/tests/test_linlin.py +++ b/tests/test_linlin.py @@ -4,6 +4,7 @@ from pyamapping.mappings import linlin + class TestLinlinEndpoints: """Test that x1->y1 and x2->y2 mappings are exact.""" @@ -88,4 +89,4 @@ def test_clip_min_inverted_range(self): def test_clip_minmax_array_input(self): result = linlin(np.array([-10.0, 50.0, 110.0]), 0, 100, 0, 1, clip="minmax") - assert_allclose(result, [0.0, 0.5, 1.0]) \ No newline at end of file + assert_allclose(result, [0.0, 0.5, 1.0]) diff --git a/tests/test_linpoly.py b/tests/test_linpoly.py index 3c1b028..99d914d 100644 --- a/tests/test_linpoly.py +++ b/tests/test_linpoly.py @@ -49,7 +49,9 @@ def test_negative_curve_order(self): # curve=-1 -> order = 1/(1-(-1)) = 0.5 (square root) order = 1 / (1 - (-1)) expected = 0 + 1 * (1 + (0.5 / 1.0) ** order) / 2 - assert linpoly(0.5, xmax=1.0, y1=0.0, y2=1.0, curve=-1) == pytest.approx(expected) + assert linpoly(0.5, xmax=1.0, y1=0.0, y2=1.0, curve=-1) == pytest.approx( + expected + ) class TestLinpolyProperties: @@ -58,7 +60,9 @@ class TestLinpolyProperties: def test_odd_symmetry_around_midpoint(self): # linpoly(-x) and linpoly(x) should be symmetric around the output midpoint for x in [0.25, 0.5, 0.75, 1.0]: - assert linpoly(x, y1=0.0, y2=1.0) + linpoly(-x, y1=0.0, y2=1.0) == pytest.approx(1.0) + assert linpoly(x, y1=0.0, y2=1.0) + linpoly( + -x, y1=0.0, y2=1.0 + ) == pytest.approx(1.0) def test_monotonically_increasing(self): x = np.linspace(-1, 1, 200) @@ -81,14 +85,20 @@ def test_clip_min_caps_at_y1(self): assert linpoly(-2.0, xmax=1.0, y1=0.0, y2=1.0, clip="min") == pytest.approx(0.0) def test_clip_minmax_caps_both_sides(self): - assert linpoly(2.0, xmax=1.0, y1=0.0, y2=1.0, clip="minmax") == pytest.approx(1.0) - assert linpoly(-2.0, xmax=1.0, y1=0.0, y2=1.0, clip="minmax") == pytest.approx(0.0) + assert linpoly(2.0, xmax=1.0, y1=0.0, y2=1.0, clip="minmax") == pytest.approx( + 1.0 + ) + assert linpoly(-2.0, xmax=1.0, y1=0.0, y2=1.0, clip="minmax") == pytest.approx( + 0.0 + ) def test_clip_unknown_string_implies_minmax(self): assert linpoly(2.0, xmax=1.0, y1=0.0, y2=1.0, clip="both") == pytest.approx(1.0) - assert linpoly(-2.0, xmax=1.0, y1=0.0, y2=1.0, clip="both") == pytest.approx(0.0) + assert linpoly(-2.0, xmax=1.0, y1=0.0, y2=1.0, clip="both") == pytest.approx( + 0.0 + ) def test_clip_does_not_affect_values_within_range(self): assert linpoly(0.5, xmax=1.0, y1=0.0, y2=1.0, clip="minmax") == pytest.approx( linpoly(0.5, xmax=1.0, y1=0.0, y2=1.0) - ) \ No newline at end of file + ) diff --git a/tests/test_midi_cps_midi.py b/tests/test_midi_cps_midi.py index e5de271..b804389 100644 --- a/tests/test_midi_cps_midi.py +++ b/tests/test_midi_cps_midi.py @@ -1,7 +1,6 @@ -import numpy as np import pytest -from pyamapping.mappings import midi_to_cps, cps_to_midi +from pyamapping.mappings import cps_to_midi, midi_to_cps class TestMidiToCps: @@ -66,4 +65,4 @@ def test_cps_to_midi_to_cps(self): assert midi_to_cps(cps_to_midi(cps)) == pytest.approx(cps, rel=1e-9) def test_fractional_roundtrip(self): - assert cps_to_midi(midi_to_cps(60.5)) == pytest.approx(60.5, rel=1e-9) \ No newline at end of file + assert cps_to_midi(midi_to_cps(60.5)) == pytest.approx(60.5, rel=1e-9) diff --git a/tests/test_midi_ratio_midi.py b/tests/test_midi_ratio_midi.py index 2bdc78b..3bc9454 100644 --- a/tests/test_midi_ratio_midi.py +++ b/tests/test_midi_ratio_midi.py @@ -1,6 +1,4 @@ -import numpy as np import pytest -from numpy.testing import assert_allclose from pyamapping.mappings import midi_to_ratio, ratio_to_midi @@ -24,7 +22,7 @@ def test_negative_interval_inverts_ratio(self): assert midi_to_ratio(-12) == pytest.approx(0.5) def test_fractional_interval(self): - assert midi_to_ratio(6.0) == pytest.approx(2 ** 0.5, rel=1e-9) + assert midi_to_ratio(6.0) == pytest.approx(2**0.5, rel=1e-9) class TestRatioToMidi: @@ -58,4 +56,4 @@ def test_ratio_to_midi_to_ratio(self): assert midi_to_ratio(ratio_to_midi(ratio)) == pytest.approx(ratio, rel=1e-9) def test_fractional_roundtrip(self): - assert ratio_to_midi(midi_to_ratio(3.5)) == pytest.approx(3.5, rel=1e-9) \ No newline at end of file + assert ratio_to_midi(midi_to_ratio(3.5)) == pytest.approx(3.5, rel=1e-9) diff --git a/tests/test_norm_peak.py b/tests/test_norm_peak.py index 92e7e53..34c93e7 100644 --- a/tests/test_norm_peak.py +++ b/tests/test_norm_peak.py @@ -5,7 +5,6 @@ from pyamapping.mappings import norm_peak - class TestNormPeakDefaultPeak: """Test peak normalization with default peak=1.0.""" @@ -42,7 +41,7 @@ def test_custom_peak_known_array(self): def test_scaling_is_linear(self): x = np.array([1.0, 2.0, 3.0]) result = norm_peak(x, peak=2.0) - assert_allclose(result, [2/3, 4/3, 2.0]) + assert_allclose(result, [2 / 3, 4 / 3, 2.0]) def test_ratios_between_elements_preserved(self): x = np.array([1.0, 2.0, 4.0]) @@ -76,4 +75,4 @@ def test_single_element_array(self): assert norm_peak(np.array([5.0])) == pytest.approx(1.0) def test_single_negative_element(self): - assert norm_peak(np.array([-5.0])) == pytest.approx(-1.0) \ No newline at end of file + assert norm_peak(np.array([-5.0])) == pytest.approx(-1.0) diff --git a/tests/test_normalize.py b/tests/test_normalize.py index e5d5c64..c6a5e14 100644 --- a/tests/test_normalize.py +++ b/tests/test_normalize.py @@ -1,5 +1,5 @@ -import pytest import numpy as np +import pytest from numpy.testing import assert_allclose from pyamapping.mappings import normalize @@ -83,4 +83,4 @@ def test_linear_mapping_preserves_order(self): def test_already_normalized_input(self): x = np.array([-1.0, 0.0, 1.0]) - assert_allclose(normalize(x), x) \ No newline at end of file + assert_allclose(normalize(x), x) diff --git a/tests/test_remove_dc.py b/tests/test_remove_dc.py index 4c1b222..87c2483 100644 --- a/tests/test_remove_dc.py +++ b/tests/test_remove_dc.py @@ -67,4 +67,4 @@ def test_idempotent(self): def test_variance_preserved(self): # DC removal does not change variance x = np.array([1.0, 2.0, 3.0, 4.0]) - assert np.var(remove_dc(x)) == pytest.approx(np.var(x)) \ No newline at end of file + assert np.var(remove_dc(x)) == pytest.approx(np.var(x)) diff --git a/tests/test_scurve.py b/tests/test_scurve.py index 86713ca..4f58194 100644 --- a/tests/test_scurve.py +++ b/tests/test_scurve.py @@ -1,5 +1,5 @@ -import pytest import numpy as np +import pytest from numpy.testing import assert_allclose from pyamapping.mappings import scurve @@ -72,4 +72,4 @@ def test_scalar_input_returns_float(self): assert isinstance(scurve(0.5), float) def test_array_input_returns_ndarray(self): - assert isinstance(scurve(np.array([0.25, 0.75])), np.ndarray) \ No newline at end of file + assert isinstance(scurve(np.array([0.25, 0.75])), np.ndarray) diff --git a/tests/test_softclip.py b/tests/test_softclip.py index a1a897e..ac70aa6 100644 --- a/tests/test_softclip.py +++ b/tests/test_softclip.py @@ -1,5 +1,5 @@ -import pytest import numpy as np +import pytest from numpy.testing import assert_allclose from pyamapping.mappings import softclip @@ -77,4 +77,4 @@ def test_scalar_input_returns_float(self): assert isinstance(softclip(1.0), float) def test_array_input_returns_ndarray(self): - assert isinstance(softclip(np.array([0.3, 1.0])), np.ndarray) \ No newline at end of file + assert isinstance(softclip(np.array([0.3, 1.0])), np.ndarray) diff --git a/tests/test_wrap.py b/tests/test_wrap.py index 039085b..3425074 100644 --- a/tests/test_wrap.py +++ b/tests/test_wrap.py @@ -1,5 +1,5 @@ -import pytest import numpy as np +import pytest from numpy.testing import assert_allclose from pyamapping.mappings import wrap @@ -62,9 +62,8 @@ def test_periodic_with_period_equal_to_range(self): x = np.linspace(-5, 5, 50) assert_allclose(wrap(x, 0, period), wrap(x + period, 0, period)) - def test_array_input_returns_ndarray(self): assert isinstance(wrap(np.array([0.0, 1.0])), np.ndarray) def test_scalar_input_returns_scalar(self): - assert isinstance(float(wrap(0.5)), float) \ No newline at end of file + assert isinstance(float(wrap(0.5)), float) From 5a69e557a33177e4ed54e44afdde9f20e9040651 Mon Sep 17 00:00:00 2001 From: Fabian Hommel Date: Tue, 28 Apr 2026 12:00:26 +0200 Subject: [PATCH 83/87] corrected indentation of conftest --- tests/conftest.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 8800d29..7c034fa 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,10 +1,10 @@ """ - Dummy conftest.py for pyamapping. +Dummy conftest.py for pyamapping. - If you don't know what this is for, just leave it empty. - Read more about conftest.py under: - - https://docs.pytest.org/en/stable/fixture.html - - https://docs.pytest.org/en/stable/writing_plugins.html +If you don't know what this is for, just leave it empty. +Read more about conftest.py under: +- https://docs.pytest.org/en/stable/fixture.html +- https://docs.pytest.org/en/stable/writing_plugins.html """ # import pytest From acfe10c4d8e49ed160bc797eb9a461ad882baee5 Mon Sep 17 00:00:00 2001 From: Fabian Hommel Date: Tue, 28 Apr 2026 14:53:37 +0200 Subject: [PATCH 84/87] Switched to manual versioning --- .pre-commit-config.yaml | 2 +- notebooks/pyamapping-examples.ipynb | 991 ++++++++++++---------------- pyproject.toml | 13 +- uv.lock | 142 ++-- 4 files changed, 497 insertions(+), 651 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index c7c5a42..76d97eb 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,4 +1,4 @@ -exclude: '^docs/conf.py' +exclude: '^docs/conf.py|^uv\.lock$' repos: - repo: https://github.com/pre-commit/pre-commit-hooks diff --git a/notebooks/pyamapping-examples.ipynb b/notebooks/pyamapping-examples.ipynb index e4934fb..fa0f611 100644 --- a/notebooks/pyamapping-examples.ipynb +++ b/notebooks/pyamapping-examples.ipynb @@ -67,19 +67,21 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "2", "metadata": {}, "outputs": [], "source": [ - "import numpy as np\n", + "from pprint import pprint\n", + "\n", "import matplotlib as mpl\n", "import matplotlib.pyplot as plt\n", - "from pprint import pprint\n", + "import numpy as np\n", + "\n", "import pyamapping as pam\n", "from pyamapping import chain\n", "\n", - "mpl.rcParams['figure.figsize'] = (9, 2.5)" + "mpl.rcParams[\"figure.figsize\"] = (9, 2.5)" ] }, { @@ -96,49 +98,14 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "4", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "=== numpy functions with 1 argument ===\n", - "['absolute', 'absolute', 'arccos', 'arccosh', 'arccos', 'arccosh', 'arcsin',\n", - " 'arcsinh', 'arctan', 'arctanh', 'arcsin', 'arcsinh', 'arctan', 'arctanh',\n", - " 'bitwise_count', 'invert', 'invert', 'cbrt', 'ceil', 'conjugate', 'conjugate',\n", - " 'cos', 'cosh', 'deg2rad', 'degrees', 'exp', 'exp2', 'expm1', 'fabs', 'floor',\n", - " 'frexp', 'invert', 'isfinite', 'isinf', 'isnan', 'isnat', 'log', 'log10',\n", - " 'log1p', 'log2', 'logical_not', 'modf', 'negative', 'positive', 'rad2deg',\n", - " 'radians', 'reciprocal', 'rint', 'sign', 'signbit', 'sin', 'sinh', 'spacing',\n", - " 'sqrt', 'square', 'tan', 'tanh', 'trunc']\n", - "\n", - "=== numpy functions with 2 argument ===\n", - "['add', 'arctan2', 'arctan2', 'bitwise_and', 'left_shift', 'bitwise_or',\n", - " 'right_shift', 'bitwise_xor', 'copysign', 'divide', 'divmod', 'equal',\n", - " 'float_power', 'floor_divide', 'fmax', 'fmin', 'fmod', 'gcd', 'greater',\n", - " 'greater_equal', 'heaviside', 'hypot', 'lcm', 'ldexp', 'left_shift', 'less',\n", - " 'less_equal', 'logaddexp', 'logaddexp2', 'logical_and', 'logical_or',\n", - " 'logical_xor', 'matmul', 'matvec', 'maximum', 'minimum', 'remainder',\n", - " 'multiply', 'nextafter', 'not_equal', 'power', 'power', 'remainder',\n", - " 'right_shift', 'subtract', 'divide', 'vecdot', 'vecmat']\n", - "\n", - "=== pyamapping functions: ===\n", - "['amp_to_db', 'bilin', 'clip', 'cps_to_midi', 'cps_to_octave', 'curvelin',\n", - " 'db_to_amp', 'distort', 'ecdf_to_lin', 'ecdf', 'explin', 'fermi', 'fold',\n", - " 'gain', 'hz_to_mel', 'interp_spline', 'interp', 'lcurve', 'lin_to_ecdf',\n", - " 'lincurve', 'linexp', 'linlin', 'linpoly', 'mel_to_hz', 'midi_to_cps',\n", - " 'midi_to_ratio', 'norm_peak', 'norm_rms', 'normalize', 'octave_to_cps',\n", - " 'ratio_to_midi', 'remove_dc', 'scurve', 'softclip', 'wrap']\n" - ] - } - ], + "outputs": [], "source": [ "from pyamapping import _list_numpy_ufuncs, pyamapping_functions\n", "\n", - "# print (i) a compact list of all unary and binary numpy functions \n", + "# print (i) a compact list of all unary and binary numpy functions\n", "# and (ii) all pyamapping functions\n", "u_lists = [[], []]\n", "\n", @@ -147,12 +114,12 @@ "\n", "# compact list numpy functions\n", "for i, li in enumerate(u_lists):\n", - " print(f\"\\n=== numpy functions with {i+1} argument ===\")\n", + " print(f\"\\n=== numpy functions with {i + 1} argument ===\")\n", " pprint(li, compact=True, width=80)\n", "\n", "# compact list of pyamapping functions\n", "li = [el.__name__ for el in pyamapping_functions]\n", - "print(f\"\\n=== pyamapping functions: ===\")\n", + "print(\"\\n=== pyamapping functions: ===\")\n", "pprint(li, compact=True, width=80)" ] }, @@ -188,7 +155,7 @@ "metadata": {}, "outputs": [], "source": [ - "from pyamapping import ChainableArray, chain\n", + "from pyamapping import ChainableArray\n", "\n", "# some data\n", "data = np.random.random(100)\n", @@ -234,7 +201,9 @@ "metadata": {}, "outputs": [], "source": [ - "dch2 = dch.map(lambda x: (5*x)**2+0.1).plot(sr=100, color=\"r\").mapvec(pam.amp_to_db)\n", + "dch2 = (\n", + " dch.map(lambda x: (5 * x) ** 2 + 0.1).plot(sr=100, color=\"r\").mapvec(pam.amp_to_db)\n", + ")\n", "a1 = dch2.to_asig(sr=100).plot(color=\"c\", lw=0.8)\n", "\n", "# conversion back to numpy array is rarely needed but if...\n", @@ -294,7 +263,7 @@ "metadata": {}, "outputs": [], "source": [ - "pam.linlin(7, 0, 5, 100, 300, \"max\") # clip result to maximum input range" + "pam.linlin(7, 0, 5, 100, 300, \"max\") # clip result to maximum input range" ] }, { @@ -313,11 +282,12 @@ "metadata": {}, "outputs": [], "source": [ - "xs = chain(np.linspace(0, 1, 100)) # turn data into ChainableArray\n", - "xs.plot(\"k-\", label=\"input data\") # plot input data\n", + "xs = chain(np.linspace(0, 1, 100)) # turn data into ChainableArray\n", + "xs.plot(\"k-\", label=\"input data\") # plot input data\n", "xs.linlin(0, 1, 1, 3).plot(\"r-\", label=\"linlin\")\n", "xs.linlin(0.2, 0.7, -2, 2, \"minmax\").plot(\"g-\", label=\"linlin with clip\")\n", - "plt.legend(); plt.grid()" + "plt.legend()\n", + "plt.grid()" ] }, { @@ -328,8 +298,9 @@ "outputs": [], "source": [ "# plot mapping function (output vs input)\n", - "plt.figure(figsize=(3, 1.5)); plt.grid();\n", - "xs.linlin(0.25, 0.75, -1, 1, \"minmax\").plot(xs=xs); " + "plt.figure(figsize=(3, 1.5))\n", + "plt.grid()\n", + "xs.linlin(0.25, 0.75, -1, 1, \"minmax\").plot(xs=xs);" ] }, { @@ -349,44 +320,22 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "20", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "np.float64(32.0)" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "pam.linexp(5, 1, 8, 2, 256)" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "21", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "np.float64(300.0)" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "pam.linexp(7, 0, 5, 100, 300, \"max\") # clip result to maximum input range" + "pam.linexp(7, 0, 5, 100, 300, \"max\") # clip result to maximum input range" ] }, { @@ -400,46 +349,25 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "23", "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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rTB37lzs2bMH06ZNS+9TExERERHZpXQH7e3bt8eNGzcwZMgQNZi0YsWKWLFiReJg0/DwcFVRRvPCCy+o2uxfffUVvvjiCzW5klSOscUa7URERERE5vBcA1ElFSa5dJgNGzY8s+31119XjYiIiIiI0u9plzgREREREVklqyz5aEz3v9k20zPCNjNHDks5HnluDkS1T3wP2Deef/vG82/feP7tW1wWxIBabKvFutk+aL93T18NXco+EhERERHZEol1fXx8UryNgy4tob2FSVnJq1evImfOnHDI4pk1tRrxly5dyvIa8WQd+B6wbzz/9o3n377x/Nu36CyIASUMl4A9T548SQq5ZNuednkR+fLls+g+yMli0G7f+B6wbzz/9o3n377x/Ns3bzPHgKn1sGs4EJWIiIiIyMoxaCciIiIisnIM2lPh5uaGr7/+Wi3JPvE9YN94/u0bz7994/m3b25WFgNmi4GoRERERET2jD3tRERERERWjkE7EREREZGVY9BORERERGTlGLQTEREREVk5Bu2pmDx5MgoWLAh3d3fUqFEDu3btypozQ1lq5MiRqFatmpp1NzAwEG3atMHJkyeT3ObRo0f46KOP4O/vDy8vL7Rr1w6RkZE8UzZo1KhRavblPn36JG7j+bdtV65cQadOndT/7xw5cqBcuXLYs2dP4vVSs2HIkCEICQlR1zdu3BinT5+26D5T5oiPj8fgwYNRqFAhdW6LFCmCYcOGqXOu4fm3HZs2bcLLL7+sZiCVv/OLFi1Kcn1azvXt27fRsWNHNeFSrly58O677+L+/ftm33cG7SmYN28e+vXrp8r97Nu3DxUqVECzZs1w/fp1s58YylobN25UAfmOHTuwevVqxMXFoWnTpnjw4EHibfr27YslS5Zg/vz56vZXr17Fq6++ylNlY3bv3o2ff/4Z5cuXT7Kd59923blzB7Vr14aLiwuWL1+OY8eOYezYsfD19U28zffff4+ffvoJU6dOxc6dO+Hp6ak+D+TLHGVvo0ePxpQpUzBp0iQcP35crcv5njhxYuJteP5tx4MHD1Q8J52ypqTlXEvAfvToURUvLF26VH0R6NGjh/l3Xko+kmnVq1fXffTRR4nr8fHxujx58uhGjhzJQ2bjrl+/Ll0suo0bN6r1u3fv6lxcXHTz589PvM3x48fVbbZv327BPaXMdO/ePV2xYsV0q1ev1tWrV0/Xu3dvtZ3n37Z9/vnnujp16iR7fUJCgi44OFg3ZsyYxG3ynnBzc9PNmTMni/aSzKVVq1a6d955J8m2V199VdexY0d1meffdgHQLVy4MHE9Lef62LFj6n67d+9OvM3y5ct1Dg4OuitXrph1f9nTnozHjx9j79696mcRjaOjo1rfvn27+b9NkUVFRUWppZ+fn1rKe0F63w3fDyVLlkRoaCjfDzZEfm1p1apVkvMseP5t2+LFi1G1alW8/vrrKj2uUqVK+OWXXxKvP3/+PCIiIpK8L3x8fFTKJD8Psr8XXngBa9euxalTp9T6wYMHsWXLFrRo0UKt8/zbj/Np+L8uS0mJkb8ZGrm9xIjSM29OzmZ99Gzs5s2bKs8tKCgoyXZZP3HihMX2i8wvISFB5TLLz+Vly5ZV2+Q/saurq/qPavx+kOso+5s7d65Kg5P0GGM8/7bt3LlzKj1C0iG/+OIL9R745JNP1P/5rl27Jv4fN/V5wP//2d/AgQMRHR2tOmKcnJzUZ//w4cNVCoTg+bcfEWn4vy5L+XJvyNnZWXXymfvvAYN2IhO9rUeOHFE9LWQfLl26hN69e6v8RBl0TvZFvqhLr9mIESPUuvS0y98AyWmVoJ1s299//42//voLs2fPRpkyZXDgwAHVcSMDFXn+yZowPSYZAQEB6hu3cXUQWQ8ODs6Kc0MW0KtXLzWoZP369ciXL1/idjnnkjJ19+7dJLfn+8E2SPqLDDCvXLmy6jGRJoONZTCSXJZeFp5/2yVVIkqXLp1kW6lSpRAeHq4ua3/z+Xlgm/r376962998801VNahz585q4LlUFRM8//YjOA3/12VpXJDkyZMnqqKMueNDBu3JkJ9Fq1SpovLcDHtjZL1WrVpmPSmU9WQ8igTsCxcuxLp161TpL0PyXpDKEobvBykJKR/qfD9kf40aNcLhw4dVD5vWpOdVfh7XLvP82y5JhTMu8Sr5zQUKFFCX5e+BfBgb/v+XdArJX+X//+wvJiZG5SMbkk47+cwXPP/2o1Aa/q/LUjrwpLNHI3GDvF8k992szDrMNZubO3euGjE8Y8YMNVq4R48euly5cukiIiIsvWuUyXr27Knz8fHRbdiwQXft2rXEFhMTk3ibDz74QBcaGqpbt26dbs+ePbpatWqpRrbJsHqM4Pm3Xbt27dI5Ozvrhg8frjt9+rTur7/+0nl4eOhmzZqVeJtRo0apv////fef7tChQ7rWrVvrChUqpHv48KFF950yrmvXrrq8efPqli5dqjt//rxuwYIFuoCAAN2AAQMSb8Pzb1tVwvbv36+ahMHjxo1Tly9evJjmc928eXNdpUqVdDt37tRt2bJFVR3r0KGD2fedQXsqJk6cqAI1V1dXVQJyx44dZj8plPXkP66p9vvvvyfeRv7DfvjhhzpfX1/1gd62bVsV2JN9BO08/7ZtyZIlurJly6qOmpIlS+qmTZuW5HopBTd48GBdUFCQuk2jRo10J0+etNj+UuaJjo5W/9fls97d3V1XuHBh3ZdffqmLjY1NvA3Pv+1Yv369yc97+fKW1nN969YtFaR7eXnpvL29dd26dVNfBszNQf4xb18+ERERERFlBHPaiYiIiIisHIN2IiIiIiIrx6CdiIiIiMjKMWgnIiIiIrJyDNqJiIiIiKwcg3YiIiIiIivHoJ2IiIiIyMoxaCciIiIisnIM2omIiIiIrByDdiIiIiIiK8egnYiIiIjIyjFoJyIiIiKCdft/G9LnyH5DysQAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "xs = chain(np.linspace(0, 1, 100)) # turn data into ChainableArray\n", - "xs.plot(\"k-\", label=\"input data\") # plot input data\n", + "outputs": [], + "source": [ + "xs = chain(np.linspace(0, 1, 100)) # turn data into ChainableArray\n", + "xs.plot(\"k-\", label=\"input data\") # plot input data\n", "xs.linexp(0, 1, 0.01, 1).plot(\"r-\", label=\"linexp\")\n", "xs.linexp(0.2, 0.7, 2, 0.2, \"minmix\").plot(\"g-\", label=\"linexp with clip\")\n", - "plt.legend(); plt.grid()" + "plt.legend()\n", + "plt.grid()" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "24", "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# plot linexp mapping function (output vs input)\n", "ys = xs.linexp(0.25, 0.85, 0.2, 2).plot(xs=xs)" @@ -464,47 +392,25 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "26", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "np.float64(-5.0)" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# example: unmap a frequency to MIDI note with explin\n", - "f = 220 * 2**(-5/12) # 5 semitones higher than 220 Hz\n", - "pam.explin(f, 220, 440, 0, 12)\n" + "f = 220 * 2 ** (-5 / 12) # 5 semitones higher than 220 Hz\n", + "pam.explin(f, 220, 440, 0, 12)" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "27", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "np.float64(-20.0)" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# example: unmap amplitude to level in decibel\n", - "pam.explin(0.01, 0.001, 1.0, -30, 0, \"max\") # clip result to maximum input range" + "pam.explin(0.01, 0.001, 1.0, -30, 0, \"max\") # clip result to maximum input range" ] }, { @@ -523,11 +429,12 @@ "metadata": {}, "outputs": [], "source": [ - "xs = chain(np.linspace(0.01, 1, 100)) # turn data into ChainableArray\n", - "xs.plot(\"k-\", label=\"input data\") # plot input data\n", + "xs = chain(np.linspace(0.01, 1, 100)) # turn data into ChainableArray\n", + "xs.plot(\"k-\", label=\"input data\") # plot input data\n", "xs.explin(0.1, 1, 0, 1).plot(\"r-\", label=\"explin\")\n", "xs.explin(0.1, 0.5, 1, 0, \"minmix\").plot(\"g-\", label=\"explin with clip\")\n", - "plt.legend(); plt.grid()" + "plt.legend()\n", + "plt.grid()" ] }, { @@ -569,27 +476,17 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "33", "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "xs = chain(np.linspace(0, 1, 100)) # turn data into ChainableArray\n", - "xs.plot(\"k-\", label=\"input data\") # plot input data\n", + "outputs": [], + "source": [ + "xs = chain(np.linspace(0, 1, 100)) # turn data into ChainableArray\n", + "xs.plot(\"k-\", label=\"input data\") # plot input data\n", "xs.lincurve(0, 1, 0, 0.4, 5).plot(\"r-\", label=\"lincurve\")\n", "xs.lincurve(0.2, 0.5, 1, 0, 2.5, \"minmax\").plot(\"g-\", label=\"lincurve with clip\")\n", - "plt.legend(); plt.grid()" + "plt.legend()\n", + "plt.grid()" ] }, { @@ -602,26 +499,16 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "35", "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "xs = chain(np.linspace(0, 100, 100))\n", "for i, curve in enumerate(range(-9, 10, 3)):\n", - " xs.lincurve(0, 100, -10, 10, curve).plot('-', label=f\"curve={curve}\")\n", - "plt.legend(fontsize=6); plt.grid();" + " xs.lincurve(0, 100, -10, 10, curve).plot(\"-\", label=f\"curve={curve}\")\n", + "plt.legend(fontsize=6)\n", + "plt.grid();" ] }, { @@ -653,28 +540,20 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "id": "38", "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "xs = chain(np.linspace(0, 1, 100)) # turn data into ChainableArray\n", - "xs.plot(\"k-\", label=\"input data for lincurve\") # plot input data\n", + "outputs": [], + "source": [ + "xs = chain(np.linspace(0, 1, 100)) # turn data into ChainableArray\n", + "xs.plot(\"k-\", label=\"input data for lincurve\") # plot input data\n", "curve = 10\n", "ys = xs.lincurve(0, 1, 0, 0.6, curve).plot(\"r-\", label=\"lincurve output\")\n", - "xs = ys.curvelin(0, 0.6, 0, 1, curve).plot(\"b-.\", lw=3, alpha=0.5, label=\"curvelin to undo lincurve\")\n", - "plt.legend(); plt.grid()" + "xs = ys.curvelin(0, 0.6, 0, 1, curve).plot(\n", + " \"b-.\", lw=3, alpha=0.5, label=\"curvelin to undo lincurve\"\n", + ")\n", + "plt.legend()\n", + "plt.grid()" ] }, { @@ -687,26 +566,16 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "id": "40", "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "xs = chain(np.linspace(0, 100, 500))\n", "for i, curve in enumerate(range(-9, 10, 3)):\n", - " xs.curvelin(0, 100, -10, 10, curve).plot('-', label=f\"curve={curve}\")\n", - "plt.legend(fontsize=6); plt.grid();" + " xs.curvelin(0, 100, -10, 10, curve).plot(\"-\", label=f\"curve={curve}\")\n", + "plt.legend(fontsize=6)\n", + "plt.grid();" ] }, { @@ -738,54 +607,37 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": null, "id": "43", "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "xs = chain(np.arange(0, 100)) # turn data into ChainableArray\n", - "xs.bilin(60, 20, 80, 0, -20, 60).plot(\"b.\", ms=1, label='bilin');\n", - "for (x, y, t) in [[20, -20, \"(xmin, ymin)\"], [80, 60, \"(xmax, ymax)\"], [60, 0, \"(xcenter, ycenter)\"]]:\n", + "outputs": [], + "source": [ + "xs = chain(np.arange(0, 100)) # turn data into ChainableArray\n", + "xs.bilin(60, 20, 80, 0, -20, 60).plot(\"b.\", ms=1, label=\"bilin\")\n", + "for x, y, t in [\n", + " [20, -20, \"(xmin, ymin)\"],\n", + " [80, 60, \"(xmax, ymax)\"],\n", + " [60, 0, \"(xcenter, ycenter)\"],\n", + "]:\n", " plt.plot([x], [y], \"ro\")\n", - " plt.text(x+1, y-5, t, fontsize=6)\n", - "plt.legend(); plt.grid()" + " plt.text(x + 1, y - 5, t, fontsize=6)\n", + "plt.legend()\n", + "plt.grid()" ] }, { "cell_type": "code", - "execution_count": 27, - "id": "cb3b9473", + "execution_count": null, + "id": "44", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "ChainableArray([-30., -20., -10., 0., 60., 120.])" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "pam.bilin(np.array([0, 20, 40, 60, 80, 100]), 60, 20, 80, 0, -20, 60)" ] }, { "cell_type": "markdown", - "id": "44", + "id": "45", "metadata": {}, "source": [ "### `clip`\n", @@ -797,7 +649,7 @@ }, { "cell_type": "markdown", - "id": "45", + "id": "46", "metadata": {}, "source": [ "- ChainableArray.clip uses self as input.\n", @@ -807,30 +659,32 @@ { "cell_type": "code", "execution_count": null, - "id": "46", + "id": "47", "metadata": {}, "outputs": [], "source": [ - "xs = chain(np.linspace(0, 1, 100)) # turn data into ChainableArray\n", - "xs.plot(\"k:\", label=\"input data\") # plot input data\n", + "xs = chain(np.linspace(0, 1, 100)) # turn data into ChainableArray\n", + "xs.plot(\"k:\", label=\"input data\") # plot input data\n", "xs.clip(0.2, 0.7).plot(\"r-\", label=\"linlin with clip\")\n", - "plt.legend(); plt.grid()" + "plt.legend()\n", + "plt.grid()" ] }, { "cell_type": "code", "execution_count": null, - "id": "47", + "id": "48", "metadata": {}, "outputs": [], "source": [ "# plot mapping function (output vs input)\n", - "ys = xs.clip(0.25, 0.75).plot(xs=xs, label=''); plt.grid(); " + "ys = xs.clip(0.25, 0.75).plot(xs=xs, label=\"\")\n", + "plt.grid();" ] }, { "cell_type": "markdown", - "id": "48", + "id": "49", "metadata": {}, "source": [ "### `midi_to_cps`\n", @@ -846,26 +700,28 @@ { "cell_type": "code", "execution_count": null, - "id": "49", + "id": "50", "metadata": {}, "outputs": [], "source": [ - "pam.midi_to_cps(69+12) # should be 880, i.e. one octave above MIDI 69" + "pam.midi_to_cps(69 + 12) # should be 880, i.e. one octave above MIDI 69" ] }, { "cell_type": "code", "execution_count": null, - "id": "50", + "id": "51", "metadata": {}, "outputs": [], "source": [ - "chain(np.arange(60, 74, 2)).midicps().round(1) # rounded frequencies of whole-tone scale ('c-d-e-f#-g#-a#-c')" + "chain(np.arange(60, 74, 2)).midicps().round(\n", + " 1\n", + ") # rounded frequencies of whole-tone scale ('c-d-e-f#-g#-a#-c')" ] }, { "cell_type": "markdown", - "id": "51", + "id": "52", "metadata": {}, "source": [ "- ChainableArray.midi_to_cps uses self as input.\n", @@ -875,19 +731,20 @@ { "cell_type": "code", "execution_count": null, - "id": "52", + "id": "53", "metadata": {}, "outputs": [], "source": [ - "xs = chain(np.arange(21, 109)) # the standard MIDI range\n", - "xs.plot(\"k-\", label=\"input data (MIDI notes)\") # plot input data\n", + "xs = chain(np.arange(21, 109)) # the standard MIDI range\n", + "xs.plot(\"k-\", label=\"input data (MIDI notes)\") # plot input data\n", "xs.midi_to_cps().plot(\"r-\", label=\"midi_to_cps result [in Hz]\")\n", - "plt.legend(); plt.grid();" + "plt.legend()\n", + "plt.grid();" ] }, { "cell_type": "markdown", - "id": "53", + "id": "54", "metadata": {}, "source": [ "### `cps_to_midi`\n", @@ -903,26 +760,28 @@ { "cell_type": "code", "execution_count": null, - "id": "54", + "id": "55", "metadata": {}, "outputs": [], "source": [ - "pam.cps_to_midi(440*2) # should be 81=69+12" + "pam.cps_to_midi(440 * 2) # should be 81=69+12" ] }, { "cell_type": "code", "execution_count": null, - "id": "55", + "id": "56", "metadata": {}, "outputs": [], "source": [ - "chain([110, 220, 330, 440, 550, 660, 770, 880]).cpsmidi().round(2) # rounded MIDI notes for the harmonics series over low A" + "chain([110, 220, 330, 440, 550, 660, 770, 880]).cpsmidi().round(\n", + " 2\n", + ") # rounded MIDI notes for the harmonics series over low A" ] }, { "cell_type": "markdown", - "id": "56", + "id": "57", "metadata": {}, "source": [ "- ChainableArray.cps_to_midi uses self as input.\n", @@ -932,21 +791,23 @@ { "cell_type": "code", "execution_count": null, - "id": "57", + "id": "58", "metadata": {}, "outputs": [], "source": [ - "xs = chain(np.arange(100, 1000, 100)) # frequencies with 50 Hz spacing\n", - "ys = xs.cps_to_midi() \n", + "xs = chain(np.arange(100, 1000, 100)) # frequencies with 50 Hz spacing\n", + "ys = xs.cps_to_midi()\n", "\n", - "plt.plot(xs, ys, \"o-\", label=\"MIDI note for harmonics series\"); \n", - "plt.xlabel(\"frequency [Hz]\"); plt.ylabel(\"MIDI note\"); \n", - "plt.legend(); plt.grid();" + "plt.plot(xs, ys, \"o-\", label=\"MIDI note for harmonics series\")\n", + "plt.xlabel(\"frequency [Hz]\")\n", + "plt.ylabel(\"MIDI note\")\n", + "plt.legend()\n", + "plt.grid();" ] }, { "cell_type": "markdown", - "id": "58", + "id": "59", "metadata": {}, "source": [ "### `midi_to_ratio`\n", @@ -960,38 +821,29 @@ }, { "cell_type": "code", - "execution_count": 28, - "id": "59", + "execution_count": null, + "id": "60", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "1.4983070768766815" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "pam.midi_to_ratio(7) # a fifth is ~3/2 (in equal tuning)" + "pam.midi_to_ratio(7) # a fifth is ~3/2 (in equal tuning)" ] }, { "cell_type": "code", "execution_count": null, - "id": "60", + "id": "61", "metadata": {}, "outputs": [], "source": [ - "chain(np.arange(0, 12, 2)).midi_to_ratio().round(2) # ratio of tones in the whole-tone scale ('c-d-e-f#-g#-a#-c')" + "chain(np.arange(0, 12, 2)).midi_to_ratio().round(\n", + " 2\n", + ") # ratio of tones in the whole-tone scale ('c-d-e-f#-g#-a#-c')" ] }, { "cell_type": "markdown", - "id": "61", + "id": "62", "metadata": {}, "source": [ "- ChainableArray.midi_to_cps uses self as input.\n", @@ -1001,19 +853,20 @@ { "cell_type": "code", "execution_count": null, - "id": "62", + "id": "63", "metadata": {}, "outputs": [], "source": [ - "xs = chain(np.arange(-12, 13)) # one octave around any note\n", + "xs = chain(np.arange(-12, 13)) # one octave around any note\n", "ys = xs.midi_to_ratio().plot(xs=xs, c=\"r\", ls=\"-\", label=\"midi_to_ratio result\")\n", "plt.plot(0, 1, \"ro\", label=\"midi_ratio of 0\")\n", - "plt.legend(); plt.grid();" + "plt.legend()\n", + "plt.grid();" ] }, { "cell_type": "markdown", - "id": "63", + "id": "64", "metadata": {}, "source": [ "### `ratio_to_midi`\n", @@ -1027,38 +880,29 @@ }, { "cell_type": "code", - "execution_count": 29, - "id": "64", + "execution_count": null, + "id": "65", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "np.float64(12.0)" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "pam.ratio_to_midi(2) # should be 12 for ratio=2 (i.e. an octave)" + "pam.ratio_to_midi(2) # should be 12 for ratio=2 (i.e. an octave)" ] }, { "cell_type": "code", "execution_count": null, - "id": "65", + "id": "66", "metadata": {}, "outputs": [], "source": [ - "chain(np.arange(1, 10)).ratio_to_midi().round(2) # rounded MIDI offsets for the harmonics series" + "chain(np.arange(1, 10)).ratio_to_midi().round(\n", + " 2\n", + ") # rounded MIDI offsets for the harmonics series" ] }, { "cell_type": "markdown", - "id": "66", + "id": "67", "metadata": {}, "source": [ "- ChainableArray.ratio_to_midi uses self as input.\n", @@ -1068,21 +912,23 @@ { "cell_type": "code", "execution_count": null, - "id": "67", + "id": "68", "metadata": {}, "outputs": [], "source": [ - "xs = chain(np.arange(1, 10)) # integer frequency ratios / harmonics\n", + "xs = chain(np.arange(1, 10)) # integer frequency ratios / harmonics\n", "ys = xs.ratio_to_midi() # likewise ratiomidi()\n", "\n", - "plt.plot(xs, ys, \"o-\", label=\"MIDI offsets for harmonics series\"); \n", - "plt.xlabel(\"ratio to fundamental frequency\"); plt.ylabel(\"MIDI offset\"); \n", - "plt.legend(); plt.grid();" + "plt.plot(xs, ys, \"o-\", label=\"MIDI offsets for harmonics series\")\n", + "plt.xlabel(\"ratio to fundamental frequency\")\n", + "plt.ylabel(\"MIDI offset\")\n", + "plt.legend()\n", + "plt.grid();" ] }, { "cell_type": "markdown", - "id": "68", + "id": "69", "metadata": {}, "source": [ "### `octave_to_cps`\n", @@ -1097,26 +943,26 @@ { "cell_type": "code", "execution_count": null, - "id": "69", + "id": "70", "metadata": {}, "outputs": [], "source": [ - "pam.octave_to_cps(3.75) # one octave below 440" + "pam.octave_to_cps(3.75) # one octave below 440" ] }, { "cell_type": "code", "execution_count": null, - "id": "70", + "id": "71", "metadata": {}, "outputs": [], "source": [ - "chain(np.arange(2, 9)).octcps().round(1) # rounded frequencies of c-tones" + "chain(np.arange(2, 9)).octcps().round(1) # rounded frequencies of c-tones" ] }, { "cell_type": "markdown", - "id": "71", + "id": "72", "metadata": {}, "source": [ "- ChainableArray.octave_to_cps uses self as input.\n", @@ -1126,19 +972,21 @@ { "cell_type": "code", "execution_count": null, - "id": "72", + "id": "73", "metadata": {}, "outputs": [], "source": [ - "xs = chain(np.arange(0, 8, 1/4)) # 8 octaves in minor thirds (3 semitone steps)\n", + "xs = chain(np.arange(0, 8, 1 / 4)) # 8 octaves in minor thirds (3 semitone steps)\n", "ys = xs.octave_to_cps()\n", - "plt.plot(xs, ys, \"ro-\", ms=2,label=\"octave_to_cps result [in Hz]\")\n", - "plt.legend(); plt.grid(); plt.semilogy()" + "plt.plot(xs, ys, \"ro-\", ms=2, label=\"octave_to_cps result [in Hz]\")\n", + "plt.legend()\n", + "plt.grid()\n", + "plt.semilogy()" ] }, { "cell_type": "markdown", - "id": "73", + "id": "74", "metadata": {}, "source": [ "### `cps_to_octave`\n", @@ -1153,26 +1001,28 @@ { "cell_type": "code", "execution_count": null, - "id": "74", + "id": "75", "metadata": {}, "outputs": [], "source": [ - "pam.cps_to_octave(440*2) # one octave above reference" + "pam.cps_to_octave(440 * 2) # one octave above reference" ] }, { "cell_type": "code", "execution_count": null, - "id": "75", + "id": "76", "metadata": {}, "outputs": [], "source": [ - "chain(pam.midicps(12) * np.arange(1, 10)).cpsoct().round(2) # harmonics series over low C in octaves" + "chain(pam.midicps(12) * np.arange(1, 10)).cpsoct().round(\n", + " 2\n", + ") # harmonics series over low C in octaves" ] }, { "cell_type": "markdown", - "id": "76", + "id": "77", "metadata": {}, "source": [ "- ChainableArray.cps_to_octave uses self as input.\n", @@ -1182,21 +1032,23 @@ { "cell_type": "code", "execution_count": null, - "id": "77", + "id": "78", "metadata": {}, "outputs": [], "source": [ - "xs = chain(np.arange(100, 1000, 100)) # frequencies with 50 Hz spacing\n", - "ys = xs.cps_to_octave() \n", + "xs = chain(np.arange(100, 1000, 100)) # frequencies with 50 Hz spacing\n", + "ys = xs.cps_to_octave()\n", "\n", - "plt.plot(xs, ys, \"o-\", label=\"octaves for harmonics series\"); \n", - "plt.xlabel(\"frequency [Hz]\"); plt.ylabel(\"octave\"); \n", - "plt.legend(); plt.grid();" + "plt.plot(xs, ys, \"o-\", label=\"octaves for harmonics series\")\n", + "plt.xlabel(\"frequency [Hz]\")\n", + "plt.ylabel(\"octave\")\n", + "plt.legend()\n", + "plt.grid();" ] }, { "cell_type": "markdown", - "id": "78", + "id": "79", "metadata": {}, "source": [ "### `db_to_amp`\n", @@ -1211,7 +1063,7 @@ { "cell_type": "code", "execution_count": null, - "id": "79", + "id": "80", "metadata": {}, "outputs": [], "source": [ @@ -1220,7 +1072,7 @@ }, { "cell_type": "markdown", - "id": "80", + "id": "81", "metadata": {}, "source": [ "- ChainableArray.db_to_amp uses self as input.\n", @@ -1230,18 +1082,19 @@ { "cell_type": "code", "execution_count": null, - "id": "81", + "id": "82", "metadata": {}, "outputs": [], "source": [ - "xs = chain(np.arange(-60, 0, 6)) # some 6 dB steps\n", + "xs = chain(np.arange(-60, 0, 6)) # some 6 dB steps\n", "ys = xs.dbamp().plot(xs=xs, marker=\"o\", ms=2, label=\"db_to_amp result [arb. unit]\")\n", - "plt.legend(); plt.grid();" + "plt.legend()\n", + "plt.grid();" ] }, { "cell_type": "markdown", - "id": "82", + "id": "83", "metadata": {}, "source": [ "### `amp_to_db`\n", @@ -1256,26 +1109,26 @@ { "cell_type": "code", "execution_count": null, - "id": "83", + "id": "84", "metadata": {}, "outputs": [], "source": [ - "pam.amp_to_db(0.01) # 10^(-2) will be 10^(-4) for energy, aka -40 dB" + "pam.amp_to_db(0.01) # 10^(-2) will be 10^(-4) for energy, aka -40 dB" ] }, { "cell_type": "code", "execution_count": null, - "id": "84", + "id": "85", "metadata": {}, "outputs": [], "source": [ - "chain(np.arange(0.1, 1, 0.1)).ampdb().round(2) # harmonics series over low C in octaves" + "chain(np.arange(0.1, 1, 0.1)).ampdb().round(2) # harmonics series over low C in octaves" ] }, { "cell_type": "markdown", - "id": "85", + "id": "86", "metadata": {}, "source": [ "- ChainableArray.amp_to_db uses self as input.\n", @@ -1285,20 +1138,22 @@ { "cell_type": "code", "execution_count": null, - "id": "86", + "id": "87", "metadata": {}, "outputs": [], "source": [ - "xs = chain(np.arange(0.1, 2.1, 0.1)) # ampltitudes from 0.1 to 2.0\n", - "ys = xs.ampdb() # likewise amp_to_db()\n", - "plt.plot(xs, ys, \"o-\", label=\"decibel\"); \n", - "plt.xlabel(\"amplitudes\"); plt.ylabel(\"dB\"); \n", - "plt.legend(); plt.grid();" + "xs = chain(np.arange(0.1, 2.1, 0.1)) # ampltitudes from 0.1 to 2.0\n", + "ys = xs.ampdb() # likewise amp_to_db()\n", + "plt.plot(xs, ys, \"o-\", label=\"decibel\")\n", + "plt.xlabel(\"amplitudes\")\n", + "plt.ylabel(\"dB\")\n", + "plt.legend()\n", + "plt.grid();" ] }, { "cell_type": "markdown", - "id": "87", + "id": "88", "metadata": {}, "source": [ "### `mel_to_hz`\n", @@ -1319,26 +1174,26 @@ { "cell_type": "code", "execution_count": null, - "id": "88", + "id": "89", "metadata": {}, "outputs": [], "source": [ - "pam.mel_to_hz(1000, htk=True) # using the O'Shaughnessy (1987) formula" + "pam.mel_to_hz(1000, htk=True) # using the O'Shaughnessy (1987) formula" ] }, { "cell_type": "code", "execution_count": null, - "id": "89", + "id": "90", "metadata": {}, "outputs": [], "source": [ - "pam.mel_to_hz(15) # using the Slaney formula" + "pam.mel_to_hz(15) # using the Slaney formula" ] }, { "cell_type": "markdown", - "id": "90", + "id": "91", "metadata": {}, "source": [ "- ChainableArray.mel_to_hz uses self as input.\n", @@ -1348,32 +1203,34 @@ { "cell_type": "code", "execution_count": null, - "id": "91", + "id": "92", "metadata": {}, "outputs": [], "source": [ - "xs = chain(np.arange(0, 2500, 100)) \n", + "xs = chain(np.arange(0, 2500, 100))\n", "ys = xs.mel_to_hz(htk=True)\n", "plt.plot(xs, ys, \"r-\", label=\"mel_to_hz (O'Shaughnessy)\")\n", - "plt.legend(); plt.grid();" + "plt.legend()\n", + "plt.grid();" ] }, { "cell_type": "code", "execution_count": null, - "id": "92", + "id": "93", "metadata": {}, "outputs": [], "source": [ - "xs = chain(np.arange(0, 40, 1)) \n", - "ys = xs.mel_to_hz() # i.e. Slaney\n", + "xs = chain(np.arange(0, 40, 1))\n", + "ys = xs.mel_to_hz() # i.e. Slaney\n", "plt.plot(xs, ys, \"r-\", label=\"mel_to_hz (Slaney)\")\n", - "plt.legend(); plt.grid();" + "plt.legend()\n", + "plt.grid();" ] }, { "cell_type": "markdown", - "id": "93", + "id": "94", "metadata": {}, "source": [ "### `hz_to_mel`\n", @@ -1391,18 +1248,20 @@ { "cell_type": "code", "execution_count": null, - "id": "94", + "id": "95", "metadata": {}, "outputs": [], "source": [ "xs = chain(np.arange(1, 10000))\n", "xs.hz_to_mel().plot(xs=xs)\n", - "plt.xlabel('frequencies [Hz]'); plt.ylabel('mel scale (Slaney)'); plt.grid();" + "plt.xlabel(\"frequencies [Hz]\")\n", + "plt.ylabel(\"mel scale (Slaney)\")\n", + "plt.grid();" ] }, { "cell_type": "markdown", - "id": "95", + "id": "96", "metadata": {}, "source": [ "- ChainableArray.hz_to_mel uses self as input.\n", @@ -1412,20 +1271,23 @@ { "cell_type": "code", "execution_count": null, - "id": "96", + "id": "97", "metadata": {}, "outputs": [], "source": [ - "xs = chain(np.arange(21, 120, 7)).midicps() # frequencies of fifth series\n", - "xs.hz_to_mel(htk=True).plot(xs=xs, marker=\"o\", label=\"mel values for frequencies\"); \n", - "plt.xlabel(\"frequency [Hz]\"); plt.ylabel(\"mel scale\"); \n", - "plt.legend(); plt.grid(); plt.loglog()\n", + "xs = chain(np.arange(21, 120, 7)).midicps() # frequencies of fifth series\n", + "xs.hz_to_mel(htk=True).plot(xs=xs, marker=\"o\", label=\"mel values for frequencies\")\n", + "plt.xlabel(\"frequency [Hz]\")\n", + "plt.ylabel(\"mel scale\")\n", + "plt.legend()\n", + "plt.grid()\n", + "plt.loglog()\n", "plt.plot([1000], [1000], \"ro-\", label=\"a reference point\");" ] }, { "cell_type": "markdown", - "id": "97", + "id": "98", "metadata": {}, "source": [ "### `distort`\n", @@ -1441,7 +1303,7 @@ { "cell_type": "code", "execution_count": null, - "id": "98", + "id": "99", "metadata": {}, "outputs": [], "source": [ @@ -1450,7 +1312,7 @@ }, { "cell_type": "markdown", - "id": "99", + "id": "100", "metadata": {}, "source": [ "- ChainableArray.distort uses self as input.\n", @@ -1460,32 +1322,35 @@ { "cell_type": "code", "execution_count": null, - "id": "100", + "id": "101", "metadata": {}, "outputs": [], "source": [ "xs = chain(np.arange(-3, 3, 0.01))\n", "for theta in [0.1, 0.5, 1, 3]:\n", " xs.distort(theta).plot(xs=xs, label=f\"threshold = {theta}\")\n", - "plt.xlabel('input'); plt.ylabel('output'); plt.grid(); \n", - "plt.legend(); plt.title(\"distort mapping function\");" + "plt.xlabel(\"input\")\n", + "plt.ylabel(\"output\")\n", + "plt.grid()\n", + "plt.legend()\n", + "plt.title(\"distort mapping function\");" ] }, { "cell_type": "code", "execution_count": null, - "id": "101", + "id": "102", "metadata": {}, "outputs": [], "source": [ "ts = chain(np.linspace(0, 0.1, 500))\n", - "np.sin(2*np.pi*50*ts).plot(label='sine').distort(0.3).plot(label='distorted');\n", - "plt.legend(loc='upper right');" + "np.sin(2 * np.pi * 50 * ts).plot(label=\"sine\").distort(0.3).plot(label=\"distorted\")\n", + "plt.legend(loc=\"upper right\");" ] }, { "cell_type": "markdown", - "id": "102", + "id": "103", "metadata": {}, "source": [ "### `softclip`\n", @@ -1503,7 +1368,7 @@ { "cell_type": "code", "execution_count": null, - "id": "103", + "id": "104", "metadata": {}, "outputs": [], "source": [ @@ -1512,7 +1377,7 @@ }, { "cell_type": "markdown", - "id": "104", + "id": "105", "metadata": {}, "source": [ "- ChainableArray.softclip uses self as input.\n", @@ -1522,32 +1387,34 @@ { "cell_type": "code", "execution_count": null, - "id": "105", + "id": "106", "metadata": {}, "outputs": [], "source": [ "xs = chain(np.arange(-3, 3, 0.01))\n", "xs.softclip().plot(xs=xs)\n", - "plt.xlabel('input'); plt.ylabel('output'); plt.grid(); \n", + "plt.xlabel(\"input\")\n", + "plt.ylabel(\"output\")\n", + "plt.grid()\n", "plt.title(\"softclip mapping function\");" ] }, { "cell_type": "code", "execution_count": null, - "id": "106", + "id": "107", "metadata": {}, "outputs": [], "source": [ "ts = chain(np.linspace(0, 0.1, 500))\n", - "xs = np.sin(2*np.pi*50*ts)\n", - "xs.plot(label='sine').softclip().plot(label='softclip distorted');\n", - "plt.legend(loc='upper right');" + "xs = np.sin(2 * np.pi * 50 * ts)\n", + "xs.plot(label=\"sine\").softclip().plot(label=\"softclip distorted\")\n", + "plt.legend(loc=\"upper right\");" ] }, { "cell_type": "markdown", - "id": "107", + "id": "108", "metadata": {}, "source": [ "### `scurve`\n", @@ -1562,7 +1429,7 @@ { "cell_type": "code", "execution_count": null, - "id": "108", + "id": "109", "metadata": {}, "outputs": [], "source": [ @@ -1571,7 +1438,7 @@ }, { "cell_type": "markdown", - "id": "109", + "id": "110", "metadata": {}, "source": [ "- ChainableArray.scurve uses self as input.\n", @@ -1581,32 +1448,34 @@ { "cell_type": "code", "execution_count": null, - "id": "110", + "id": "111", "metadata": {}, "outputs": [], "source": [ "xs = chain(np.arange(0, 1, 0.01))\n", "xs.scurve().plot(xs=xs)\n", - "plt.xlabel('input'); plt.ylabel('output'); plt.grid(); \n", + "plt.xlabel(\"input\")\n", + "plt.ylabel(\"output\")\n", + "plt.grid()\n", "plt.title(\"scurve mapping function\");" ] }, { "cell_type": "code", "execution_count": null, - "id": "111", + "id": "112", "metadata": {}, "outputs": [], "source": [ "ts = chain(np.linspace(0, 0.1, 500))\n", - "xs = (2*np.pi*50*ts).sin().linlin(-1, 1, 0, 1)\n", - "xs.plot(label='sine with offset').scurve().plot(label='scurve distorted');\n", - "plt.legend(loc='upper right');" + "xs = (2 * np.pi * 50 * ts).sin().linlin(-1, 1, 0, 1)\n", + "xs.plot(label=\"sine with offset\").scurve().plot(label=\"scurve distorted\")\n", + "plt.legend(loc=\"upper right\");" ] }, { "cell_type": "markdown", - "id": "112", + "id": "113", "metadata": {}, "source": [ "### `lcurve`\n", @@ -1622,7 +1491,7 @@ { "cell_type": "code", "execution_count": null, - "id": "113", + "id": "114", "metadata": {}, "outputs": [], "source": [ @@ -1631,7 +1500,7 @@ }, { "cell_type": "markdown", - "id": "114", + "id": "115", "metadata": {}, "source": [ "- ChainableArray.lcurve uses self as input.\n", @@ -1641,33 +1510,36 @@ { "cell_type": "code", "execution_count": null, - "id": "115", + "id": "116", "metadata": {}, "outputs": [], "source": [ "xs = chain(np.arange(-10, 10, 0.005))\n", "for tau in [0.2, 0.5, 1, 2]:\n", - " xs.lcurve(tau=tau).plot(xs=xs, label=f'lcurve for tau={tau}')\n", - "plt.xlabel('input'); plt.ylabel('output'); plt.grid(); \n", - "plt.legend(); plt.title(\"lcurve mapping function\");" + " xs.lcurve(tau=tau).plot(xs=xs, label=f\"lcurve for tau={tau}\")\n", + "plt.xlabel(\"input\")\n", + "plt.ylabel(\"output\")\n", + "plt.grid()\n", + "plt.legend()\n", + "plt.title(\"lcurve mapping function\");" ] }, { "cell_type": "code", "execution_count": null, - "id": "116", + "id": "117", "metadata": {}, "outputs": [], "source": [ "ts = chain(np.linspace(0, 0.1, 500))\n", - "xs = np.sin(2*np.pi*50*ts)\n", - "xs.plot(label='sine').lcurve(tau=0.25).plot(label='lcurve distorted');\n", - "plt.legend(loc='upper right');" + "xs = np.sin(2 * np.pi * 50 * ts)\n", + "xs.plot(label=\"sine\").lcurve(tau=0.25).plot(label=\"lcurve distorted\")\n", + "plt.legend(loc=\"upper right\");" ] }, { "cell_type": "markdown", - "id": "117", + "id": "118", "metadata": {}, "source": [ "### `wrap`\n", @@ -1684,7 +1556,7 @@ { "cell_type": "code", "execution_count": null, - "id": "118", + "id": "119", "metadata": {}, "outputs": [], "source": [ @@ -1693,7 +1565,7 @@ }, { "cell_type": "markdown", - "id": "119", + "id": "120", "metadata": {}, "source": [ "- ChainableArray.wrap uses self as input.\n", @@ -1703,32 +1575,34 @@ { "cell_type": "code", "execution_count": null, - "id": "120", + "id": "121", "metadata": {}, "outputs": [], "source": [ "xs = chain(np.arange(-5, 5, 0.01))\n", "xs.wrap(y1=-1, y2=1).plot(xs=xs)\n", - "plt.xlabel('input'); plt.ylabel('output'); plt.grid(); \n", + "plt.xlabel(\"input\")\n", + "plt.ylabel(\"output\")\n", + "plt.grid()\n", "plt.title(\"wrap mapping function\");" ] }, { "cell_type": "code", "execution_count": null, - "id": "121", + "id": "122", "metadata": {}, "outputs": [], "source": [ "ts = chain(np.linspace(0, 0.1, 500))\n", - "xs = np.sin(2*np.pi*30*ts)\n", - "xs.plot(label='sine').wrap(-0.8, 0.5).plot(label='wrapped sine');\n", - "plt.legend(loc='upper right');" + "xs = np.sin(2 * np.pi * 30 * ts)\n", + "xs.plot(label=\"sine\").wrap(-0.8, 0.5).plot(label=\"wrapped sine\")\n", + "plt.legend(loc=\"upper right\");" ] }, { "cell_type": "markdown", - "id": "122", + "id": "123", "metadata": {}, "source": [ "### `fold`\n", @@ -1744,7 +1618,7 @@ { "cell_type": "code", "execution_count": null, - "id": "123", + "id": "124", "metadata": {}, "outputs": [], "source": [ @@ -1753,7 +1627,7 @@ }, { "cell_type": "markdown", - "id": "124", + "id": "125", "metadata": {}, "source": [ "- ChainableArray.wrap uses self as input.\n", @@ -1763,31 +1637,34 @@ { "cell_type": "code", "execution_count": null, - "id": "125", + "id": "126", "metadata": {}, "outputs": [], "source": [ "xs = chain(np.arange(-5, 5, 0.01))\n", "xs.fold(y1=-1, y2=1).plot(xs=xs)\n", - "plt.xlabel('input'); plt.ylabel('output'); plt.grid(); " + "plt.xlabel(\"input\")\n", + "plt.ylabel(\"output\")\n", + "plt.grid();" ] }, { "cell_type": "code", "execution_count": null, - "id": "126", + "id": "127", "metadata": {}, "outputs": [], "source": [ "ts = chain(np.linspace(0, 0.1, 500))\n", - "xs = np.sin(2*np.pi*30*ts)\n", - "xs.plot(label='sine').fold(-0.75, 0.5).plot(label='folded sine');\n", - "plt.legend(loc='upper right'); plt.grid()" + "xs = np.sin(2 * np.pi * 30 * ts)\n", + "xs.plot(label=\"sine\").fold(-0.75, 0.5).plot(label=\"folded sine\")\n", + "plt.legend(loc=\"upper right\")\n", + "plt.grid()" ] }, { "cell_type": "markdown", - "id": "127", + "id": "128", "metadata": {}, "source": [ "## Tour of Mapping Functions: additional/novel mapping functions\n", @@ -1798,7 +1675,7 @@ }, { "cell_type": "markdown", - "id": "128", + "id": "129", "metadata": {}, "source": [ "### `linpoly`\n", @@ -1821,7 +1698,7 @@ }, { "cell_type": "markdown", - "id": "129", + "id": "130", "metadata": {}, "source": [ "- ChainableArray.linpoly uses self as input.\n", @@ -1831,20 +1708,21 @@ { "cell_type": "code", "execution_count": null, - "id": "130", + "id": "131", "metadata": {}, "outputs": [], "source": [ - "xs = chain(np.linspace(-3, 3, 200)) # turn data into ChainableArray\n", - "xs.plot(\"k-\", label=\"input data for linpoly\") # plot input data\n", + "xs = chain(np.linspace(-3, 3, 200)) # turn data into ChainableArray\n", + "xs.plot(\"k-\", label=\"input data for linpoly\") # plot input data\n", "xs.linpoly(3, 0, 20, curve=1).plot(\"r-\", label=\"linpoly output\")\n", "xs.linpoly(3, 0, 20, curve=-1).plot(\"b-\", label=\"linpoly output\")\n", - "plt.legend(); plt.grid()" + "plt.legend()\n", + "plt.grid()" ] }, { "cell_type": "markdown", - "id": "131", + "id": "132", "metadata": {}, "source": [ "the following plot shows how the curve parameter influences the mapping function" @@ -1853,19 +1731,20 @@ { "cell_type": "code", "execution_count": null, - "id": "132", + "id": "133", "metadata": {}, "outputs": [], "source": [ "xs = chain(np.linspace(-1, 1, 200))\n", "for i, curve in enumerate(range(-3, 3, 1)):\n", - " xs.linpoly(1, -10, 10, curve).plot('-', label=f\"curve={curve}\")\n", - "plt.legend(fontsize=6); plt.grid();" + " xs.linpoly(1, -10, 10, curve).plot(\"-\", label=f\"curve={curve}\")\n", + "plt.legend(fontsize=6)\n", + "plt.grid();" ] }, { "cell_type": "markdown", - "id": "133", + "id": "134", "metadata": {}, "source": [ "### `interp_spline`\n", @@ -1882,23 +1761,24 @@ { "cell_type": "code", "execution_count": null, - "id": "134", + "id": "135", "metadata": {}, "outputs": [], "source": [ - "xs = chain(np.linspace(0, 8.2, 1000)) # turn data into ChainableArray\n", + "xs = chain(np.linspace(0, 8.2, 1000)) # turn data into ChainableArray\n", "xc = [1, 2, 5, 7, 8]\n", "yc = [3, 1, 2, 9, 1]\n", "plt.plot(xc, yc, \"ro\", label=\"given points\")\n", "for k in [0, 1, 2]:\n", " ys = xs.interp_spline(xc, yc, k=k)\n", - " plt.plot(xs,ys, label=f\"spline with k={k}\")\n", - "plt.legend(fontsize=7); plt.grid()" + " plt.plot(xs, ys, label=f\"spline with k={k}\")\n", + "plt.legend(fontsize=7)\n", + "plt.grid()" ] }, { "cell_type": "markdown", - "id": "135", + "id": "136", "metadata": {}, "source": [ "### `interp`\n", @@ -1915,36 +1795,38 @@ { "cell_type": "code", "execution_count": null, - "id": "136", + "id": "137", "metadata": {}, "outputs": [], "source": [ - "xs = chain(np.linspace(0, 8.2, 1000)) # turn data into ChainableArray\n", + "xs = chain(np.linspace(0, 8.2, 1000)) # turn data into ChainableArray\n", "xc = [1, 2, 5, 7, 8]\n", "yc = [7, 1, 2, 9, 1]\n", "plt.plot(xc, yc, \"ro\", ms=3, label=\"given points\")\n", "ys = xs.interp(xc, yc)\n", - "plt.plot(xs, ys, \"b,\", label=f\"interp\")\n", - "plt.legend(fontsize=7); plt.grid()" + "plt.plot(xs, ys, \"b,\", label=\"interp\")\n", + "plt.legend(fontsize=7)\n", + "plt.grid()" ] }, { "cell_type": "code", "execution_count": null, - "id": "137", + "id": "138", "metadata": {}, "outputs": [], "source": [ - "xs = chain(np.arange(-100, 150)) # turn data into ChainableArray\n", + "xs = chain(np.arange(-100, 150)) # turn data into ChainableArray\n", "# use interp if clipping is wanted (faster for small datasets)\n", - "xs.interp([-50, 50, 100],[0, 0.4, 1]).plot(\"r-.\", label=\"interp with clipping\"); \n", - "xs.bilin(50, -50, 100, 0.4, 0, 1).plot(\"b:\", label='bilin with extrapolation');\n", - "plt.legend();plt.grid();" + "xs.interp([-50, 50, 100], [0, 0.4, 1]).plot(\"r-.\", label=\"interp with clipping\")\n", + "xs.bilin(50, -50, 100, 0.4, 0, 1).plot(\"b:\", label=\"bilin with extrapolation\")\n", + "plt.legend()\n", + "plt.grid();" ] }, { "cell_type": "markdown", - "id": "138", + "id": "139", "metadata": {}, "source": [ "### `fermi`\n", @@ -1960,7 +1842,7 @@ { "cell_type": "code", "execution_count": null, - "id": "139", + "id": "140", "metadata": {}, "outputs": [], "source": [ @@ -1969,7 +1851,7 @@ }, { "cell_type": "markdown", - "id": "140", + "id": "141", "metadata": {}, "source": [ "- ChainableArray.fermi uses self as input.\n", @@ -1979,35 +1861,40 @@ { "cell_type": "code", "execution_count": null, - "id": "141", + "id": "142", "metadata": {}, "outputs": [], "source": [ "xs = chain(np.arange(-10, 10, 0.005))\n", "for i, mu in enumerate([-2, 0, 2]):\n", " for j, tau in enumerate([0.2, 0.5, 1]):\n", - " xs.fermi(tau, mu).plot(xs=xs, color=['r','g','b'][i], \n", - " lw=j+1, label=f'lcurve for tau={tau}')\n", - "plt.xlabel('input'); plt.ylabel('output'); plt.grid(); \n", - "plt.legend(fontsize=8); plt.title(\"fermi curve mapping functions\");" + " xs.fermi(tau, mu).plot(\n", + " xs=xs, color=[\"r\", \"g\", \"b\"][i], lw=j + 1, label=f\"lcurve for tau={tau}\"\n", + " )\n", + "plt.xlabel(\"input\")\n", + "plt.ylabel(\"output\")\n", + "plt.grid()\n", + "plt.legend(fontsize=8)\n", + "plt.title(\"fermi curve mapping functions\");" ] }, { "cell_type": "code", "execution_count": null, - "id": "142", + "id": "143", "metadata": {}, "outputs": [], "source": [ "ts = chain(np.linspace(0, 0.1, 500))\n", - "xs = np.sin(2*np.pi*50*ts)\n", - "xs.plot(label='sine').fermi(tau=0.25, mu=1).plot(label='fermi distorted');\n", - "plt.legend(loc='upper right'); plt.grid()" + "xs = np.sin(2 * np.pi * 50 * ts)\n", + "xs.plot(label=\"sine\").fermi(tau=0.25, mu=1).plot(label=\"fermi distorted\")\n", + "plt.legend(loc=\"upper right\")\n", + "plt.grid()" ] }, { "cell_type": "markdown", - "id": "143", + "id": "144", "metadata": {}, "source": [ "### `normalize`\n", @@ -2025,16 +1912,16 @@ { "cell_type": "code", "execution_count": null, - "id": "144", + "id": "145", "metadata": {}, "outputs": [], "source": [ - "pam.normalize(np.random.rand(10)) # you'll find a 1 and a -1" + "pam.normalize(np.random.rand(10)) # you'll find a 1 and a -1" ] }, { "cell_type": "markdown", - "id": "145", + "id": "146", "metadata": {}, "source": [ "- ChainableArray.normalize uses self as input.\n", @@ -2044,19 +1931,20 @@ { "cell_type": "code", "execution_count": null, - "id": "146", + "id": "147", "metadata": {}, "outputs": [], "source": [ "ts = chain(np.linspace(0, 0.1, 500))\n", - "xs = (2*np.pi*50*ts).sin()\n", - "xs.plot(label='sine').normalize(0.5,1).plot(label='normalized to [0.5, 1]');\n", - "plt.legend(loc='upper right'); plt.grid()" + "xs = (2 * np.pi * 50 * ts).sin()\n", + "xs.plot(label=\"sine\").normalize(0.5, 1).plot(label=\"normalized to [0.5, 1]\")\n", + "plt.legend(loc=\"upper right\")\n", + "plt.grid()" ] }, { "cell_type": "markdown", - "id": "147", + "id": "148", "metadata": {}, "source": [ "### `norm_peak`\n", @@ -2073,16 +1961,16 @@ { "cell_type": "code", "execution_count": null, - "id": "148", + "id": "149", "metadata": {}, "outputs": [], "source": [ - "pam.norm_peak(np.random.rand(10), 5) # you'll find a 5 (not not a -5)" + "pam.norm_peak(np.random.rand(10), 5) # you'll find a 5 (not not a -5)" ] }, { "cell_type": "markdown", - "id": "149", + "id": "150", "metadata": {}, "source": [ "- ChainableArray.norm_peak uses self as input.\n", @@ -2092,19 +1980,20 @@ { "cell_type": "code", "execution_count": null, - "id": "150", + "id": "151", "metadata": {}, "outputs": [], "source": [ "ts = chain(np.linspace(0, 0.1, 500))\n", - "xs = np.sin(2*np.pi*50*ts)\n", - "xs.plot(label='sine').norm_peak(0.5).plot(label='norm_peak to 0.5');\n", - "plt.legend(loc='upper right'); plt.grid()" + "xs = np.sin(2 * np.pi * 50 * ts)\n", + "xs.plot(label=\"sine\").norm_peak(0.5).plot(label=\"norm_peak to 0.5\")\n", + "plt.legend(loc=\"upper right\")\n", + "plt.grid()" ] }, { "cell_type": "markdown", - "id": "151", + "id": "152", "metadata": {}, "source": [ "### `norm_rms`\n", @@ -2121,16 +2010,16 @@ { "cell_type": "code", "execution_count": null, - "id": "152", + "id": "153", "metadata": {}, "outputs": [], "source": [ - "pam.norm_rms(np.array([1,0,0,-1]), 1) # scale by sqrt(2) to magnify RMS" + "pam.norm_rms(np.array([1, 0, 0, -1]), 1) # scale by sqrt(2) to magnify RMS" ] }, { "cell_type": "markdown", - "id": "153", + "id": "154", "metadata": {}, "source": [ "- ChainableArray.norm_rms uses self as input.\n", @@ -2140,19 +2029,20 @@ { "cell_type": "code", "execution_count": null, - "id": "154", + "id": "155", "metadata": {}, "outputs": [], "source": [ "ts = chain(np.linspace(0, 0.1, 500))\n", - "xs = np.sin(2*np.pi*50*ts)\n", - "xs.plot(label='sine').norm_rms(0.5).plot(label='norm_rms to 0.5');\n", - "plt.legend(loc='upper right'); plt.grid()" + "xs = np.sin(2 * np.pi * 50 * ts)\n", + "xs.plot(label=\"sine\").norm_rms(0.5).plot(label=\"norm_rms to 0.5\")\n", + "plt.legend(loc=\"upper right\")\n", + "plt.grid()" ] }, { "cell_type": "markdown", - "id": "155", + "id": "156", "metadata": {}, "source": [ "### `remove_dc`\n", @@ -2167,16 +2057,16 @@ { "cell_type": "code", "execution_count": null, - "id": "156", + "id": "157", "metadata": {}, "outputs": [], "source": [ - "pam.remove_dc(np.array([1,2,3,4]))" + "pam.remove_dc(np.array([1, 2, 3, 4]))" ] }, { "cell_type": "markdown", - "id": "157", + "id": "158", "metadata": {}, "source": [ "- ChainableArray.remove_dc uses self as input.\n", @@ -2186,19 +2076,20 @@ { "cell_type": "code", "execution_count": null, - "id": "158", + "id": "159", "metadata": {}, "outputs": [], "source": [ "ts = chain(np.linspace(0, 0.1, 500))\n", - "xs = np.sin(2*np.pi*25*ts)**2\n", - "xs.plot(label='sine').remove_dc().plot(label='remove_dc output');\n", - "plt.legend(loc='upper right'); plt.grid()" + "xs = np.sin(2 * np.pi * 25 * ts) ** 2\n", + "xs.plot(label=\"sine\").remove_dc().plot(label=\"remove_dc output\")\n", + "plt.legend(loc=\"upper right\")\n", + "plt.grid()" ] }, { "cell_type": "markdown", - "id": "159", + "id": "160", "metadata": {}, "source": [ "### `gain`\n", @@ -2215,16 +2106,16 @@ { "cell_type": "code", "execution_count": null, - "id": "160", + "id": "161", "metadata": {}, "outputs": [], "source": [ - "pam.gain(np.array([1,2,3,4]), amp=2)" + "pam.gain(np.array([1, 2, 3, 4]), amp=2)" ] }, { "cell_type": "markdown", - "id": "161", + "id": "162", "metadata": {}, "source": [ "- ChainableArray.gain uses self as input.\n", @@ -2234,19 +2125,20 @@ { "cell_type": "code", "execution_count": null, - "id": "162", + "id": "163", "metadata": {}, "outputs": [], "source": [ "ts = chain(np.linspace(0, 0.1, 500))\n", - "xs = np.sin(2*np.pi*25*ts)\n", - "xs.plot(label='sine').gain(db=-6).plot(label='-6 dB gain');\n", - "plt.legend(loc='upper right'); plt.grid()" + "xs = np.sin(2 * np.pi * 25 * ts)\n", + "xs.plot(label=\"sine\").gain(db=-6).plot(label=\"-6 dB gain\")\n", + "plt.legend(loc=\"upper right\")\n", + "plt.grid()" ] }, { "cell_type": "markdown", - "id": "163", + "id": "164", "metadata": {}, "source": [ "### `ecdf`\n", @@ -2271,7 +2163,7 @@ }, { "cell_type": "markdown", - "id": "164", + "id": "165", "metadata": {}, "source": [ "**Example 1**: (compute once - use many)\n" @@ -2280,29 +2172,29 @@ { "cell_type": "code", "execution_count": null, - "id": "165", + "id": "166", "metadata": {}, "outputs": [], "source": [ "from pyamapping import ecdf\n", "\n", "data = np.array([1, 3, 1.5, 3.5, 2, 5, 8, 9, 16]) # your data, unsorted\n", - "myecdf = ecdf(data) # compute the (xc, yc) for interp()\n", + "myecdf = ecdf(data) # compute the (xc, yc) for interp()\n", "\n", "# now myecdf may be used many times\n", - "xn = chain(np.linspace(0, 20, 50)) # your custom x (at which you need ecdf)\n", - "yn = xn.interp(*myecdf, left=0) # extra argument to specify left extrapolation\n", + "xn = chain(np.linspace(0, 20, 50)) # your custom x (at which you need ecdf)\n", + "yn = xn.interp(*myecdf, left=0) # extra argument to specify left extrapolation\n", "\n", "# plot data, ecdf and results of interp\n", "plt.plot(data, np.zeros_like(data), \"bx\", label=\"data\")\n", "plt.plot(*myecdf, \"ro\", ms=5, label=\"ecdf for data\")\n", "plt.plot(xn, yn, \"ko-\", lw=0.5, ms=2, label=\"your applied ecdf to custom data\")\n", - "plt.grid()\n" + "plt.grid()" ] }, { "cell_type": "markdown", - "id": "166", + "id": "167", "metadata": {}, "source": [ "**Example 2:** (compute and map in one go)\n", @@ -2313,17 +2205,17 @@ { "cell_type": "code", "execution_count": null, - "id": "167", + "id": "168", "metadata": {}, "outputs": [], "source": [ "newdata = chain(np.array([0.5, 3.25, 20]))\n", - "newdata.interp(*ecdf(data), left=0) # turn newdata into ecdfs of data " + "newdata.interp(*ecdf(data), left=0) # turn newdata into ecdfs of data" ] }, { "cell_type": "markdown", - "id": "168", + "id": "169", "metadata": {}, "source": [ "### `lin_to_ecdf`\n", @@ -2338,18 +2230,18 @@ { "cell_type": "code", "execution_count": null, - "id": "169", + "id": "170", "metadata": {}, "outputs": [], "source": [ - "data_feat = np.random.randn(200) # data used for crafting the mapping\n", - "test_data = np.linspace(-3, 3, 200) # data to apply mapping to\n", + "data_feat = np.random.randn(200) # data used for crafting the mapping\n", + "test_data = np.linspace(-3, 3, 200) # data to apply mapping to\n", "chain(test_data).lin_to_ecdf(data_feat, sorted=False).plot(xs=test_data);" ] }, { "cell_type": "markdown", - "id": "170", + "id": "171", "metadata": {}, "source": [ "### `ecdf_to_lin`\n", @@ -2363,23 +2255,24 @@ { "cell_type": "code", "execution_count": null, - "id": "171", + "id": "172", "metadata": {}, "outputs": [], "source": [ "# ecdf_to_lin\n", - "data = chain(np.random.randn(500)).normalize(0,10) # some quantiles, i.e. in [0,1]\n", - "test_data = np.linspace(0, 1, 100) # data to apply mapping to\n", + "data = chain(np.random.randn(500)).normalize(0, 10) # some quantiles, i.e. in [0,1]\n", + "test_data = np.linspace(0, 1, 100) # data to apply mapping to\n", "chain(test_data).ecdf_to_lin(data).plot(xs=test_data)\n", "\n", - "plt.axvline(0.5, ls=\":\", color='k'); \n", - "plt.xlabel('test data, resp. quantile'); plt.ylabel('feature values')\n", - "plt.axhline(np.median(data), ls=\":\", color='k');" + "plt.axvline(0.5, ls=\":\", color=\"k\")\n", + "plt.xlabel(\"test data, resp. quantile\")\n", + "plt.ylabel(\"feature values\")\n", + "plt.axhline(np.median(data), ls=\":\", color=\"k\");" ] }, { "cell_type": "markdown", - "id": "172", + "id": "173", "metadata": {}, "source": [ "- quantiles mapping should pass a cdf array \n", @@ -2389,37 +2282,21 @@ { "cell_type": "code", "execution_count": null, - "id": "173", + "id": "174", "metadata": {}, "outputs": [], "source": [ - "data = chain(np.random.randn(200)) # data used for crafting the mapping\n", - "test_data = np.linspace(-3, 3, 200) # data to apply mapping to\n", + "data = chain(np.random.randn(200)) # data used for crafting the mapping\n", + "test_data = np.linspace(-3, 3, 200) # data to apply mapping to\n", "\n", - "chain(test_data).interp(*ecdf(data)).plot(xs=test_data, label='full data ecdf');\n", - "chain(test_data).interp(*ecdf(data, np.s_[20:-15:10])).plot(\"r-\", xs=test_data, ms=1, label='ecdf sliced');" + "chain(test_data).interp(*ecdf(data)).plot(xs=test_data, label=\"full data ecdf\")\n", + "chain(test_data).interp(*ecdf(data, np.s_[20:-15:10])).plot(\n", + " \"r-\", xs=test_data, ms=1, label=\"ecdf sliced\"\n", + ");" ] } ], - "metadata": { - "kernelspec": { - "display_name": "pyamapping (3.12.8)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.12.8" - } - }, + "metadata": {}, "nbformat": 4, "nbformat_minor": 5 } diff --git a/pyproject.toml b/pyproject.toml index 0e97942..8a52045 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,7 @@ [project] name = "pyamapping" description = "A Python package containing audio related functions and mappings" +version = "0.1.0" authors = [ { name = "Thomas Hermann", email = "thermann@techfak.uni-bielefeld.de"}, { name = "Dennis Reinsch", email = "dreinsch@techfak.uni-bielefeld.de"} @@ -9,7 +10,6 @@ maintainers = [ {name = "Fabian Hommel", email = "fhommel@techfa.uni-bielefeld.de"} ] readme = "README.rst" -dynamic = ["version"] requires-python = ">=3.9" dependencies = [ "numpy", @@ -26,20 +26,12 @@ classifiers = [ github = "https://github.com/interactive-sonification/pyamapping" [build-system] -requires = ["hatchling", "hatch-vcs"] +requires = ["hatchling"] build-backend = "hatchling.build" -[tool.hatch.version] -source = "vcs" - [tool.hatch.build.targets.wheel] packages = ["pyamapping"] -[tool.setuptools_scm] -# For smarter version schemes and other configuration options, -# check out https://github.com/pypa/setuptools_scm -version_scheme = "no-guess-dev" - [project.optional-dependencies] example-notebooks = ["notebook"] @@ -51,6 +43,7 @@ line-length = 88 [tool.ruff.lint] select = ["E", "F", "I", "T10"] # E/F = flake8, I = isort +ignore = ["E702"] [tool.ruff.lint.isort] known-first-party = ["pyamapping"] diff --git a/uv.lock b/uv.lock index cc10495..18547d4 100644 --- a/uv.lock +++ b/uv.lock @@ -1,5 +1,4 @@ version = 1 -revision = 1 requires-python = ">=3.9" resolution-markers = [ "python_full_version >= '3.14'", @@ -273,7 +272,7 @@ wheels = [ [[package]] name = "cachetools" -version = "7.0.5" +version = "7.0.6" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.14'", @@ -281,18 +280,18 @@ resolution-markers = [ "python_full_version == '3.11.*'", "python_full_version == '3.10.*'", ] -sdist = { url = "https://files.pythonhosted.org/packages/af/dd/57fe3fdb6e65b25a5987fd2cdc7e22db0aef508b91634d2e57d22928d41b/cachetools-7.0.5.tar.gz", hash = "sha256:0cd042c24377200c1dcd225f8b7b12b0ca53cc2c961b43757e774ebe190fd990", size = 37367 } +sdist = { url = "https://files.pythonhosted.org/packages/76/7b/1755ed2c6bfabd1d98b37ae73152f8dcf94aa40fee119d163c19ed484704/cachetools-7.0.6.tar.gz", hash = "sha256:e5d524d36d65703a87243a26ff08ad84f73352adbeafb1cde81e207b456aaf24", size = 37526 } wheels = [ - { url = "https://files.pythonhosted.org/packages/06/f3/39cf3367b8107baa44f861dc802cbf16263c945b62d8265d36034fc07bea/cachetools-7.0.5-py3-none-any.whl", hash = "sha256:46bc8ebefbe485407621d0a4264b23c080cedd913921bad7ac3ed2f26c183114", size = 13918 }, + { url = "https://files.pythonhosted.org/packages/fe/c4/cf76242a5da1410917107ff14551764aa405a5fd10cd10cf9a5ca8fa77f4/cachetools-7.0.6-py3-none-any.whl", hash = "sha256:4e94956cfdd3086f12042cdd29318f5ced3893014f7d0d059bf3ead3f85b7f8b", size = 13976 }, ] [[package]] name = "certifi" -version = "2026.2.25" +version = "2026.4.22" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/af/2d/7bf41579a8986e348fa033a31cdd0e4121114f6bce2457e8876010b092dd/certifi-2026.2.25.tar.gz", hash = "sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7", size = 155029 } +sdist = { url = "https://files.pythonhosted.org/packages/25/ee/6caf7a40c36a1220410afe15a1cc64993a1f864871f698c0f93acb72842a/certifi-2026.4.22.tar.gz", hash = "sha256:8d455352a37b71bf76a79caa83a3d6c25afee4a385d632127b6afb3963f1c580", size = 137077 } wheels = [ - { url = "https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl", hash = "sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa", size = 153684 }, + { url = "https://files.pythonhosted.org/packages/22/30/7cd8fdcdfbc5b869528b079bfb76dcdf6056b1a2097a662e5e8c04f42965/certifi-2026.4.22-py3-none-any.whl", hash = "sha256:3cb2210c8f88ba2318d29b0388d1023c8492ff72ecdde4ebdaddbb13a31b1c4a", size = 135707 }, ] [[package]] @@ -900,7 +899,7 @@ name = "exceptiongroup" version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371 } wheels = [ @@ -939,7 +938,7 @@ wheels = [ [[package]] name = "filelock" -version = "3.25.2" +version = "3.29.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.14'", @@ -947,9 +946,9 @@ resolution-markers = [ "python_full_version == '3.11.*'", "python_full_version == '3.10.*'", ] -sdist = { url = "https://files.pythonhosted.org/packages/94/b8/00651a0f559862f3bb7d6f7477b192afe3f583cc5e26403b44e59a55ab34/filelock-3.25.2.tar.gz", hash = "sha256:b64ece2b38f4ca29dd3e810287aa8c48182bbecd1ae6e9ae126c9b35f1382694", size = 40480 } +sdist = { url = "https://files.pythonhosted.org/packages/b5/fe/997687a931ab51049acce6fa1f23e8f01216374ea81374ddee763c493db5/filelock-3.29.0.tar.gz", hash = "sha256:69974355e960702e789734cb4871f884ea6fe50bd8404051a3530bc07809cf90", size = 57571 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl", hash = "sha256:ca8afb0da15f229774c9ad1b455ed96e85a81373065fb10446672f64444ddf70", size = 26759 }, + { url = "https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-py3-none-any.whl", hash = "sha256:96f5f6344709aa1572bbf631c640e4ebeeb519e08da902c39a001882f30ac258", size = 39812 }, ] [[package]] @@ -1013,7 +1012,7 @@ wheels = [ [[package]] name = "identify" -version = "2.6.18" +version = "2.6.19" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.14'", @@ -1021,18 +1020,18 @@ resolution-markers = [ "python_full_version == '3.11.*'", "python_full_version == '3.10.*'", ] -sdist = { url = "https://files.pythonhosted.org/packages/46/c4/7fb4db12296cdb11893d61c92048fe617ee853f8523b9b296ac03b43757e/identify-2.6.18.tar.gz", hash = "sha256:873ac56a5e3fd63e7438a7ecbc4d91aca692eb3fefa4534db2b7913f3fc352fd", size = 99580 } +sdist = { url = "https://files.pythonhosted.org/packages/52/63/51723b5f116cc04b061cb6f5a561790abf249d25931d515cd375e063e0f4/identify-2.6.19.tar.gz", hash = "sha256:6be5020c38fcb07da56c53733538a3081ea5aa70d36a156f83044bfbf9173842", size = 99567 } wheels = [ - { url = "https://files.pythonhosted.org/packages/46/33/92ef41c6fad0233e41d3d84ba8e8ad18d1780f1e5d99b3c683e6d7f98b63/identify-2.6.18-py2.py3-none-any.whl", hash = "sha256:8db9d3c8ea9079db92cafb0ebf97abdc09d52e97f4dcf773a2e694048b7cd737", size = 99394 }, + { url = "https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl", hash = "sha256:20e6a87f786f768c092a721ad107fc9df0eb89347be9396cadf3f4abbd1fb78a", size = 99397 }, ] [[package]] name = "idna" -version = "3.11" +version = "3.13" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582 } +sdist = { url = "https://files.pythonhosted.org/packages/ce/cc/762dfb036166873f0059f3b7de4565e1b5bc3d6f28a414c13da27e442f99/idna-3.13.tar.gz", hash = "sha256:585ea8fe5d69b9181ec1afba340451fba6ba764af97026f92a91d4eef164a242", size = 194210 } wheels = [ - { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008 }, + { url = "https://files.pythonhosted.org/packages/5d/13/ad7d7ca3808a898b4612b6fe93cde56b53f3034dcde235acb1f0e1df24c6/idna-3.13-py3-none-any.whl", hash = "sha256:892ea0cde124a99ce773decba204c5552b69c3c67ffd5f232eb7696135bc8bb3", size = 68629 }, ] [[package]] @@ -1143,8 +1142,7 @@ dependencies = [ { name = "comm", marker = "python_full_version >= '3.10'" }, { name = "debugpy", marker = "python_full_version >= '3.10'" }, { name = "ipython", version = "8.39.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, - { name = "ipython", version = "9.10.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, - { name = "ipython", version = "9.12.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "ipython", version = "9.13.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "jupyter-client", version = "8.8.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, { name = "jupyter-core", version = "5.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, { name = "matplotlib-inline", marker = "python_full_version >= '3.10'" }, @@ -1212,52 +1210,30 @@ wheels = [ [[package]] name = "ipython" -version = "9.10.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version == '3.11.*'", -] -dependencies = [ - { name = "colorama", marker = "python_full_version == '3.11.*' and sys_platform == 'win32'" }, - { name = "decorator", marker = "python_full_version == '3.11.*'" }, - { name = "ipython-pygments-lexers", marker = "python_full_version == '3.11.*'" }, - { name = "jedi", marker = "python_full_version == '3.11.*'" }, - { name = "matplotlib-inline", marker = "python_full_version == '3.11.*'" }, - { name = "pexpect", marker = "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "prompt-toolkit", marker = "python_full_version == '3.11.*'" }, - { name = "pygments", marker = "python_full_version == '3.11.*'" }, - { name = "stack-data", marker = "python_full_version == '3.11.*'" }, - { name = "traitlets", marker = "python_full_version == '3.11.*'" }, - { name = "typing-extensions", marker = "python_full_version == '3.11.*'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/c5/25/daae0e764047b0a2480c7bbb25d48f4f509b5818636562eeac145d06dfee/ipython-9.10.1.tar.gz", hash = "sha256:e170e9b2a44312484415bdb750492699bf329233b03f2557a9692cce6466ada4", size = 4426663 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/01/09/ba70f8d662d5671687da55ad2cc0064cf795b15e1eea70907532202e7c97/ipython-9.10.1-py3-none-any.whl", hash = "sha256:82d18ae9fb9164ded080c71ef92a182ee35ee7db2395f67616034bebb020a232", size = 622827 }, -] - -[[package]] -name = "ipython" -version = "9.12.0" +version = "9.13.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.14'", "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", ] dependencies = [ - { name = "colorama", marker = "python_full_version >= '3.12' and sys_platform == 'win32'" }, - { name = "decorator", marker = "python_full_version >= '3.12'" }, - { name = "ipython-pygments-lexers", marker = "python_full_version >= '3.12'" }, - { name = "jedi", marker = "python_full_version >= '3.12'" }, - { name = "matplotlib-inline", marker = "python_full_version >= '3.12'" }, - { name = "pexpect", marker = "python_full_version >= '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "prompt-toolkit", marker = "python_full_version >= '3.12'" }, - { name = "pygments", marker = "python_full_version >= '3.12'" }, - { name = "stack-data", marker = "python_full_version >= '3.12'" }, - { name = "traitlets", marker = "python_full_version >= '3.12'" }, + { name = "colorama", marker = "python_full_version >= '3.11' and sys_platform == 'win32'" }, + { name = "decorator", marker = "python_full_version >= '3.11'" }, + { name = "ipython-pygments-lexers", marker = "python_full_version >= '3.11'" }, + { name = "jedi", marker = "python_full_version >= '3.11'" }, + { name = "matplotlib-inline", marker = "python_full_version >= '3.11'" }, + { name = "pexpect", marker = "python_full_version >= '3.11' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit", marker = "python_full_version >= '3.11'" }, + { name = "psutil", marker = "python_full_version >= '3.11'" }, + { name = "pygments", marker = "python_full_version >= '3.11'" }, + { name = "stack-data", marker = "python_full_version >= '3.11'" }, + { name = "traitlets", marker = "python_full_version >= '3.11'" }, + { name = "typing-extensions", marker = "python_full_version == '3.11.*'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3a/73/7114f80a8f9cabdb13c27732dce24af945b2923dcab80723602f7c8bc2d8/ipython-9.12.0.tar.gz", hash = "sha256:01daa83f504b693ba523b5a407246cabde4eb4513285a3c6acaff11a66735ee4", size = 4428879 } +sdist = { url = "https://files.pythonhosted.org/packages/cd/c4/87cda5842cf5c31837c06ddb588e11c3c35d8ece89b7a0108c06b8c9b00a/ipython-9.13.0.tar.gz", hash = "sha256:7e834b6afc99f020e3f05966ced34792f40267d64cb1ea9043886dab0dde5967", size = 4430549 } wheels = [ - { url = "https://files.pythonhosted.org/packages/59/22/906c8108974c673ebef6356c506cebb6870d48cedea3c41e949e2dd556bb/ipython-9.12.0-py3-none-any.whl", hash = "sha256:0f2701e8ee86e117e37f50563205d36feaa259d2e08d4a6bc6b6d74b18ce128d", size = 625661 }, + { url = "https://files.pythonhosted.org/packages/b9/86/3060e8029b7cc505cce9a0137431dda81d0a3fde93a8f0f50ee0bf37a795/ipython-9.13.0-py3-none-any.whl", hash = "sha256:57f9d4639e20818d328d287c7b549af3d05f12486ea8f2e7f73e52a36ec4d201", size = 627274 }, ] [[package]] @@ -1502,7 +1478,7 @@ wheels = [ [[package]] name = "jupyter-events" -version = "0.12.0" +version = "0.12.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jsonschema", version = "4.25.1", source = { registry = "https://pypi.org/simple" }, extra = ["format-nongpl"], marker = "python_full_version < '3.10'" }, @@ -1517,9 +1493,9 @@ dependencies = [ { name = "rfc3986-validator" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/9d/c3/306d090461e4cf3cd91eceaff84bede12a8e52cd821c2d20c9a4fd728385/jupyter_events-0.12.0.tar.gz", hash = "sha256:fc3fce98865f6784c9cd0a56a20644fc6098f21c8c33834a8d9fe383c17e554b", size = 62196 } +sdist = { url = "https://files.pythonhosted.org/packages/18/f8/475c4241b2b75af0deaae453ed003c6c851766dbc44d332d8baf245dc931/jupyter_events-0.12.1.tar.gz", hash = "sha256:faff25f77218335752f35f23c5fe6e4a392a7bd99a5939ccb9b8fbf594636cf3", size = 62854 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl", hash = "sha256:6464b2fa5ad10451c3d35fabc75eab39556ae1e2853ad0c0cc31b656731a97fb", size = 19430 }, + { url = "https://files.pythonhosted.org/packages/eb/6c/6fcde0c8f616ed360ffd3587f7db9e225a7e62b583a04494d2f069cf64ea/jupyter_events-0.12.1-py3-none-any.whl", hash = "sha256:c366585253f537a627da52fa7ca7410c5b5301fe893f511e7b077c2d93ec8bcf", size = 19512 }, ] [[package]] @@ -2115,11 +2091,11 @@ wheels = [ [[package]] name = "packaging" -version = "26.0" +version = "26.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/65/ee/299d360cdc32edc7d2cf530f3accf79c4fca01e96ffc950d8a52213bd8e4/packaging-26.0.tar.gz", hash = "sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4", size = 143416 } +sdist = { url = "https://files.pythonhosted.org/packages/d7/f1/e7a6dd94a8d4a5626c03e4e99c87f241ba9e350cd9e6d75123f992427270/packaging-26.2.tar.gz", hash = "sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661", size = 228134 } wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl", hash = "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529", size = 74366 }, + { url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", size = 100195 }, ] [[package]] @@ -2209,7 +2185,7 @@ wheels = [ [[package]] name = "pre-commit" -version = "4.5.1" +version = "4.6.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.14'", @@ -2219,14 +2195,14 @@ resolution-markers = [ ] dependencies = [ { name = "cfgv", version = "3.5.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "identify", version = "2.6.18", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "identify", version = "2.6.19", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, { name = "nodeenv", marker = "python_full_version >= '3.10'" }, { name = "pyyaml", marker = "python_full_version >= '3.10'" }, { name = "virtualenv", marker = "python_full_version >= '3.10'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/40/f1/6d86a29246dfd2e9b6237f0b5823717f60cad94d47ddc26afa916d21f525/pre_commit-4.5.1.tar.gz", hash = "sha256:eb545fcff725875197837263e977ea257a402056661f09dae08e4b149b030a61", size = 198232 } +sdist = { url = "https://files.pythonhosted.org/packages/8e/22/2de9408ac81acbb8a7d05d4cc064a152ccf33b3d480ebe0cd292153db239/pre_commit-4.6.0.tar.gz", hash = "sha256:718d2208cef53fdc38206e40524a6d4d9576d103eb16f0fec11c875e7716e9d9", size = 198525 } wheels = [ - { url = "https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl", hash = "sha256:3b3afd891e97337708c1674210f8eba659b52a38ea5f822ff142d10786221f77", size = 226437 }, + { url = "https://files.pythonhosted.org/packages/80/6e/4b28b62ecb6aae56769c34a8ff1d661473ec1e9519e2d5f8b2c150086b26/pre_commit-4.6.0-py2.py3-none-any.whl", hash = "sha256:e2cf246f7299edcabcf15f9b0571fdce06058527f0a06535068a86d38089f29b", size = 226472 }, ] [[package]] @@ -2298,6 +2274,7 @@ wheels = [ [[package]] name = "pyamapping" +version = "0.1.0" source = { editable = "." } dependencies = [ { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, @@ -2316,7 +2293,7 @@ example-notebooks = [ [package.dev-dependencies] dev = [ { name = "pre-commit", version = "4.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "pre-commit", version = "4.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "pre-commit", version = "4.6.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, { name = "pytest", version = "8.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, { name = "pytest", version = "9.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, { name = "pytest-cov" }, @@ -2325,7 +2302,7 @@ dev = [ { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, { name = "tox", version = "4.30.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "tox", version = "4.52.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "tox", version = "4.53.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, ] [package.metadata] @@ -2334,7 +2311,6 @@ requires-dist = [ { name = "numpy" }, { name = "scipy" }, ] -provides-extras = ["example-notebooks"] [package.metadata.requires-dev] dev = [ @@ -2495,7 +2471,7 @@ version = "1.2.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "filelock", version = "3.19.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "filelock", version = "3.25.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "filelock", version = "3.29.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, { name = "platformdirs", version = "4.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, { name = "platformdirs", version = "4.9.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, ] @@ -3699,7 +3675,7 @@ wheels = [ [[package]] name = "tox" -version = "4.52.1" +version = "4.53.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.14'", @@ -3708,9 +3684,9 @@ resolution-markers = [ "python_full_version == '3.10.*'", ] dependencies = [ - { name = "cachetools", version = "7.0.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "cachetools", version = "7.0.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, { name = "colorama", marker = "python_full_version >= '3.10'" }, - { name = "filelock", version = "3.25.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "filelock", version = "3.29.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, { name = "packaging", marker = "python_full_version >= '3.10'" }, { name = "platformdirs", version = "4.9.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, { name = "pluggy", marker = "python_full_version >= '3.10'" }, @@ -3721,9 +3697,9 @@ dependencies = [ { name = "typing-extensions", marker = "python_full_version == '3.10.*'" }, { name = "virtualenv", marker = "python_full_version >= '3.10'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bc/fb/d7d634eb513f741ffd40f4c262b7feea19d5c616882eb554045c620670a6/tox-4.52.1.tar.gz", hash = "sha256:297e71ea0ae4ef3acc45cb5fdf080b74537e6ecb5eea7d4646fa7322ca10473e", size = 273730 } +sdist = { url = "https://files.pythonhosted.org/packages/04/01/d87a00063fa670ce4c48a9706b615a95ddf2c9ef5558d43af6071f166fd4/tox-4.53.0.tar.gz", hash = "sha256:62c780e42f87d34ee60f2ea20342156253794fdcbd6885fd797d98ee05009f22", size = 274048 } wheels = [ - { url = "https://files.pythonhosted.org/packages/3a/70/0d4fb1eefa05a24ca2f58272b4c4718090dd5ed7e38b54b9a7e757bfafc8/tox-4.52.1-py3-none-any.whl", hash = "sha256:3c4eef0a64f319df0b67dacdb7edcfeda87c8cc722581af5d98dd54f3ffdd8ef", size = 212179 }, + { url = "https://files.pythonhosted.org/packages/16/03/02e2a03f3756cfb66e7e1bac41b06953f12cec75ddb961d56695d4d43dc4/tox-4.53.0-py3-none-any.whl", hash = "sha256:cc4e716d18c4889aa179d785175c438fa60c35deef20ce689ec288d8fb656096", size = 212164 }, ] [[package]] @@ -3746,11 +3722,11 @@ wheels = [ [[package]] name = "tzdata" -version = "2026.1" +version = "2026.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/19/f5/cd531b2d15a671a40c0f66cf06bc3570a12cd56eef98960068ebbad1bf5a/tzdata-2026.1.tar.gz", hash = "sha256:67658a1903c75917309e753fdc349ac0efd8c27db7a0cb406a25be4840f87f98", size = 197639 } +sdist = { url = "https://files.pythonhosted.org/packages/ba/19/1b9b0e29f30c6d35cb345486df41110984ea67ae69dddbc0e8a100999493/tzdata-2026.2.tar.gz", hash = "sha256:9173fde7d80d9018e02a662e168e5a2d04f87c41ea174b139fbef642eda62d10", size = 198254 } wheels = [ - { url = "https://files.pythonhosted.org/packages/b0/70/d460bd685a170790ec89317e9bd33047988e4bce507b831f5db771e142de/tzdata-2026.1-py2.py3-none-any.whl", hash = "sha256:4b1d2be7ac37ceafd7327b961aa3a54e467efbdb563a23655fbfe0d39cfc42a9", size = 348952 }, + { url = "https://files.pythonhosted.org/packages/ce/e4/dccd7f47c4b64213ac01ef921a1337ee6e30e8c6466046018326977efd95/tzdata-2026.2-py2.py3-none-any.whl", hash = "sha256:bbe9af844f658da81a5f95019480da3a89415801f6cc966806612cc7169bffe7", size = 349321 }, ] [[package]] @@ -3773,20 +3749,20 @@ wheels = [ [[package]] name = "virtualenv" -version = "21.2.3" +version = "21.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "distlib" }, { name = "filelock", version = "3.19.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "filelock", version = "3.25.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "filelock", version = "3.29.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, { name = "platformdirs", version = "4.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, { name = "platformdirs", version = "4.9.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, { name = "python-discovery" }, { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/60/8c/bdd9f89f89e4a787ac61bb2da4d884bc45e0c287ec694dfa3170dddd5cfe/virtualenv-21.2.3.tar.gz", hash = "sha256:9bb6d1414ab55ca624371e30c7719c32f183ef44da544ef8aa44a456de7ac191", size = 5844776 } +sdist = { url = "https://files.pythonhosted.org/packages/3f/8b/6331f7a7fe70131c301106ec1e7cf23e2501bf7d4ca3636805801ca191bb/virtualenv-21.3.0.tar.gz", hash = "sha256:733750db978ec95c2d8eb4feadaa57091002bce404cb39ba69899cf7bd28944e", size = 7614069 } wheels = [ - { url = "https://files.pythonhosted.org/packages/95/19/bc7c4e05f42532863cf2ae7e7e847beab25835934e0410160b47eeff1e35/virtualenv-21.2.3-py3-none-any.whl", hash = "sha256:486652347ea8526d91e9807c0274583cb7ba31dd4942ff10fb5621402f0fe0d8", size = 5828329 }, + { url = "https://files.pythonhosted.org/packages/4b/eb/03bfb1299d4c4510329e470f13f9a4ce793df7fcb5a2fd3510f911066f61/virtualenv-21.3.0-py3-none-any.whl", hash = "sha256:4d28ee41f6d9ec8f1f00cd472b9ffbcedda1b3d3b9a575b5c94a2d004fd51bd7", size = 7594690 }, ] [[package]] From 1e3948d787fc282053d061709d39e100a011b1fc Mon Sep 17 00:00:00 2001 From: Fabian Hommel Date: Wed, 29 Apr 2026 11:42:15 +0200 Subject: [PATCH 85/87] incremented version to 1.0.0 --- pyproject.toml | 2 +- uv.lock | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 8a52045..3111a42 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "pyamapping" description = "A Python package containing audio related functions and mappings" -version = "0.1.0" +version = "1.0.0" authors = [ { name = "Thomas Hermann", email = "thermann@techfak.uni-bielefeld.de"}, { name = "Dennis Reinsch", email = "dreinsch@techfak.uni-bielefeld.de"} diff --git a/uv.lock b/uv.lock index 18547d4..fb37578 100644 --- a/uv.lock +++ b/uv.lock @@ -1,4 +1,5 @@ version = 1 +revision = 1 requires-python = ">=3.9" resolution-markers = [ "python_full_version >= '3.14'", @@ -899,7 +900,7 @@ name = "exceptiongroup" version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371 } wheels = [ @@ -2274,7 +2275,7 @@ wheels = [ [[package]] name = "pyamapping" -version = "0.1.0" +version = "1.0.0" source = { editable = "." } dependencies = [ { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, @@ -2311,6 +2312,7 @@ requires-dist = [ { name = "numpy" }, { name = "scipy" }, ] +provides-extras = ["example-notebooks"] [package.metadata.requires-dev] dev = [ From 70816eefc0e0ee9d4d01a7c07831b2db95451db8 Mon Sep 17 00:00:00 2001 From: Fabian Hommel Date: Thu, 30 Apr 2026 14:01:55 +0200 Subject: [PATCH 86/87] Added manual dispatch to publish step in github workflow --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ef2fd2e..b70a480 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -98,7 +98,7 @@ jobs: publish: needs: finalize - if: ${{ github.event_name == 'push' && contains(github.ref, 'refs/tags/') }} + if: ${{ (github.event_name == 'push' || github.event_name == 'workflow_dispatch') && contains(github.ref, 'refs/tags/') }} runs-on: ubuntu-latest permissions: contents: write From 4d9b770a1f7da19cf2e51b48d6a6a96e3e8612f7 Mon Sep 17 00:00:00 2001 From: Fabian Hommel Date: Thu, 30 Apr 2026 14:08:17 +0200 Subject: [PATCH 87/87] added debug step to finalize --- .github/workflows/ci.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b70a480..ffde73f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -95,6 +95,10 @@ jobs: with: github-token: ${{ secrets.GITHUB_TOKEN }} parallel-finished: true + - name: debug + run: echo "ref=${{ github.ref }} event=${{ github.event_name }}" + + publish: needs: finalize