From b8dcbea620cee1f90af851fa98efca4ed0c6b6c2 Mon Sep 17 00:00:00 2001 From: misi9170 Date: Fri, 8 May 2026 10:44:40 -0600 Subject: [PATCH 01/52] Clean up and updates for numpy v2 --- examples/example_10_BEM_yaw_tilt.py | 6 +++--- mitwindfarm/RotorGrid.py | 4 ++-- pyproject.toml | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/examples/example_10_BEM_yaw_tilt.py b/examples/example_10_BEM_yaw_tilt.py index 8b51a66..dbfeb64 100644 --- a/examples/example_10_BEM_yaw_tilt.py +++ b/examples/example_10_BEM_yaw_tilt.py @@ -64,9 +64,9 @@ def objective_func(x): fig.suptitle("$C_P$ for Equivalent Turbine Setups", size = 16) deg_yaw_tilt, deg_eff_yaw = np.rad2deg(yaw_tilt_val), np.rad2deg(eff_yaw) - axes[0, 0].set_title(f"Yaw {np.round(deg_eff_yaw, decimals=1)}$^\circ$\n$C_P$: {yaw_sol.Cp:2.3f}") - axes[0, 1].set_title(f"Tilt {np.round(deg_eff_yaw, decimals=1)}$^\circ$\n$C_P$: {tilt_sol.Cp:2.3f}") - axes[0, 2].set_title(f"Yaw {np.round(deg_yaw_tilt, decimals=1)}$^\circ$ & Tilt {np.round(deg_yaw_tilt, decimals=1)}$^\circ$\n$C_P$: {yaw_and_tilt_sol.Cp:2.3f}") + axes[0, 0].set_title(f"Yaw {np.round(deg_eff_yaw, decimals=1)}$^\\circ$\n$C_P$: {yaw_sol.Cp:2.3f}") + axes[0, 1].set_title(f"Tilt {np.round(deg_eff_yaw, decimals=1)}$^\\circ$\n$C_P$: {tilt_sol.Cp:2.3f}") + axes[0, 2].set_title(f"Yaw {np.round(deg_yaw_tilt, decimals=1)}$^\\circ$ & Tilt {np.round(deg_yaw_tilt, decimals=1)}$^\\circ$\n$C_P$: {yaw_and_tilt_sol.Cp:2.3f}") plt.tight_layout() plt.savefig( FIGDIR / "example_10_yaw_tilt_comparison.png", dpi=300, bbox_inches="tight" diff --git a/mitwindfarm/RotorGrid.py b/mitwindfarm/RotorGrid.py index da144b7..1c893c1 100644 --- a/mitwindfarm/RotorGrid.py +++ b/mitwindfarm/RotorGrid.py @@ -127,7 +127,7 @@ def average(self, U: ArrayLike) -> ArrayLike: return ( 4 / np.pi - * np.trapz( - np.trapz(self.r_mesh * U, self.r_mesh, axis=-1), self.thetas, axis=-1 + * np.trapezoid( + np.trapezoid(self.r_mesh * U, self.r_mesh, axis=-1), self.thetas, axis=-1 ) ) diff --git a/pyproject.toml b/pyproject.toml index d84624e..c865970 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,7 @@ readme = "README.md" [tool.poetry.dependencies] python = "^3.9" -numpy = ">=1.16.5" +numpy = "^2.1.1" scipy = ">=1.6" mitrotor = { git = "https://github.com/Howland-Lab/MITRotor.git"} unified-momentum-model = { git = "https://github.com/Howland-Lab/Unified-Momentum-Model.git"} From fef95ec782b1e82d01790c09d89b1ce24e780e1e Mon Sep 17 00:00:00 2001 From: misi9170 Date: Fri, 8 May 2026 15:03:56 -0600 Subject: [PATCH 02/52] First pass at basic interface --- mitwindfarm/Interface.py | 59 ++++++++++++++++++++++++++++++++++++++++ mitwindfarm/__init__.py | 1 + pyproject.toml | 2 ++ 3 files changed, 62 insertions(+) create mode 100644 mitwindfarm/Interface.py diff --git a/mitwindfarm/Interface.py b/mitwindfarm/Interface.py new file mode 100644 index 0000000..c730a75 --- /dev/null +++ b/mitwindfarm/Interface.py @@ -0,0 +1,59 @@ +from attrs import define, field + +import numpy as np + +from floris.core.wake_model import BaseWakeModel + +from mitwindfarm import Layout + +@define +class FlorisWakeModel(BaseWakeModel): + # Parameters (to fill in) + windfarm = field(default=None) + + def turbine_solve(self, farm, flow_field, grid): + self._solve_and_evaluate(farm, flow_field, grid, grid) + + def point_solve(self, farm, flow_field, grid): + turbine_grid = self.generate_turbine_grid_objects(farm, flow_field)[2] + self._solve_and_evaluate(farm, flow_field, grid, turbine_grid) + + def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): + # Assume all turbines have the same rotor diameter; not sure if + # methods below handle varying rotor diameters? + if not np.all(farm.rotor_diameters == farm.rotor_diameters[0]): + raise NotImplementedError("Varying rotor diameters not supported in FlorisWakeModel") + else: + D = farm.rotor_diameters[0] + + # Use sorted version + for f in range(flow_field.n_findex): + + turbines_x = turbine_grid.x_sorted.mean(axis=(2,3))[f] + turbines_y = turbine_grid.y_sorted.mean(axis=(2,3))[f] + layout = Layout(turbines_x/D, turbines_y/D) + # Extract quantities for this findex + wd = flow_field.wind_directions[f] + ws = flow_field.wind_speeds[f] # Single ws for now. Use u_initial_sorted. + ti = flow_field.turbulence_intensities[f] + + yaw = farm.yaw_angles[f, :] + #tilt = farm.tilt_angles[f, :] + tilt = np.zeros_like(yaw) # Temporary + pitch = 0.0 * np.ones_like(yaw) + tsr = 7.0 * np.ones_like(yaw) + + # Create Windfarm calling arguments + setpoints = list(zip(pitch, tsr, yaw, tilt)) + + # Solve for the current findex + windfarm_sol = self.windfarm(layout, setpoints) + + # Extract the wind speeds at the turbine locations + relative_velocities = windfarm_sol.windfield.wsp( + grid.x_sorted[f]/D, grid.y_sorted[f]/D, grid.z_sorted[f]/D + ) + + # Assign to flow field + # (sorting may be an issue here. May need to reassign layout each time). + flow_field.u_sorted[f] = relative_velocities * ws diff --git a/mitwindfarm/__init__.py b/mitwindfarm/__init__.py index 0fe7af7..78a8ebd 100644 --- a/mitwindfarm/__init__.py +++ b/mitwindfarm/__init__.py @@ -1,4 +1,5 @@ from ._Layout import GridLayout, Square, Layout +from .Interface import FlorisWakeModel from .Rotor import RotorSolution, AD, UnifiedAD, BEM, CosineRotor from .RotorGrid import Point, Line, Area from .Superposition import Linear, Niayifar, Quadratic, Dominant diff --git a/pyproject.toml b/pyproject.toml index c865970..db9193f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,6 +11,8 @@ numpy = "^2.1.1" scipy = ">=1.6" mitrotor = { git = "https://github.com/Howland-Lab/MITRotor.git"} unified-momentum-model = { git = "https://github.com/Howland-Lab/Unified-Momentum-Model.git"} +floris = {git = "https://github.com/misi9170/floris.git", branch = "ehmt/solvers"} + # [tool.poetry.group.dev.dependencies] ipython = { version = "^8", optional = true} jupyter = { version = "^1.0.0", optional = true} From a846c63eee63b4d32aa67d8656e67c87a2faab8f Mon Sep 17 00:00:00 2001 From: misi9170 Date: Fri, 22 May 2026 16:17:28 -0600 Subject: [PATCH 03/52] Use base wind field --- mitwindfarm/Interface.py | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/mitwindfarm/Interface.py b/mitwindfarm/Interface.py index c730a75..b3d7cf4 100644 --- a/mitwindfarm/Interface.py +++ b/mitwindfarm/Interface.py @@ -4,7 +4,8 @@ from floris.core.wake_model import BaseWakeModel -from mitwindfarm import Layout +from .Windfield import PowerLaw +from ._Layout import Layout @define class FlorisWakeModel(BaseWakeModel): @@ -21,21 +22,32 @@ def point_solve(self, farm, flow_field, grid): def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): # Assume all turbines have the same rotor diameter; not sure if # methods below handle varying rotor diameters? - if not np.all(farm.rotor_diameters == farm.rotor_diameters[0]): + if not np.all(farm.rotor_diameters == farm.rotor_diameters.mean()): raise NotImplementedError("Varying rotor diameters not supported in FlorisWakeModel") else: - D = farm.rotor_diameters[0] + D = farm.rotor_diameters.mean() # Use sorted version for f in range(flow_field.n_findex): turbines_x = turbine_grid.x_sorted.mean(axis=(2,3))[f] turbines_y = turbine_grid.y_sorted.mean(axis=(2,3))[f] - layout = Layout(turbines_x/D, turbines_y/D) - # Extract quantities for this findex - wd = flow_field.wind_directions[f] - ws = flow_field.wind_speeds[f] # Single ws for now. Use u_initial_sorted. - ti = flow_field.turbulence_intensities[f] + turbines_z = turbine_grid.z_sorted.mean(axis=(2,3))[f] + layout = Layout(turbines_x/D, turbines_y/D, turbines_z/D) + + # Reinstantiate the windfarm model + self.windfarm = self.windfarm.__class__( + rotor_model=self.windfarm.rotor_model, # TODO: Pass FLORIS-like wrapper here? + wake_model=self.windfarm.wake_model, + superposition=self.windfarm.superposition, + base_windfield=PowerLaw( + flow_field.wind_speeds[f], + flow_field.reference_wind_height/D, + flow_field.wind_shear, + flow_field.turbulence_intensities[f] + ), + TIamb=flow_field.turbulence_intensities[f], # Needed? not sure + ) yaw = farm.yaw_angles[f, :] #tilt = farm.tilt_angles[f, :] @@ -55,5 +67,8 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): ) # Assign to flow field - # (sorting may be an issue here. May need to reassign layout each time). - flow_field.u_sorted[f] = relative_velocities * ws + flow_field.u_sorted[f] = relative_velocities + +# TODO +# Create Rotor-style wrapper for Floris operation_model so that that can be called instead? +# How to pass tilt, etc in? From ecc5b5752d2965b0b8b098bf897f8ea0f96a7727 Mon Sep 17 00:00:00 2001 From: misi9170 Date: Tue, 9 Jun 2026 17:25:53 -0600 Subject: [PATCH 04/52] Minor update to allow non-unity Uinf --- mitwindfarm/Plotting.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mitwindfarm/Plotting.py b/mitwindfarm/Plotting.py index 21150cb..f65356d 100644 --- a/mitwindfarm/Plotting.py +++ b/mitwindfarm/Plotting.py @@ -4,7 +4,7 @@ from .windfarm import WindfarmSolution -def plot_windfarm(sol: WindfarmSolution, ax=None, pad=1, x=None, y=None, z=None, frame=True, axis=False, res: int=400): +def plot_windfarm(sol: WindfarmSolution, ax=None, pad=1, x=None, y=None, z=None, frame=True, axis=False, res: int=400, vmin=0, vmax=2): if sum(val is not None for val in (x, y, z)) > 1: raise ValueError("At most one of x, y, or z can br provided to plot a 2D slice of the wind farm") @@ -21,7 +21,7 @@ def plot_windfarm(sol: WindfarmSolution, ax=None, pad=1, x=None, y=None, z=None, xmesh, zmesh = np.meshgrid(_x, _z) wsp = sol.windfield.wsp(xmesh, np.full_like(xmesh, y), zmesh) ax.imshow( - wsp, extent=[*xlim, *zlim], vmin=0, vmax=2, origin="lower", cmap="RdYlBu_r" + wsp, extent=[*xlim, *zlim], vmin=vmin, vmax=vmax, origin="lower", cmap="RdYlBu_r" ) elif x is not None: yz_frame = True @@ -29,7 +29,7 @@ def plot_windfarm(sol: WindfarmSolution, ax=None, pad=1, x=None, y=None, z=None, ymesh, zmesh = np.meshgrid(_y, _z) wsp = sol.windfield.wsp(np.full_like(ymesh, x), ymesh, zmesh) ax.imshow( - wsp, extent=[*ylim, *zlim], vmin=0, vmax=2, origin="lower", cmap="RdYlBu_r" + wsp, extent=[*ylim, *zlim], vmin=vmin, vmax=vmax, origin="lower", cmap="RdYlBu_r" ) else: z = np.mean(sol.layout.z) if z is None else z @@ -37,7 +37,7 @@ def plot_windfarm(sol: WindfarmSolution, ax=None, pad=1, x=None, y=None, z=None, xmesh, ymesh = np.meshgrid(_x, _y) wsp = sol.windfield.wsp(xmesh, ymesh, np.full_like(xmesh, z)) ax.imshow( - wsp, extent=[*xlim, *ylim], vmin=0, vmax=2, origin="lower", cmap="RdYlBu_r" + wsp, extent=[*xlim, *ylim], vmin=vmin, vmax=vmax, origin="lower", cmap="RdYlBu_r" ) for (turb_x, turb_y, turb_z), rotor in zip(sol.layout, sol.rotors): From 78e3ca2be2df7e954cedaaec707d114d54cdec46 Mon Sep 17 00:00:00 2001 From: misi9170 Date: Tue, 9 Jun 2026 17:26:42 -0600 Subject: [PATCH 05/52] Temporary, switch for windfarm type but planning to dedicate to CurledWindfarm --- mitwindfarm/Interface.py | 69 +++++++++++++++++++++++++++------------- 1 file changed, 47 insertions(+), 22 deletions(-) diff --git a/mitwindfarm/Interface.py b/mitwindfarm/Interface.py index b3d7cf4..f2042db 100644 --- a/mitwindfarm/Interface.py +++ b/mitwindfarm/Interface.py @@ -6,6 +6,7 @@ from .Windfield import PowerLaw from ._Layout import Layout +from .windfarm import Windfarm, CosineWindfarm, CurledWindfarm @define class FlorisWakeModel(BaseWakeModel): @@ -35,30 +36,53 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): turbines_z = turbine_grid.z_sorted.mean(axis=(2,3))[f] layout = Layout(turbines_x/D, turbines_y/D, turbines_z/D) - # Reinstantiate the windfarm model - self.windfarm = self.windfarm.__class__( - rotor_model=self.windfarm.rotor_model, # TODO: Pass FLORIS-like wrapper here? - wake_model=self.windfarm.wake_model, - superposition=self.windfarm.superposition, - base_windfield=PowerLaw( - flow_field.wind_speeds[f], - flow_field.reference_wind_height/D, - flow_field.wind_shear, - flow_field.turbulence_intensities[f] - ), - TIamb=flow_field.turbulence_intensities[f], # Needed? not sure - ) - - yaw = farm.yaw_angles[f, :] - #tilt = farm.tilt_angles[f, :] - tilt = np.zeros_like(yaw) # Temporary - pitch = 0.0 * np.ones_like(yaw) - tsr = 7.0 * np.ones_like(yaw) + # Generate calling arguments based on windfarm type. Also depends on rotor model; not yet handled. + # Sometimes, setpoints should include tsr and pitch; other times, ctprime? Depends on rotor model? + if type(self.windfarm) is Windfarm: + init_kwargs = { + "rotor_model": self.windfarm.rotor_model, # TODO: Pass FLORIS-like wrapper here? + "wake_model": self.windfarm.wake_model, + "superposition": self.windfarm.superposition, + "base_windfield": PowerLaw( # TODO: Can we pass a more general wind field? + flow_field.wind_speeds[f], + flow_field.reference_wind_height/D, + flow_field.wind_shear, + flow_field.turbulence_intensities[f] + ), + "TIamb": flow_field.turbulence_intensities[f], # Needed? not sure + } - # Create Windfarm calling arguments - setpoints = list(zip(pitch, tsr, yaw, tilt)) + yaw = farm.yaw_angles[f, :] + #tilt = farm.tilt_angles[f, :] + tilt = np.zeros_like(yaw) # Temporary + pitch = 0.0 * np.ones_like(yaw) + tsr = 7.0 * np.ones_like(yaw) + setpoints = list(zip(pitch, tsr, yaw, tilt)) + elif type(self.windfarm) is CosineWindfarm: + setpoints = list(yaw) + raise NotImplementedError( + "CosineWindfarm has not yet been tested with FlorisWakeModel;" + " may need custom setpoint formatting" + ) + elif type(self.windfarm) is CurledWindfarm: + init_kwargs = { + "rotor_model": self.windfarm.rotor_model, # TODO: Pass FLORIS-like wrapper here? + "base_windfield": PowerLaw( # TODO: Can we pass a more general wind field? + flow_field.wind_speeds[f], + flow_field.reference_wind_height/D, + flow_field.wind_shear, + flow_field.turbulence_intensities[f] + ), + "TIamb": flow_field.turbulence_intensities[f], # Needed? not sure + "solver_kwargs": self.windfarm.solver_kwargs, + } + yaw = farm.yaw_angles[f, :] + tilt = np.zeros_like(yaw) # Temporary + CTprime = 2.0 * np.ones_like(yaw) # Temporary + setpoints = list(zip(CTprime, yaw, tilt)) - # Solve for the current findex + # Reinstantiate and solve for the current findex + self.windfarm = self.windfarm.__class__(**init_kwargs) windfarm_sol = self.windfarm(layout, setpoints) # Extract the wind speeds at the turbine locations @@ -72,3 +96,4 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): # TODO # Create Rotor-style wrapper for Floris operation_model so that that can be called instead? # How to pass tilt, etc in? +# How to pass yaw angle? From ff4410bdce11bf89970229f4528be28f96fea754 Mon Sep 17 00:00:00 2001 From: misi9170 Date: Tue, 16 Jun 2026 12:29:41 -0600 Subject: [PATCH 06/52] add temporary development example; tailor to CurledWindfarm --- examples/temp_model_comparison.py | 148 ++++++++++++++++++++++++++++++ mitwindfarm/Interface.py | 78 +++++++--------- 2 files changed, 183 insertions(+), 43 deletions(-) create mode 100644 examples/temp_model_comparison.py diff --git a/examples/temp_model_comparison.py b/examples/temp_model_comparison.py new file mode 100644 index 0000000..ed25fdf --- /dev/null +++ b/examples/temp_model_comparison.py @@ -0,0 +1,148 @@ +import numpy as np + +from floris import FlorisModel +from floris.layout_visualization import plot_turbine_rotors +from floris.flow_visualization import visualize_cut_plane + +import matplotlib.pyplot as plt +from MITRotor import IEA15MW + +from mitwindfarm import ( + Plotting, + Layout, + PowerLaw, +) +from mitwindfarm.Rotor import UnifiedAD_TI +from mitwindfarm.windfarm import CurledWindfarm +from mitwindfarm import FlorisWakeModel + +# Set up MITWindfarm solver and run standalone as a baseline + + +cmap_floris = "pink" + +rotation_angle = -5 + +setpoints = [ # Ct-prime, yaw, tilt + (2, 0, 0), + (2, 0, 0), + (2, 0, 0), +] + +D = 242.24 +H = 150.0 +wind_shear = 0.0 +TI = 0.06 +U = 8.0 +layout = Layout([0, 12 / 2, 24 / 2], [0, 0, 0], [0, 0, 0]) + +windfarm = CurledWindfarm( + rotor_model=UnifiedAD_TI(), + base_windfield=PowerLaw(Uref=8.0, zref=H, exp=wind_shear, TIamb=TI), + solver_kwargs=dict( + dy=1 / 10, + dz=1 / 10, + integrator="scipy_rk23", # see mitwindfarm.utils.integrate + k_model="k-l", # alternatives: "const", "2021" + verbose=False, + ), + TIamb=TI, +) + +windfarm_sol = windfarm(layout, setpoints) +windfarm_sol_rotated = windfarm(layout.rotate(rotation_angle), setpoints) + +fig, axes_windfarm = plt.subplots(2) +Plotting.plot_windfarm(windfarm_sol, axes_windfarm[0], vmin=0, vmax=U * 2) +Plotting.plot_windfarm(windfarm_sol_rotated, axes_windfarm[1], vmin=0, vmax=U * 2) +fig.suptitle("Direct call") + +# Establish Floris model +fmodel = FlorisModel("defaults") +fmodel.set( + layout_x=layout.x * D, + layout_y=layout.y * D, + wind_speeds=[U, U], + wind_directions=[270.0, 270.0 + rotation_angle], + turbulence_intensities=[TI, TI], + turbine_type=["IEA_15MW"]*len(layout.x), + reference_wind_height=H, # IEA 15MW hub height + wind_shear=wind_shear, +) +# Assign MITWindfarm wake model +fmodel.set_wake_model(FlorisWakeModel(windfarm=windfarm)) +# Run FLORIS using MITWindfarm wake model/solver +fmodel.run() + +# Extracting and plotting FLORIS results +fig, axes_floris = plt.subplots(2) +horizontal_plane = fmodel.calculate_horizontal_plane( + x_resolution=200, + y_resolution=100, + height=H, + findex_for_viz=0, +) +plot_turbine_rotors(fmodel, ax=axes_floris[0]) +visualize_cut_plane( + horizontal_plane, + ax=axes_floris[0], + cmap=cmap_floris, + clevels=100, + levels=[], +) +horizontal_plane = fmodel.calculate_horizontal_plane( + x_resolution=200, + y_resolution=100, + height=H, + findex_for_viz=1, +) +plot_turbine_rotors(fmodel, ax=axes_floris[1], yaw_angles=[-rotation_angle]*len(layout.x)) +visualize_cut_plane( + horizontal_plane, + ax=axes_floris[1], + cmap=cmap_floris, + clevels=100, + levels=[], +) + +# Sample at specific points +samples_x = np.array([1000, 1000, 2000, 2000]) +samples_y = np.array([0, 100, 0, 100]) +samples_z = np.array([H, H, H, H]) + +axes_floris[0].scatter(samples_x, samples_y, color="k", marker=".") +axes_floris[1].scatter(samples_x, samples_y, color="k", marker=".") +axes_windfarm[0].scatter(samples_x/D, samples_y/D, color="k", marker=".") +fig.suptitle("Called via FLORIS") + +floris_vels = fmodel.sample_flow_at_points(samples_x, samples_y, samples_z) + +print("\nFLORIS sampled velocities:") +print(floris_vels) + +print("\nMITWindfarm sampled velocities:") +windfarm_sol = windfarm(layout, setpoints) +windfarm_v_rel = windfarm_sol.windfield.wsp(samples_x/D, samples_y/D, (samples_z-H)/D) +windfarm_sol_rotated = windfarm(layout.rotate(rotation_angle), setpoints) + +rotated_x = ( + (samples_x/D - 6) * np.cos(np.radians(rotation_angle)) + - (samples_y/D - 0) * np.sin(np.radians(rotation_angle)) + + 6 +) +rotated_y = ( + (samples_y/D - 0) * np.cos(np.radians(rotation_angle)) + + (samples_x/D - 6) * np.sin(np.radians(rotation_angle)) + + 0 +) +axes_windfarm[1].scatter(rotated_x, rotated_y, color="k", marker=".") + +windfarm_v_rel_rot = windfarm_sol_rotated.windfield.wsp(rotated_x, rotated_y, (samples_z-H)/D) +windfarm_v_rel = np.vstack([windfarm_v_rel, windfarm_v_rel_rot]) +print(windfarm_v_rel) + +print("\nRelative velocity differences (MITWindfarm - FLORIS) %:") +print((windfarm_v_rel - floris_vels) / (windfarm_v_rel) * 100) + +# Generate plots +plt.show() diff --git a/mitwindfarm/Interface.py b/mitwindfarm/Interface.py index f2042db..3562413 100644 --- a/mitwindfarm/Interface.py +++ b/mitwindfarm/Interface.py @@ -13,6 +13,25 @@ class FlorisWakeModel(BaseWakeModel): # Parameters (to fill in) windfarm = field(default=None) + # TODO: Can I declare this directly with attrs? + # Interestingly, this doesn't work, something to do with BaseLibrary + # I think. Will need to work through that. + # def __attrs_post_init__(self): + # supported_models = [CurledWindfarm] + # if type(self.windfarm) not in supported_models: + # raise NotImplementedError( + # "The FLORIS interface for MITWindfarm does not support type ", + # type(self.wndfarm), + # ". Supported types:", + # supported_models + # ) + # TODO: Check a ThrustBased or BEM model here; not a UMM model? + # should take pitch and TSR as inputs, I think, or will need to figure + # that out? + # These other models will need to somehow pass pitch and tsr to the wake + # model, right? + + def turbine_solve(self, farm, flow_field, grid): self._solve_and_evaluate(farm, flow_field, grid, grid) @@ -38,51 +57,24 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): # Generate calling arguments based on windfarm type. Also depends on rotor model; not yet handled. # Sometimes, setpoints should include tsr and pitch; other times, ctprime? Depends on rotor model? - if type(self.windfarm) is Windfarm: - init_kwargs = { - "rotor_model": self.windfarm.rotor_model, # TODO: Pass FLORIS-like wrapper here? - "wake_model": self.windfarm.wake_model, - "superposition": self.windfarm.superposition, - "base_windfield": PowerLaw( # TODO: Can we pass a more general wind field? - flow_field.wind_speeds[f], - flow_field.reference_wind_height/D, - flow_field.wind_shear, - flow_field.turbulence_intensities[f] - ), - "TIamb": flow_field.turbulence_intensities[f], # Needed? not sure - } - - yaw = farm.yaw_angles[f, :] - #tilt = farm.tilt_angles[f, :] - tilt = np.zeros_like(yaw) # Temporary - pitch = 0.0 * np.ones_like(yaw) - tsr = 7.0 * np.ones_like(yaw) - setpoints = list(zip(pitch, tsr, yaw, tilt)) - elif type(self.windfarm) is CosineWindfarm: - setpoints = list(yaw) - raise NotImplementedError( - "CosineWindfarm has not yet been tested with FlorisWakeModel;" - " may need custom setpoint formatting" - ) - elif type(self.windfarm) is CurledWindfarm: - init_kwargs = { - "rotor_model": self.windfarm.rotor_model, # TODO: Pass FLORIS-like wrapper here? - "base_windfield": PowerLaw( # TODO: Can we pass a more general wind field? - flow_field.wind_speeds[f], - flow_field.reference_wind_height/D, - flow_field.wind_shear, - flow_field.turbulence_intensities[f] - ), - "TIamb": flow_field.turbulence_intensities[f], # Needed? not sure - "solver_kwargs": self.windfarm.solver_kwargs, - } - yaw = farm.yaw_angles[f, :] - tilt = np.zeros_like(yaw) # Temporary - CTprime = 2.0 * np.ones_like(yaw) # Temporary - setpoints = list(zip(CTprime, yaw, tilt)) + wf_init_kwargs = { + "rotor_model": self.windfarm.rotor_model, # TODO: Pass FLORIS-like wrapper here? + "base_windfield": PowerLaw( # TODO: Can we pass a more general wind field? + flow_field.wind_speeds[f], + flow_field.reference_wind_height/D, + flow_field.wind_shear, + flow_field.turbulence_intensities[f] + ), + "TIamb": flow_field.turbulence_intensities[f], # Needed? not sure + "solver_kwargs": self.windfarm.solver_kwargs, + } + yaw = farm.yaw_angles[f, :] + tilt = np.zeros_like(yaw) # Temporary + CTprime = 2.0 * np.ones_like(yaw) # Temporary + setpoints = list(zip(CTprime, yaw, tilt)) # Reinstantiate and solve for the current findex - self.windfarm = self.windfarm.__class__(**init_kwargs) + self.windfarm = self.windfarm.__class__(**wf_init_kwargs) windfarm_sol = self.windfarm(layout, setpoints) # Extract the wind speeds at the turbine locations From aa74b2519995ca2d3f48409ddc3ecb39d2cb1ced Mon Sep 17 00:00:00 2001 From: misi9170 Date: Tue, 16 Jun 2026 14:44:00 -0600 Subject: [PATCH 07/52] Prototyped with inbuilt op model for rotor --- examples/temp_model_comparison.py | 22 +++-- mitwindfarm/Interface.py | 146 ++++++++++++++++++++++++++++-- mitwindfarm/__init__.py | 2 +- 3 files changed, 151 insertions(+), 19 deletions(-) diff --git a/examples/temp_model_comparison.py b/examples/temp_model_comparison.py index ed25fdf..502f669 100644 --- a/examples/temp_model_comparison.py +++ b/examples/temp_model_comparison.py @@ -14,7 +14,7 @@ ) from mitwindfarm.Rotor import UnifiedAD_TI from mitwindfarm.windfarm import CurledWindfarm -from mitwindfarm import FlorisWakeModel +from mitwindfarm import FlorisCurledWindfarm # Set up MITWindfarm solver and run standalone as a baseline @@ -36,16 +36,18 @@ U = 8.0 layout = Layout([0, 12 / 2, 24 / 2], [0, 0, 0], [0, 0, 0]) +solver_kwargs = dict( + dy=1 / 10, + dz=1 / 10, + integrator="scipy_rk23", # see mitwindfarm.utils.integrate + k_model="k-l", # alternatives: "const", "2021" + verbose=False, +) + windfarm = CurledWindfarm( rotor_model=UnifiedAD_TI(), base_windfield=PowerLaw(Uref=8.0, zref=H, exp=wind_shear, TIamb=TI), - solver_kwargs=dict( - dy=1 / 10, - dz=1 / 10, - integrator="scipy_rk23", # see mitwindfarm.utils.integrate - k_model="k-l", # alternatives: "const", "2021" - verbose=False, - ), + solver_kwargs=solver_kwargs, TIamb=TI, ) @@ -65,12 +67,12 @@ wind_speeds=[U, U], wind_directions=[270.0, 270.0 + rotation_angle], turbulence_intensities=[TI, TI], - turbine_type=["IEA_15MW"]*len(layout.x), + turbine_type=["iea_15MW"]*len(layout.x), reference_wind_height=H, # IEA 15MW hub height wind_shear=wind_shear, ) # Assign MITWindfarm wake model -fmodel.set_wake_model(FlorisWakeModel(windfarm=windfarm)) +fmodel.set_wake_model(FlorisCurledWindfarm(solver_kwargs=solver_kwargs)) # Run FLORIS using MITWindfarm wake model/solver fmodel.run() diff --git a/mitwindfarm/Interface.py b/mitwindfarm/Interface.py index 3562413..ba6e60e 100644 --- a/mitwindfarm/Interface.py +++ b/mitwindfarm/Interface.py @@ -6,12 +6,13 @@ from .Windfield import PowerLaw from ._Layout import Layout -from .windfarm import Windfarm, CosineWindfarm, CurledWindfarm +from .windfarm import CurledWindfarm +from .Rotor import UnifiedAD_TI, Rotor, RotorSolution @define -class FlorisWakeModel(BaseWakeModel): +class FlorisCurledWindfarm(BaseWakeModel): # Parameters (to fill in) - windfarm = field(default=None) + solver_kwargs = field(default=None) # TODO: Can I declare this directly with attrs? # Interestingly, this doesn't work, something to do with BaseLibrary @@ -31,6 +32,9 @@ class FlorisWakeModel(BaseWakeModel): # These other models will need to somehow pass pitch and tsr to the wake # model, right? + # Check that rotor_model is the default value (AD); if not, raise a warning. Either way, + # ignore and use the wrapper for the FLORIS operation model. + def turbine_solve(self, farm, flow_field, grid): self._solve_and_evaluate(farm, flow_field, grid, grid) @@ -47,6 +51,17 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): else: D = farm.rotor_diameters.mean() + # TODO: Check also for consistent turbine types; valid control arguments, etc + turbine_type = farm.turbine_type[0] + rotor_model = RotorWrapper( + thrust_coefficient_function=farm.turbine_thrust_coefficient_functions[turbine_type], # + power_function=farm.turbine_power_functions[turbine_type], + axial_induction_function=farm.turbine_axial_induction_functions[turbine_type], + power_thrust_table=farm.turbine_power_thrust_tables[turbine_type], + air_density=flow_field.air_density, + tilt_interp=farm.turbine_tilt_interps[turbine_type], + ) + # Use sorted version for f in range(flow_field.n_findex): @@ -58,7 +73,7 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): # Generate calling arguments based on windfarm type. Also depends on rotor model; not yet handled. # Sometimes, setpoints should include tsr and pitch; other times, ctprime? Depends on rotor model? wf_init_kwargs = { - "rotor_model": self.windfarm.rotor_model, # TODO: Pass FLORIS-like wrapper here? + "rotor_model": rotor_model, "base_windfield": PowerLaw( # TODO: Can we pass a more general wind field? flow_field.wind_speeds[f], flow_field.reference_wind_height/D, @@ -66,7 +81,7 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): flow_field.turbulence_intensities[f] ), "TIamb": flow_field.turbulence_intensities[f], # Needed? not sure - "solver_kwargs": self.windfarm.solver_kwargs, + "solver_kwargs": self.solver_kwargs, } yaw = farm.yaw_angles[f, :] tilt = np.zeros_like(yaw) # Temporary @@ -74,8 +89,8 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): setpoints = list(zip(CTprime, yaw, tilt)) # Reinstantiate and solve for the current findex - self.windfarm = self.windfarm.__class__(**wf_init_kwargs) - windfarm_sol = self.windfarm(layout, setpoints) + windfarm = CurledWindfarm(**wf_init_kwargs) + windfarm_sol = windfarm(layout, setpoints) # Extract the wind speeds at the turbine locations relative_velocities = windfarm_sol.windfield.wsp( @@ -87,5 +102,120 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): # TODO # Create Rotor-style wrapper for Floris operation_model so that that can be called instead? +# Create base_windfield directly from flow_field? # How to pass tilt, etc in? -# How to pass yaw angle? + +class RotorWrapper(Rotor): + """ + Wrapper for the FLORIS operation model to be used as a rotor model in MITWindfarm. + This allows the use of the FLORIS operation model within the CurledWindfarm solver, which is necessary for the FlorisCurledWindfarm wake model to work. + """ + + def __init__(self, + thrust_coefficient_function, + axial_induction_function, + power_function, + power_thrust_table, + air_density = 1.225, + tilt_interp = None, + average_method = "cubic-mean", + cubature_weights = None, + correct_cp_ct_for_tilt = True + ): + self.thrust_coefficient_function = thrust_coefficient_function + self.power_function = power_function + self.axial_induction_function = axial_induction_function + self.power_thrust_table = power_thrust_table + self.air_density = air_density + self.tilt_interp = tilt_interp + self.average_method = average_method + self.cubature_weights = cubature_weights + self.correct_cp_ct_for_tilt = correct_cp_ct_for_tilt + + def __call__( + self, x: float, y: float, z: float, windfield, Ctprime, yaw=0, tilt=0, + ): + # TODO: Do I need to account for yaw, tilt? Seems likely not. + xs_glob = x + ys_glob = y + zs_glob = z + Us = windfield.wsp(xs_glob, ys_glob, zs_glob) + TIs = windfield.TI(xs_glob, ys_glob, zs_glob) + + # Now, should be able to evaluate the FLORIS operation model (thrust coefficient)? + Ct = self.thrust_coefficient_function( + power_thrust_table=self.power_thrust_table, + velocities=Us, + turbulence_intensities=TIs, + air_density=self.air_density, + yaw_angles=yaw, + tilt_angles=tilt, + power_setpoints=None, # Figure out how to raise warning if nondefault + awc_modes=None, + awc_amplitudes=None, + tilt_interp=self.tilt_interp, + average_method=self.average_method, + cubature_weights=self.cubature_weights, + correct_cp_ct_for_tilt=self.correct_cp_ct_for_tilt, + ) + + a = self.axial_induction_function( + power_thrust_table=self.power_thrust_table, + velocities=Us, + turbulence_intensities=TIs, + air_density=self.air_density, + yaw_angles=yaw, + tilt_angles=tilt, + power_setpoints=None, # Figure out how to raise warning if nondefault + awc_modes=None, + awc_amplitudes=None, + tilt_interp=self.tilt_interp, + average_method=self.average_method, + cubature_weights=self.cubature_weights, + correct_cp_ct_for_tilt=self.correct_cp_ct_for_tilt, + ) + + P = self.power_function( + power_thrust_table=self.power_thrust_table, + velocities=Us, + turbulence_intensities=TIs, + air_density=self.air_density, + yaw_angles=yaw, + tilt_angles=tilt, + power_setpoints=None, # Figure out how to raise warning if nondefault + awc_modes=None, + awc_amplitudes=None, + tilt_interp=self.tilt_interp, + average_method=self.average_method, + cubature_weights=self.cubature_weights, + correct_cp_ct_for_tilt=self.correct_cp_ct_for_tilt, + ) + + # TEMPORARY; Based on my basic understanding; may need updating + REWS = np.mean(Us) + RETI = np.mean(TIs) + Ctprime = 4*a/(1-a) + u4 = np.sqrt(np.maximum(1 - Ct, 0)) * Us # TODO: What is u4? + v4 = - (1/4) * Ct * np.sin(np.deg2rad(yaw)) * Us + w4 = np.zeros_like(Us) # TODO: What is w4? + + class extra: + def __init__(self, an, u4, REWS): + self.an = an / REWS + self.u4 = u4 / REWS + + rotor_solution = RotorSolution( + yaw=np.deg2rad(yaw), + Cp=P, # May not be needed + Ct=Ct * REWS**2, + Ctprime=Ctprime, # Check if computation valid + an=a * REWS, # Axial induction (why multiply by REWS?) + u4=u4, + v4=v4, + REWS=REWS, # Should be ok to compute this. + tilt=tilt, + w4=w4, + TI=RETI, + extra=extra(a, u4, REWS), # Model needs normalized u4, axial induction + ) + return rotor_solution diff --git a/mitwindfarm/__init__.py b/mitwindfarm/__init__.py index 78a8ebd..07c52f1 100644 --- a/mitwindfarm/__init__.py +++ b/mitwindfarm/__init__.py @@ -1,5 +1,5 @@ from ._Layout import GridLayout, Square, Layout -from .Interface import FlorisWakeModel +from .Interface import FlorisCurledWindfarm from .Rotor import RotorSolution, AD, UnifiedAD, BEM, CosineRotor from .RotorGrid import Point, Line, Area from .Superposition import Linear, Niayifar, Quadratic, Dominant From d7938ebcc8f4ea694a0228ff5f96cfce0e2304d5 Mon Sep 17 00:00:00 2001 From: misi9170 Date: Tue, 16 Jun 2026 17:10:20 -0600 Subject: [PATCH 08/52] Work through tilt angles --- mitwindfarm/Interface.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/mitwindfarm/Interface.py b/mitwindfarm/Interface.py index ba6e60e..ab5cc9e 100644 --- a/mitwindfarm/Interface.py +++ b/mitwindfarm/Interface.py @@ -60,6 +60,9 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): power_thrust_table=farm.turbine_power_thrust_tables[turbine_type], air_density=flow_field.air_density, tilt_interp=farm.turbine_tilt_interps[turbine_type], + average_method=turbine_grid.average_method, + cubature_weights=grid.cubature_weights, + correct_cp_ct_for_tilt=True ) # Use sorted version @@ -84,7 +87,7 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): "solver_kwargs": self.solver_kwargs, } yaw = farm.yaw_angles[f, :] - tilt = np.zeros_like(yaw) # Temporary + tilt = farm.tilt_angles[f, :] CTprime = 2.0 * np.ones_like(yaw) # Temporary setpoints = list(zip(CTprime, yaw, tilt)) @@ -101,9 +104,7 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): flow_field.u_sorted[f] = relative_velocities # TODO -# Create Rotor-style wrapper for Floris operation_model so that that can be called instead? # Create base_windfield directly from flow_field? -# How to pass tilt, etc in? class RotorWrapper(Rotor): """ @@ -111,6 +112,8 @@ class RotorWrapper(Rotor): This allows the use of the FLORIS operation model within the CurledWindfarm solver, which is necessary for the FlorisCurledWindfarm wake model to work. """ + # TODO: Handle multidimensional turbine conditions; how much can I take from turbine.py? + def __init__(self, thrust_coefficient_function, axial_induction_function, @@ -199,6 +202,11 @@ def __call__( v4 = - (1/4) * Ct * np.sin(np.deg2rad(yaw)) * Us w4 = np.zeros_like(Us) # TODO: What is w4? + # Compute tilt for rotor solution. + if self.correct_cp_ct_for_tilt and self.tilt_interp is not None: + tilt = self.tilt_interp(Us) + relative_tilt = tilt - self.power_thrust_table["ref_tilt"] + class extra: def __init__(self, an, u4, REWS): self.an = an / REWS @@ -213,7 +221,7 @@ def __init__(self, an, u4, REWS): u4=u4, v4=v4, REWS=REWS, # Should be ok to compute this. - tilt=tilt, + tilt=np.deg2rad(relative_tilt), # Correct? Or should this be absolute tilt? w4=w4, TI=RETI, extra=extra(a, u4, REWS), # Model needs normalized u4, axial induction From cecbb390be93758da8a6e092c779a6c60b458db2 Mon Sep 17 00:00:00 2001 From: misi9170 Date: Tue, 30 Jun 2026 15:01:11 -0600 Subject: [PATCH 09/52] Option for Windfield, but does not work (internal solver requires only vertical profile) --- mitwindfarm/Interface.py | 111 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 104 insertions(+), 7 deletions(-) diff --git a/mitwindfarm/Interface.py b/mitwindfarm/Interface.py index ab5cc9e..7d9d67e 100644 --- a/mitwindfarm/Interface.py +++ b/mitwindfarm/Interface.py @@ -1,16 +1,28 @@ +from dataclasses import dataclass from attrs import define, field import numpy as np +from numpy.typing import ArrayLike +from scipy.interpolate import LinearNDInterpolator from floris.core.wake_model import BaseWakeModel from .Windfield import PowerLaw from ._Layout import Layout from .windfarm import CurledWindfarm -from .Rotor import UnifiedAD_TI, Rotor, RotorSolution +from .Rotor import Rotor, RotorSolution +from .Windfield import Windfield @define class FlorisCurledWindfarm(BaseWakeModel): + """ + Interface for using the MITWindfarm CurledWindfarm solver as a wake model in FLORIS. + This allows the use of the CurledWindfarm solver within the FLORIS framework (and using FLORIS + turbine operation models). + + A power law background wind field is assumed, and the FLORIS flow field is used to set the wind + speed and turbulence intensity at the reference height. Further, + """ # Parameters (to fill in) solver_kwargs = field(default=None) @@ -46,13 +58,16 @@ def point_solve(self, farm, flow_field, grid): def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): # Assume all turbines have the same rotor diameter; not sure if # methods below handle varying rotor diameters? - if not np.all(farm.rotor_diameters == farm.rotor_diameters.mean()): - raise NotImplementedError("Varying rotor diameters not supported in FlorisWakeModel") + if not np.all(np.array(farm.turbine_type) == farm.turbine_type[0]): + raise NotImplementedError("Varying turbine types not supported in FlorisCurledWindfarm") + elif not np.all(farm.rotor_diameters == farm.rotor_diameters.mean()): + raise NotImplementedError( + "Varying rotor diameters not supported in FlorisCurledWindfarm" + ) else: D = farm.rotor_diameters.mean() + turbine_type = farm.turbine_type[0] - # TODO: Check also for consistent turbine types; valid control arguments, etc - turbine_type = farm.turbine_type[0] rotor_model = RotorWrapper( thrust_coefficient_function=farm.turbine_thrust_coefficient_functions[turbine_type], # power_function=farm.turbine_power_functions[turbine_type], @@ -83,6 +98,13 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): flow_field.wind_shear, flow_field.turbulence_intensities[f] ), + # "base_windfield": WindfieldWrapper( + # u=flow_field.u_sorted[f], + # x=turbine_grid.x_sorted[f]/D, + # y=turbine_grid.y_sorted[f]/D, + # z=turbine_grid.z_sorted[f]/D, + # TIamb=flow_field.turbulence_intensities[f] + # ), "TIamb": flow_field.turbulence_intensities[f], # Needed? not sure "solver_kwargs": self.solver_kwargs, } @@ -109,7 +131,8 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): class RotorWrapper(Rotor): """ Wrapper for the FLORIS operation model to be used as a rotor model in MITWindfarm. - This allows the use of the FLORIS operation model within the CurledWindfarm solver, which is necessary for the FlorisCurledWindfarm wake model to work. + This allows the use of the FLORIS operation model within the CurledWindfarm solver, which is + necessary for the FlorisCurledWindfarm wake model to work. """ # TODO: Handle multidimensional turbine conditions; how much can I take from turbine.py? @@ -194,7 +217,7 @@ def __call__( correct_cp_ct_for_tilt=self.correct_cp_ct_for_tilt, ) - # TEMPORARY; Based on my basic understanding; may need updating + ### MIT team to check: Are the following calculations correct? Do they need to be updated? REWS = np.mean(Us) RETI = np.mean(TIs) Ctprime = 4*a/(1-a) @@ -208,10 +231,14 @@ def __call__( relative_tilt = tilt - self.power_thrust_table["ref_tilt"] class extra: + """ + Small class to return normalized values for axial induction and u4. + """ def __init__(self, an, u4, REWS): self.an = an / REWS self.u4 = u4 / REWS + ### MIT team to check: are these the correct values to pass to the RotorSolution object? rotor_solution = RotorSolution( yaw=np.deg2rad(yaw), Cp=P, # May not be needed @@ -227,3 +254,73 @@ def __init__(self, an, u4, REWS): extra=extra(a, u4, REWS), # Model needs normalized u4, axial induction ) return rotor_solution + +class WindfieldWrapper(Windfield): + """ + Defines the base wind speed at x, y, z locations based on the FLORIS flow field and grid. + """ + def __init__(self, u, x, y, z, TIamb = 0.0): + self.u_grid = u + self.x_grid = x + self.y_grid = y + self.z_grid = z + + self._interp_func = LinearNDInterpolator( + np.vstack((self.x_grid.ravel(), self.y_grid.ravel(), self.z_grid.ravel())).T, + self.u_grid.ravel(), + # bounds_error=False, + # fill_value=None + ) + self.TIamb = TIamb + + def wsp(self, x: ArrayLike, y: ArrayLike, z: ArrayLike) -> ArrayLike: + """ + Returns the wind speed at the specified x, y, z coordinates based on the FLORIS flow field. + + Parameters: + - x: query x-coordinate (normalized by rotor diameter). + - y: query y-coordinate (normalized by rotor diameter). + - z: query z-coordinate (normalized by rotor diameter). + + Returns: + float: Wind speed at the specified coordinates. + """ + + # Grid interpolation to get the wind speed at the specified coordinates. + import ipdb; ipdb.set_trace() + query_points = np.vstack((np.array(x).ravel(), np.array(y).ravel(), np.array(z).ravel())).T + values = self._interp_func(query_points) + return values.reshape(np.shape(np.array(x))) + + def TI(self, x: float, y: float, z: float) -> float: + """ + Returns the ambient turbulence intensity in the shape of the query coordinates. + + Parameters: + - x: query x-coordinate (normalized by rotor diameter). + - y: query y-coordinate (normalized by rotor diameter). + - z: query z-coordinate (normalized by rotor diameter). + + Returns: + float: Turbulence intensity at the specified coordinates. + """ + return self.TIamb * np.ones_like(x) + + def wdir(self, x: float, y: float, z: float) -> float: + """ + Returns rotated wind direction (zeros in the shape of the query coordinates). + + Parameters: + - x: query x-coordinate (normalized by rotor diameter). + - y: query y-coordinate (normalized by rotor diameter). + - z: query z-coordinate (normalized by rotor diameter). + + Returns: + float: Wind direction at the specified coordinates. + """ + return np.zeros_like(x) + +# TODO: +# - multidimensional turbine conditions +# - Non power law base wind field (can I construct from FLORIS flow_field?) +# - Check accounting for yaw ang tilt in the xs_glob, ys_glob, zs_glob calculation. \ No newline at end of file From c535916020721effee5592ea464344c634cb4ea8 Mon Sep 17 00:00:00 2001 From: misi9170 Date: Tue, 30 Jun 2026 15:04:27 -0600 Subject: [PATCH 10/52] Remove full windfield (didnt work)' --- mitwindfarm/Interface.py | 85 ++++------------------------------------ 1 file changed, 7 insertions(+), 78 deletions(-) diff --git a/mitwindfarm/Interface.py b/mitwindfarm/Interface.py index 7d9d67e..444bb4f 100644 --- a/mitwindfarm/Interface.py +++ b/mitwindfarm/Interface.py @@ -11,7 +11,6 @@ from ._Layout import Layout from .windfarm import CurledWindfarm from .Rotor import Rotor, RotorSolution -from .Windfield import Windfield @define class FlorisCurledWindfarm(BaseWakeModel): @@ -68,6 +67,11 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): D = farm.rotor_diameters.mean() turbine_type = farm.turbine_type[0] + if flow_field.het_map or flow_field.heterogeneous_inflow_config: + raise NotImplementedError( + "Heterogeneous inflows are not supported in FlorisCurledWindfarm." + ) + rotor_model = RotorWrapper( thrust_coefficient_function=farm.turbine_thrust_coefficient_functions[turbine_type], # power_function=farm.turbine_power_functions[turbine_type], @@ -92,19 +96,12 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): # Sometimes, setpoints should include tsr and pitch; other times, ctprime? Depends on rotor model? wf_init_kwargs = { "rotor_model": rotor_model, - "base_windfield": PowerLaw( # TODO: Can we pass a more general wind field? + "base_windfield": PowerLaw( flow_field.wind_speeds[f], flow_field.reference_wind_height/D, flow_field.wind_shear, flow_field.turbulence_intensities[f] ), - # "base_windfield": WindfieldWrapper( - # u=flow_field.u_sorted[f], - # x=turbine_grid.x_sorted[f]/D, - # y=turbine_grid.y_sorted[f]/D, - # z=turbine_grid.z_sorted[f]/D, - # TIamb=flow_field.turbulence_intensities[f] - # ), "TIamb": flow_field.turbulence_intensities[f], # Needed? not sure "solver_kwargs": self.solver_kwargs, } @@ -125,9 +122,6 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): # Assign to flow field flow_field.u_sorted[f] = relative_velocities -# TODO -# Create base_windfield directly from flow_field? - class RotorWrapper(Rotor): """ Wrapper for the FLORIS operation model to be used as a rotor model in MITWindfarm. @@ -255,72 +249,7 @@ def __init__(self, an, u4, REWS): ) return rotor_solution -class WindfieldWrapper(Windfield): - """ - Defines the base wind speed at x, y, z locations based on the FLORIS flow field and grid. - """ - def __init__(self, u, x, y, z, TIamb = 0.0): - self.u_grid = u - self.x_grid = x - self.y_grid = y - self.z_grid = z - - self._interp_func = LinearNDInterpolator( - np.vstack((self.x_grid.ravel(), self.y_grid.ravel(), self.z_grid.ravel())).T, - self.u_grid.ravel(), - # bounds_error=False, - # fill_value=None - ) - self.TIamb = TIamb - - def wsp(self, x: ArrayLike, y: ArrayLike, z: ArrayLike) -> ArrayLike: - """ - Returns the wind speed at the specified x, y, z coordinates based on the FLORIS flow field. - - Parameters: - - x: query x-coordinate (normalized by rotor diameter). - - y: query y-coordinate (normalized by rotor diameter). - - z: query z-coordinate (normalized by rotor diameter). - - Returns: - float: Wind speed at the specified coordinates. - """ - - # Grid interpolation to get the wind speed at the specified coordinates. - import ipdb; ipdb.set_trace() - query_points = np.vstack((np.array(x).ravel(), np.array(y).ravel(), np.array(z).ravel())).T - values = self._interp_func(query_points) - return values.reshape(np.shape(np.array(x))) - - def TI(self, x: float, y: float, z: float) -> float: - """ - Returns the ambient turbulence intensity in the shape of the query coordinates. - - Parameters: - - x: query x-coordinate (normalized by rotor diameter). - - y: query y-coordinate (normalized by rotor diameter). - - z: query z-coordinate (normalized by rotor diameter). - - Returns: - float: Turbulence intensity at the specified coordinates. - """ - return self.TIamb * np.ones_like(x) - - def wdir(self, x: float, y: float, z: float) -> float: - """ - Returns rotated wind direction (zeros in the shape of the query coordinates). - - Parameters: - - x: query x-coordinate (normalized by rotor diameter). - - y: query y-coordinate (normalized by rotor diameter). - - z: query z-coordinate (normalized by rotor diameter). - - Returns: - float: Wind direction at the specified coordinates. - """ - return np.zeros_like(x) - # TODO: # - multidimensional turbine conditions -# - Non power law base wind field (can I construct from FLORIS flow_field?) +# - X Non power law base wind field (can I construct from FLORIS flow_field?) DOES NOT WORK; internal solver expects PowerLaw (z only). # - Check accounting for yaw ang tilt in the xs_glob, ys_glob, zs_glob calculation. \ No newline at end of file From 1e8e7e794a218674f9d5da304869c745264b5f5a Mon Sep 17 00:00:00 2001 From: misi9170 Date: Tue, 30 Jun 2026 17:03:11 -0600 Subject: [PATCH 11/52] Saving powers for reporting --- examples/temp_model_comparison.py | 15 ++++++--- mitwindfarm/Interface.py | 56 ++++++++++++++++++++++++++++--- 2 files changed, 63 insertions(+), 8 deletions(-) diff --git a/examples/temp_model_comparison.py b/examples/temp_model_comparison.py index 502f669..2814627 100644 --- a/examples/temp_model_comparison.py +++ b/examples/temp_model_comparison.py @@ -24,9 +24,12 @@ rotation_angle = -5 setpoints = [ # Ct-prime, yaw, tilt - (2, 0, 0), - (2, 0, 0), - (2, 0, 0), + # (2, 0, 0), + # (2, 0, 0), + # (2, 0, 0), + (2, 0, 0.017), # ~1 degree of tilt + (2, 0, 0.017), + (2, 0, 0.017), ] D = 242.24 @@ -67,7 +70,9 @@ wind_speeds=[U, U], wind_directions=[270.0, 270.0 + rotation_angle], turbulence_intensities=[TI, TI], - turbine_type=["iea_15MW"]*len(layout.x), +# turbine_type=["iea_15MW"]*len(layout.x), + turbine_type=["iea_15MW_floating_multi_dim_cp_ct"]*len(layout.x), + multidim_conditions={"Tp": 3.0, "Hs": 0.0}, reference_wind_height=H, # IEA 15MW hub height wind_shear=wind_shear, ) @@ -146,5 +151,7 @@ print("\nRelative velocity differences (MITWindfarm - FLORIS) %:") print((windfarm_v_rel - floris_vels) / (windfarm_v_rel) * 100) +print(fmodel.get_turbine_powers()) + # Generate plots plt.show() diff --git a/mitwindfarm/Interface.py b/mitwindfarm/Interface.py index 444bb4f..2c84650 100644 --- a/mitwindfarm/Interface.py +++ b/mitwindfarm/Interface.py @@ -1,11 +1,13 @@ from dataclasses import dataclass from attrs import define, field +import copy import numpy as np from numpy.typing import ArrayLike from scipy.interpolate import LinearNDInterpolator from floris.core.wake_model import BaseWakeModel +from floris.core.turbine.turbine import select_multidim_condition from .Windfield import PowerLaw from ._Layout import Layout @@ -65,7 +67,7 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): ) else: D = farm.rotor_diameters.mean() - turbine_type = farm.turbine_type[0] + turbine_type = farm.turbine_definitions[0]['turbine_type'] if flow_field.het_map or flow_field.heterogeneous_inflow_config: raise NotImplementedError( @@ -84,9 +86,15 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): correct_cp_ct_for_tilt=True ) + farm.turbine_powers = np.zeros((flow_field.n_findex, farm.n_turbines)) + # Use sorted version for f in range(flow_field.n_findex): - + + # Handle possible multidimensional turbine conditions + if flow_field.multidim_conditions is not None: + rotor_model.set_multidim_condition(flow_field.multidim_conditions, f) + turbines_x = turbine_grid.x_sorted.mean(axis=(2,3))[f] turbines_y = turbine_grid.y_sorted.mean(axis=(2,3))[f] turbines_z = turbine_grid.z_sorted.mean(axis=(2,3))[f] @@ -114,6 +122,8 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): windfarm = CurledWindfarm(**wf_init_kwargs) windfarm_sol = windfarm(layout, setpoints) + farm.turbine_powers[f] = np.array([r.Cp for r in windfarm_sol.rotors]) + # Extract the wind speeds at the turbine locations relative_velocities = windfarm_sol.windfield.wsp( grid.x_sorted[f]/D, grid.y_sorted[f]/D, grid.z_sorted[f]/D @@ -140,7 +150,7 @@ def __init__(self, tilt_interp = None, average_method = "cubic-mean", cubature_weights = None, - correct_cp_ct_for_tilt = True + correct_cp_ct_for_tilt = True, ): self.thrust_coefficient_function = thrust_coefficient_function self.power_function = power_function @@ -152,6 +162,38 @@ def __init__(self, self.cubature_weights = cubature_weights self.correct_cp_ct_for_tilt = correct_cp_ct_for_tilt + if "condition_keys" in power_thrust_table: + self._power_thrust_table_md = copy.deepcopy(power_thrust_table) + self.multidimensional_turbine = True + else: + self.multidimensional_turbine = False + self.multidim_condition = None + + def set_multidim_condition(self, multidim_conditions, findex): + """ + Select the power, thrust curves to evaluate. Only used if multidimensional turbines are used. + """ + if self.multidimensional_turbine: + pass + else: + raise ValueError( + "Attempting to set a multidimensional condition for a turbine that does not have a multidimensional power/thrust table." + ) + + # Get findex position, if necessary + for k, v in multidim_conditions.items(): + if isinstance(v, (list, np.ndarray)): + multidim_conditions[k] = v[findex] + + # Handle multidimensional turbine conditions. + self.multidim_condition = tuple(select_multidim_condition( + multidim_conditions, + [k for k in self._power_thrust_table_md.keys() if k != "condition_keys"], + self._power_thrust_table_md["condition_keys"], + 1 + )[0][0]) + self.power_thrust_table = self._power_thrust_table_md[self.multidim_condition] + def __call__( self, x: float, y: float, z: float, windfield, Ctprime, yaw=0, tilt=0, ): @@ -162,6 +204,12 @@ def __call__( Us = windfield.wsp(xs_glob, ys_glob, zs_glob) TIs = windfield.TI(xs_glob, ys_glob, zs_glob) + if self.multidimensional_turbine and self.multidim_condition is None: + raise ValueError( + "A multidimensional turbine is being used, " + "but multidimensional condition has not been set." + ) + # Now, should be able to evaluate the FLORIS operation model (thrust coefficient)? Ct = self.thrust_coefficient_function( power_thrust_table=self.power_thrust_table, @@ -241,7 +289,7 @@ def __init__(self, an, u4, REWS): an=a * REWS, # Axial induction (why multiply by REWS?) u4=u4, v4=v4, - REWS=REWS, # Should be ok to compute this. + REWS=REWS, tilt=np.deg2rad(relative_tilt), # Correct? Or should this be absolute tilt? w4=w4, TI=RETI, From 4cfc77bb459d1613f5f099349864dc51e5cc1ad5 Mon Sep 17 00:00:00 2001 From: misi9170 Date: Tue, 30 Jun 2026 17:28:39 -0600 Subject: [PATCH 12/52] Notes on u4, v4, Ctprime --- mitwindfarm/Interface.py | 58 ++++++++++------------------------------ 1 file changed, 14 insertions(+), 44 deletions(-) diff --git a/mitwindfarm/Interface.py b/mitwindfarm/Interface.py index 2c84650..169b4af 100644 --- a/mitwindfarm/Interface.py +++ b/mitwindfarm/Interface.py @@ -27,28 +27,6 @@ class FlorisCurledWindfarm(BaseWakeModel): # Parameters (to fill in) solver_kwargs = field(default=None) - # TODO: Can I declare this directly with attrs? - # Interestingly, this doesn't work, something to do with BaseLibrary - # I think. Will need to work through that. - # def __attrs_post_init__(self): - # supported_models = [CurledWindfarm] - # if type(self.windfarm) not in supported_models: - # raise NotImplementedError( - # "The FLORIS interface for MITWindfarm does not support type ", - # type(self.wndfarm), - # ". Supported types:", - # supported_models - # ) - # TODO: Check a ThrustBased or BEM model here; not a UMM model? - # should take pitch and TSR as inputs, I think, or will need to figure - # that out? - # These other models will need to somehow pass pitch and tsr to the wake - # model, right? - - # Check that rotor_model is the default value (AD); if not, raise a warning. Either way, - # ignore and use the wrapper for the FLORIS operation model. - - def turbine_solve(self, farm, flow_field, grid): self._solve_and_evaluate(farm, flow_field, grid, grid) @@ -139,8 +117,6 @@ class RotorWrapper(Rotor): necessary for the FlorisCurledWindfarm wake model to work. """ - # TODO: Handle multidimensional turbine conditions; how much can I take from turbine.py? - def __init__(self, thrust_coefficient_function, axial_induction_function, @@ -197,12 +173,8 @@ def set_multidim_condition(self, multidim_conditions, findex): def __call__( self, x: float, y: float, z: float, windfield, Ctprime, yaw=0, tilt=0, ): - # TODO: Do I need to account for yaw, tilt? Seems likely not. - xs_glob = x - ys_glob = y - zs_glob = z - Us = windfield.wsp(xs_glob, ys_glob, zs_glob) - TIs = windfield.TI(xs_glob, ys_glob, zs_glob) + Us = windfield.wsp(x, y, z) + TIs = windfield.TI(x, y, z) if self.multidimensional_turbine and self.multidim_condition is None: raise ValueError( @@ -263,9 +235,12 @@ def __call__( REWS = np.mean(Us) RETI = np.mean(TIs) Ctprime = 4*a/(1-a) - u4 = np.sqrt(np.maximum(1 - Ct, 0)) * Us # TODO: What is u4? + u4 = np.sqrt(np.maximum(1 - Ct, 0)) * Us v4 = - (1/4) * Ct * np.sin(np.deg2rad(yaw)) * Us - w4 = np.zeros_like(Us) # TODO: What is w4? + # Or should these use 2.20a,b from Heck et al (2023)? + # u4 = (4 - Ctprime*np.cos(np.deg2rad(yaw))**2) / (4 + Ctprime*np.cos(np.deg2rad(yaw))**2) * Us + # v4 = - (4 * Ctprime * np.sin(np.deg2rad(yaw))*np.cos(np.deg2rad(yaw))**2) / (4 + Ctprime*np.cos(np.deg2rad(yaw))**2)**2 * Us + w4 = np.zeros_like(Us) # Compute tilt for rotor solution. if self.correct_cp_ct_for_tilt and self.tilt_interp is not None: @@ -276,28 +251,23 @@ class extra: """ Small class to return normalized values for axial induction and u4. """ - def __init__(self, an, u4, REWS): - self.an = an / REWS + def __init__(self, a, u4, REWS): + self.an = a self.u4 = u4 / REWS ### MIT team to check: are these the correct values to pass to the RotorSolution object? rotor_solution = RotorSolution( yaw=np.deg2rad(yaw), - Cp=P, # May not be needed - Ct=Ct * REWS**2, - Ctprime=Ctprime, # Check if computation valid - an=a * REWS, # Axial induction (why multiply by REWS?) + Cp=P, # Needed to save off power in main FlorisCurledWindfarm solve + Ct=Ct * REWS**2, # What is this? + Ctprime=Ctprime, + an=a * REWS, # Why multiply by REWS? u4=u4, v4=v4, REWS=REWS, tilt=np.deg2rad(relative_tilt), # Correct? Or should this be absolute tilt? w4=w4, TI=RETI, - extra=extra(a, u4, REWS), # Model needs normalized u4, axial induction + extra=extra(a, u4, REWS), ) return rotor_solution - -# TODO: -# - multidimensional turbine conditions -# - X Non power law base wind field (can I construct from FLORIS flow_field?) DOES NOT WORK; internal solver expects PowerLaw (z only). -# - Check accounting for yaw ang tilt in the xs_glob, ys_glob, zs_glob calculation. \ No newline at end of file From deaf39308b32eed7276e29d40421defa00bafdba Mon Sep 17 00:00:00 2001 From: misi9170 Date: Tue, 30 Jun 2026 17:30:22 -0600 Subject: [PATCH 13/52] Rename file for clarity --- mitwindfarm/{Interface.py => FlorisInterface.py} | 0 mitwindfarm/__init__.py | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename mitwindfarm/{Interface.py => FlorisInterface.py} (100%) diff --git a/mitwindfarm/Interface.py b/mitwindfarm/FlorisInterface.py similarity index 100% rename from mitwindfarm/Interface.py rename to mitwindfarm/FlorisInterface.py diff --git a/mitwindfarm/__init__.py b/mitwindfarm/__init__.py index 07c52f1..cf67b1c 100644 --- a/mitwindfarm/__init__.py +++ b/mitwindfarm/__init__.py @@ -1,5 +1,5 @@ from ._Layout import GridLayout, Square, Layout -from .Interface import FlorisCurledWindfarm +from .FlorisInterface import FlorisCurledWindfarm from .Rotor import RotorSolution, AD, UnifiedAD, BEM, CosineRotor from .RotorGrid import Point, Line, Area from .Superposition import Linear, Niayifar, Quadratic, Dominant From 132a3554083ea9d2a56529f1180f805b26dc3fb8 Mon Sep 17 00:00:00 2001 From: misi9170 Date: Wed, 8 Jul 2026 21:20:24 -0600 Subject: [PATCH 14/52] Yaw, tilt comparison script --- examples/temp_model_comparison.py | 157 --------------------------- examples/x01_initial_comparison.py | 164 +++++++++++++++++++++++++++++ examples/x02_yaw_and_tilt.py | 163 ++++++++++++++++++++++++++++ mitwindfarm/FlorisInterface.py | 66 ++++++++---- 4 files changed, 373 insertions(+), 177 deletions(-) delete mode 100644 examples/temp_model_comparison.py create mode 100644 examples/x01_initial_comparison.py create mode 100644 examples/x02_yaw_and_tilt.py diff --git a/examples/temp_model_comparison.py b/examples/temp_model_comparison.py deleted file mode 100644 index 2814627..0000000 --- a/examples/temp_model_comparison.py +++ /dev/null @@ -1,157 +0,0 @@ -import numpy as np - -from floris import FlorisModel -from floris.layout_visualization import plot_turbine_rotors -from floris.flow_visualization import visualize_cut_plane - -import matplotlib.pyplot as plt -from MITRotor import IEA15MW - -from mitwindfarm import ( - Plotting, - Layout, - PowerLaw, -) -from mitwindfarm.Rotor import UnifiedAD_TI -from mitwindfarm.windfarm import CurledWindfarm -from mitwindfarm import FlorisCurledWindfarm - -# Set up MITWindfarm solver and run standalone as a baseline - - -cmap_floris = "pink" - -rotation_angle = -5 - -setpoints = [ # Ct-prime, yaw, tilt - # (2, 0, 0), - # (2, 0, 0), - # (2, 0, 0), - (2, 0, 0.017), # ~1 degree of tilt - (2, 0, 0.017), - (2, 0, 0.017), -] - -D = 242.24 -H = 150.0 -wind_shear = 0.0 -TI = 0.06 -U = 8.0 -layout = Layout([0, 12 / 2, 24 / 2], [0, 0, 0], [0, 0, 0]) - -solver_kwargs = dict( - dy=1 / 10, - dz=1 / 10, - integrator="scipy_rk23", # see mitwindfarm.utils.integrate - k_model="k-l", # alternatives: "const", "2021" - verbose=False, -) - -windfarm = CurledWindfarm( - rotor_model=UnifiedAD_TI(), - base_windfield=PowerLaw(Uref=8.0, zref=H, exp=wind_shear, TIamb=TI), - solver_kwargs=solver_kwargs, - TIamb=TI, -) - -windfarm_sol = windfarm(layout, setpoints) -windfarm_sol_rotated = windfarm(layout.rotate(rotation_angle), setpoints) - -fig, axes_windfarm = plt.subplots(2) -Plotting.plot_windfarm(windfarm_sol, axes_windfarm[0], vmin=0, vmax=U * 2) -Plotting.plot_windfarm(windfarm_sol_rotated, axes_windfarm[1], vmin=0, vmax=U * 2) -fig.suptitle("Direct call") - -# Establish Floris model -fmodel = FlorisModel("defaults") -fmodel.set( - layout_x=layout.x * D, - layout_y=layout.y * D, - wind_speeds=[U, U], - wind_directions=[270.0, 270.0 + rotation_angle], - turbulence_intensities=[TI, TI], -# turbine_type=["iea_15MW"]*len(layout.x), - turbine_type=["iea_15MW_floating_multi_dim_cp_ct"]*len(layout.x), - multidim_conditions={"Tp": 3.0, "Hs": 0.0}, - reference_wind_height=H, # IEA 15MW hub height - wind_shear=wind_shear, -) -# Assign MITWindfarm wake model -fmodel.set_wake_model(FlorisCurledWindfarm(solver_kwargs=solver_kwargs)) -# Run FLORIS using MITWindfarm wake model/solver -fmodel.run() - -# Extracting and plotting FLORIS results -fig, axes_floris = plt.subplots(2) -horizontal_plane = fmodel.calculate_horizontal_plane( - x_resolution=200, - y_resolution=100, - height=H, - findex_for_viz=0, -) -plot_turbine_rotors(fmodel, ax=axes_floris[0]) -visualize_cut_plane( - horizontal_plane, - ax=axes_floris[0], - cmap=cmap_floris, - clevels=100, - levels=[], -) -horizontal_plane = fmodel.calculate_horizontal_plane( - x_resolution=200, - y_resolution=100, - height=H, - findex_for_viz=1, -) -plot_turbine_rotors(fmodel, ax=axes_floris[1], yaw_angles=[-rotation_angle]*len(layout.x)) -visualize_cut_plane( - horizontal_plane, - ax=axes_floris[1], - cmap=cmap_floris, - clevels=100, - levels=[], -) - -# Sample at specific points -samples_x = np.array([1000, 1000, 2000, 2000]) -samples_y = np.array([0, 100, 0, 100]) -samples_z = np.array([H, H, H, H]) - -axes_floris[0].scatter(samples_x, samples_y, color="k", marker=".") -axes_floris[1].scatter(samples_x, samples_y, color="k", marker=".") -axes_windfarm[0].scatter(samples_x/D, samples_y/D, color="k", marker=".") -fig.suptitle("Called via FLORIS") - -floris_vels = fmodel.sample_flow_at_points(samples_x, samples_y, samples_z) - -print("\nFLORIS sampled velocities:") -print(floris_vels) - -print("\nMITWindfarm sampled velocities:") -windfarm_sol = windfarm(layout, setpoints) -windfarm_v_rel = windfarm_sol.windfield.wsp(samples_x/D, samples_y/D, (samples_z-H)/D) -windfarm_sol_rotated = windfarm(layout.rotate(rotation_angle), setpoints) - -rotated_x = ( - (samples_x/D - 6) * np.cos(np.radians(rotation_angle)) - - (samples_y/D - 0) * np.sin(np.radians(rotation_angle)) - + 6 -) -rotated_y = ( - (samples_y/D - 0) * np.cos(np.radians(rotation_angle)) - + (samples_x/D - 6) * np.sin(np.radians(rotation_angle)) - + 0 -) -axes_windfarm[1].scatter(rotated_x, rotated_y, color="k", marker=".") - -windfarm_v_rel_rot = windfarm_sol_rotated.windfield.wsp(rotated_x, rotated_y, (samples_z-H)/D) -windfarm_v_rel = np.vstack([windfarm_v_rel, windfarm_v_rel_rot]) -print(windfarm_v_rel) - -print("\nRelative velocity differences (MITWindfarm - FLORIS) %:") -print((windfarm_v_rel - floris_vels) / (windfarm_v_rel) * 100) - -print(fmodel.get_turbine_powers()) - -# Generate plots -plt.show() diff --git a/examples/x01_initial_comparison.py b/examples/x01_initial_comparison.py new file mode 100644 index 0000000..2b58f54 --- /dev/null +++ b/examples/x01_initial_comparison.py @@ -0,0 +1,164 @@ +import numpy as np + +from floris import FlorisModel, ParFlorisModel +from floris.layout_visualization import plot_turbine_rotors +from floris.flow_visualization import visualize_cut_plane + +import matplotlib.pyplot as plt +from MITRotor import IEA15MW + +from mitwindfarm import ( + Plotting, + Layout, + PowerLaw, +) +from mitwindfarm.Rotor import UnifiedAD_TI +from mitwindfarm.windfarm import CurledWindfarm +from mitwindfarm import FlorisCurledWindfarm + +# Set up MITWindfarm solver and run standalone as a baseline + +if __name__ == "__main__": + + cmap_floris = "pink" + use_parallel_model = False + tilt_rotor_in_wake_model = True + + rotation_angle = -5 + + # (Ct-prime, yaw, tilt) + setpoints = [ + (2, 0, 0), + (2, 0, 0), + (2, 0, 0), + ] + + D = 242.24 + H = 150.0 + wind_shear = 0.0 + TI = 0.06 + U = 8.0 + layout = Layout([0, 12 / 2, 24 / 2], [0, 0, 0], [0, 0, 0]) + + solver_kwargs = dict( + dy=1 / 10, + dz=1 / 10, + integrator="scipy_rk23", # see mitwindfarm.utils.integrate + k_model="k-l", # alternatives: "const", "2021" + verbose=False, + ) + + windfarm = CurledWindfarm( + rotor_model=UnifiedAD_TI(), + base_windfield=PowerLaw(Uref=8.0, zref=H, exp=wind_shear, TIamb=TI), + solver_kwargs=solver_kwargs, + TIamb=TI, + ) + + windfarm_sol = windfarm(layout, setpoints) + windfarm_sol_rotated = windfarm(layout.rotate(rotation_angle), setpoints) + + fig, axes_windfarm = plt.subplots(2) + Plotting.plot_windfarm(windfarm_sol, axes_windfarm[0], vmin=0, vmax=U * 2) + Plotting.plot_windfarm(windfarm_sol_rotated, axes_windfarm[1], vmin=0, vmax=U * 2) + fig.suptitle("Direct call") + + # Establish Floris model + if use_parallel_model: + fmodel = ParFlorisModel("defaults") + else: + fmodel = FlorisModel("defaults") + fmodel.set( + layout_x=layout.x * D, + layout_y=layout.y * D, + wind_speeds=[U, U], + wind_directions=[270.0, 270.0 + rotation_angle], + turbulence_intensities=[TI, TI], + turbine_type=["iea_15MW"]*len(layout.x), + reference_wind_height=H, # IEA 15MW hub height + wind_shear=wind_shear, + ) + # Assign MITWindfarm wake model + fmodel.set_wake_model(FlorisCurledWindfarm( + solver_kwargs=solver_kwargs, + use_floris_tilt=tilt_rotor_in_wake_model + )) + # Run FLORIS using MITWindfarm wake model/solver, get turbine powers + fmodel.run() + powers = fmodel.get_turbine_powers() + + # Extracting and plotting FLORIS results + fig, axes_floris = plt.subplots(2) + horizontal_plane = fmodel.calculate_horizontal_plane( + x_resolution=200, + y_resolution=100, + height=H, + findex_for_viz=0, + ) + plot_turbine_rotors(fmodel, ax=axes_floris[0]) + visualize_cut_plane( + horizontal_plane, + ax=axes_floris[0], + cmap=cmap_floris, + clevels=100, + levels=[], + ) + horizontal_plane = fmodel.calculate_horizontal_plane( + x_resolution=200, + y_resolution=100, + height=H, + findex_for_viz=1, + ) + plot_turbine_rotors(fmodel, ax=axes_floris[1], yaw_angles=[-rotation_angle]*len(layout.x)) + visualize_cut_plane( + horizontal_plane, + ax=axes_floris[1], + cmap=cmap_floris, + clevels=100, + levels=[], + ) + + # Sample at specific points + samples_x = np.array([1000, 1000, 2000, 2000]) + samples_y = np.array([0, 100, 0, 100]) + samples_z = np.array([H, H, H, H]) + + axes_floris[0].scatter(samples_x, samples_y, color="k", marker=".") + axes_floris[1].scatter(samples_x, samples_y, color="k", marker=".") + axes_windfarm[0].scatter(samples_x/D, samples_y/D, color="k", marker=".") + fig.suptitle("Called via FLORIS") + + floris_vels = fmodel.sample_flow_at_points(samples_x, samples_y, samples_z) + + print("\nFLORIS sampled velocities:") + print(floris_vels) + + print("\nMITWindfarm sampled velocities:") + windfarm_sol = windfarm(layout, setpoints) + windfarm_v_rel = windfarm_sol.windfield.wsp(samples_x/D, samples_y/D, (samples_z-H)/D) + windfarm_sol_rotated = windfarm(layout.rotate(rotation_angle), setpoints) + + rotated_x = ( + (samples_x/D - 6) * np.cos(np.radians(rotation_angle)) + - (samples_y/D - 0) * np.sin(np.radians(rotation_angle)) + + 6 + ) + rotated_y = ( + (samples_y/D - 0) * np.cos(np.radians(rotation_angle)) + + (samples_x/D - 6) * np.sin(np.radians(rotation_angle)) + + 0 + ) + axes_windfarm[1].scatter(rotated_x, rotated_y, color="k", marker=".") + + windfarm_v_rel_rot = windfarm_sol_rotated.windfield.wsp(rotated_x, rotated_y, (samples_z-H)/D) + windfarm_v_rel = np.vstack([windfarm_v_rel, windfarm_v_rel_rot]) + print(windfarm_v_rel) + + print("\nRelative velocity differences (MITWindfarm - FLORIS) %:") + print((windfarm_v_rel - floris_vels) / (windfarm_v_rel) * 100) + + fmodel.run() + print(powers) + + # Generate plots + plt.show() diff --git a/examples/x02_yaw_and_tilt.py b/examples/x02_yaw_and_tilt.py new file mode 100644 index 0000000..ae946b0 --- /dev/null +++ b/examples/x02_yaw_and_tilt.py @@ -0,0 +1,163 @@ +import numpy as np + +from floris import FlorisModel +from floris.layout_visualization import plot_turbine_rotors +from floris.flow_visualization import visualize_cut_plane + +import matplotlib.pyplot as plt +from MITRotor import IEA15MW + +from mitwindfarm import ( + Plotting, + Layout, + PowerLaw, +) +from mitwindfarm.Rotor import UnifiedAD_TI +from mitwindfarm.windfarm import CurledWindfarm +from mitwindfarm import FlorisCurledWindfarm + +# Set up MITWindfarm solver and run standalone as a baseline + +if __name__ == "__main__": + + cmap_floris = "pink" + + rotation_angle = -5 + tilt = False + yaw_angle = 10 + + # (Ct-prime, yaw, tilt) + setpoints = [ + (2, np.deg2rad(yaw_angle), np.deg2rad(6) if tilt else 0), + (2, np.deg2rad(yaw_angle), np.deg2rad(6) if tilt else 0), + (2, np.deg2rad(yaw_angle), np.deg2rad(6) if tilt else 0), + ] + + + D = 242.24 + H = 150.0 + wind_shear = 0.0 + TI = 0.06 + U = 8.0 + layout = Layout([0, 12 / 2, 24 / 2], [0, 0, 0], [0, 0, 0]) + + solver_kwargs = dict( + dy=1 / 10, + dz=1 / 10, + integrator="scipy_rk23", # see mitwindfarm.utils.integrate + k_model="k-l", # alternatives: "const", "2021" + verbose=False, + ) + + windfarm = CurledWindfarm( + rotor_model=UnifiedAD_TI(), + base_windfield=PowerLaw(Uref=8.0, zref=H, exp=wind_shear, TIamb=TI), + solver_kwargs=solver_kwargs, + TIamb=TI, + ) + + windfarm_sol = windfarm(layout, setpoints) + windfarm_sol_rotated = windfarm(layout.rotate(rotation_angle), setpoints) + + fig, axes_windfarm = plt.subplots(2) + Plotting.plot_windfarm(windfarm_sol, axes_windfarm[0], vmin=0, vmax=U * 2) + Plotting.plot_windfarm(windfarm_sol_rotated, axes_windfarm[1], vmin=0, vmax=U * 2) + fig.suptitle("Direct call") + + # Establish Floris model + fmodel = FlorisModel("defaults") + fmodel.set( + layout_x=layout.x * D, + layout_y=layout.y * D, + wind_speeds=[U, U], + wind_directions=[270.0, 270.0 + rotation_angle], + turbulence_intensities=[TI, TI], + turbine_type=["iea_15MW"]*len(layout.x), + reference_wind_height=H, # IEA 15MW hub height + wind_shear=wind_shear, + yaw_angles=yaw_angle*np.ones((2, 3)), + ) + # Assign MITWindfarm wake model + fmodel.set_wake_model(FlorisCurledWindfarm( + solver_kwargs=solver_kwargs, + use_floris_tilt=tilt + )) + # Run FLORIS using MITWindfarm wake model/solver, get turbine powers + fmodel.run() + powers = fmodel.get_turbine_powers() + + # Extracting and plotting FLORIS results + fig, axes_floris = plt.subplots(2) + horizontal_plane = fmodel.calculate_horizontal_plane( + x_resolution=200, + y_resolution=100, + height=H, + findex_for_viz=0, + ) + plot_turbine_rotors(fmodel, ax=axes_floris[0]) + visualize_cut_plane( + horizontal_plane, + ax=axes_floris[0], + cmap=cmap_floris, + clevels=100, + levels=[], + ) + horizontal_plane = fmodel.calculate_horizontal_plane( + x_resolution=200, + y_resolution=100, + height=H, + findex_for_viz=1, + ) + plot_turbine_rotors(fmodel, ax=axes_floris[1], yaw_angles=[-rotation_angle]*len(layout.x)) + visualize_cut_plane( + horizontal_plane, + ax=axes_floris[1], + cmap=cmap_floris, + clevels=100, + levels=[], + ) + + # Sample at specific points + samples_x = np.array([1000, 1000, 2000, 2000]) + samples_y = np.array([0, 100, 0, 100]) + samples_z = np.array([H, H, H, H]) + + axes_floris[0].scatter(samples_x, samples_y, color="k", marker=".") + axes_floris[1].scatter(samples_x, samples_y, color="k", marker=".") + axes_windfarm[0].scatter(samples_x/D, samples_y/D, color="k", marker=".") + fig.suptitle("Called via FLORIS") + + floris_vels = fmodel.sample_flow_at_points(samples_x, samples_y, samples_z) + + print("\nFLORIS sampled velocities:") + print(floris_vels) + + print("\nMITWindfarm sampled velocities:") + windfarm_sol = windfarm(layout, setpoints) + windfarm_v_rel = windfarm_sol.windfield.wsp(samples_x/D, samples_y/D, (samples_z-H)/D) + windfarm_sol_rotated = windfarm(layout.rotate(rotation_angle), setpoints) + + rotated_x = ( + (samples_x/D - 6) * np.cos(np.radians(rotation_angle)) + - (samples_y/D - 0) * np.sin(np.radians(rotation_angle)) + + 6 + ) + rotated_y = ( + (samples_y/D - 0) * np.cos(np.radians(rotation_angle)) + + (samples_x/D - 6) * np.sin(np.radians(rotation_angle)) + + 0 + ) + axes_windfarm[1].scatter(rotated_x, rotated_y, color="k", marker=".") + + windfarm_v_rel_rot = windfarm_sol_rotated.windfield.wsp(rotated_x, rotated_y, (samples_z-H)/D) + windfarm_v_rel = np.vstack([windfarm_v_rel, windfarm_v_rel_rot]) + print(windfarm_v_rel) + + print("\nRelative velocity differences (MITWindfarm - FLORIS) %:") + print((windfarm_v_rel - floris_vels) / (windfarm_v_rel) * 100) + + fmodel.run() + print(powers) + + # Generate plots + plt.show() diff --git a/mitwindfarm/FlorisInterface.py b/mitwindfarm/FlorisInterface.py index 169b4af..0bff1ff 100644 --- a/mitwindfarm/FlorisInterface.py +++ b/mitwindfarm/FlorisInterface.py @@ -26,16 +26,19 @@ class FlorisCurledWindfarm(BaseWakeModel): """ # Parameters (to fill in) solver_kwargs = field(default=None) + use_floris_tilt = field(default=True, init=True) def turbine_solve(self, farm, flow_field, grid): + self._check_valid_turbine_types(farm) self._solve_and_evaluate(farm, flow_field, grid, grid) def point_solve(self, farm, flow_field, grid): + self._check_valid_turbine_types(farm) turbine_grid = self.generate_turbine_grid_objects(farm, flow_field)[2] self._solve_and_evaluate(farm, flow_field, grid, turbine_grid) - def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): - # Assume all turbines have the same rotor diameter; not sure if + def _check_valid_turbine_types(self, farm): + # Assume all turbines have the same rotor diameter; not sure if # methods below handle varying rotor diameters? if not np.all(np.array(farm.turbine_type) == farm.turbine_type[0]): raise NotImplementedError("Varying turbine types not supported in FlorisCurledWindfarm") @@ -43,9 +46,12 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): raise NotImplementedError( "Varying rotor diameters not supported in FlorisCurledWindfarm" ) - else: - D = farm.rotor_diameters.mean() - turbine_type = farm.turbine_definitions[0]['turbine_type'] + # TODO: Add check for a valid operation model (i.e., has the velocity components) + + def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): + + D = farm.rotor_diameters.mean() + turbine_type = farm.turbine_definitions[0]['turbine_type'] if flow_field.het_map or flow_field.heterogeneous_inflow_config: raise NotImplementedError( @@ -61,10 +67,15 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): tilt_interp=farm.turbine_tilt_interps[turbine_type], average_method=turbine_grid.average_method, cubature_weights=grid.cubature_weights, - correct_cp_ct_for_tilt=True + correct_cp_ct_for_tilt=True, # TODO: Pass in? + use_floris_tilt=self.use_floris_tilt ) + # Temporary; this shouldn't be needed, but it seems I have something not quite right in + # initializing the farm object and its attributes. farm.turbine_powers = np.zeros((flow_field.n_findex, farm.n_turbines)) + farm.turbine_thrust_coefficients = np.zeros((flow_field.n_findex, farm.n_turbines)) + farm.turbine_axial_inductions = np.zeros((flow_field.n_findex, farm.n_turbines)) # Use sorted version for f in range(flow_field.n_findex): @@ -78,8 +89,6 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): turbines_z = turbine_grid.z_sorted.mean(axis=(2,3))[f] layout = Layout(turbines_x/D, turbines_y/D, turbines_z/D) - # Generate calling arguments based on windfarm type. Also depends on rotor model; not yet handled. - # Sometimes, setpoints should include tsr and pitch; other times, ctprime? Depends on rotor model? wf_init_kwargs = { "rotor_model": rotor_model, "base_windfield": PowerLaw( @@ -91,16 +100,17 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): "TIamb": flow_field.turbulence_intensities[f], # Needed? not sure "solver_kwargs": self.solver_kwargs, } - yaw = farm.yaw_angles[f, :] - tilt = farm.tilt_angles[f, :] - CTprime = 2.0 * np.ones_like(yaw) # Temporary - setpoints = list(zip(CTprime, yaw, tilt)) + yaw = farm.yaw_angles[f, :] # How is this used? + tilt = farm.tilt_angles[f, :] # How is this used? + setpoints = list(zip(np.nan * np.ones_like(yaw), yaw, tilt)) # Reinstantiate and solve for the current findex windfarm = CurledWindfarm(**wf_init_kwargs) windfarm_sol = windfarm(layout, setpoints) farm.turbine_powers[f] = np.array([r.Cp for r in windfarm_sol.rotors]) + farm.turbine_thrust_coefficients[f] = np.array([r.extra.Ct for r in windfarm_sol.rotors]) + farm.turbine_axial_inductions[f] = np.array([r.extra.an for r in windfarm_sol.rotors]) # Extract the wind speeds at the turbine locations relative_velocities = windfarm_sol.windfield.wsp( @@ -115,6 +125,8 @@ class RotorWrapper(Rotor): Wrapper for the FLORIS operation model to be used as a rotor model in MITWindfarm. This allows the use of the FLORIS operation model within the CurledWindfarm solver, which is necessary for the FlorisCurledWindfarm wake model to work. + + TODO: use attrs? Not strictly needed. """ def __init__(self, @@ -127,6 +139,7 @@ def __init__(self, average_method = "cubic-mean", cubature_weights = None, correct_cp_ct_for_tilt = True, + use_floris_tilt = True ): self.thrust_coefficient_function = thrust_coefficient_function self.power_function = power_function @@ -137,6 +150,7 @@ def __init__(self, self.average_method = average_method self.cubature_weights = cubature_weights self.correct_cp_ct_for_tilt = correct_cp_ct_for_tilt + self.use_floris_tilt = use_floris_tilt if "condition_keys" in power_thrust_table: self._power_thrust_table_md = copy.deepcopy(power_thrust_table) @@ -173,6 +187,10 @@ def set_multidim_condition(self, multidim_conditions, findex): def __call__( self, x: float, y: float, z: float, windfield, Ctprime, yaw=0, tilt=0, ): + """ + Note that the value of Ctprime passed will be ignored, as Ctprime is computed + during the call. + """ Us = windfield.wsp(x, y, z) TIs = windfield.TI(x, y, z) @@ -231,10 +249,20 @@ def __call__( correct_cp_ct_for_tilt=self.correct_cp_ct_for_tilt, ) + # Compute tilt for rotor solution. + if self.correct_cp_ct_for_tilt and self.tilt_interp is not None: + tilt = self.tilt_interp(Us) + ### MIT team to check: Are the following calculations correct? Do they need to be updated? + cos_eff_yaw = np.cos(yaw) * np.cos(tilt) REWS = np.mean(Us) RETI = np.mean(TIs) - Ctprime = 4*a/(1-a) + ### TODO: check a is equivalent to a_n (normal component?) + ### Also check how c_t is defined; is there a single cosine yaw term there? Does that match? + ### TODO: should there be another term for tilt? How does that come in? + Ctprime = Ct / ((1 - a)**2 * cos_eff_yaw**2) + # Ctprime = Ct / ((1 - a)**2 * np.cos(np.deg2rad(yaw))**2) + ### TODO: perhaps not appropriate; need to come from flow model u4 = np.sqrt(np.maximum(1 - Ct, 0)) * Us v4 = - (1/4) * Ct * np.sin(np.deg2rad(yaw)) * Us # Or should these use 2.20a,b from Heck et al (2023)? @@ -242,17 +270,15 @@ def __call__( # v4 = - (4 * Ctprime * np.sin(np.deg2rad(yaw))*np.cos(np.deg2rad(yaw))**2) / (4 + Ctprime*np.cos(np.deg2rad(yaw))**2)**2 * Us w4 = np.zeros_like(Us) - # Compute tilt for rotor solution. - if self.correct_cp_ct_for_tilt and self.tilt_interp is not None: - tilt = self.tilt_interp(Us) - relative_tilt = tilt - self.power_thrust_table["ref_tilt"] + print(f"Tilt (deg): {tilt:.2f}") class extra: """ Small class to return normalized values for axial induction and u4. """ - def __init__(self, a, u4, REWS): + def __init__(self, a, u4, Ct, REWS): self.an = a + self.Ct = Ct self.u4 = u4 / REWS ### MIT team to check: are these the correct values to pass to the RotorSolution object? @@ -265,9 +291,9 @@ def __init__(self, a, u4, REWS): u4=u4, v4=v4, REWS=REWS, - tilt=np.deg2rad(relative_tilt), # Correct? Or should this be absolute tilt? + tilt=np.deg2rad(tilt) if self.use_floris_tilt else 0.0, w4=w4, TI=RETI, - extra=extra(a, u4, REWS), + extra=extra(a, u4, Ct, REWS) ) return rotor_solution From 18b6484e42e934d6bd29cfad3bc801fe8df760d9 Mon Sep 17 00:00:00 2001 From: misi9170 Date: Tue, 21 Jul 2026 19:26:10 -0600 Subject: [PATCH 15/52] WIP, updates to match floris --- mitwindfarm/FlorisInterface.py | 102 +++++++++++++++++---------------- 1 file changed, 53 insertions(+), 49 deletions(-) diff --git a/mitwindfarm/FlorisInterface.py b/mitwindfarm/FlorisInterface.py index 0bff1ff..77a7c0d 100644 --- a/mitwindfarm/FlorisInterface.py +++ b/mitwindfarm/FlorisInterface.py @@ -13,6 +13,7 @@ from ._Layout import Layout from .windfarm import CurledWindfarm from .Rotor import Rotor, RotorSolution +from UnifiedMomentumModel.Utilities.Geometry import calc_eff_yaw @define class FlorisCurledWindfarm(BaseWakeModel): @@ -30,44 +31,41 @@ class FlorisCurledWindfarm(BaseWakeModel): def turbine_solve(self, farm, flow_field, grid): self._check_valid_turbine_types(farm) + self._check_valid_flow_field(flow_field) self._solve_and_evaluate(farm, flow_field, grid, grid) def point_solve(self, farm, flow_field, grid): self._check_valid_turbine_types(farm) + self._check_valid_flow_field(flow_field) turbine_grid = self.generate_turbine_grid_objects(farm, flow_field)[2] self._solve_and_evaluate(farm, flow_field, grid, turbine_grid) def _check_valid_turbine_types(self, farm): - # Assume all turbines have the same rotor diameter; not sure if - # methods below handle varying rotor diameters? - if not np.all(np.array(farm.turbine_type) == farm.turbine_type[0]): - raise NotImplementedError("Varying turbine types not supported in FlorisCurledWindfarm") - elif not np.all(farm.rotor_diameters == farm.rotor_diameters.mean()): + # Require all turbines to be the same type + if not np.all(t == farm.turbines[0] for t in farm.turbines): raise NotImplementedError( - "Varying rotor diameters not supported in FlorisCurledWindfarm" + "Varying turbine models not supported in FlorisCurledWindfarm" ) - # TODO: Add check for a valid operation model (i.e., has the velocity components) - - def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): - - D = farm.rotor_diameters.mean() - turbine_type = farm.turbine_definitions[0]['turbine_type'] - + + def _check_valid_flow_field(self, flow_field): if flow_field.het_map or flow_field.heterogeneous_inflow_config: raise NotImplementedError( "Heterogeneous inflows are not supported in FlorisCurledWindfarm." ) + def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): + + D = farm.rotor_diameters[0] + rotor_model = RotorWrapper( - thrust_coefficient_function=farm.turbine_thrust_coefficient_functions[turbine_type], # - power_function=farm.turbine_power_functions[turbine_type], - axial_induction_function=farm.turbine_axial_induction_functions[turbine_type], - power_thrust_table=farm.turbine_power_thrust_tables[turbine_type], + operation_model=farm.turbines[0].operation_model, + power_thrust_table=farm.turbines[0].power_thrust_table, + rotor_diameter=D, air_density=flow_field.air_density, - tilt_interp=farm.turbine_tilt_interps[turbine_type], + tilt_interp=farm.turbines[0].tilt_interp, average_method=turbine_grid.average_method, cubature_weights=grid.cubature_weights, - correct_cp_ct_for_tilt=True, # TODO: Pass in? + correct_cp_ct_for_tilt=farm.turbines[0].correct_cp_ct_for_tilt, use_floris_tilt=self.use_floris_tilt ) @@ -100,8 +98,9 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): "TIamb": flow_field.turbulence_intensities[f], # Needed? not sure "solver_kwargs": self.solver_kwargs, } - yaw = farm.yaw_angles[f, :] # How is this used? - tilt = farm.tilt_angles[f, :] # How is this used? + yaw = farm.yaw_angles[f, :] + # TODO: Evaluate the tilt angle for the current inflow velocity + tilt = 0.0 * np.ones_like(yaw) setpoints = list(zip(np.nan * np.ones_like(yaw), yaw, tilt)) # Reinstantiate and solve for the current findex @@ -125,15 +124,12 @@ class RotorWrapper(Rotor): Wrapper for the FLORIS operation model to be used as a rotor model in MITWindfarm. This allows the use of the FLORIS operation model within the CurledWindfarm solver, which is necessary for the FlorisCurledWindfarm wake model to work. - - TODO: use attrs? Not strictly needed. """ def __init__(self, - thrust_coefficient_function, - axial_induction_function, - power_function, + operation_model, power_thrust_table, + rotor_diameter, air_density = 1.225, tilt_interp = None, average_method = "cubic-mean", @@ -141,10 +137,9 @@ def __init__(self, correct_cp_ct_for_tilt = True, use_floris_tilt = True ): - self.thrust_coefficient_function = thrust_coefficient_function - self.power_function = power_function - self.axial_induction_function = axial_induction_function + self.operation_model = operation_model self.power_thrust_table = power_thrust_table + self.rotor_diameter = rotor_diameter self.air_density = air_density self.tilt_interp = tilt_interp self.average_method = average_method @@ -200,8 +195,14 @@ def __call__( "but multidimensional condition has not been set." ) + yaw_r = np.deg2rad(yaw) + tilt_r = np.deg2rad(tilt) + yaw_r_eff = calc_eff_yaw(yaw_r, tilt_r) + + # Now, should be able to evaluate the FLORIS operation model (thrust coefficient)? - Ct = self.thrust_coefficient_function( + # TODO: Check that "both" cosine terms are included in SG's model + Ct = self.operation_model.thrust_coefficient( power_thrust_table=self.power_thrust_table, velocities=Us, turbulence_intensities=TIs, @@ -217,7 +218,8 @@ def __call__( correct_cp_ct_for_tilt=self.correct_cp_ct_for_tilt, ) - a = self.axial_induction_function( + # TODO: Check: Does SG model return a_n here? + a = self.operation_model.axial_induction( power_thrust_table=self.power_thrust_table, velocities=Us, turbulence_intensities=TIs, @@ -233,7 +235,7 @@ def __call__( correct_cp_ct_for_tilt=self.correct_cp_ct_for_tilt, ) - P = self.power_function( + P = self.operation_model.power( power_thrust_table=self.power_thrust_table, velocities=Us, turbulence_intensities=TIs, @@ -253,24 +255,26 @@ def __call__( if self.correct_cp_ct_for_tilt and self.tilt_interp is not None: tilt = self.tilt_interp(Us) - ### MIT team to check: Are the following calculations correct? Do they need to be updated? - cos_eff_yaw = np.cos(yaw) * np.cos(tilt) REWS = np.mean(Us) RETI = np.mean(TIs) - ### TODO: check a is equivalent to a_n (normal component?) - ### Also check how c_t is defined; is there a single cosine yaw term there? Does that match? - ### TODO: should there be another term for tilt? How does that come in? - Ctprime = Ct / ((1 - a)**2 * cos_eff_yaw**2) - # Ctprime = Ct / ((1 - a)**2 * np.cos(np.deg2rad(yaw))**2) - ### TODO: perhaps not appropriate; need to come from flow model - u4 = np.sqrt(np.maximum(1 - Ct, 0)) * Us - v4 = - (1/4) * Ct * np.sin(np.deg2rad(yaw)) * Us - # Or should these use 2.20a,b from Heck et al (2023)? - # u4 = (4 - Ctprime*np.cos(np.deg2rad(yaw))**2) / (4 + Ctprime*np.cos(np.deg2rad(yaw))**2) * Us - # v4 = - (4 * Ctprime * np.sin(np.deg2rad(yaw))*np.cos(np.deg2rad(yaw))**2) / (4 + Ctprime*np.cos(np.deg2rad(yaw))**2)**2 * Us - w4 = np.zeros_like(Us) - - print(f"Tilt (deg): {tilt:.2f}") + if True: # TODO: Change to a check for whether the near_wake_velocities are returned + # TODO: add check that an appropriate model has been chosen (CosineLoss) + Ct = Ct * np.cos(yaw_r_eff) # Add second cosine term, as not done in CosineLoss model + Ctprime = Ct / ((1 - a)**2 * np.cos(yaw_r_eff)**2) + u4 = Us * np.sqrt(1 - 1/16 * Ct**2 * np.sin(yaw_r_eff)**2 - Ct) + v4 = - (1/4) * Ct * np.sin(yaw_r_eff) * Us + w4 = - (1/4) * Ct * np.sin(tilt_r) * Us + beta = 0.1403 + x0 = (self.rotor_diameter + * np.cos(yaw_r_eff) / (2*beta) + * (Us - u4) / np.abs(Us - u4) + * np.sqrt(((1 - a) * np.cos(yaw_r_eff) * Us)/(Us + u4)) + ) + # Check: is Us - u4 ever negative? + # Check: how do we pass x0 to the CurledWindfarm solver? + else: + # Get from operation model + pass class extra: """ @@ -281,7 +285,7 @@ def __init__(self, a, u4, Ct, REWS): self.Ct = Ct self.u4 = u4 / REWS - ### MIT team to check: are these the correct values to pass to the RotorSolution object? + ### Still not sure how to pass in x0? rotor_solution = RotorSolution( yaw=np.deg2rad(yaw), Cp=P, # Needed to save off power in main FlorisCurledWindfarm solve From 73fbcb94ddfde9e0803167474ed5ff2e4def3f38 Mon Sep 17 00:00:00 2001 From: misi9170 Date: Tue, 21 Jul 2026 19:58:46 -0600 Subject: [PATCH 16/52] Work in near wake velocity calculations for tilted, yawed rotor --- mitwindfarm/FlorisInterface.py | 65 ++++++++++++++++++++++++---------- 1 file changed, 46 insertions(+), 19 deletions(-) diff --git a/mitwindfarm/FlorisInterface.py b/mitwindfarm/FlorisInterface.py index 77a7c0d..f3e1fab 100644 --- a/mitwindfarm/FlorisInterface.py +++ b/mitwindfarm/FlorisInterface.py @@ -8,12 +8,13 @@ from floris.core.wake_model import BaseWakeModel from floris.core.turbine.turbine import select_multidim_condition +from floris.core.rotor_velocity import compute_tilt_angles_for_floating_turbines from .Windfield import PowerLaw from ._Layout import Layout from .windfarm import CurledWindfarm from .Rotor import Rotor, RotorSolution -from UnifiedMomentumModel.Utilities.Geometry import calc_eff_yaw +from UnifiedMomentumModel.Utilities.Geometry import calc_eff_yaw, eff_yaw_inv_rotation @define class FlorisCurledWindfarm(BaseWakeModel): @@ -99,8 +100,20 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): "solver_kwargs": self.solver_kwargs, } yaw = farm.yaw_angles[f, :] - # TODO: Evaluate the tilt angle for the current inflow velocity - tilt = 0.0 * np.ones_like(yaw) + + if not self.use_floris_tilt: + tilt = 0.0 * np.ones_like(yaw) + elif farm.turbines[0].correct_cp_ct_for_tilt: + # Evaluate the tilt angle for the current inflow velocity (floating) + # TODO: check this works as expected. + tilt = compute_tilt_angles_for_floating_turbines( + tilt_angles=farm.turbines[0].ref_tilt, + tilt_interp=farm.turbines[0].tilt_interp, + rotor_effective_velocities=flow_field.wind_speeds[f] + ) + else: + tilt = farm.turbines[0].ref_tilt * np.ones_like(yaw) + setpoints = list(zip(np.nan * np.ones_like(yaw), yaw, tilt)) # Reinstantiate and solve for the current findex @@ -197,7 +210,6 @@ def __call__( yaw_r = np.deg2rad(yaw) tilt_r = np.deg2rad(tilt) - yaw_r_eff = calc_eff_yaw(yaw_r, tilt_r) # Now, should be able to evaluate the FLORIS operation model (thrust coefficient)? @@ -218,7 +230,7 @@ def __call__( correct_cp_ct_for_tilt=self.correct_cp_ct_for_tilt, ) - # TODO: Check: Does SG model return a_n here? + # TODO: Check: Does SG model return a_n here? Do we need it? a = self.operation_model.axial_induction( power_thrust_table=self.power_thrust_table, velocities=Us, @@ -259,22 +271,14 @@ def __call__( RETI = np.mean(TIs) if True: # TODO: Change to a check for whether the near_wake_velocities are returned # TODO: add check that an appropriate model has been chosen (CosineLoss) - Ct = Ct * np.cos(yaw_r_eff) # Add second cosine term, as not done in CosineLoss model - Ctprime = Ct / ((1 - a)**2 * np.cos(yaw_r_eff)**2) - u4 = Us * np.sqrt(1 - 1/16 * Ct**2 * np.sin(yaw_r_eff)**2 - Ct) - v4 = - (1/4) * Ct * np.sin(yaw_r_eff) * Us - w4 = - (1/4) * Ct * np.sin(tilt_r) * Us - beta = 0.1403 - x0 = (self.rotor_diameter - * np.cos(yaw_r_eff) / (2*beta) - * (Us - u4) / np.abs(Us - u4) - * np.sqrt(((1 - a) * np.cos(yaw_r_eff) * Us)/(Us + u4)) - ) - # Check: is Us - u4 ever negative? + Ct = Ct * np.cos(calc_eff_yaw(yaw_r, tilt_r)) # Add second cosine term, as not done in CosineLoss model + + u4, v4, w4, x0 = near_wake_velocities_standin(Ct, Us, yaw_r, tilt_r, self.rotor_diameter) + # Check: how do we pass x0 to the CurledWindfarm solver? else: - # Get from operation model - pass + u4, v4, w4, x0 = self.operation_model.near_wake_velocities() + Ctprime = Ct / ((1 - a)**2 * np.cos(calc_eff_yaw(yaw_r, tilt_r))**2) class extra: """ @@ -301,3 +305,26 @@ def __init__(self, a, u4, Ct, REWS): extra=extra(a, u4, Ct, REWS) ) return rotor_solution + +def near_wake_velocities_standin(Ct, Us, yaw_r, tilt_r, D): + + yaw_r_eff = calc_eff_yaw(yaw_r, tilt_r) + + # In rotated frame of reference + u4 = Us * np.sqrt(1 - 1/16 * Ct**2 * np.sin(yaw_r_eff)**2 - Ct) + v4 = - (1/4) * Ct * np.sin(yaw_r_eff) * Us + w4 = 0.0 + + a = 1 + 0.5 * (Ct * Us)/(u4 - Us) + + beta = 0.1403 + x0 = (D + * np.cos(yaw_r_eff) / (2*beta) + * (Us - u4) / np.abs(Us - u4) + * np.sqrt(((1 - a) * np.cos(yaw_r_eff) * Us)/(Us + u4)) + ) + + # Convert to global frame of reference + u4, v4, w4 = eff_yaw_inv_rotation(u4, v4, w4, yaw_r_eff, yaw_r, tilt_r) + + return u4, v4, w4, x0 From 1a00d62ea031ee9fe269141b6d222f4ffcaf7e50 Mon Sep 17 00:00:00 2001 From: misi9170 Date: Tue, 21 Jul 2026 20:37:45 -0600 Subject: [PATCH 17/52] Switch to using unity power and hub height --- examples/x01_initial_comparison.py | 13 ++++++------- examples/x02_yaw_and_tilt.py | 15 +++++++-------- mitwindfarm/FlorisInterface.py | 17 +++++++++++------ 3 files changed, 24 insertions(+), 21 deletions(-) diff --git a/examples/x01_initial_comparison.py b/examples/x01_initial_comparison.py index 2b58f54..c526bf7 100644 --- a/examples/x01_initial_comparison.py +++ b/examples/x01_initial_comparison.py @@ -50,7 +50,7 @@ windfarm = CurledWindfarm( rotor_model=UnifiedAD_TI(), - base_windfield=PowerLaw(Uref=8.0, zref=H, exp=wind_shear, TIamb=TI), + base_windfield=PowerLaw(Uref=1.0, zref=H, exp=wind_shear, TIamb=TI), solver_kwargs=solver_kwargs, TIamb=TI, ) @@ -59,8 +59,8 @@ windfarm_sol_rotated = windfarm(layout.rotate(rotation_angle), setpoints) fig, axes_windfarm = plt.subplots(2) - Plotting.plot_windfarm(windfarm_sol, axes_windfarm[0], vmin=0, vmax=U * 2) - Plotting.plot_windfarm(windfarm_sol_rotated, axes_windfarm[1], vmin=0, vmax=U * 2) + Plotting.plot_windfarm(windfarm_sol, axes_windfarm[0], vmin=0, vmax=2) + Plotting.plot_windfarm(windfarm_sol_rotated, axes_windfarm[1], vmin=0, vmax=2) fig.suptitle("Direct call") # Establish Floris model @@ -152,13 +152,12 @@ windfarm_v_rel_rot = windfarm_sol_rotated.windfield.wsp(rotated_x, rotated_y, (samples_z-H)/D) windfarm_v_rel = np.vstack([windfarm_v_rel, windfarm_v_rel_rot]) - print(windfarm_v_rel) + print(windfarm_v_rel * U) print("\nRelative velocity differences (MITWindfarm - FLORIS) %:") - print((windfarm_v_rel - floris_vels) / (windfarm_v_rel) * 100) + print((windfarm_v_rel * U - floris_vels) / (windfarm_v_rel * U) * 100) - fmodel.run() - print(powers) + print(powers / 1e6) # Generate plots plt.show() diff --git a/examples/x02_yaw_and_tilt.py b/examples/x02_yaw_and_tilt.py index ae946b0..605ff6b 100644 --- a/examples/x02_yaw_and_tilt.py +++ b/examples/x02_yaw_and_tilt.py @@ -24,7 +24,7 @@ rotation_angle = -5 tilt = False - yaw_angle = 10 + yaw_angle = 25 # (Ct-prime, yaw, tilt) setpoints = [ @@ -51,7 +51,7 @@ windfarm = CurledWindfarm( rotor_model=UnifiedAD_TI(), - base_windfield=PowerLaw(Uref=8.0, zref=H, exp=wind_shear, TIamb=TI), + base_windfield=PowerLaw(Uref=1.0, zref=H/D, exp=wind_shear, TIamb=TI), solver_kwargs=solver_kwargs, TIamb=TI, ) @@ -60,8 +60,8 @@ windfarm_sol_rotated = windfarm(layout.rotate(rotation_angle), setpoints) fig, axes_windfarm = plt.subplots(2) - Plotting.plot_windfarm(windfarm_sol, axes_windfarm[0], vmin=0, vmax=U * 2) - Plotting.plot_windfarm(windfarm_sol_rotated, axes_windfarm[1], vmin=0, vmax=U * 2) + Plotting.plot_windfarm(windfarm_sol, axes_windfarm[0], vmin=0, vmax=2) + Plotting.plot_windfarm(windfarm_sol_rotated, axes_windfarm[1], vmin=0, vmax=2) fig.suptitle("Direct call") # Establish Floris model @@ -151,13 +151,12 @@ windfarm_v_rel_rot = windfarm_sol_rotated.windfield.wsp(rotated_x, rotated_y, (samples_z-H)/D) windfarm_v_rel = np.vstack([windfarm_v_rel, windfarm_v_rel_rot]) - print(windfarm_v_rel) + print(windfarm_v_rel * U) print("\nRelative velocity differences (MITWindfarm - FLORIS) %:") - print((windfarm_v_rel - floris_vels) / (windfarm_v_rel) * 100) + print((windfarm_v_rel * U - floris_vels) / (windfarm_v_rel * U) * 100) - fmodel.run() - print(powers) + print(powers / 1e6) # Generate plots plt.show() diff --git a/mitwindfarm/FlorisInterface.py b/mitwindfarm/FlorisInterface.py index f3e1fab..ccfda40 100644 --- a/mitwindfarm/FlorisInterface.py +++ b/mitwindfarm/FlorisInterface.py @@ -79,6 +79,8 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): # Use sorted version for f in range(flow_field.n_findex): + rotor_model.update_freestream_windspeed(flow_field.wind_speeds[f]) + # Handle possible multidimensional turbine conditions if flow_field.multidim_conditions is not None: rotor_model.set_multidim_condition(flow_field.multidim_conditions, f) @@ -91,7 +93,7 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): wf_init_kwargs = { "rotor_model": rotor_model, "base_windfield": PowerLaw( - flow_field.wind_speeds[f], + 1.0, # Will be scaled up after solve flow_field.reference_wind_height/D, flow_field.wind_shear, flow_field.turbulence_intensities[f] @@ -127,7 +129,7 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): # Extract the wind speeds at the turbine locations relative_velocities = windfarm_sol.windfield.wsp( grid.x_sorted[f]/D, grid.y_sorted[f]/D, grid.z_sorted[f]/D - ) + ) * flow_field.wind_speeds[f] # Scale by the reference wind speed for this findex # Assign to flow field flow_field.u_sorted[f] = relative_velocities @@ -192,6 +194,9 @@ def set_multidim_condition(self, multidim_conditions, findex): )[0][0]) self.power_thrust_table = self._power_thrust_table_md[self.multidim_condition] + def update_freestream_windspeed(self, Uref): + self.Uref = Uref + def __call__( self, x: float, y: float, z: float, windfield, Ctprime, yaw=0, tilt=0, ): @@ -199,7 +204,7 @@ def __call__( Note that the value of Ctprime passed will be ignored, as Ctprime is computed during the call. """ - Us = windfield.wsp(x, y, z) + Us = windfield.wsp(x, y, z) TIs = windfield.TI(x, y, z) if self.multidimensional_turbine and self.multidim_condition is None: @@ -216,7 +221,7 @@ def __call__( # TODO: Check that "both" cosine terms are included in SG's model Ct = self.operation_model.thrust_coefficient( power_thrust_table=self.power_thrust_table, - velocities=Us, + velocities=Us * self.Uref, turbulence_intensities=TIs, air_density=self.air_density, yaw_angles=yaw, @@ -233,7 +238,7 @@ def __call__( # TODO: Check: Does SG model return a_n here? Do we need it? a = self.operation_model.axial_induction( power_thrust_table=self.power_thrust_table, - velocities=Us, + velocities=Us * self.Uref, turbulence_intensities=TIs, air_density=self.air_density, yaw_angles=yaw, @@ -249,7 +254,7 @@ def __call__( P = self.operation_model.power( power_thrust_table=self.power_thrust_table, - velocities=Us, + velocities=Us * self.Uref, turbulence_intensities=TIs, air_density=self.air_density, yaw_angles=yaw, From 7e94bb8c424d4f406b53f0cc3b0ef7474fa55a48 Mon Sep 17 00:00:00 2001 From: misi9170 Date: Wed, 29 Jul 2026 13:42:28 -0600 Subject: [PATCH 18/52] updates for FLORIS branch --- mitwindfarm/FlorisInterface.py | 48 +++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/mitwindfarm/FlorisInterface.py b/mitwindfarm/FlorisInterface.py index ccfda40..2d80014 100644 --- a/mitwindfarm/FlorisInterface.py +++ b/mitwindfarm/FlorisInterface.py @@ -1,20 +1,22 @@ +import copy from dataclasses import dataclass -from attrs import define, field -import copy import numpy as np +from attrs import define, field +from floris.core.rotor_velocity import \ + compute_tilt_angles_for_floating_turbines +from floris.core.turbine.turbine import select_multidim_condition +from floris.core.wake_model import BaseWakeModel from numpy.typing import ArrayLike from scipy.interpolate import LinearNDInterpolator +from UnifiedMomentumModel.Utilities.Geometry import (calc_eff_yaw, + eff_yaw_inv_rotation) -from floris.core.wake_model import BaseWakeModel -from floris.core.turbine.turbine import select_multidim_condition -from floris.core.rotor_velocity import compute_tilt_angles_for_floating_turbines - -from .Windfield import PowerLaw from ._Layout import Layout -from .windfarm import CurledWindfarm from .Rotor import Rotor, RotorSolution -from UnifiedMomentumModel.Utilities.Geometry import calc_eff_yaw, eff_yaw_inv_rotation +from .windfarm import CurledWindfarm +from .Windfield import PowerLaw + @define class FlorisCurledWindfarm(BaseWakeModel): @@ -33,7 +35,15 @@ class FlorisCurledWindfarm(BaseWakeModel): def turbine_solve(self, farm, flow_field, grid): self._check_valid_turbine_types(farm) self._check_valid_flow_field(flow_field) - self._solve_and_evaluate(farm, flow_field, grid, grid) + powers, thrust_coefficients, axial_inductions = self._solve_and_evaluate( + farm, flow_field, grid, grid + ) + # Assign outputs to farm + farm.set_turbine_outputs_by_original_ordering( + powers=powers, + thrust_coefficients=thrust_coefficients, + axial_inductions=axial_inductions + ) def point_solve(self, farm, flow_field, grid): self._check_valid_turbine_types(farm) @@ -70,11 +80,11 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): use_floris_tilt=self.use_floris_tilt ) - # Temporary; this shouldn't be needed, but it seems I have something not quite right in - # initializing the farm object and its attributes. - farm.turbine_powers = np.zeros((flow_field.n_findex, farm.n_turbines)) - farm.turbine_thrust_coefficients = np.zeros((flow_field.n_findex, farm.n_turbines)) - farm.turbine_axial_inductions = np.zeros((flow_field.n_findex, farm.n_turbines)) + # Create variables to store turbine outputs, and assign to farm at + # end of solve routine. + powers = np.zeros((flow_field.n_findex, farm.n_turbines)) + thrust_coefficients = np.zeros((flow_field.n_findex, farm.n_turbines)) + axial_inductions = np.zeros((flow_field.n_findex, farm.n_turbines)) # Use sorted version for f in range(flow_field.n_findex): @@ -122,9 +132,9 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): windfarm = CurledWindfarm(**wf_init_kwargs) windfarm_sol = windfarm(layout, setpoints) - farm.turbine_powers[f] = np.array([r.Cp for r in windfarm_sol.rotors]) - farm.turbine_thrust_coefficients[f] = np.array([r.extra.Ct for r in windfarm_sol.rotors]) - farm.turbine_axial_inductions[f] = np.array([r.extra.an for r in windfarm_sol.rotors]) + powers[f] = np.array([r.Cp for r in windfarm_sol.rotors]) + thrust_coefficients[f] = np.array([r.extra.Ct for r in windfarm_sol.rotors]) + axial_inductions[f] = np.array([r.extra.an for r in windfarm_sol.rotors]) # Extract the wind speeds at the turbine locations relative_velocities = windfarm_sol.windfield.wsp( @@ -134,6 +144,8 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): # Assign to flow field flow_field.u_sorted[f] = relative_velocities + return powers, thrust_coefficients, axial_inductions + class RotorWrapper(Rotor): """ Wrapper for the FLORIS operation model to be used as a rotor model in MITWindfarm. From 5fddc5d206a762aed97947aed2a1fcb2f6ff4507 Mon Sep 17 00:00:00 2001 From: misi9170 Date: Wed, 29 Jul 2026 13:59:21 -0600 Subject: [PATCH 19/52] Cleanup, clarify comments and todo items --- ...rison.py => temp_01_initial_comparison.py} | 13 ++---- ...aw_and_tilt.py => temp_02_yaw_and_tilt.py} | 13 ++---- mitwindfarm/FlorisInterface.py | 44 ++++++++++--------- 3 files changed, 30 insertions(+), 40 deletions(-) rename examples/{x01_initial_comparison.py => temp_01_initial_comparison.py} (97%) rename examples/{x02_yaw_and_tilt.py => temp_02_yaw_and_tilt.py} (97%) diff --git a/examples/x01_initial_comparison.py b/examples/temp_01_initial_comparison.py similarity index 97% rename from examples/x01_initial_comparison.py rename to examples/temp_01_initial_comparison.py index c526bf7..a5950cc 100644 --- a/examples/x01_initial_comparison.py +++ b/examples/temp_01_initial_comparison.py @@ -1,20 +1,13 @@ +import matplotlib.pyplot as plt import numpy as np - from floris import FlorisModel, ParFlorisModel -from floris.layout_visualization import plot_turbine_rotors from floris.flow_visualization import visualize_cut_plane - -import matplotlib.pyplot as plt +from floris.layout_visualization import plot_turbine_rotors from MITRotor import IEA15MW -from mitwindfarm import ( - Plotting, - Layout, - PowerLaw, -) +from mitwindfarm import FlorisCurledWindfarm, Layout, Plotting, PowerLaw from mitwindfarm.Rotor import UnifiedAD_TI from mitwindfarm.windfarm import CurledWindfarm -from mitwindfarm import FlorisCurledWindfarm # Set up MITWindfarm solver and run standalone as a baseline diff --git a/examples/x02_yaw_and_tilt.py b/examples/temp_02_yaw_and_tilt.py similarity index 97% rename from examples/x02_yaw_and_tilt.py rename to examples/temp_02_yaw_and_tilt.py index 605ff6b..111ba99 100644 --- a/examples/x02_yaw_and_tilt.py +++ b/examples/temp_02_yaw_and_tilt.py @@ -1,20 +1,13 @@ +import matplotlib.pyplot as plt import numpy as np - from floris import FlorisModel -from floris.layout_visualization import plot_turbine_rotors from floris.flow_visualization import visualize_cut_plane - -import matplotlib.pyplot as plt +from floris.layout_visualization import plot_turbine_rotors from MITRotor import IEA15MW -from mitwindfarm import ( - Plotting, - Layout, - PowerLaw, -) +from mitwindfarm import FlorisCurledWindfarm, Layout, Plotting, PowerLaw from mitwindfarm.Rotor import UnifiedAD_TI from mitwindfarm.windfarm import CurledWindfarm -from mitwindfarm import FlorisCurledWindfarm # Set up MITWindfarm solver and run standalone as a baseline diff --git a/mitwindfarm/FlorisInterface.py b/mitwindfarm/FlorisInterface.py index 2d80014..4ad2a95 100644 --- a/mitwindfarm/FlorisInterface.py +++ b/mitwindfarm/FlorisInterface.py @@ -1,5 +1,4 @@ import copy -from dataclasses import dataclass import numpy as np from attrs import define, field @@ -7,10 +6,10 @@ compute_tilt_angles_for_floating_turbines from floris.core.turbine.turbine import select_multidim_condition from floris.core.wake_model import BaseWakeModel -from numpy.typing import ArrayLike -from scipy.interpolate import LinearNDInterpolator -from UnifiedMomentumModel.Utilities.Geometry import (calc_eff_yaw, - eff_yaw_inv_rotation) +from UnifiedMomentumModel.Utilities.Geometry import ( + calc_eff_yaw, + eff_yaw_inv_rotation +) from ._Layout import Layout from .Rotor import Rotor, RotorSolution @@ -86,7 +85,9 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): thrust_coefficients = np.zeros((flow_field.n_findex, farm.n_turbines)) axial_inductions = np.zeros((flow_field.n_findex, farm.n_turbines)) - # Use sorted version + # Loop over findices, and called CurledWindfarm solver for each findex. + # If CurledWindfarm is updated to handle multiple findices simultaneously, this loop can be + # removed. for f in range(flow_field.n_findex): rotor_model.update_freestream_windspeed(flow_field.wind_speeds[f]) @@ -108,7 +109,7 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): flow_field.wind_shear, flow_field.turbulence_intensities[f] ), - "TIamb": flow_field.turbulence_intensities[f], # Needed? not sure + "TIamb": flow_field.turbulence_intensities[f], "solver_kwargs": self.solver_kwargs, } yaw = farm.yaw_angles[f, :] @@ -183,13 +184,15 @@ def __init__(self, def set_multidim_condition(self, multidim_conditions, findex): """ - Select the power, thrust curves to evaluate. Only used if multidimensional turbines are used. + Select the power, thrust curves to evaluate. + Only used if multidimensional turbines are used. """ if self.multidimensional_turbine: pass else: raise ValueError( - "Attempting to set a multidimensional condition for a turbine that does not have a multidimensional power/thrust table." + "Attempting to set a multidimensional condition for a turbine that does not have a " + "multidimensional power/thrust table." ) # Get findex position, if necessary @@ -214,7 +217,7 @@ def __call__( ): """ Note that the value of Ctprime passed will be ignored, as Ctprime is computed - during the call. + during the call based on the evaluated thrust_coefficient """ Us = windfield.wsp(x, y, z) TIs = windfield.TI(x, y, z) @@ -238,7 +241,7 @@ def __call__( air_density=self.air_density, yaw_angles=yaw, tilt_angles=tilt, - power_setpoints=None, # Figure out how to raise warning if nondefault + power_setpoints=None, awc_modes=None, awc_amplitudes=None, tilt_interp=self.tilt_interp, @@ -255,7 +258,7 @@ def __call__( air_density=self.air_density, yaw_angles=yaw, tilt_angles=tilt, - power_setpoints=None, # Figure out how to raise warning if nondefault + power_setpoints=None, awc_modes=None, awc_amplitudes=None, tilt_interp=self.tilt_interp, @@ -271,7 +274,7 @@ def __call__( air_density=self.air_density, yaw_angles=yaw, tilt_angles=tilt, - power_setpoints=None, # Figure out how to raise warning if nondefault + power_setpoints=None, awc_modes=None, awc_amplitudes=None, tilt_interp=self.tilt_interp, @@ -286,15 +289,16 @@ def __call__( REWS = np.mean(Us) RETI = np.mean(TIs) - if True: # TODO: Change to a check for whether the near_wake_velocities are returned + if hasattr(self.operation_model, "near_wake_velocities"): + u4, v4, w4, x0 = self.operation_model.near_wake_velocities() + else: # TODO: add check that an appropriate model has been chosen (CosineLoss) Ct = Ct * np.cos(calc_eff_yaw(yaw_r, tilt_r)) # Add second cosine term, as not done in CosineLoss model u4, v4, w4, x0 = near_wake_velocities_standin(Ct, Us, yaw_r, tilt_r, self.rotor_diameter) - # Check: how do we pass x0 to the CurledWindfarm solver? - else: - u4, v4, w4, x0 = self.operation_model.near_wake_velocities() + + # Compute Ctprime based on axial induction, thrust coefficient, and effective yaw angle Ctprime = Ct / ((1 - a)**2 * np.cos(calc_eff_yaw(yaw_r, tilt_r))**2) class extra: @@ -306,13 +310,13 @@ def __init__(self, a, u4, Ct, REWS): self.Ct = Ct self.u4 = u4 / REWS - ### Still not sure how to pass in x0? + # TODO: Still not sure how to pass in x0? rotor_solution = RotorSolution( yaw=np.deg2rad(yaw), Cp=P, # Needed to save off power in main FlorisCurledWindfarm solve - Ct=Ct * REWS**2, # What is this? + Ct=Ct * REWS**2, Ctprime=Ctprime, - an=a * REWS, # Why multiply by REWS? + an=a * REWS, u4=u4, v4=v4, REWS=REWS, From 287385eb3d551d7ec06ce300741b7d495d65b7b9 Mon Sep 17 00:00:00 2001 From: misi9170 Date: Wed, 29 Jul 2026 16:29:52 -0600 Subject: [PATCH 20/52] Check and fix multidim turbine, floating turbine correction, update comments --- examples/temp_03_multidim_floating.py | 102 ++++++++++++++++++++++++++ mitwindfarm/FlorisInterface.py | 55 ++++++++++---- 2 files changed, 141 insertions(+), 16 deletions(-) create mode 100644 examples/temp_03_multidim_floating.py diff --git a/examples/temp_03_multidim_floating.py b/examples/temp_03_multidim_floating.py new file mode 100644 index 0000000..2562a26 --- /dev/null +++ b/examples/temp_03_multidim_floating.py @@ -0,0 +1,102 @@ +import matplotlib.pyplot as plt +import numpy as np +from floris import FlorisModel, ParFlorisModel +from floris.flow_visualization import visualize_cut_plane +from floris.layout_visualization import plot_turbine_rotors +from MITRotor import IEA15MW + +from mitwindfarm import FlorisCurledWindfarm, Layout, Plotting, PowerLaw +from mitwindfarm.Rotor import UnifiedAD_TI +from mitwindfarm.windfarm import CurledWindfarm + +# Set up MITWindfarm solver and run standalone as a baseline + +if __name__ == "__main__": + + cmap_floris = "pink" + use_parallel_model = False + tilt_rotor_in_wake_model = True + + # (Ct-prime, yaw, tilt) + setpoints = [ + (2, 0, 0), + (2, 0, 0), + (2, 0, 0), + ] + + D = 242.24 + H = 150.0 + wind_shear = 0.0 + TI = 0.06 + U = 8.0 + layout = Layout([0, 12 / 2, 24 / 2], [0, 0, 0], [0, 0, 0]) + + solver_kwargs = dict( + dy=1 / 10, + dz=1 / 10, + integrator="scipy_rk23", # see mitwindfarm.utils.integrate + k_model="k-l", # alternatives: "const", "2021" + verbose=False, + ) + + # Establish Floris model + if use_parallel_model: + fmodel = ParFlorisModel("defaults") + else: + fmodel = FlorisModel("defaults") + + multidim_conditions = { + "Tp": np.array([2.5]*2), + "Hs": np.array([4.1, 1.0]), + } + fmodel.set( + layout_x=layout.x * D, + layout_y=layout.y * D, + wind_speeds=[U, U], + wind_directions=[270.0, 270.0], + turbulence_intensities=[TI, TI], + turbine_type=["iea_15MW_floating_multi_dim_cp_ct"]*len(layout.x), + reference_wind_height=H, # IEA 15MW hub height + wind_shear=wind_shear, + multidim_conditions=multidim_conditions + ) + # Assign MITWindfarm wake model + fmodel.set_wake_model(FlorisCurledWindfarm( + solver_kwargs=solver_kwargs, + use_floris_tilt=tilt_rotor_in_wake_model + )) + # Run FLORIS using MITWindfarm wake model/solver, get turbine powers + fmodel.run() + powers = fmodel.get_turbine_powers() + + # Extracting and plotting FLORIS results + fig, axes_floris = plt.subplots(1) + horizontal_plane = fmodel.calculate_horizontal_plane( + x_resolution=200, + y_resolution=100, + height=H, + findex_for_viz=0, + ) + plot_turbine_rotors(fmodel, ax=axes_floris) + visualize_cut_plane( + horizontal_plane, + ax=axes_floris, + cmap=cmap_floris, + clevels=100, + levels=[], + ) + + # Sample at specific points + samples_x = np.array([1000, 1000, 2000, 2000]) + samples_y = np.array([0, 100, 0, 100]) + samples_z = np.array([H, H, H, H]) + + axes_floris.scatter(samples_x, samples_y, color="k", marker=".") + fig.suptitle("Called via FLORIS") + + floris_vels = fmodel.sample_flow_at_points(samples_x, samples_y, samples_z) + + print("\nFLORIS sampled velocities:") + print(floris_vels) + + plt.show() diff --git a/mitwindfarm/FlorisInterface.py b/mitwindfarm/FlorisInterface.py index 4ad2a95..d1a7a82 100644 --- a/mitwindfarm/FlorisInterface.py +++ b/mitwindfarm/FlorisInterface.py @@ -5,6 +5,7 @@ from floris.core.rotor_velocity import \ compute_tilt_angles_for_floating_turbines from floris.core.turbine.turbine import select_multidim_condition +from floris.core.turbine import SimpleTurbine, CosineLossTurbine from floris.core.wake_model import BaseWakeModel from UnifiedMomentumModel.Utilities.Geometry import ( calc_eff_yaw, @@ -116,16 +117,9 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): if not self.use_floris_tilt: tilt = 0.0 * np.ones_like(yaw) - elif farm.turbines[0].correct_cp_ct_for_tilt: - # Evaluate the tilt angle for the current inflow velocity (floating) - # TODO: check this works as expected. - tilt = compute_tilt_angles_for_floating_turbines( - tilt_angles=farm.turbines[0].ref_tilt, - tilt_interp=farm.turbines[0].tilt_interp, - rotor_effective_velocities=flow_field.wind_speeds[f] - ) else: tilt = farm.turbines[0].ref_tilt * np.ones_like(yaw) + # tilt correction to be applied in rotor solve, if applicable setpoints = list(zip(np.nan * np.ones_like(yaw), yaw, tilt)) @@ -194,15 +188,17 @@ def set_multidim_condition(self, multidim_conditions, findex): "Attempting to set a multidimensional condition for a turbine that does not have a " "multidimensional power/thrust table." ) - + + md_cond_f = copy.deepcopy(multidim_conditions) + # Get findex position, if necessary for k, v in multidim_conditions.items(): if isinstance(v, (list, np.ndarray)): - multidim_conditions[k] = v[findex] + md_cond_f[k] = v[findex] # Handle multidimensional turbine conditions. self.multidim_condition = tuple(select_multidim_condition( - multidim_conditions, + md_cond_f, [k for k in self._power_thrust_table_md.keys() if k != "condition_keys"], self._power_thrust_table_md["condition_keys"], 1 @@ -229,6 +225,12 @@ def __call__( ) yaw_r = np.deg2rad(yaw) + if self.correct_cp_ct_for_tilt: + tilt = compute_tilt_angles_for_floating_turbines( + tilt_angles=tilt, + tilt_interp=self.tilt_interp, + rotor_effective_velocities=Us * self.Uref, + ) tilt_r = np.deg2rad(tilt) @@ -291,12 +293,33 @@ def __call__( RETI = np.mean(TIs) if hasattr(self.operation_model, "near_wake_velocities"): u4, v4, w4, x0 = self.operation_model.near_wake_velocities() - else: - # TODO: add check that an appropriate model has been chosen (CosineLoss) - Ct = Ct * np.cos(calc_eff_yaw(yaw_r, tilt_r)) # Add second cosine term, as not done in CosineLoss model + elif isinstance(self.operation_model, CosineLossTurbine): + # Note that in this case, the value for axial induction a returned by + # CosineLossTurbine.axial_induction is _not_ consistent with the UMM, + # which means that the value of Ctprime computed below is also not consistent + # with the UMM. + + # Add second cosine term, as not done in CosineLoss model + Ct = Ct * np.cos(calc_eff_yaw(yaw_r, tilt_r)) - u4, v4, w4, x0 = near_wake_velocities_standin(Ct, Us, yaw_r, tilt_r, self.rotor_diameter) - # Check: how do we pass x0 to the CurledWindfarm solver? + u4, v4, w4, x0 = near_wake_velocities_standin( + Ct, Us, yaw_r, tilt_r, self.rotor_diameter + ) + elif isinstance(self.operation_model, SimpleTurbine): + if yaw_r != 0 or tilt_r != 0: + raise NotImplementedError( + "The SimpleTurbine operation model does not support yaw or tilt. " + "Cannot compute near wake velocities. Consider using CosineLossTurbine instead." + ) + + u4, v4, w4, x0 = near_wake_velocities_standin( + Ct, Us, yaw_r, tilt_r, self.rotor_diameter + ) + else: + raise NotImplementedError( + "The operation model does not have a near_wake_velocities method, and is not a" \ + "SimpleTurbine or CosineLossTurbine. Cannot compute near wake velocities." + ) # Compute Ctprime based on axial induction, thrust coefficient, and effective yaw angle Ctprime = Ct / ((1 - a)**2 * np.cos(calc_eff_yaw(yaw_r, tilt_r))**2) From a657db06c06519c4db7f965e74c699c51c07b6ff Mon Sep 17 00:00:00 2001 From: misi9170 Date: Mon, 3 Aug 2026 12:27:45 -0600 Subject: [PATCH 21/52] beta -> beta_s following https://github.com/Howland-Lab/Unified-Momentum-Model/pull/7 --- mitwindfarm/Rotor.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mitwindfarm/Rotor.py b/mitwindfarm/Rotor.py index bdd3356..16891ff 100644 --- a/mitwindfarm/Rotor.py +++ b/mitwindfarm/Rotor.py @@ -479,7 +479,7 @@ def post_process(self, result, Ctprime, yaw = 0, tilt = 0, TI = 0, **kwargs): / 4 * (1 + u4) * np.sqrt((1 - a) * np.cos(self.eff_yaw) / (1 + u4)) - / (self.beta * np.abs(1 - u4) / 2 + self.alpha * TI) + / (self.beta_s * np.abs(1 - u4) / 2 + self.alpha * TI) ) # re-compute x0 with TI influence decoupled result.x = (a, u4, v4, x0, dp) return super().post_process(result, Ctprime, yaw = yaw, tilt = tilt, **kwargs) @@ -514,7 +514,7 @@ def residual( / 4 * (1 + u4) * np.sqrt((1 - an) * np.cos(self.eff_yaw) / (1 + u4)) - / (self.beta * np.abs(1 - u4) / 2 + self.alpha * TI) + / (self.beta_s * np.abs(1 - u4) / 2 + self.alpha * TI) ) - x0 # Eq. 1 - Rotor-normal induction in residual form. From e518fffc71336ede05016532bd9b88a1371d2638 Mon Sep 17 00:00:00 2001 From: misi9170 Date: Mon, 3 Aug 2026 12:49:49 -0600 Subject: [PATCH 22/52] Updates and bugfixes for full rotor integration --- mitwindfarm/FlorisInterface.py | 85 ++++++++++++++++++++-------------- 1 file changed, 50 insertions(+), 35 deletions(-) diff --git a/mitwindfarm/FlorisInterface.py b/mitwindfarm/FlorisInterface.py index d1a7a82..57a3d9b 100644 --- a/mitwindfarm/FlorisInterface.py +++ b/mitwindfarm/FlorisInterface.py @@ -28,9 +28,9 @@ class FlorisCurledWindfarm(BaseWakeModel): A power law background wind field is assumed, and the FLORIS flow field is used to set the wind speed and turbulence intensity at the reference height. Further, """ - # Parameters (to fill in) - solver_kwargs = field(default=None) - use_floris_tilt = field(default=True, init=True) + + solver_kwargs: dict = field(default=None) + use_floris_tilt: bool = field(default=True, init=True) def turbine_solve(self, farm, flow_field, grid): self._check_valid_turbine_types(farm) @@ -127,7 +127,7 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): windfarm = CurledWindfarm(**wf_init_kwargs) windfarm_sol = windfarm(layout, setpoints) - powers[f] = np.array([r.Cp for r in windfarm_sol.rotors]) + powers[f] = np.array([r.extra.power for r in windfarm_sol.rotors]) thrust_coefficients[f] = np.array([r.extra.Ct for r in windfarm_sol.rotors]) axial_inductions[f] = np.array([r.extra.an for r in windfarm_sol.rotors]) @@ -235,14 +235,13 @@ def __call__( # Now, should be able to evaluate the FLORIS operation model (thrust coefficient)? - # TODO: Check that "both" cosine terms are included in SG's model Ct = self.operation_model.thrust_coefficient( power_thrust_table=self.power_thrust_table, - velocities=Us * self.Uref, - turbulence_intensities=TIs, + velocities=np.array([[Us]]) * self.Uref, + turbulence_intensities=np.array([[TIs]]), air_density=self.air_density, - yaw_angles=yaw, - tilt_angles=tilt, + yaw_angles=np.array([[yaw]]), + tilt_angles=np.array([[tilt]]), power_setpoints=None, awc_modes=None, awc_amplitudes=None, @@ -252,14 +251,13 @@ def __call__( correct_cp_ct_for_tilt=self.correct_cp_ct_for_tilt, ) - # TODO: Check: Does SG model return a_n here? Do we need it? a = self.operation_model.axial_induction( power_thrust_table=self.power_thrust_table, - velocities=Us * self.Uref, - turbulence_intensities=TIs, + velocities=np.array([[Us]]) * self.Uref, + turbulence_intensities=np.array([[TIs]]), air_density=self.air_density, - yaw_angles=yaw, - tilt_angles=tilt, + yaw_angles=np.array([[yaw]]), + tilt_angles=np.array([[tilt]]), power_setpoints=None, awc_modes=None, awc_amplitudes=None, @@ -271,11 +269,11 @@ def __call__( P = self.operation_model.power( power_thrust_table=self.power_thrust_table, - velocities=Us * self.Uref, - turbulence_intensities=TIs, + velocities=np.array([[Us]]) * self.Uref, + turbulence_intensities=np.array([[TIs]]), air_density=self.air_density, - yaw_angles=yaw, - tilt_angles=tilt, + yaw_angles=np.array([[yaw]]), + tilt_angles=np.array([[tilt]]), power_setpoints=None, awc_modes=None, awc_amplitudes=None, @@ -292,7 +290,21 @@ def __call__( REWS = np.mean(Us) RETI = np.mean(TIs) if hasattr(self.operation_model, "near_wake_velocities"): - u4, v4, w4, x0 = self.operation_model.near_wake_velocities() + u4, v4, w4, x0 = self.operation_model.near_wake_velocities( + power_thrust_table=self.power_thrust_table, + velocities=np.array([[Us]]) * self.Uref, + turbulence_intensities=np.array([[TIs]]), + air_density=self.air_density, + yaw_angles=np.array([[yaw]]), + tilt_angles=np.array([[tilt]]), + power_setpoints=None, + awc_modes=None, + awc_amplitudes=None, + tilt_interp=self.tilt_interp, + average_method=self.average_method, + cubature_weights=self.cubature_weights, + correct_cp_ct_for_tilt=self.correct_cp_ct_for_tilt, + ) elif isinstance(self.operation_model, CosineLossTurbine): # Note that in this case, the value for axial induction a returned by # CosineLossTurbine.axial_induction is _not_ consistent with the UMM, @@ -303,7 +315,7 @@ def __call__( Ct = Ct * np.cos(calc_eff_yaw(yaw_r, tilt_r)) u4, v4, w4, x0 = near_wake_velocities_standin( - Ct, Us, yaw_r, tilt_r, self.rotor_diameter + Ct, Us, yaw_r, tilt_r ) elif isinstance(self.operation_model, SimpleTurbine): if yaw_r != 0 or tilt_r != 0: @@ -313,7 +325,7 @@ def __call__( ) u4, v4, w4, x0 = near_wake_velocities_standin( - Ct, Us, yaw_r, tilt_r, self.rotor_diameter + Ct, Us, 0.0, 0.0 ) else: raise NotImplementedError( @@ -327,30 +339,33 @@ def __call__( class extra: """ Small class to return normalized values for axial induction and u4. + Also used to store turbine power so that it can be passed back to FLORIS. """ - def __init__(self, a, u4, Ct, REWS): + def __init__(self, a, u4, Ct, x0, REWS, power): self.an = a self.Ct = Ct self.u4 = u4 / REWS + self.x0 = x0 + self.power = power - # TODO: Still not sure how to pass in x0? + x0 = np.array([[0.7]]) rotor_solution = RotorSolution( yaw=np.deg2rad(yaw), - Cp=P, # Needed to save off power in main FlorisCurledWindfarm solve - Ct=Ct * REWS**2, - Ctprime=Ctprime, - an=a * REWS, - u4=u4, - v4=v4, + Cp=None, # Not computed by FLORIS rotor models + Ct=Ct[0,0] * REWS**2, + Ctprime=Ctprime[0,0], + an=a[0,0] * REWS, + u4=u4[0,0] * REWS, + v4=v4[0,0] * REWS, REWS=REWS, tilt=np.deg2rad(tilt) if self.use_floris_tilt else 0.0, - w4=w4, + w4=w4[0,0] * REWS, TI=RETI, - extra=extra(a, u4, Ct, REWS) + extra=extra(a[0,0], u4[0,0], Ct[0,0], x0[0,0], REWS, P[0,0]) ) return rotor_solution -def near_wake_velocities_standin(Ct, Us, yaw_r, tilt_r, D): +def near_wake_velocities_standin(Ct, Us, yaw_r, tilt_r): yaw_r_eff = calc_eff_yaw(yaw_r, tilt_r) @@ -362,9 +377,9 @@ def near_wake_velocities_standin(Ct, Us, yaw_r, tilt_r, D): a = 1 + 0.5 * (Ct * Us)/(u4 - Us) beta = 0.1403 - x0 = (D - * np.cos(yaw_r_eff) / (2*beta) - * (Us - u4) / np.abs(Us - u4) + x0 = ( + np.cos(yaw_r_eff) / (2*beta) + * (Us + u4) / np.abs(Us - u4) * np.sqrt(((1 - a) * np.cos(yaw_r_eff) * Us)/(Us + u4)) ) From 28ad0f3851feb3beb6bef89492ba9c1422cd9281 Mon Sep 17 00:00:00 2001 From: misi9170 Date: Mon, 3 Aug 2026 12:52:09 -0600 Subject: [PATCH 23/52] Committing changes to call with MITRotor model --- examples/temp_01_initial_comparison.py | 30 +++++++++++++++++++------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/examples/temp_01_initial_comparison.py b/examples/temp_01_initial_comparison.py index a5950cc..293ea39 100644 --- a/examples/temp_01_initial_comparison.py +++ b/examples/temp_01_initial_comparison.py @@ -3,7 +3,7 @@ from floris import FlorisModel, ParFlorisModel from floris.flow_visualization import visualize_cut_plane from floris.layout_visualization import plot_turbine_rotors -from MITRotor import IEA15MW +from MITRotor.FlorisInterface.FlorisInterface import MITRotorTurbine from mitwindfarm import FlorisCurledWindfarm, Layout, Plotting, PowerLaw from mitwindfarm.Rotor import UnifiedAD_TI @@ -21,16 +21,16 @@ # (Ct-prime, yaw, tilt) setpoints = [ - (2, 0, 0), - (2, 0, 0), - (2, 0, 0), + (1.5, 0, 0.1047), + (1.5, 0, 0.1047), + (1.5, 0, 0.1047), ] D = 242.24 H = 150.0 wind_shear = 0.0 TI = 0.06 - U = 8.0 + U = 10.0 layout = Layout([0, 12 / 2, 24 / 2], [0, 0, 0], [0, 0, 0]) solver_kwargs = dict( @@ -43,7 +43,7 @@ windfarm = CurledWindfarm( rotor_model=UnifiedAD_TI(), - base_windfield=PowerLaw(Uref=1.0, zref=H, exp=wind_shear, TIamb=TI), + base_windfield=PowerLaw(Uref=1.0, zref=H/D, exp=wind_shear, TIamb=TI), solver_kwargs=solver_kwargs, TIamb=TI, ) @@ -76,9 +76,15 @@ solver_kwargs=solver_kwargs, use_floris_tilt=tilt_rotor_in_wake_model )) + + # Assign MITRotor rotor model + fmodel.set_operation_model(MITRotorTurbine()) + # Run FLORIS using MITWindfarm wake model/solver, get turbine powers fmodel.run() powers = fmodel.get_turbine_powers() + print(powers) + # Extracting and plotting FLORIS results fig, axes_floris = plt.subplots(2) @@ -95,6 +101,9 @@ cmap=cmap_floris, clevels=100, levels=[], + color_bar=True, + min_speed=0, + max_speed=10, ) horizontal_plane = fmodel.calculate_horizontal_plane( x_resolution=200, @@ -109,6 +118,9 @@ cmap=cmap_floris, clevels=100, levels=[], + color_bar=True, + min_speed=0, + max_speed=10, ) # Sample at specific points @@ -119,6 +131,10 @@ axes_floris[0].scatter(samples_x, samples_y, color="k", marker=".") axes_floris[1].scatter(samples_x, samples_y, color="k", marker=".") axes_windfarm[0].scatter(samples_x/D, samples_y/D, color="k", marker=".") + + for i, (x, y) in enumerate(zip(samples_x, samples_y)): + axes_floris[0].annotate(f"{i}", (x, y), textcoords="offset points", xytext=(0, 10), ha="center") + axes_windfarm[0].annotate(f"{i}", (x/D, y/D), textcoords="offset points", xytext=(0, 10), ha="center") fig.suptitle("Called via FLORIS") floris_vels = fmodel.sample_flow_at_points(samples_x, samples_y, samples_z) @@ -150,7 +166,5 @@ print("\nRelative velocity differences (MITWindfarm - FLORIS) %:") print((windfarm_v_rel * U - floris_vels) / (windfarm_v_rel * U) * 100) - print(powers / 1e6) - # Generate plots plt.show() From 27452e2065ace7c570845b850ca7a1909d771aaa Mon Sep 17 00:00:00 2001 From: misi9170 Date: Mon, 3 Aug 2026 13:15:21 -0600 Subject: [PATCH 24/52] Update pyproject.toml, documentation, remove forced x0 value --- mitwindfarm/FlorisInterface.py | 5 +++-- pyproject.toml | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/mitwindfarm/FlorisInterface.py b/mitwindfarm/FlorisInterface.py index 57a3d9b..ae5243b 100644 --- a/mitwindfarm/FlorisInterface.py +++ b/mitwindfarm/FlorisInterface.py @@ -26,7 +26,9 @@ class FlorisCurledWindfarm(BaseWakeModel): turbine operation models). A power law background wind field is assumed, and the FLORIS flow field is used to set the wind - speed and turbulence intensity at the reference height. Further, + speed and turbulence intensity at the reference height. Further, all turbines in the farm are + assumed to be of the same type and heterogeneous inflows are not supported (errors are raised + if these conditions are not met). """ solver_kwargs: dict = field(default=None) @@ -348,7 +350,6 @@ def __init__(self, a, u4, Ct, x0, REWS, power): self.x0 = x0 self.power = power - x0 = np.array([[0.7]]) rotor_solution = RotorSolution( yaw=np.deg2rad(yaw), Cp=None, # Not computed by FLORIS rotor models diff --git a/pyproject.toml b/pyproject.toml index db9193f..1511be3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,9 +9,9 @@ readme = "README.md" python = "^3.9" numpy = "^2.1.1" scipy = ">=1.6" -mitrotor = { git = "https://github.com/Howland-Lab/MITRotor.git"} +mitrotor = { git = "https://github.com/Howland-Lab/MITRotor.git", branch = "sg/floris_interface"} unified-momentum-model = { git = "https://github.com/Howland-Lab/Unified-Momentum-Model.git"} -floris = {git = "https://github.com/misi9170/floris.git", branch = "ehmt/solvers"} +floris = { git = "https://github.com/NatLabRockies/floris.git", branch = "dev/v5-beta"} # [tool.poetry.group.dev.dependencies] ipython = { version = "^8", optional = true} From 205311a77410db848f9669f9330e85dd11967227 Mon Sep 17 00:00:00 2001 From: misi9170 Date: Mon, 3 Aug 2026 22:33:19 -0600 Subject: [PATCH 25/52] Optionally include alpha * TI term in x0 calculation --- examples/temp_01_initial_comparison.py | 6 ++++-- mitwindfarm/FlorisInterface.py | 19 ++++++++++++------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/examples/temp_01_initial_comparison.py b/examples/temp_01_initial_comparison.py index 293ea39..e6eb38f 100644 --- a/examples/temp_01_initial_comparison.py +++ b/examples/temp_01_initial_comparison.py @@ -16,6 +16,7 @@ cmap_floris = "pink" use_parallel_model = False tilt_rotor_in_wake_model = True + add_alpha_TI_term_to_x0_calc = False rotation_angle = -5 @@ -74,11 +75,12 @@ # Assign MITWindfarm wake model fmodel.set_wake_model(FlorisCurledWindfarm( solver_kwargs=solver_kwargs, - use_floris_tilt=tilt_rotor_in_wake_model + use_floris_tilt=tilt_rotor_in_wake_model, + use_TI_term=add_alpha_TI_term_to_x0_calc, )) # Assign MITRotor rotor model - fmodel.set_operation_model(MITRotorTurbine()) + #fmodel.set_operation_model(MITRotorTurbine()) # Run FLORIS using MITWindfarm wake model/solver, get turbine powers fmodel.run() diff --git a/mitwindfarm/FlorisInterface.py b/mitwindfarm/FlorisInterface.py index ae5243b..817d977 100644 --- a/mitwindfarm/FlorisInterface.py +++ b/mitwindfarm/FlorisInterface.py @@ -33,6 +33,7 @@ class FlorisCurledWindfarm(BaseWakeModel): solver_kwargs: dict = field(default=None) use_floris_tilt: bool = field(default=True, init=True) + use_TI_term: bool = field(default=False, init=True) def turbine_solve(self, farm, flow_field, grid): self._check_valid_turbine_types(farm) @@ -79,7 +80,8 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): average_method=turbine_grid.average_method, cubature_weights=grid.cubature_weights, correct_cp_ct_for_tilt=farm.turbines[0].correct_cp_ct_for_tilt, - use_floris_tilt=self.use_floris_tilt + use_floris_tilt=self.use_floris_tilt, + use_TI_term=self.use_TI_term, ) # Create variables to store turbine outputs, and assign to farm at @@ -159,7 +161,8 @@ def __init__(self, average_method = "cubic-mean", cubature_weights = None, correct_cp_ct_for_tilt = True, - use_floris_tilt = True + use_floris_tilt = True, + use_TI_term = False, ): self.operation_model = operation_model self.power_thrust_table = power_thrust_table @@ -170,6 +173,7 @@ def __init__(self, self.cubature_weights = cubature_weights self.correct_cp_ct_for_tilt = correct_cp_ct_for_tilt self.use_floris_tilt = use_floris_tilt + self.use_TI_term = use_TI_term if "condition_keys" in power_thrust_table: self._power_thrust_table_md = copy.deepcopy(power_thrust_table) @@ -317,7 +321,7 @@ def __call__( Ct = Ct * np.cos(calc_eff_yaw(yaw_r, tilt_r)) u4, v4, w4, x0 = near_wake_velocities_standin( - Ct, Us, yaw_r, tilt_r + Ct, Us, yaw_r, tilt_r, TI=TIs if self.use_TI_term else None ) elif isinstance(self.operation_model, SimpleTurbine): if yaw_r != 0 or tilt_r != 0: @@ -327,7 +331,7 @@ def __call__( ) u4, v4, w4, x0 = near_wake_velocities_standin( - Ct, Us, 0.0, 0.0 + Ct, Us, 0.0, 0.0, TI=TIs if self.use_TI_term else None ) else: raise NotImplementedError( @@ -366,7 +370,7 @@ def __init__(self, a, u4, Ct, x0, REWS, power): ) return rotor_solution -def near_wake_velocities_standin(Ct, Us, yaw_r, tilt_r): +def near_wake_velocities_standin(Ct, Us, yaw_r, tilt_r, TI=None): yaw_r_eff = calc_eff_yaw(yaw_r, tilt_r) @@ -378,9 +382,10 @@ def near_wake_velocities_standin(Ct, Us, yaw_r, tilt_r): a = 1 + 0.5 * (Ct * Us)/(u4 - Us) beta = 0.1403 + alpha = 2.32 # If this term isn't to be used, pass TI = None x0 = ( - np.cos(yaw_r_eff) / (2*beta) - * (Us + u4) / np.abs(Us - u4) + (np.cos(yaw_r_eff) * (Us + u4)) / + ((2*beta) * np.abs(Us - u4) + 4 * alpha * (TI if TI is not None else 0.0)) * np.sqrt(((1 - a) * np.cos(yaw_r_eff) * Us)/(Us + u4)) ) From e7d8dcb4ecea0b42d10978eda11b32138b7a459f Mon Sep 17 00:00:00 2001 From: misi9170 Date: Tue, 4 Aug 2026 15:15:16 -0600 Subject: [PATCH 26/52] Add rotor averaging, tests --- mitwindfarm/FlorisInterface.py | 47 ++++++---- tests/test_floris_interface.py | 152 +++++++++++++++++++++++++++++++++ 2 files changed, 182 insertions(+), 17 deletions(-) create mode 100644 tests/test_floris_interface.py diff --git a/mitwindfarm/FlorisInterface.py b/mitwindfarm/FlorisInterface.py index 817d977..08991d0 100644 --- a/mitwindfarm/FlorisInterface.py +++ b/mitwindfarm/FlorisInterface.py @@ -56,13 +56,13 @@ def point_solve(self, farm, flow_field, grid): def _check_valid_turbine_types(self, farm): # Require all turbines to be the same type - if not np.all(t == farm.turbines[0] for t in farm.turbines): + if not np.all([t == farm.turbines[0] for t in farm.turbines]): raise NotImplementedError( "Varying turbine models not supported in FlorisCurledWindfarm" ) def _check_valid_flow_field(self, flow_field): - if flow_field.het_map or flow_field.heterogeneous_inflow_config: + if flow_field.het_map is not None or flow_field.heterogeneous_inflow_config is not None: raise NotImplementedError( "Heterogeneous inflows are not supported in FlorisCurledWindfarm." ) @@ -75,6 +75,11 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): operation_model=farm.turbines[0].operation_model, power_thrust_table=farm.turbines[0].power_thrust_table, rotor_diameter=D, + rotor_points=( + turbine_grid.x_sorted[0,0], + turbine_grid.y_sorted[0,0], + turbine_grid.z_sorted[0,0] + ), air_density=flow_field.air_density, tilt_interp=farm.turbines[0].tilt_interp, average_method=turbine_grid.average_method, @@ -156,6 +161,7 @@ def __init__(self, operation_model, power_thrust_table, rotor_diameter, + rotor_points, air_density = 1.225, tilt_interp = None, average_method = "cubic-mean", @@ -175,6 +181,11 @@ def __init__(self, self.use_floris_tilt = use_floris_tilt self.use_TI_term = use_TI_term + # Unpack and nondimensionalize the rotor points + self.rotor_x = (rotor_points[0] - rotor_points[0].mean()) / rotor_diameter + self.rotor_y = (rotor_points[1] - rotor_points[1].mean()) / rotor_diameter + self.rotor_z = (rotor_points[2] - rotor_points[2].mean()) / rotor_diameter + if "condition_keys" in power_thrust_table: self._power_thrust_table_md = copy.deepcopy(power_thrust_table) self.multidimensional_turbine = True @@ -221,7 +232,8 @@ def __call__( Note that the value of Ctprime passed will be ignored, as Ctprime is computed during the call based on the evaluated thrust_coefficient """ - Us = windfield.wsp(x, y, z) + Us_grid = windfield.wsp(x + self.rotor_x, y + self.rotor_y, z + self.rotor_z) + Us = Us_grid.mean() TIs = windfield.TI(x, y, z) if self.multidimensional_turbine and self.multidim_condition is None: @@ -230,6 +242,8 @@ def __call__( "but multidimensional condition has not been set." ) + # Could query the wind speed at the rotor points, rather than just the hub height + yaw_r = np.deg2rad(yaw) if self.correct_cp_ct_for_tilt: tilt = compute_tilt_angles_for_floating_turbines( @@ -243,7 +257,7 @@ def __call__( # Now, should be able to evaluate the FLORIS operation model (thrust coefficient)? Ct = self.operation_model.thrust_coefficient( power_thrust_table=self.power_thrust_table, - velocities=np.array([[Us]]) * self.Uref, + velocities=(Us_grid * self.Uref)[None, None, :, :], turbulence_intensities=np.array([[TIs]]), air_density=self.air_density, yaw_angles=np.array([[yaw]]), @@ -259,7 +273,7 @@ def __call__( a = self.operation_model.axial_induction( power_thrust_table=self.power_thrust_table, - velocities=np.array([[Us]]) * self.Uref, + velocities=(Us_grid * self.Uref)[None, None, :, :], turbulence_intensities=np.array([[TIs]]), air_density=self.air_density, yaw_angles=np.array([[yaw]]), @@ -275,7 +289,7 @@ def __call__( P = self.operation_model.power( power_thrust_table=self.power_thrust_table, - velocities=np.array([[Us]]) * self.Uref, + velocities=(Us_grid * self.Uref)[None, None, :, :], turbulence_intensities=np.array([[TIs]]), air_density=self.air_density, yaw_angles=np.array([[yaw]]), @@ -293,12 +307,10 @@ def __call__( if self.correct_cp_ct_for_tilt and self.tilt_interp is not None: tilt = self.tilt_interp(Us) - REWS = np.mean(Us) - RETI = np.mean(TIs) if hasattr(self.operation_model, "near_wake_velocities"): u4, v4, w4, x0 = self.operation_model.near_wake_velocities( power_thrust_table=self.power_thrust_table, - velocities=np.array([[Us]]) * self.Uref, + velocities=(Us_grid * self.Uref)[None, None, :, :], turbulence_intensities=np.array([[TIs]]), air_density=self.air_density, yaw_angles=np.array([[yaw]]), @@ -354,19 +366,20 @@ def __init__(self, a, u4, Ct, x0, REWS, power): self.x0 = x0 self.power = power + # Remove null numpy dimensions and return floats as RotorSolution rotor_solution = RotorSolution( yaw=np.deg2rad(yaw), Cp=None, # Not computed by FLORIS rotor models - Ct=Ct[0,0] * REWS**2, + Ct=Ct[0,0] * Us**2, Ctprime=Ctprime[0,0], - an=a[0,0] * REWS, - u4=u4[0,0] * REWS, - v4=v4[0,0] * REWS, - REWS=REWS, + an=a[0,0] * Us, + u4=u4[0,0] * Us, + v4=v4[0,0] * Us, + REWS=Us, tilt=np.deg2rad(tilt) if self.use_floris_tilt else 0.0, - w4=w4[0,0] * REWS, - TI=RETI, - extra=extra(a[0,0], u4[0,0], Ct[0,0], x0[0,0], REWS, P[0,0]) + w4=w4[0,0] * Us, + TI=TIs, + extra=extra(a[0,0], u4[0,0], Ct[0,0], x0[0,0], Us, P[0,0]) ) return rotor_solution diff --git a/tests/test_floris_interface.py b/tests/test_floris_interface.py new file mode 100644 index 0000000..0970388 --- /dev/null +++ b/tests/test_floris_interface.py @@ -0,0 +1,152 @@ +import numpy as np + +from floris import FlorisModel + +from mitwindfarm import FlorisCurledWindfarm +import pytest + +LAYOUT_X = [0.0, 1200.0, 2400.0] +LAYOUT_Y = [0.0, 0.0, 0.0] +WIND_SPEEDS = [9.0, 9.0] +WIND_DIRECTIONS = [270.0, 180.0] +TURBULENCE_INTENSITIES = [0.06, 0.06] + +def _setup_basic_floris_model(): + fmodel = FlorisModel("defaults") + fmodel.set( + layout_x=LAYOUT_X, + layout_y=LAYOUT_Y, + wind_speeds=WIND_SPEEDS, + wind_directions=WIND_DIRECTIONS, + turbulence_intensities=TURBULENCE_INTENSITIES, + turbine_type=["iea_15MW"] * len(LAYOUT_X), + ) + return fmodel + +def test_set_wake_model(): + fmodel = _setup_basic_floris_model() + fmodel.run() + powers_base = fmodel.get_turbine_powers() + + fmodel.set_wake_model(FlorisCurledWindfarm()) + fmodel.run() + powers_test = fmodel.get_turbine_powers() + + # Confirm shapes match, freestream powers match, powers in wake differ + assert powers_base.shape == powers_test.shape + assert np.isclose(powers_base[0, 0], powers_test[0, 0]) + assert not np.any(np.isclose(powers_base[0,1:], powers_test[0,1:])) + assert np.allclose(powers_test[1,0], powers_test[1,1:]) # All turbines unwaked + +def test_above_rated(): + fmodel = _setup_basic_floris_model() + fmodel.set_wake_model(FlorisCurledWindfarm()) + fmodel.run() + powers_below_rated = fmodel.get_turbine_powers() + + # Increase wind speed to above rated + fmodel.set( + wind_speeds=[15.0, 15.0], + ) + fmodel.run() + powers_above_rated = fmodel.get_turbine_powers() + + # Confirm shapes match, freestream powers match, powers in wake differ + assert powers_below_rated.shape == powers_above_rated.shape + assert np.all(powers_above_rated > powers_below_rated) + assert not np.allclose(powers_below_rated[0,:], powers_above_rated[0,:]) + +def test_yawed(): + fmodel = _setup_basic_floris_model() + fmodel.set_wake_model(FlorisCurledWindfarm()) + fmodel.run() + powers_no_yaw = fmodel.get_turbine_powers() + + # Increase wind speed to above rated + fmodel.set( + yaw_angles=[[30.0, 30.0, 0.0], [30.0, 20.0, 0.0]], + ) + fmodel.run() + powers_with_yaw = fmodel.get_turbine_powers() + + # Check that freestream turbine yawed produced less power + assert powers_no_yaw[0,0] > powers_with_yaw[0,0] + # Check that freestream turbine yawed produces same power in both conditions + assert np.isclose(powers_with_yaw[0,0], powers_with_yaw[1,0]) + # Check that downstream turbines produce more power with wake steering + assert powers_with_yaw[0,1] > powers_no_yaw[0,1] + +def test_user_flags(): + fmodel = _setup_basic_floris_model() + + # Tilt flag behavior + fmodel.set_wake_model(FlorisCurledWindfarm(use_floris_tilt=True, use_TI_term=False)) + fmodel.run() + powers_tilted = fmodel.get_turbine_powers() + fmodel.set_wake_model(FlorisCurledWindfarm(use_floris_tilt=False, use_TI_term=False)) + fmodel.run() + powers_not_tilted = fmodel.get_turbine_powers() + + # Freestream turbines produce more power when not tilted + assert powers_tilted[0,0] < powers_not_tilted[0,0] + + # TI term flag behavior + fmodel.set_wake_model(FlorisCurledWindfarm(use_floris_tilt=False, use_TI_term=False)) + fmodel.run() + powers_no_TI_term_const = fmodel.get_turbine_powers() + + fmodel.set_wake_model(FlorisCurledWindfarm(use_floris_tilt=False, use_TI_term=True)) + fmodel.run() + powers_TI_term_const = fmodel.get_turbine_powers() + + # Default "const" k_model does not account for x0, so unaffected + assert np.allclose(powers_TI_term_const, powers_no_TI_term_const) + + + # Adding TI term shortens the near wake and promotes faster recovery, so downstream turbines + # should produce more power when TI term is used + fmodel.set_wake_model(FlorisCurledWindfarm( + solver_kwargs={"k_model": "k-l"}, + use_floris_tilt=False, + use_TI_term=False, + )) + fmodel.run() + powers_no_TI_term = fmodel.get_turbine_powers() + + fmodel.set_wake_model(FlorisCurledWindfarm( + solver_kwargs={"k_model": "k-l"}, + use_floris_tilt=False, + use_TI_term=True, + )) + fmodel.run() + powers_TI_term = fmodel.get_turbine_powers() + + + # Freestream turbines unaffected by TI term + assert np.isclose(powers_TI_term[0,0], powers_no_TI_term[0,0]) + assert np.allclose(powers_TI_term[1,:], powers_no_TI_term[1,:]) + + # Second turbine produces more power when TI term is used + assert powers_TI_term[0,1] > powers_no_TI_term[0,1] + +def test_raises_errors(): + fmodel = _setup_basic_floris_model() + fmodel.set_wake_model(FlorisCurledWindfarm()) + + # Set non-uniform turbine types + fmodel.set(turbine_type=["iea_15MW", "iea_15MW", "nrel_5MW"]) + with pytest.raises(NotImplementedError, match="Varying turbine models not supported"): + fmodel.run() + + # Reset turbine types; apply heterogeneous wind speeds + fmodel.set(turbine_type=["iea_15MW"]*3) + fmodel.run() # Make sure runs through with uniform turbine types + + heterogeneous_inflow_config = { + "speed_multipliers": [[1.0, 1.25, 1.0, 1.25], [1.0, 1.25, 1.0, 1.25]], + "x": [-500.0, -500.0, 1000.0, 1000.0], + "y": [-500.0, 1000.0, -500.0, 1000.0], + } + fmodel.set(heterogeneous_inflow_config=heterogeneous_inflow_config) + with pytest.raises(NotImplementedError, match="Heterogeneous inflows are not supported"): + fmodel.run() From d72a95c8ae97663c4a1b5f150a45e985b4e11565 Mon Sep 17 00:00:00 2001 From: misi9170 Date: Tue, 4 Aug 2026 15:52:09 -0600 Subject: [PATCH 27/52] Clean up examples, compare to gauss --- ...tilt.py => example_11_floris_interface.py} | 171 ++++++++++------- examples/temp_01_initial_comparison.py | 172 ------------------ examples/temp_03_multidim_floating.py | 102 ----------- 3 files changed, 104 insertions(+), 341 deletions(-) rename examples/{temp_02_yaw_and_tilt.py => example_11_floris_interface.py} (61%) delete mode 100644 examples/temp_01_initial_comparison.py delete mode 100644 examples/temp_03_multidim_floating.py diff --git a/examples/temp_02_yaw_and_tilt.py b/examples/example_11_floris_interface.py similarity index 61% rename from examples/temp_02_yaw_and_tilt.py rename to examples/example_11_floris_interface.py index 111ba99..82f454a 100644 --- a/examples/temp_02_yaw_and_tilt.py +++ b/examples/example_11_floris_interface.py @@ -1,23 +1,53 @@ +""" +Demonstrates the use of the FlorisCurledWindfarm interface to call the CurledWindfarm +wake model from the FLORIS wake modeling framework (https://github.com/NatLabRockies/floris/). + +The example compares the results of simulating a wind farm using: +- The CurledWindfarm wake model directly +- The CurledWindfarm wake model called via the FlorisCurledWindfarm interface +- The "gauss" wake model in FLORIS + +Additionally, the example demonstrates how to set yaw and tilt angles for the turbines in the farm. +""" + import matplotlib.pyplot as plt import numpy as np from floris import FlorisModel from floris.flow_visualization import visualize_cut_plane from floris.layout_visualization import plot_turbine_rotors -from MITRotor import IEA15MW from mitwindfarm import FlorisCurledWindfarm, Layout, Plotting, PowerLaw from mitwindfarm.Rotor import UnifiedAD_TI from mitwindfarm.windfarm import CurledWindfarm -# Set up MITWindfarm solver and run standalone as a baseline +def run_model_comparison(yaw_angle=0.0, tilt=False): -if __name__ == "__main__": + # Turbine parameters (for normalization) + D = 242.24 + H = 150.0 - cmap_floris = "pink" + # Sample points for querying the flow field + samples_x = np.array([1000, 1000, 2000, 2000]) + samples_y = np.array([0, 100, 0, 100]) + samples_z = np.array([H, H, H, H]) - rotation_angle = -5 - tilt = False - yaw_angle = 25 + # Flow parameters + wind_shear = 0.0 + TI = 0.06 + U = 8.0 + rotation_angle = -5 # First wind direction is 270; second is 270 + rotation_angle + + + # CurledWindfarm parameters + layout = Layout([0, 12 / 2, 24 / 2], [0, 0, 0], [0, 0, 0]) + + solver_kwargs = { + "dy": 1 / 10, + "dz": 1 / 10, + "integrator": "scipy_rk23", + "k_model": "k-l", + "verbose": False, + } # (Ct-prime, yaw, tilt) setpoints = [ @@ -25,22 +55,6 @@ (2, np.deg2rad(yaw_angle), np.deg2rad(6) if tilt else 0), (2, np.deg2rad(yaw_angle), np.deg2rad(6) if tilt else 0), ] - - - D = 242.24 - H = 150.0 - wind_shear = 0.0 - TI = 0.06 - U = 8.0 - layout = Layout([0, 12 / 2, 24 / 2], [0, 0, 0], [0, 0, 0]) - - solver_kwargs = dict( - dy=1 / 10, - dz=1 / 10, - integrator="scipy_rk23", # see mitwindfarm.utils.integrate - k_model="k-l", # alternatives: "const", "2021" - verbose=False, - ) windfarm = CurledWindfarm( rotor_model=UnifiedAD_TI(), @@ -55,10 +69,33 @@ fig, axes_windfarm = plt.subplots(2) Plotting.plot_windfarm(windfarm_sol, axes_windfarm[0], vmin=0, vmax=2) Plotting.plot_windfarm(windfarm_sol_rotated, axes_windfarm[1], vmin=0, vmax=2) - fig.suptitle("Direct call") + axes_windfarm[0].scatter(samples_x/D, samples_y/D, color="k", marker=".") + + windfarm_sol = windfarm(layout, setpoints) + windfarm_v_rel = windfarm_sol.windfield.wsp(samples_x/D, samples_y/D, (samples_z-H)/D) + windfarm_sol_rotated = windfarm(layout.rotate(rotation_angle), setpoints) + + rotated_x = ( + (samples_x/D - 6) * np.cos(np.radians(rotation_angle)) + - (samples_y/D - 0) * np.sin(np.radians(rotation_angle)) + + 6 + ) + rotated_y = ( + (samples_y/D - 0) * np.cos(np.radians(rotation_angle)) + + (samples_x/D - 6) * np.sin(np.radians(rotation_angle)) + + 0 + ) + axes_windfarm[1].scatter(rotated_x, rotated_y, color="k", marker=".") + fig.suptitle("Direct CurledWindfarm call") - # Establish Floris model - fmodel = FlorisModel("defaults") + windfarm_v_rel_rot = windfarm_sol_rotated.windfield.wsp(rotated_x, rotated_y, (samples_z-H)/D) + windfarm_v_rel = np.vstack([windfarm_v_rel, windfarm_v_rel_rot]) + print("\nDirect CurledWindfarm sampled velocities [m/s]:") + print(windfarm_v_rel * U) + + # Establish Floris model. Note that FLORIS alone will tilt the rotor according to + # the shaft tilt angle. + fmodel = FlorisModel("defaults") # Defaults to the "gauss" wake model in FLORIS fmodel.set( layout_x=layout.x * D, layout_y=layout.y * D, @@ -70,15 +107,39 @@ wind_shear=wind_shear, yaw_angles=yaw_angle*np.ones((2, 3)), ) - # Assign MITWindfarm wake model + fmodel.run() + powers_gauss = fmodel.get_turbine_powers() + floris_visualization( + fmodel, H, rotation_angle, samples_x, samples_y, "FLORIS Gauss wake model" + ) + + # Assign MITWindfarm wake model, rerun fmodel.set_wake_model(FlorisCurledWindfarm( solver_kwargs=solver_kwargs, - use_floris_tilt=tilt + use_floris_tilt=tilt, + use_TI_term=True, )) - # Run FLORIS using MITWindfarm wake model/solver, get turbine powers fmodel.run() - powers = fmodel.get_turbine_powers() + powers_cwf = fmodel.get_turbine_powers() + floris_visualization( + fmodel, H, rotation_angle, samples_x, samples_y, "CurledWindfarm via FLORIS" + ) + floris_vels = fmodel.sample_flow_at_points(samples_x, samples_y, samples_z) + + print("\nFLORIS sampled velocities [m/s]:") + print(floris_vels) + + print("\nRelative velocity differences (MITWindfarm - FLORIS) [%]:") + print((windfarm_v_rel * U - floris_vels) / (windfarm_v_rel * U) * 100) + + print("\nFLORIS Gauss turbine powers [MW]:") + print(powers_gauss / 1e6) + print("\nFLORIS CurledWindfarm turbine powers [MW]:") + print(powers_cwf / 1e6) + +def floris_visualization(fmodel, H, rotation_angle, samples_x, samples_y, title): + cmap_floris = "pink" # Extracting and plotting FLORIS results fig, axes_floris = plt.subplots(2) horizontal_plane = fmodel.calculate_horizontal_plane( @@ -101,7 +162,9 @@ height=H, findex_for_viz=1, ) - plot_turbine_rotors(fmodel, ax=axes_floris[1], yaw_angles=[-rotation_angle]*len(layout.x)) + plot_turbine_rotors( + fmodel, ax=axes_floris[1], yaw_angles=[-rotation_angle]*len(fmodel.layout_x) + ) visualize_cut_plane( horizontal_plane, ax=axes_floris[1], @@ -110,46 +173,20 @@ levels=[], ) - # Sample at specific points - samples_x = np.array([1000, 1000, 2000, 2000]) - samples_y = np.array([0, 100, 0, 100]) - samples_z = np.array([H, H, H, H]) - axes_floris[0].scatter(samples_x, samples_y, color="k", marker=".") axes_floris[1].scatter(samples_x, samples_y, color="k", marker=".") - axes_windfarm[0].scatter(samples_x/D, samples_y/D, color="k", marker=".") - fig.suptitle("Called via FLORIS") - - floris_vels = fmodel.sample_flow_at_points(samples_x, samples_y, samples_z) - - print("\nFLORIS sampled velocities:") - print(floris_vels) - - print("\nMITWindfarm sampled velocities:") - windfarm_sol = windfarm(layout, setpoints) - windfarm_v_rel = windfarm_sol.windfield.wsp(samples_x/D, samples_y/D, (samples_z-H)/D) - windfarm_sol_rotated = windfarm(layout.rotate(rotation_angle), setpoints) - - rotated_x = ( - (samples_x/D - 6) * np.cos(np.radians(rotation_angle)) - - (samples_y/D - 0) * np.sin(np.radians(rotation_angle)) - + 6 - ) - rotated_y = ( - (samples_y/D - 0) * np.cos(np.radians(rotation_angle)) - + (samples_x/D - 6) * np.sin(np.radians(rotation_angle)) - + 0 - ) - axes_windfarm[1].scatter(rotated_x, rotated_y, color="k", marker=".") + fig.suptitle(title) - windfarm_v_rel_rot = windfarm_sol_rotated.windfield.wsp(rotated_x, rotated_y, (samples_z-H)/D) - windfarm_v_rel = np.vstack([windfarm_v_rel, windfarm_v_rel_rot]) - print(windfarm_v_rel * U) - print("\nRelative velocity differences (MITWindfarm - FLORIS) %:") - print((windfarm_v_rel * U - floris_vels) / (windfarm_v_rel * U) * 100) +if __name__ == "__main__": + # Formatting for printing arrays + np.set_printoptions(precision=3, suppress=True) - print(powers / 1e6) + # Not yawed, not tilted + print("="*30+"\nNo yaw, remove tilt\n"+"="*30) + run_model_comparison(yaw_angle=0.0, tilt=False) - # Generate plots + # Include yaw and tilt + print("\n\n"+"="*30+"\nYawed 25 degrees, include tilt\n"+"="*30) + run_model_comparison(yaw_angle=25.0, tilt=True) plt.show() diff --git a/examples/temp_01_initial_comparison.py b/examples/temp_01_initial_comparison.py deleted file mode 100644 index e6eb38f..0000000 --- a/examples/temp_01_initial_comparison.py +++ /dev/null @@ -1,172 +0,0 @@ -import matplotlib.pyplot as plt -import numpy as np -from floris import FlorisModel, ParFlorisModel -from floris.flow_visualization import visualize_cut_plane -from floris.layout_visualization import plot_turbine_rotors -from MITRotor.FlorisInterface.FlorisInterface import MITRotorTurbine - -from mitwindfarm import FlorisCurledWindfarm, Layout, Plotting, PowerLaw -from mitwindfarm.Rotor import UnifiedAD_TI -from mitwindfarm.windfarm import CurledWindfarm - -# Set up MITWindfarm solver and run standalone as a baseline - -if __name__ == "__main__": - - cmap_floris = "pink" - use_parallel_model = False - tilt_rotor_in_wake_model = True - add_alpha_TI_term_to_x0_calc = False - - rotation_angle = -5 - - # (Ct-prime, yaw, tilt) - setpoints = [ - (1.5, 0, 0.1047), - (1.5, 0, 0.1047), - (1.5, 0, 0.1047), - ] - - D = 242.24 - H = 150.0 - wind_shear = 0.0 - TI = 0.06 - U = 10.0 - layout = Layout([0, 12 / 2, 24 / 2], [0, 0, 0], [0, 0, 0]) - - solver_kwargs = dict( - dy=1 / 10, - dz=1 / 10, - integrator="scipy_rk23", # see mitwindfarm.utils.integrate - k_model="k-l", # alternatives: "const", "2021" - verbose=False, - ) - - windfarm = CurledWindfarm( - rotor_model=UnifiedAD_TI(), - base_windfield=PowerLaw(Uref=1.0, zref=H/D, exp=wind_shear, TIamb=TI), - solver_kwargs=solver_kwargs, - TIamb=TI, - ) - - windfarm_sol = windfarm(layout, setpoints) - windfarm_sol_rotated = windfarm(layout.rotate(rotation_angle), setpoints) - - fig, axes_windfarm = plt.subplots(2) - Plotting.plot_windfarm(windfarm_sol, axes_windfarm[0], vmin=0, vmax=2) - Plotting.plot_windfarm(windfarm_sol_rotated, axes_windfarm[1], vmin=0, vmax=2) - fig.suptitle("Direct call") - - # Establish Floris model - if use_parallel_model: - fmodel = ParFlorisModel("defaults") - else: - fmodel = FlorisModel("defaults") - fmodel.set( - layout_x=layout.x * D, - layout_y=layout.y * D, - wind_speeds=[U, U], - wind_directions=[270.0, 270.0 + rotation_angle], - turbulence_intensities=[TI, TI], - turbine_type=["iea_15MW"]*len(layout.x), - reference_wind_height=H, # IEA 15MW hub height - wind_shear=wind_shear, - ) - # Assign MITWindfarm wake model - fmodel.set_wake_model(FlorisCurledWindfarm( - solver_kwargs=solver_kwargs, - use_floris_tilt=tilt_rotor_in_wake_model, - use_TI_term=add_alpha_TI_term_to_x0_calc, - )) - - # Assign MITRotor rotor model - #fmodel.set_operation_model(MITRotorTurbine()) - - # Run FLORIS using MITWindfarm wake model/solver, get turbine powers - fmodel.run() - powers = fmodel.get_turbine_powers() - print(powers) - - - # Extracting and plotting FLORIS results - fig, axes_floris = plt.subplots(2) - horizontal_plane = fmodel.calculate_horizontal_plane( - x_resolution=200, - y_resolution=100, - height=H, - findex_for_viz=0, - ) - plot_turbine_rotors(fmodel, ax=axes_floris[0]) - visualize_cut_plane( - horizontal_plane, - ax=axes_floris[0], - cmap=cmap_floris, - clevels=100, - levels=[], - color_bar=True, - min_speed=0, - max_speed=10, - ) - horizontal_plane = fmodel.calculate_horizontal_plane( - x_resolution=200, - y_resolution=100, - height=H, - findex_for_viz=1, - ) - plot_turbine_rotors(fmodel, ax=axes_floris[1], yaw_angles=[-rotation_angle]*len(layout.x)) - visualize_cut_plane( - horizontal_plane, - ax=axes_floris[1], - cmap=cmap_floris, - clevels=100, - levels=[], - color_bar=True, - min_speed=0, - max_speed=10, - ) - - # Sample at specific points - samples_x = np.array([1000, 1000, 2000, 2000]) - samples_y = np.array([0, 100, 0, 100]) - samples_z = np.array([H, H, H, H]) - - axes_floris[0].scatter(samples_x, samples_y, color="k", marker=".") - axes_floris[1].scatter(samples_x, samples_y, color="k", marker=".") - axes_windfarm[0].scatter(samples_x/D, samples_y/D, color="k", marker=".") - - for i, (x, y) in enumerate(zip(samples_x, samples_y)): - axes_floris[0].annotate(f"{i}", (x, y), textcoords="offset points", xytext=(0, 10), ha="center") - axes_windfarm[0].annotate(f"{i}", (x/D, y/D), textcoords="offset points", xytext=(0, 10), ha="center") - fig.suptitle("Called via FLORIS") - - floris_vels = fmodel.sample_flow_at_points(samples_x, samples_y, samples_z) - - print("\nFLORIS sampled velocities:") - print(floris_vels) - - print("\nMITWindfarm sampled velocities:") - windfarm_sol = windfarm(layout, setpoints) - windfarm_v_rel = windfarm_sol.windfield.wsp(samples_x/D, samples_y/D, (samples_z-H)/D) - windfarm_sol_rotated = windfarm(layout.rotate(rotation_angle), setpoints) - - rotated_x = ( - (samples_x/D - 6) * np.cos(np.radians(rotation_angle)) - - (samples_y/D - 0) * np.sin(np.radians(rotation_angle)) - + 6 - ) - rotated_y = ( - (samples_y/D - 0) * np.cos(np.radians(rotation_angle)) - + (samples_x/D - 6) * np.sin(np.radians(rotation_angle)) - + 0 - ) - axes_windfarm[1].scatter(rotated_x, rotated_y, color="k", marker=".") - - windfarm_v_rel_rot = windfarm_sol_rotated.windfield.wsp(rotated_x, rotated_y, (samples_z-H)/D) - windfarm_v_rel = np.vstack([windfarm_v_rel, windfarm_v_rel_rot]) - print(windfarm_v_rel * U) - - print("\nRelative velocity differences (MITWindfarm - FLORIS) %:") - print((windfarm_v_rel * U - floris_vels) / (windfarm_v_rel * U) * 100) - - # Generate plots - plt.show() diff --git a/examples/temp_03_multidim_floating.py b/examples/temp_03_multidim_floating.py deleted file mode 100644 index 2562a26..0000000 --- a/examples/temp_03_multidim_floating.py +++ /dev/null @@ -1,102 +0,0 @@ -import matplotlib.pyplot as plt -import numpy as np -from floris import FlorisModel, ParFlorisModel -from floris.flow_visualization import visualize_cut_plane -from floris.layout_visualization import plot_turbine_rotors -from MITRotor import IEA15MW - -from mitwindfarm import FlorisCurledWindfarm, Layout, Plotting, PowerLaw -from mitwindfarm.Rotor import UnifiedAD_TI -from mitwindfarm.windfarm import CurledWindfarm - -# Set up MITWindfarm solver and run standalone as a baseline - -if __name__ == "__main__": - - cmap_floris = "pink" - use_parallel_model = False - tilt_rotor_in_wake_model = True - - # (Ct-prime, yaw, tilt) - setpoints = [ - (2, 0, 0), - (2, 0, 0), - (2, 0, 0), - ] - - D = 242.24 - H = 150.0 - wind_shear = 0.0 - TI = 0.06 - U = 8.0 - layout = Layout([0, 12 / 2, 24 / 2], [0, 0, 0], [0, 0, 0]) - - solver_kwargs = dict( - dy=1 / 10, - dz=1 / 10, - integrator="scipy_rk23", # see mitwindfarm.utils.integrate - k_model="k-l", # alternatives: "const", "2021" - verbose=False, - ) - - # Establish Floris model - if use_parallel_model: - fmodel = ParFlorisModel("defaults") - else: - fmodel = FlorisModel("defaults") - - multidim_conditions = { - "Tp": np.array([2.5]*2), - "Hs": np.array([4.1, 1.0]), - } - fmodel.set( - layout_x=layout.x * D, - layout_y=layout.y * D, - wind_speeds=[U, U], - wind_directions=[270.0, 270.0], - turbulence_intensities=[TI, TI], - turbine_type=["iea_15MW_floating_multi_dim_cp_ct"]*len(layout.x), - reference_wind_height=H, # IEA 15MW hub height - wind_shear=wind_shear, - multidim_conditions=multidim_conditions - ) - # Assign MITWindfarm wake model - fmodel.set_wake_model(FlorisCurledWindfarm( - solver_kwargs=solver_kwargs, - use_floris_tilt=tilt_rotor_in_wake_model - )) - # Run FLORIS using MITWindfarm wake model/solver, get turbine powers - fmodel.run() - powers = fmodel.get_turbine_powers() - - # Extracting and plotting FLORIS results - fig, axes_floris = plt.subplots(1) - horizontal_plane = fmodel.calculate_horizontal_plane( - x_resolution=200, - y_resolution=100, - height=H, - findex_for_viz=0, - ) - plot_turbine_rotors(fmodel, ax=axes_floris) - visualize_cut_plane( - horizontal_plane, - ax=axes_floris, - cmap=cmap_floris, - clevels=100, - levels=[], - ) - - # Sample at specific points - samples_x = np.array([1000, 1000, 2000, 2000]) - samples_y = np.array([0, 100, 0, 100]) - samples_z = np.array([H, H, H, H]) - - axes_floris.scatter(samples_x, samples_y, color="k", marker=".") - fig.suptitle("Called via FLORIS") - - floris_vels = fmodel.sample_flow_at_points(samples_x, samples_y, samples_z) - - print("\nFLORIS sampled velocities:") - print(floris_vels) - - plt.show() From 948a10318f2a269e7b60e64436a78b78d024f9a7 Mon Sep 17 00:00:00 2001 From: misi9170 Date: Tue, 4 Aug 2026 16:14:02 -0600 Subject: [PATCH 28/52] Add short explainer and demo to quickstart notebook --- examples/MITWindfarm_quickstart.ipynb | 113 ++++++++++++++++++++------ 1 file changed, 88 insertions(+), 25 deletions(-) diff --git a/examples/MITWindfarm_quickstart.ipynb b/examples/MITWindfarm_quickstart.ipynb index ff2e901..19c0a7b 100644 --- a/examples/MITWindfarm_quickstart.ipynb +++ b/examples/MITWindfarm_quickstart.ipynb @@ -20,7 +20,7 @@ }, { "cell_type": "code", - "execution_count": 73, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -39,7 +39,7 @@ }, { "cell_type": "code", - "execution_count": 74, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -74,7 +74,7 @@ }, { "cell_type": "code", - "execution_count": 75, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -111,7 +111,7 @@ }, { "cell_type": "code", - "execution_count": 76, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -132,7 +132,7 @@ }, { "cell_type": "code", - "execution_count": 77, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -154,7 +154,7 @@ }, { "cell_type": "code", - "execution_count": 78, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -187,18 +187,18 @@ }, { "cell_type": "code", - "execution_count": 79, + "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Control setpoints: Ctprime = 1.80, yaw = 0.17, tilt = 0.09\n", + "Control setpoints: Ctprime = 1.77, yaw = 0.17, tilt = 0.09\n", "Power coefficient: 0.42\n", "Thrust coefficient: 0.73\n", - "Local thrust coefficient: 1.80\n", - "Axial induction: 0.35\n", + "Local thrust coefficient: 1.77\n", + "Axial induction: 0.34\n", "Far-wake streamwise velocity: 0.54\n", "Far-wake lateral velocity: -0.03\n", "Rotor-effective wind speed: 1.00\n", @@ -238,7 +238,7 @@ }, { "cell_type": "code", - "execution_count": 80, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -264,7 +264,7 @@ }, { "cell_type": "code", - "execution_count": 81, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -289,7 +289,7 @@ }, { "cell_type": "code", - "execution_count": 82, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -323,7 +323,7 @@ }, { "cell_type": "code", - "execution_count": 83, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -337,12 +337,12 @@ }, { "cell_type": "code", - "execution_count": 84, + "execution_count": 12, "metadata": {}, "outputs": [ { "data": { - "image/png": "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DDVEREQkCww1REREJAsMNURERCQLDDVEREQkCww1REREJAsMNURERCQLDDVEREQkCww1REREJAsMNURERGQ469drH2ylUGinoCBg37477/v6ap/kaQQMNURERGQ43bsDq1YBOTnAiRPA008D48cDP/5o9E3zgZZERERkOOPG6c+vWKHde3PkCPDYY0bdNEMNERERGUddHfDll0BlpfYwlJEx1BAREZFh5eVpQ8zt24CjI5CcDPj5ad8rLjbaZnlODRERERlWv35Abi5w9Cjw6qtAZCSQn2/0zXJPDRERERmWjQ3Qp4/2zwEBwPHjwLp1wMaNRt0s99QQERGRcWk0QFWV0TfDUENERETNp1IB8fHa14bExgIZGdpzZ/LytPPp6UBEhNFLY6ghIiKi5lOpgGXLGg81V64A06Zpz6t55hntoafUVODZZ41eGs+pISIiIsP55BOTbbpN9tQkJibC19cXdnZ2CAwMxLFjxxpddtOmTXjyySfRuXNndO7cGaGhoU0uT0RERAS0QajZtm0bYmJiEBcXh5MnT8Lf3x9KpRJXrlxpcPn09HRMmTIF3333HbKzs+Hj44MxY8bgp59+MnapRERE1I5JQghhzA0EBgbi8ccfx9///ncAgEajgY+PD+bNm4dFixY9sH9dXR06d+6Mv//975g2bdoDly8vL4ezszPUajUUCsVD109ERER3OXlSe5l2Tg4wbJjBVmuI72+j7qmprq5GTk4OQkND72zQwgKhoaHIzs5u1jpu3ryJmpoauLq6Nvh+VVUVysvL9SYiIiIykvp9IcbdJ9IqRg01V69eRV1dHTw8PPTaPTw8UFpa2qx1vPXWW/D29tYLRndLSEiAs7OzbvLx8XnouomIiOgeQmivYgoP186Hh2vnzSjcmPUl3atWrUJSUhKSk5NhZ2fX4DKxsbFQq9W6qaSkpI2rJCIikrH6MBMcDISFAV5ewOLF2tewMG27mYQbo4aarl27wtLSEmVlZXrtZWVl8PT0bLLv+++/j1WrVuGbb77B4MGDG13O1tYWCoVCbyIiIiIDSEu7E2YAICUFyMoCVqzQvqakaNvrw01amulqhZFDjY2NDQICApB21yA1Gg3S0tIQ1MQjyN977z0sX74cKSkpGD58uDFLJCIiosZkZGhf68OMUglIkrZNkrTzd4ebzEzT1Pk/Rr/6adu2bYiMjMTGjRsxYsQIrF27Ftu3b8eZM2fg4eGBadOmoVu3bkhISAAA/OUvf8HSpUuxdetWjBw5UrceR0dHODo6PnB7vPqJiIjIQGpqACurO0GmKUIAtbWAtXWrNmWI72+j31F48uTJ+OWXX7B06VKUlpZiyJAhSElJ0Z08fOnSJVhY3NlhtH79elRXV+P//u//9NYTFxeH+Ph4Y5dLRERE9VoSUCSp1YHGUIy+p6atcU8NERFR+2P296khIiIiaisMNURERCQLDDVEREQkCww1REREJAsMNURERCQLDDVEREQkCww1REREJAsMNURERCQLDDVEREQkCww1REREJAsMNURERCQLDDVEREQkCww1REREJAsMNURERCQLDDVEREQkCww1REREJAsMNURERCQLDDVEREQkCww1REREJAsMNURERCQLDDVEREQkCww1REREJAsMNURERCQLDDVEREQkCww1REREJAsMNURERCQLDDXUYWRkZGDcuHHw9vaGJEnYtWuXqUsiImqW9evXY/DgwVAoFFAoFAgKCsK+fftMXZbZYaihDqOyshL+/v5ITEw0dSlERC3SvXt3rFq1Cjk5OThx4gSefvppjB8/Hj/++KOpSzMrkhBCmLoIQyovL4ezszPUajUUCoWpyyEzJUkSkpOTMWHCBFOXQkTUKq6urli9ejWioqJMXYpBGOL728rANREREZER1dXV4csvv0RlZSWCgoJMXY5ZYaghIiJqB/Ly8hAUFITbt2/D0dERycnJ8PPzM3VZZoXn1BAREbUD/fr1Q25uLo4ePYpXX30VkZGRyM/PN3VZZoV7aoiIiNoBGxsb9OnTBwAQEBCA48ePY926ddi4caOJKzMf3FNDspGbW4aQkHTk5paZuhQiohZRqVSIj4+HSqVqdh+NRoOqqiojVtX+MNSQbPz44zUcPBiCH3+81uD7FRUVyM3NRW5uLgCgqKgIubm5uHTpUtsVSUTUAJVKhWXLljUaamJjY5GRkYHi4mLk5eUhNjYW6enpiIiIaONKzRsPP1GHceLECYwePVo3HxMTAwCIjIzE5s2bTVQVEdGDXblyBdOmTYNKpYKzszMGDx6M1NRUPPvss6Yuzay0yZ6axMRE+Pr6ws7ODoGBgTh27FiTy3/55Zfo378/7OzsMGjQIOzdu7ctyiSZCwkJgRDivomBhojM3SeffILi4mJUVVXh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", + "image/png": "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W9SRI0dk2LBhcskll5iTr44Mrc/ppM89adIk8/ill15qRqYuaRxdHSVcR7LWUbd1NOnrrrtO3nvvvYs+ftWyZcsLaqm05kqP0UmP7/XXXzejievrX3XVVfLRRx957KOjgV999dXm/erbt6/HMRdFR0TX96d27dpmwD59344fP+7xPmtZ9LXdB4EsePlJa2F0hHF9bd0uISHhguNyv/ykZdNlrfHRsuox6ejiGzduLLHMQDAh1ABBTIOG/pL/4osvZP78+XL06FEZOHCg3HDDDfKvf/1L5s2bJ2+88YY8++yzZnsNKj179pQHHnjAnBh1ioiIkPz8fGnevLm8//77smfPHpk2bZpMmTJFli5davb7wx/+YE7AUVFRrv0iIyMlNzfXhIk6derIunXrTDn0hK3baS2D+stf/iKLFi2SN998U9avXy///e9/JSkpqcTRnbt27SorVqyQ3bt3y4MPPigjR46ULVu2XNTxl0VcXJw55i+//NI854gRI0zZnUHurrvuksGDB8vOnTvl/vvvN+GpOPoea6DR59DgtXr1avnuu+9k+PDhHtsdOHBAPvjgAxNA9LkLM2rUKPnPf/5jgqVu+9prr8mJEydKPKann37afJb6vBrINDi6Bz4g6Fk2k5mZqT8BzRwoyS+//GLt2bPHzL1h2zatgnDMfa13795Wly5dPNZNmTLFatu2rZWfn+9aN3fuXKt27drWuXPnXPtNnDixxOcfN26cFR0d7VqOiYmxhgwZ4rHNu+++e8Hr5eTkWDVq1LBSUlLMctOmTa3nn3/e9Xhubq7VvHnzC56rJIMGDbKeeOKJiz7+K664wnr55Zc99uvUqZM1ffp017J+h0ydOtW1nJWVZdatWrXKLMfGxlrt27f3eI6nnnrKbHPq1KlCy//JJ59YlStXtg4fPuxa99VXX5l9tmzZYpa1DFWqVLFOnDjhsa/7Z7Z3716zz9atW12Pf/PNN2ad+3HpclJSkvn3wYMHzfLrr79+wWvr8wXL3xfsLdML529qagAv0FNISopIdLRjWee6XMJVloumtRnu9u7da2pi9FKDU69evSQrK0u+//77Yp9r7ty55vkuu+wyU9uiv/71cklxtDZEaxa0pkb30UkvQWlNy7fffiuZmZmmVqdHjx6ufcLDw6Vbt27FPq9espo5c6a57KTPp8+bkpJyQXm8efwFdezY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", "text/plain": [ "
" ] @@ -377,12 +377,12 @@ }, { "cell_type": "code", - "execution_count": 85, + "execution_count": 13, "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGeCAYAAABGlgGHAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAj/UlEQVR4nO3df2zV1f3H8dcH2t7ibK+i0l6gIAvID4FSikAv+4o/qrdICE2ajRCXMidETclENreUGEENXhbjD6bIjxnExTTgjwGbg167q1LcLVNamgBGNqahVW+LJnpvabZS2s/3D8N1d9LST3+d2/b5SE6wH865n3dvOOfz8tzPvdeybdsWAACAIcNMFwAAAIY2wggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAqCTTBXRFe3u7vvjiC6WlpcmyLNPlAACALrBtW01NTRo9erSGDetk/8N24MUXX7RnzJhhp6Wl2Wlpafb8+fPtAwcOdNj/5ZdftiXFNZfL5eSUtm3bdn19/fceh0aj0Wg02sBo9fX1nV7nHe2MjB07Vps2bdKkSZNk27ZeeeUVLV26VMeOHdONN954yTHp6ek6depU7Ofu7GykpaVJkurr65Wenu54PAAA6H/RaFRZWVmx63hHHIWRJUuWxP28ceNGbd26VUeOHOkwjFiWpczMTCenueRjSN8GG8IIAAADy+U2Irp9A2tbW5t2796t5uZm5eXlddjv3LlzGj9+vLKysrR06VKdPHnyso/d0tKiaDQa1wAAwODkOIwcP35cV155pVwul+6//37t3btX06ZNu2TfyZMna+fOndq/f79effVVtbe3y+v16rPPPuv0HH6/X263O9aysrKclgkAAAYIy7Zt28mA8+fPq66uTpFIRG+88YZeeuklHTp0qMNA8t9aW1s1depULV++XE888USH/VpaWtTS0hL7+eJrTpFIhJdpAAAYIKLRqNxu92Wv347f2puSkqKJEydKknJzc/Xhhx9q8+bN2r59+2XHJicnKycnR6dPn+60n8vlksvlcloaAAAYgHr8oWft7e1xuxidaWtr0/Hjx+XxeHp6WgAAMEg42hkpLS3VokWLNG7cODU1NamsrEzvvfeeAoGAJKm4uFhjxoyR3++XJD3++OOaP3++Jk6cqG+++UZPPfWUzpw5o5UrV/b+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xo4d2+Vxra2tmjp1qpYvX64nnnjikn1aWlrU0tIS+zkajSorK0uRSETp6endKRcAAPSzaDQqt9t92eu3o3tGLlq9erXeeustVVZWOgoikpScnKycnBydPn26wz4ul0sul6s7pQEAgAHG0cs0tm1r9erV2rt3r9555x1NmDDB8Qnb2tp0/PhxeTwex2MBAMDg42hnpKSkRGVlZdq/f7/S0tLU0NAgSXK73RoxYoQkqbi4WGPGjJHf75ckPf7445o/f74mTpyob775Rk899ZTOnDmjlStX9vKvAgAABiJHYWTr1q2SpFtuuSXu+Msvv6yf/exnkqS6ujoNG/bdhsvXX3+tVatWqaGhQVdffbVyc3MVCoU0bdq0nlUOAAAGhW7fwNqfunoDDAAASBxdvX7z3TQAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADDKURjx+/266aablJaWplGjRqmwsFCnTp267LjXX39dU6ZMUWpqqmbMmKEDBw50u2AAADC4OAojhw4dUklJiY4cOaKKigq1trbqzjvvVHNzc4djQqGQli9frnvvvVfHjh1TYWGhCgsLdeLEiR4XDwAABj7Ltm27u4O//PJLjRo1SocOHdLNN998yT7Lli1Tc3Oz3nrrrdix+fPna9asWdq2bVuXzhONRuV2uxWJRJSent7dcgEAQD/q6vW7R/eMRCIRSdLIkSM77FNVVaX8/Py4Yz6fT1VVVR2OaWlpUTQajWsAAGBw6nYYaW9v15o1a7RgwQJNnz69w34NDQ3KyMiIO5aRkaGGhoYOx/j9frnd7ljLysrqbpkAACDBdTuMlJSU6MSJE9q9e3dv1iNJKi0tVSQSibX6+vpePwcAAEgMSd0ZtHr1ar311luqrKzU2LFjO+2bmZmpxsbGuGONjY3KzMzscIzL5ZLL5epOaQAAYIBxtDNi27ZWr16t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", + "image/png": "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rVmzprZBJytXriwm2KZ5L2mZ1pOaBp72B8hFn0VLctbPGTl58mQxx+N00lySLzeQ1atX1zvH5Hxat25dnQad5q5UVVUV29IyrZ/awNevX3/B6whQQ59FS1JVKmN8L10+GT9+fPTo0SO++OKLWLJkSfzd3/1dMUx46623xrRp06Jr167FiEmSGsro0aOL24EnTJhQTHh94oknYuvWrTFw4MBGVzJNYE1zR9IlmzMdJTl27Fi0atWqtjE3JJ2S48ePR+vWrc/ovQDOlj6L5qCxn9+tynnR/fv3F4EjPYo4vXh6AFpNEEl27doVF13028GWNHSYAsv3v//94jpnuiV4+fLlZQWRc6WcRpoav0YN5KTPoiUpa2Qkl3MxMgIAVObnt++mAQCyEkYAgKyEEQAgK2EEAMhKGAEAshJGAICshBEAICthBADIShgBALISRgCArIQRACArYQQAyEoYAQCyEkYAgKyEEQAgK2EEAMhKGAEAshJGAICshBEAICthBADIShgBALISRgCArIQRACArYQQAyEoYAQCyEkYAgKyEEQAgK2EEAMhKGAEAshJGAICshBEAICthBADIShgBALISRgCArIQRACArYQQAyEoYAQCyEkYAgKyEEQCg6YSRuXPnxg033BDt2rWLq666KiZPnhw7duxo8JjFixdHVVVVndK2bduzrTcA0BLDyNq1a+P++++PTZs2xerVq+PYsWNx2223xeHDhxs8rn379rFnz57a8uGHH55tvQGAZqJVOTuvXLnyd0Y90gjJli1b4pvf/Ga9x6XRkE6dOp15LQGAZuus5owcOHCgWF5xxRUN7nfo0KHo2bNndO/ePSZNmhTbt29vcP8jR47EwYMH6xQAoHk64zBy8uTJeOihh+Kmm26KgQMH1rtf3759Y9GiRbFixYp46aWXiuNGjRoVH330UYNzUzp06FBbUogBAJqnqlKpVDqTA++77754880345133olu3bo1+rg0z6R///4xderUePzxx+sdGUmlRhoZSYEkjcSk+ScAQOVLn99pUOGrPr/LmjNS44EHHojXX3891q1bV1YQSVq3bh1DhgyJnTt31rtPdXV1UQCA5q+syzRpECUFkWXLlsVbb70VvXr1KvsNT5w4Edu2bYvOnTuXfSwA0PyUNTKSbutdsmRJMf8jPWtk7969xfY0BHPJJZcUP0+bNi26du1azPtIHnvssRgxYkT07t07Pv/883jqqaeKW3vvuuuu8/H7AADNOYzMnz+/WN588811tr/44ovx53/+58XPu3btiosu+u2Ay2effRZ33313EVwuv/zyGDZsWGzYsCEGDBhwbn4DAKBlTmCtxAkwAEDT+/z23TQAQFbCCACQlTACAGQljAAAWQkjAEBWwggAkJUwAgBkJYwAAFkJIwBAVsIIAJCVMAIAZCWMAABZCSMAQFbCCACQlTACAGQljAAAWQkjAEBWwggAkJUwAgBkJYwAAFkJIwBAVsIIAJCVMAIAZCWMAABZCSMAQFbCCACQlTACAGQljAAAWQkjAEBWwggAkJUwAgBkJYwAAFkJIwBAVsIIAJCVMAIAZCWMAABZCSMAQFbCCADQdMLI3Llz44Ybboh27drFVVddFZMnT44dO3Z85XGvvvpq9OvXL9q2bRuDBg2KN95442zqDAC01DCydu3auP/++2PTpk2xevXqOHbsWNx2221x+PDheo/ZsGFDTJ06Ne6888547733igCTygcffHAu6g8ANHFVpVKpdKYHf/LJJ8UISQop3/zmN0+7z+23316Elddff71224gRI+K6666LBQsWNOp9Dh48GB06dIgDBw5E+/btz7S6AMAF1NjP77OaM5JePLniiivq3Wfjxo0xZsyYOtvGjh1bbK/PkSNHil/g1AIANE9nHEZOnjwZDz30UNx0000xcODAevfbu3dvdOzYsc62tJ62NzQ3JSWpmtK9e/czrSYA0FzDSJo7kuZ9LF269NzWKCJmzpxZjLrUlN27d5/z9wAAKkOrMznogQceKOaArFu3Lrp169bgvp06dYp9+/bV2ZbW0/b6VFdXFwUAaP7KGhlJc11TEFm2bFm89dZb0atXr688ZuTIkbFmzZo629KdOGk7AECrci/NLFmyJFasWFE8a6Rm3kea13HJJZcUP0+bNi26du1azPtIHnzwwRg9enQ8/fTTMWHChOKyzubNm+P5558/H78PANCcR0bmz59fzOG4+eabo3PnzrXl5Zdfrt1n165dsWfPntr1UaNGFQEmhY/BgwfHa6+9FsuXL29w0isA0HKc1XNGLhTPGaGpSYF84cKFcc899xSBHaAl9lcHL8RzRoD6G/ejjz5aZ5QQoBLtqYD+ShgBALISRgCArIQRACArYQQAyEoYgfOg5ia1JnCzGtDClSqgvxJG4BxKjXnVqlUxZcqUYj0t07pQAlSaUgX1V8IInMNGnR7yN27cuOJe/VmzZhXLtJ62CyVAJShVYH8ljMBZSt+9VNOok5UrV8aGDRtizpw5xTKtJzWN/Mvf1QTQ0vsrYQTOUvr26lMb9dixY6OqqqrYlpZp/dRGvn79+qz1BVqudRXaX3kcPJylY8eORatWrWobdENSczt+/Hi0bt36gtQNIGd/1djP77K+tRf4XeU01NQBCCJALq0rtL9ymQYAyEoYAQCyEkYAgKyEEQAgK2EEAMhKGAEAshJGAICshBEAICthBADIShgBALISRgCArIQRACArYQQAyEoYAQCyEkYAgKyEEQAgK2EEAMhKGAEAshJGAICshBEAICthBADIShgBALISRgCArIQRACCrFh1G9uzZE7Nnzy6WAJVOn0Vz1eLDyKOPPqphA02CPovmqkWHEQCgCYaRdevWxcSJE6NLly5RVVUVy5cvb3D/t99+u9jvy2Xv3r1nU28AoKWGkcOHD8fgwYNj3rx5ZR23Y8eOYmixplx11VXlvjUA0Ay1KveA8ePHF6VcKXx87WtfK/s4AKB5u2BzRq677rro3Llz3HrrrfEf//EfDe575MiROHjwYJ1yPpRKpTpLgEqmz6K5Ou9hJAWQBQsWxD/90z8VpXv37nHzzTfH1q1b6z1m7ty50aFDh9qSjjmXUkNetWpVTJkypVhPy7SugQOVSJ9Fc3few0jfvn3jnnvuiWHDhsWoUaNi0aJFxfIHP/hBvcfMnDkzDhw4UFt27959Tht0ev9x48YVQWnWrFnFMq2n7Ro4UCn0WbQUWW7tHT58eOzcubPe/19dXR3t27evU87WmjVraht0snLlytiwYUPMmTOnWKb1pKaBp/0BctFn0ZJkCSPvv/9+kewvpHRL8qkNeuzYscUtxklapvVTG/j69esvaP0ATqXPoiWpKpU5vnfo0KHaUY0hQ4bEM888E9/61rfiiiuuiB49ehSXWH7zm9/EP/7jPxb7PPvss9GrV6+45ppr4v/+7//ihRdeiB/+8Ifx05/+NG655ZZGvWeawJrmjqRLNmc6SnLs2LFo1apVbWNuSDolx48fj9atW5/RewGcLX0WzUFjP7/LvrV38+bNRfioMWPGjGI5ffr0WLx4cfEMkV27dtX+/6NHj8Zf/dVfFQHl0ksvjWuvvTb+/d//vc5rXAjlNNLU+DVqICd9Fi1J2SMjOZyLkREAoDI/v303DQCQlTACAGQljAAAWQkjAEBWwggAkJUwAgBkJYwAAFkJIwBAVsIIAJCVMAIAZCWMAABZCSMAQFbCCACQlTACAGQljAAAWQkjAEBWwggAkJUwAgBkJYwAAFkJIwBAVsIIAJCVMAIAZCWMAABZCSMAQFbCCACQlTACAGQljAAAWQkjAEBWwggAkJUwAgBkJYwAAFkJIwBAVsIIAJCVMAIAZCWMAABZCSMAQFbCCACQlTACAGQljAAATSuMrFu3LiZOnBhdunSJqqqqWL58+Vce8/bbb8fQoUOjuro6evfuHYsXLz7T+gIALT2MHD58OAYPHhzz5s1r1P6//vWvY8KECfGtb30r3n///XjooYfirrvuilWrVp1JfQGAZqZVuQeMHz++KI21YMGC6NWrVzz99NPFev/+/eOdd96JH/zgBzF27Nhy3x4AaGbO+5yRjRs3xpgxY+psSyEkba/PkSNH4uDBg3UKANA8nfcwsnfv3ujYsWOdbWk9BYz//d//Pe0xc+fOjQ4dOtSW7t27n+9qAgCZVOTdNDNnzowDBw7Ult27d+euEgBQKXNGytWpU6fYt29fnW1pvX379nHJJZec9ph0100qAEDzd95HRkaOHBlr1qyps2316tXFdgCAssPIoUOHilt0U6m5dTf9vGvXrtpLLNOmTavd/957741f/epX8Td/8zfxy1/+Mn784x/HK6+8Et/97nfP5e8BALSUMLJ58+YYMmRIUZIZM2YUPz/88MPF+p49e2qDSZJu6/23f/u3YjQkPZ8k3eL7wgsvuK0XAChUlUqlUlS4dOdNuqsmTWZNc00AgMrX2M/virybBgBoOYQRACArYQQAyEoYAQCyEkYAgKyEEQAgK2EEAMhKGAEAshJGAICshBEAICthBADIShgBALISRgCArIQRACArYQQAyEoYAQCyEkYAgKyEEQAgK2EEAMhKGAEAshJGAICshBEAICthBADIShgBALISRgCArIQRACArYQQAyEoYAQCyEkYAgKyEEQAgK2EEAMhKGAEAshJGAICshBEAICthBADIShgBALISRgCArIQRACArYQQAaHphZN68eXH11VdH27Zt48Ybb4x333233n0XL14cVVVVdUo6DgDgjMLIyy+/HDNmzIhHHnkk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P1cNjYjUMIEVAMhKGAEAsmrRYaS6ujoeeeSRYknDnKvyOF+N51w1nnPVeM5V0zpXTWICKwDQfLXokREAID9hBADIShgBALISRgCArFp0GJk3b15cffXV0bZt27jxxhvj3XffzV2lirRu3bqYOHFi8QS99ATc5cuX565SRZo7d27ccMMNxZOCr7rqqpg8eXLs2LEjd7Uq0vz58+Paa6+tfcjSyJEj480338xdrSbhySefLNrhQw89lLsqFWn27NnF+Tm19OvXL3e1KtZvfvOb+LM/+7P4/d///bjkkkti0KBBsXnz5gtejxYbRl5++eWYMWNGcTvT1q1bY/DgwTF27NjYv39/7qpVnMOHDxfnJ4U36rd27dq4//77Y9OmTbF69eo4duxY3HbbbcX5o670ROX0obply5ai4/v2t78dkyZNiu3bt+euWkX7+c9/HgsXLiyCHPW75pprYs+ePbXlnXfeyV2livTZZ5/FTTfdFK1bty7+GPjFL34RTz/9dFx++eUXvjKlFmr48OGl+++/v3b9xIkTpS5dupTmzp2btV6VLv2TWbZsWe5qNAn79+8vztfatWtzV6VJuPzyy0svvPBC7mpUrC+++KLUp0+f0urVq0ujR48uPfjgg7mrVJEeeeSR0uDBg3NXo0n427/929If/uEflipBixwZOXr0aPEX2ZgxY+p8/01a37hxY9a60XwcOHCgWF5xxRW5q1LRTpw4EUuXLi1GkNLlGk4vjbpNmDChTr/F6f33f/93cVn5D/7gD+JP//RPY9euXbmrVJH+5V/+Ja6//vr44z/+4+LS8pAhQ+If/uEfstSlRYaRTz/9tOgAO3bsWGd7Wt+7d2+2etF8pG+aTtf00xDowIEDc1enIm3bti0uu+yy4qmP9957byxbtiwGDBiQu1oVKYW1dDk5zUuiYWn+3+LFi2PlypXF3KRf//rX8Ud/9EfFN8dS169+9aviHPXp0ydWrVoV9913X/zlX/5l/OQnP4kLrUl8ay80xb9iP/jgA9eqG9C3b994//33ixGk1157LaZPn17MuxFI6kpf6/7ggw8W85DSZHsaNn78+Nqf09yaFE569uwZr7zyStx5551Z61aJfzRdf/318cQTTxTraWQk9VsLFiwo2uOF1CJHRq688sq4+OKLY9++fXW2p/VOnTplqxfNwwMPPBCvv/56/OxnPysmanJ6bdq0id69e8ewYcOKv/jTJOnnnnsud7UqTrqknCbWDx06NFq1alWUFNr+/u//vvg5jfJSv6997WvxjW98I3bu3Jm7KhWnc+fOvxP++/fvn+Wy1kUttRNMHeCaNWvqJMS07po1ZyrN701BJF1ueOutt6JXr165q9SkpDZ45MiR3NWoOLfccktxSSuNItWU9NdsmguRfk5/WFG/Q4cOxf/8z/8UH7zUlS4jf/nxA//1X/9VjCRdaC32Mk26rTcNQ6VGPXz48Hj22WeLCXR33HFH7qpVZGM+9a+KdA02dYJpYmaPHj2y1q3SLs0sWbIkVqxYUTxrpGb+UYcOHYr79/mtmTNnFsPp6d9Pupafztvbb79dXLemrvRv6cvzjn7v936veC6E+Ui/66//+q+L5yKlD9SPP/64eHxDCmxTp07NXbWK893vfjdGjRpVXKb5kz/5k+JZW88//3xRLrhSC/bDH/6w1KNHj1KbNm2KW303bdqUu0oV6Wc/+1lxi+qXy/Tp03NXraKc7hyl8uKLL+auWsX5i7/4i1LPnj2Ltvf1r3+9dMstt5R++tOf5q5Wk+HW3vrdfvvtpc6dOxf/trp27Vqs79y5M3e1Kta//uu/lgYOHFiqrq4u9evXr/T8889nqUdV+s+Fj0AAAC14zggAUDmEEQAgK2EEAMhKGAEAshJGAICshBEAICthBADIShgBALISRgCArIQRACArYQQAyEoYAQAip/8Hl4SuuY/0QzkAAAAASUVORK5CYII=", "text/plain": [ "
" ] @@ -398,12 +398,12 @@ }, { "cell_type": "code", - "execution_count": 86, + "execution_count": 14, "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhYAAAGdCAYAAABO2DpVAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAdVklEQVR4nO3db6ybdf3/8de1tadDOK0M3LjmzgYGBGHuCBtb1vkXJlcXsoBplBiMRzQmkIMyFxOyc8P13Chn3tCAZhl/VDDRZaDJQE3o5XIJ6zFlwrYsGRBRlMQTd22DxLRnJ+bQc87nd+PHOs+X7dCe8zm92u75SJrSrqefd64Yr2eu62rrGGOMAAAALFgQ9QAAAKBzEBYAAMAawgIAAFhDWAAAAGsICwAAYA1hAQAArCEsAACANYQFAACwJtbsBaempnT8+HF1d3fLcZxmLw8AAGbBGKPR0VEtW7ZMCxac/7hE08Pi+PHj6unpafayAADAgpGRES1fvvy8/970sOju7pb0/wdLJpPNXh4AAMxCpVJRT09PbT9+Pk0PizOnP5LJJGEBAECb+aDLGLh4EwAAWENYAAAAawgLAABgDWEBAACsISwAAIA1hAUAALCGsAAAoEOEYahcLqcwDCObgbAAAKBDhGGowcFBwgIAAHQGwgIAAFhDWAAAAGsICwAAYA1hAQBAhzDGTLuPAmEBAECbM8bI931ls1lJUjable/7kQQGYQEAQJs6ExTpdFqZTEau62pgYECu6yqTySidTjc9MAgLAADaUBAEtaCQpEKhoFKppHw+r1KppEKhIEm1wAiCoClzERYAALShYrEo6WxQeJ4nx3EkSY7jyPO8aYExPDzclLkc0+QTMJVKRalUSuVyWclksplLAwDQMarVqmKxWC0mZmKM0cTEhOLx+KzXq3f/HZv1CgAAIDKNRILjOHOKikbM6VTIzp075TiOtm7damkcAADQzmYdFq+88ooee+wxrV692uY8AACgjc0qLE6fPq27775bTzzxhC699FLbMwEAgDY1q7Do7+/X7bffrk2bNtmeBwAAtLGGL97cu3evjhw5oldeeaWu14+Pj2t8fLz2uFKpNLokAABoEw0dsRgZGdEDDzygX//611q0aFFdfzM0NKRUKlW79fT0zGpQAADQ+hr6Hotnn31WX/rSl7Rw4cLac5OTk3IcRwsWLND4+Pi0f5POfcSip6eH77EAAKCNzMv3WNx66606duzYtOfuueceXXfddXrwwQffFxWSlEgklEgkGlkGAAC0qYbCoru7W6tWrZr23MUXX6zLLrvsfc8DAIALD78VAgAArJnzV3q/+OKLFsYAAACdgCMWAADAGsICAABYQ1gAAABrCAsAAGANYQEAAKwhLAAAgDWEBQAAsIawAIAIhGGoXC6nMAyjHgWwirAAgAiEYajBwUHCAh2HsAAAANYQFgAAwBrCAgAAWENYAAAAawgLAIiAMWbaPdApCAsAaCJjjHzfVzablSRls1n5vk9goGMQFgDQBGeCIp1OK5PJyHVdDQwMyHVdZTIZpdNpAgMdgbAAgHkWBEEtKCSpUCioVCopn8+rVCqpUChIUi0wgiCIclxgTggLAJhnxWJR0tmg8DxPjuNIkhzHked50wJjeHg4slmBuXJMk4+7VSoVpVIplctlJZPJZi4NAJGoVquKxWK1mJiJMUYTExOKx+NNmAyoX73771gTZwKAC1IjkeA4DlGBtsapEAAAYA1hAQAArCEsAACANYQFAACwhrAAAADWEBYAAMAawgIAAFhDWAAAAGsICwAAYA1hAQAArCEsAACANYQFAACwhrAAAADWEBYAAMAawgIAAFhDWAAAAGsICwAAYA1hAQAArCEsgBmEYahcLqcwDKMeBQDaAmEBzCAMQw0ODhIWAFAnwgIAAFhDWAAAAGsICwAAYA1hAQAArCEsgBkYY6bdAwBmRlgA52CMke/7ymazkqRsNivf9wkMAPgAhAXwP84ERTqdViaTkeu6GhgYkOu6ymQySqfTBAYAzICwAN4TBEEtKCSpUCioVCopn8+rVCqpUChIUi0wgiCIclwAaEmEBfCeYrEo6WxQeJ4nx3EkSY7jyPO8aYExPDwc2awA0Koc0+RjupVKRalUSuVyWclksplLAzOqVquKxWK1mJiJMUYTExOKx+NNmAwAolfv/jvWxJmAltZIJDiOQ1QAwDlwKgQAAFhDWAAAAGsICwAAYA1hAQAArCEsAACANYQFAACwhrAAAADWEBYAAMAawgIAAFhDWAAAAGsICwAAYA1hAQAArCEsAACANYQFAACwhrAAAADWEBYAAMAawgIAAFjTMWERhqFyuZzCMIx6FAAALlgdFRaDg4OEBQAAEeqYsAAAANFrKCx2796t1atXK5lMKplM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r0cffVQf+tCH9Itf/GI+5gMAAG2kobB49913dfjwYW3atOnsGyxYoE2bNumll14659+Mj4+rUqlMu80HY8y0ewAA0HwNhcU777yjyclJLV26dNrzS5cu1YkTJ875N0NDQ0qlUrVbT0/P7Kc9B2OMfN9XNpuVJGWzWfm+T2AAABCBef9UyPbt21Uul2u3kZERK+97JijS6bQymYxc19XAwIBc11Umk1E6nSYwAABosobC4vLLL9fChQt18uTJac+fPHlSV1xxxTn/JpFIKJlMTrvNVRAEtaCQpEKhoFKppHw+r1KppEKhIEm1wAiCYM5rAgCAD9ZQWHR1dWnNmjXTdtRTU1MKgkAbNmywPtz5FItFSWeDwvM8OY4jSXIcR57nTQuM4eHhps0GAMCFzDENnit4+umn1dfXp8cee0zr1q3Tww8/rGeeeUZ//etf33ftxblUKhWlUimVy+VZH72oVquKxWK1mJiJMUYTExOKx+OzWgsAANS//441+sZ33XWX3n77bf3gBz/QiRMn9KlPfUqFQqGuqLClkUhwHIeoAACgSRo+YjFXNo5YAACA5qp3/81vhQAAAGsICwAAYA1hAQAArCEsAACANYQFAACwhrAAAADWEBYAAMAawgIAAFhDWAAAAGsa/krvuTrzRZ+VSqXZSwMAgFk6s9/+oC/sbnpYjI6OSpJ6enqavTQAAJij0dFRpVKp8/57038rZGpqSsePH1d3d3ddv05ar0qlop6eHo2MjPAbJB+AbVU/tlVj2F71Y1vVj21Vv/ncVsYYjY6OatmyZVqw4PxXUjT9iMWCBQu0fPnyeXv/ZDLJ//DqxLaqH9uqMWyv+rGt6se2qt98bauZjlScwcWbAADAGsICAABY0zFhkUgktGPHDiUSiahHaXlsq/qxrRrD9qof26p+bKv6tcK2avrFmwAAoHN1zBELAAAQPcICAABYQ1gAAABrCAsAAGBNx4TFrl27dOWVV2rRokVav369Xn755ahHajnFYlFbtmzRsmXL5DiOnn322ahHallDQ0O6+eab1d3drSVLlujOO+/UG2+8EfVYLWn37t1avXp17Qt5NmzYoOeffz7qsdrCzp075TiOtm7dGvUoLSmXy8lxnGm36667LuqxWta///1vfe1rX9Nll12miy66SJ/85Cd16NChps/REWHx9NNPa9u2bdqxY4eOHDmi3t5eeZ6nU6dORT1aSxkbG1Nvb6927doV9Sgt78CBA+rv79fBgwe1f/9+VatV3XbbbRobG4t6tJazfPly7dy5U4cPH9ahQ4d0yy236I477tBrr70W9Wgt7ZVXXtFjjz2m1atXRz1KS7vhhhsUhmHt9uc//znqkVrSf/7zH23cuFHxeFzPP/+8Xn/9df3oRz/SpZde2vxhTAdYt26d6e/vrz2enJw0y5YtM0NDQxFO1dokmX379kU9Rts4deqUkWQOHDgQ9Sht4dJLLzU/+9nPoh6jZY2OjpprrrnG7N+/33zuc58zDzzwQNQjtaQdO3aY3t7eqMdoCw8++KD59Kc/HfUYxhhj2v6IxbvvvqvDhw9r06ZNtecWLFigTZs26aWXXopwMnSScrksSVq8eHHEk7S2yclJ7d27V2NjY9qwYUPU47Ss/v5+3X777dP+fwvn9ve//13Lli3Txz72Md19993617/+FfVILel3v/ud1q5dqy9/+ctasmSJbrzxRj3xxBORzNL2YfHOO+9ocnJSS5cunfb80qVLdeLEiYimQieZmprS1q1btXHjRq1atSrqcVrSsWPHdMkllyiRSOjee+/Vvn37dP3110c9Vkvau3evjhw5oqGhoahHaXnr16/XU089pUKhoN27d+utt97SZz7zGY2OjkY9Wsv55z//qd27d+uaa66R7/u677779N3vfle//OUvmz5L03/dFGg3/f39evXVVzm3O4Nrr71WR48eVblc1m9/+1v19fXpwIEDxMX/MTIyogceeED79+/XokWLoh6n5W3evLn236tXr9b69eu1cuVKPfPMM/rWt74V4WStZ2pqSmvXrtVDDz0kSbrxxhv16quv6tFHH1VfX19TZ2n7IxaXX365Fi5cqJMnT057/uTJk7riiisimgqd4v7779cf/vAHvfDCC1q+fHnU47Ssrq4uXX311VqzZo2GhobU29urRx55JOqxWs7hw4d16tQp3XTTTYrFYorFYjpw4IB+8pOfKBaLaXJyMuoRW9qHP/xhffzjH9ebb74Z9Sgtx3Xd94X8Jz7xiUhOHbV9WHR1dWnNmjUKgqD23NTUlIIg4BwvZs0Yo/vvv1/79u3Tn/70J1111VVRj9RWpqamND4+HvUYLefWW2/VsWPHdPTo0dpt7dq1uvvuu3X06FEtXLgw6hFb2unTp/WPf/xDrutGPUrL2bhx4/s+Ev+3v/1NK1eubPosHXEqZNu2berr69PatWu1bt06PfzwwxobG9M999wT9Wgt5fTp09NK/6233tLRo0e1ePFirVixIsLJWk9/f7/27Nmj5557Tt3d3bXrdVKplC666KKIp2st27dv1+bNm7VixQqNjo5qz549evHFF+X7ftSjtZzu7u73Xadz8cUX67LLLuP6nXP4/ve/ry1btmjlypU6fvy4duzYoYULF+qrX/1q1KO1nO9973tKp9N66KGH9JWvfEUvv/yyHn/8cT3++OPNHybqj6XY8tOf/tSsWLHCdHV1mXXr1pmDBw9GPVLLeeGFF4yk9936+vqiHq3lnGs7STJPPvlk1KO1nG9+85tm5cqVpqury3zkIx8xt956q/njH/8Y9Vhtg4+bnt9dd91lXNc1XV1d5qMf/ai56667zJtvvhn1WC3r97//vVm1apVJJBLmuuuuM48//ngkc/Cz6QAAwJq2v8YCAAC0DsICAABYQ1gAAABrCAsAAGANYQEAAKwhLAAAgDWEBQAAsIawAAAA1hAWAADAGsICAABYQ1gAAABrCAsAAGDN/wMBrRt0LBoIPgAAAABJRU5ErkJggg==", + "image/png": "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AADZCAsAIBthAQBkIywAgGyEBcyiWq3OGAGYnbCAPUghMTg4GN3d3cU8jWkuMABmJyxgD0HR0dERXV1d0d7eHj09PcWY5mm7wADYO2EBbxsaGpoOimRgYCBGR0ejv7+/GNM8mQqMdH8AZhIW8Lbh4eEZQdHZ2RmlUqnYlsY03z0wRkZG6rpegMWoVK3xPt3x8fFoa2uLsbGxaG1treVDw6wmJiaiXC5Px8Rs0rfN5ORktLS01GRtAPU219fvck1XBYvYfCIhxYeoAHgnh0IAgGyEBQCQjbAAALIRFgBANsICAMhGWAAA2QgLACAbYQEAZCMsAIBshAUAkI2wAACyERYAQDbCAgDIRlgAANkICwAgG2EBAGQjLACAbJomLCqVSvT29hYjAFAfTRUWfX19wgIA6qhpwgIAaNCwuO222+L444+Pgw46KM4555x48skn868MAGj+sLj//vvjhhtuiJtuuik2b94cq1atis7Ozti6devCrBAAaN6w+NGPfhTf/OY346qrropTTz017rjjjnj/+98fv/jFLxZmhQBAc4bFW2+9FZs2bYoLL7zw/7/AkiXF/Iknntjj39mxY0eMj4/PuC2EarU6YwQAFnlYvPHGG7Fz58446qijZmxP81dffXWPf2f9+vXR1tY2fVuxYkXklEJicHAwuru7i3ka01xgAEATvitk3bp1MTY2Nn3bsmVL1qDo6OiIrq6uaG9vj56enmJM87RdYADAIg6LI444Ig444IB47bXXZmxP86OPPnqPf2fp0qXR2to647a/hoaGpoMiGRgYiNHR0ejv7y/GNE+mAiPdHwBYZGFx4IEHxurVq2e8UO/atauYn3vuuVErw8PDM4IivSulVCoV29KY5rsHxsjISM3WBgDvZaXqPI8VpLebrlmzJu688844++yz45ZbbokHHngg/vrXv77j3Is9SSdvpnMt0mGRfd17MTExEeVyeTomZpP+8yYnJ6OlpWWfHgsAiDm/fpfn+4WvuOKKeP311+N73/teccLmxz/+8WLPwFyiIpf5REKKD1EBAIt0j8X+yrHHAgCorbm+fvusEAAgG2EBAGQjLACAbIQFAJCNsAAAshEWAEA2wgIAyEZYAADZCAsAIJt5X9J7f01d6DNdwQsAaAxTr9vvdsHumofFtm3binHFihW1fmgAIMPreLq096L5rJD0MeuvvPJKLFu2bE6fTjqfkkqxsmXLFp9B8i48V3PnuZofz9fcea7mznO1OJ6rlAspKpYvXx5LlixZPHss0mKOOeaYBfv66Yn0D29uPFdz57maH8/X3Hmu5s5zVf/narY9FVOcvAkAZCMsAIBsmiYsli5dGjfddFMxMjvP1dx5rubH8zV3nqu581w11nNV85M3AYDm1TR7LACA+hMWAEA2wgIAyEZYAADZNE1Y3HbbbXH88cfHQQcdFOecc048+eST9V7SojM8PByXXnppcdW0dNXTBx98sN5LWrTWr18fZ511VnGF2COPPDIuv/zyePHFF+u9rEXp9ttvj9NPP336gjznnntuPPzww/VeVkO4+eabi+/F66+/vt5LWZR6e3uL52f32ymnnFLvZS1a//73v+MrX/lKHH744fG+970vPvaxj8XTTz9d83U0RVjcf//9ccMNNxRvsdm8eXOsWrUqOjs7Y+vWrfVe2qKyffv24rlJEcbsHn/88Vi7dm1s3LgxHnnkkZiYmIiLLrqoeA6ZKV1JN71Abtq0qfghdv7558dll10Wzz//fL2Xtqg99dRTceeddxZRxt6ddtppUalUpm9//vOf672kRek///lPnHfeedHS0lKE/QsvvBA//OEP49BDD639YqpN4Oyzz66uXbt2er5z587q8uXLq+vXr6/ruhaz9H/9hg0b6r2MhrF169biOXv88cfrvZSGcOihh1Z/9rOf1XsZi9a2bduqJ510UvWRRx6pfuYzn6led9119V7SonTTTTdVV61aVe9lNIQbb7yx+slPfrK6GDT8Hou33nqr+E3pwgsvnPF5JGn+xBNP1HVtNI+xsbFiPOyww+q9lEVt586dcd999xV7dtIhEfYs7Q275JJLZvzcYs/+/ve/F4dvP/zhD8eVV14Z//rXv+q9pEXpd7/7XZx55pnxxS9+sTh8+4lPfCJ++tOf1mUtDR8Wb7zxRvHD7KijjpqxPc1fffXVuq2L5pE+kTcdA0+7GVeuXFnv5SxKzz77bBxyyCHF1f6uvvrq2LBhQ5x66qn1XtailMIrHbJN5/Ewu3S+3D333BMDAwPFuTwvv/xyfOpTnyo+YZOZ/vnPfxbP0UknnRSDg4NxzTXXxLe//e345S9/GbVW8083hUb87fK5555zbHcWJ598cjzzzDPFnp3f/va3sWbNmuI8FXExU/oo6+uuu644byedaM7sLr744uk/p3NRUmgcd9xx8cADD8Q3vvGNuq5tMf4CdOaZZ8b3v//9Yp72WKSfW3fccUfx/VhLDb/H4ogjjogDDjggXnvttRnb0/zoo4+u27poDtdee2384Q9/iEcffbQ4SZE9O/DAA+PEE0+M1atXF7+Jp5OEb7311nova9FJh23TSeVnnHFGlMvl4pYC7Mc//nHx57T3lb37wAc+EB/5yEfipZdeqvdSFp329vZ3hPxHP/rRuhw6WtIMP9DSD7OhoaEZ5ZbmjvGyr9L5rSkq0i79P/3pT3HCCSfUe0kNJX0P7tixo97LWHQuuOCC4rBR2rszdUu/ZaZzB9Kf0y9J7N2bb74Z//jHP4oXUWZKh2r/9y3xf/vb34o9PLXWFIdC0ltN066e9A169tlnxy233FKcPHbVVVfVe2mL7pty99JPxyvTD7N0QuKxxx5b17UtxsMf9957bzz00EPFtSymztdpa2sr3h/O/1u3bl2xyzr9G0rHvtPz9thjjxXHeZkp/Vv63/N0Dj744OK6A87feafvfve7xbV30ovjK6+8UlxSIMXXl7/85XovbdH5zne+Ex0dHcWhkC996UvFtZzuuuuu4lZz1Sbxk5/8pHrsscdWDzzwwOLtpxs3bqz3khadRx99tHjL5P/e1qxZU++lLTp7ep7S7e6776730hadr3/969Xjjjuu+N774Ac/WL3ggguqf/zjH+u9rIbh7aZ7d8UVV1Tb29uLf1sf+tCHivlLL71U72UtWr///e+rK1eurC5durR6yimnVO+66666rMPHpgMA2TT8ORYAwOIhLACAbIQFAJCNsAAAshEWAEA2wgIAyEZYAADZCAsAIBthAQBkIywAgGyEBQCQjbAAACKX/wMBrRt0TLFikwAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -428,7 +428,7 @@ }, { "cell_type": "code", - "execution_count": 87, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -451,12 +451,12 @@ }, { "cell_type": "code", - "execution_count": 88, + "execution_count": 16, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -472,6 +472,69 @@ "Plotting.plot_windfarm(windfarm_solution, ax)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Integration with Floris\n", + "\n", + "FLORIS v5 enables users to define their own wake models and integrate them into the FLORIS framework. MITWindfarm uses this feature to implement the curled wake model. The `FlorisCurledWindfarm` class wraps the `CurledWindfarm` model to enable it to be passed to FLORIS and called via the `FlorisModel` class.\n", + "\n", + "At the time of writing, FLORIS v5 is still in development. The necessary beta version of FLORIS v5 (branch name: dev/v5-beta) can be accessed [here](https://github.com/NatLabRockies/floris/tree/dev/v5-beta).\n", + "\n", + "The following code snippet demonstrates the use of the `FlorisCurledWindfarm` class in a typical FLORIS workflow. For a more detailed example, see `example_11_floris_interface.py`." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/msinner/projects/eni_floating/MITWindfarm/mitwindfarm/Windfield.py:167: RuntimeWarning: invalid value encountered in power\n", + " u = self.Uref * (z / self.zref) ** self.exp\n", + "\u001b[34mfloris.floris_model.FlorisModel\u001b[0m \u001b[1;30mWARNING\u001b[0m \u001b[33mSome velocities at the rotor are negative.\u001b[0m\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Turbine powers (MW):\n", + "[[1.75395446 0.18832377 0. ]\n", + " [1.75395446 1.36132894 1.34315905]\n", + " [2.49642786 1.95216172 1.93622085]\n", + " [2.49642786 2.49642651 2.49642728]]\n" + ] + } + ], + "source": [ + "from floris import FlorisModel, TimeSeries\n", + "\n", + "from mitwindfarm import FlorisCurledWindfarm\n", + "\n", + "fmodel = FlorisModel(\"defaults\")\n", + "fmodel.set(\n", + " layout_x=np.array([0.0, 600.0, 1200.0]),\n", + " layout_y=np.array([0.0, 0.0, 0.0]),\n", + " wind_data=TimeSeries(\n", + " wind_speeds=np.array([8.0, 8.0, 9.0, 9.0]),\n", + " wind_directions=np.array([270.0, 280.0, 280.0, 290.0]),\n", + " turbulence_intensities=np.array([0.06, 0.06, 0.06, 0.06]),\n", + " )\n", + ")\n", + "fmodel.set_wake_model(FlorisCurledWindfarm())\n", + "fmodel.run()\n", + "turbine_powers = fmodel.get_turbine_powers()\n", + "\n", + "# Turbine powers has shape (4, 3) because there are 4 wind conditions (or findices)\n", + "# and 3 turbines in the layout.\n", + "print(f\"Turbine powers (MW):\\n{turbine_powers / 1e6}\")" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -482,7 +545,7 @@ ], "metadata": { "kernelspec": { - "display_name": "mitwindfarm-iuGKr_rh-py3.12", + "display_name": "eni", "language": "python", "name": "python3" }, @@ -496,7 +559,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.11" + "version": "3.13.7" } }, "nbformat": 4, From 83f36225cfafe74f50e207da7d262636458a658c Mon Sep 17 00:00:00 2001 From: misi9170 Date: Tue, 4 Aug 2026 16:54:59 -0600 Subject: [PATCH 29/52] Pass through beta_s from init --- mitwindfarm/Rotor.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mitwindfarm/Rotor.py b/mitwindfarm/Rotor.py index 16891ff..491f80e 100644 --- a/mitwindfarm/Rotor.py +++ b/mitwindfarm/Rotor.py @@ -465,10 +465,10 @@ class UnifiedMomentumTI_x0(UnifiedMomentum): """ def __init__( - self, beta=0.1403, alpha=2.32, cached=True, v4_correction=1.0, **kwargs + self, beta_s=0.1403, alpha=2.32, cached=True, v4_correction=1.0, **kwargs ): super().__init__( - beta=beta, cached=cached, v4_correction=v4_correction, **kwargs + beta_s=beta_s, cached=cached, v4_correction=v4_correction, **kwargs ) self.alpha = alpha @@ -490,8 +490,8 @@ class UnifiedMomentumTI(UnifiedMomentum): Extends the Unified Momentum Model to include a TI dependence as described in Bastankhah and Porté-Agel (2016). """ - def __init__(self, beta=0.1403, alpha=2.32, **kwargs): - super().__init__(beta=beta, **kwargs) + def __init__(self, beta_s=0.1403, alpha=2.32, **kwargs): + super().__init__(beta_s=beta_s, **kwargs) self.alpha = alpha def residual( From b701d879eb25d7553dcb4ce722f3de60bc295aaf Mon Sep 17 00:00:00 2001 From: misi9170 Date: Tue, 4 Aug 2026 16:57:00 -0600 Subject: [PATCH 30/52] Update package dependencies --- poetry.lock | 2510 ++++++++++++++++++++++++++++++++---------------- pyproject.toml | 2 +- 2 files changed, 1689 insertions(+), 823 deletions(-) diff --git a/poetry.lock b/poetry.lock index a6ca6a8..515a235 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 2.1.3 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.4.1 and should not be changed by hand. [[package]] name = "anyio" @@ -152,10 +152,9 @@ typing_extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} name = "attrs" version = "25.4.0" description = "Classes Without Boilerplate" -optional = true +optional = false python-versions = ">=3.9" groups = ["main"] -markers = "extra == \"dev\"" files = [ {file = "attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373"}, {file = "attrs-25.4.0.tar.gz", hash = "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11"}, @@ -203,15 +202,15 @@ lxml = ["lxml"] [[package]] name = "bleach" -version = "6.2.0" +version = "6.3.0" description = "An easy safelist-based HTML-sanitizing tool." optional = true -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["main"] -markers = "python_version < \"3.14\" and extra == \"dev\"" +markers = "extra == \"dev\"" files = [ - {file = "bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e"}, - {file = "bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f"}, + {file = "bleach-6.3.0-py3-none-any.whl", hash = "sha256:fe10ec77c93ddf3d13a73b035abaac7a9f5e436513864ccdad516693213c65d6"}, + {file = "bleach-6.3.0.tar.gz", hash = "sha256:6f3b91b1c0a02bb9a78b5a454c92506aa0fdf197e1d5e114d2e00c6f64306d22"}, ] [package.dependencies] @@ -222,33 +221,134 @@ webencodings = "*" css = ["tinycss2 (>=1.1.0,<1.5)"] [[package]] -name = "bleach" -version = "6.3.0" -description = "An easy safelist-based HTML-sanitizing tool." -optional = true -python-versions = ">=3.10" +name = "cachebox" +version = "5.2.3" +description = "The fastest memoizing and caching Python library written in Rust" +optional = false +python-versions = ">=3.9" groups = ["main"] -markers = "python_version >= \"3.14\" and extra == \"dev\"" files = [ - {file = "bleach-6.3.0-py3-none-any.whl", hash = "sha256:fe10ec77c93ddf3d13a73b035abaac7a9f5e436513864ccdad516693213c65d6"}, - {file = "bleach-6.3.0.tar.gz", hash = "sha256:6f3b91b1c0a02bb9a78b5a454c92506aa0fdf197e1d5e114d2e00c6f64306d22"}, + {file = "cachebox-5.2.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:c2c89720547271d36e10cad2c7302bbe11f46eb39eead0a2c321c2d371b8f8b6"}, + {file = "cachebox-5.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e7f33d24e90dc8aa26762e25898c91a1223b66685420a28a3628fa2e006924f5"}, + {file = "cachebox-5.2.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56cb03ec6289a2ac5daf7422d755683324f02d821bfa796087100df2a7ebd5de"}, + {file = "cachebox-5.2.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a71a71df463ba4c86bc843fa01c3a2a721033adefad888af28c6b65e1915a75c"}, + {file = "cachebox-5.2.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbe4655371d19fc9f4f5874312bcb6e5b5b6182989979ac33d93c34c8d10c012"}, + {file = "cachebox-5.2.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4974476d1779961df89d6e6f79e6103a1659289d3ee11c92adcb52e236a8aaeb"}, + {file = "cachebox-5.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad16d733219f4cab3eec6533af30ab7b9c919c6e3e22ad1ef4eb82629a62edef"}, + {file = "cachebox-5.2.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:12a9e0a93774ca2b3a9fe8a2a0d0812e399fac4af0fce6246a5bca1e7009b8fc"}, + {file = "cachebox-5.2.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:be89497a011eb7a638d13cc520244d77579c0f515b95bf759b3de0b90a015203"}, + {file = "cachebox-5.2.3-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:dd01fc0c1934cccb76493eb4b149a9232d299e5e0275f557adf875c3d25cec81"}, + {file = "cachebox-5.2.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a0dfd97b0968f8bd48c33098a03d10f797964559c3a437c84bf97a9973545714"}, + {file = "cachebox-5.2.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:223ccf7ac60f595def258e7bc74c0b1d6f43991c9cae6d06749c803d22786d99"}, + {file = "cachebox-5.2.3-cp310-cp310-win32.whl", hash = "sha256:745b805fdd99931c3ce1d87d2ee21ca3fb62cba6b4e1f674907af87aad73dce4"}, + {file = "cachebox-5.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:a87b19c0a3d8d665a9805b5b4afd64b40082395b70ebe2756131ed1edb0c8f02"}, + {file = "cachebox-5.2.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:996f49d04b234082530afcc650bdd00556afbebc19c6c0daaafb85950340cb3c"}, + {file = "cachebox-5.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:23a3300ebbb526fa12ce6fa53699002f5fba6da23b4bbbaf8ba8b18a3f03e6b3"}, + {file = "cachebox-5.2.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79c63ee1589364caa04c018405e625d2e44e0bf9994f2715b2f322075d8c45b6"}, + {file = "cachebox-5.2.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ebd0f8d4ebc3943c1ddcbbdc54f1a8ddf95505c862ed5731319cebd1eb98ae41"}, + {file = "cachebox-5.2.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:569966efcc6309aa7d774443e3513cdbb8671efae0158138ba2ebb7d8cc9d8ed"}, + {file = "cachebox-5.2.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5774d06f0da37dd566239a4376d6ca8cf983d3e4c3228712ec22b4130f662f21"}, + {file = "cachebox-5.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae5bf8755bc66bcf42e7ca5c42d703a041a7aaad58f9a0c3be54d5b1cefd2641"}, + {file = "cachebox-5.2.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:63f061cc6a5ca70bbce2e6be0588fe2fee00a93a1b0581b1086d54b10288cdb6"}, + {file = "cachebox-5.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:577c781f18b559f4dc9eea176c6aed008843ef4b8e045cf61bb519e09dccc9ef"}, + {file = "cachebox-5.2.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:7f691e25572a3ddbb018e19d796f774713bd6b0f7ce9be2e71f6e18572de264a"}, + {file = "cachebox-5.2.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:33368adf86669c29b936fbae5d6219cf90aacd4b1db71dae2e23d584a8219cd6"}, + {file = "cachebox-5.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:38ce67b7b45713e49459a09411d07f82de04022c04aecde6202cd32f934c2b1f"}, + {file = "cachebox-5.2.3-cp311-cp311-win32.whl", hash = "sha256:a7cd2c81347063ab6c512d0f569aeb5f75fc2dfe686c8486258ffd08052324f4"}, + {file = "cachebox-5.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:7e45798d6b969794840bb302857946d710ecb32af78dfcb3ab40f4e68ee7fdaf"}, + {file = "cachebox-5.2.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:09c0340e9daa7b4530801e5a570cb0c1a1ad941a85d245d360020d3986d0e787"}, + {file = "cachebox-5.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f3162758792626685ec34950eedd565d015b115d0ff0d751d2716031fc32d51b"}, + {file = "cachebox-5.2.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a189a780c3ccd7b9d157074ba6bf3e191e522b39abbdb590075111851f02d50d"}, + {file = "cachebox-5.2.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:410b67baa99d433644199b11289627f7ebba4ee5786f95ca9858f238afcee157"}, + {file = "cachebox-5.2.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f81474dc19d3865fa5e57263f834bc6bbc00e471a594fb9d934ed552732c02fd"}, + {file = "cachebox-5.2.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:85ccd827193b3e3e887a88a16b88ef7ed174e7e65be515b5253322aa75e665c3"}, + {file = "cachebox-5.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a1e7d3cb8a5e7e68996a8619e3ef8771a124d14568c251f9e586eba88d759c1"}, + {file = "cachebox-5.2.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:adcedfcfcb933b21e7fdcfe560c79887bc8287abceab0586aa3730417dd0277d"}, + {file = "cachebox-5.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c7f0c72c51a3a9e7049ea6ff2a43cd3877ab7fee966eb65771a59621563b75e3"}, + {file = "cachebox-5.2.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:c48c10e498d573511aafbd545570e7f43b40a7428dc282183bf5adc334d9e1a8"}, + {file = "cachebox-5.2.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:2f1e086ab5ffd082a68bb63699d517655a59b06414927bfc84e01df91b81e34d"}, + {file = "cachebox-5.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:649d18399f13735bb82daa33800196f815529c49e967767c40ca221723e68afa"}, + {file = "cachebox-5.2.3-cp312-cp312-win32.whl", hash = "sha256:0a17aeb4e5b1c6ef1c3db8fc5186f9986e215ba5ea5a5d08baa45bcf55f261b2"}, + {file = "cachebox-5.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:cfd69114141ab362acaa2099e425a1b965cf7b021a539a4e953143d593930b74"}, + {file = "cachebox-5.2.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:9527c5c70f8735f2d696331d8bcf77254f03b4dc8542046807823bd36ed4e8ba"}, + {file = "cachebox-5.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:40ac878af00d5969862c1f6bc076de1e34ca248662fce6aecca1761f52e33e32"}, + {file = "cachebox-5.2.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5ff26bfd8f7e95b3becf6d5f65c25edaca50fa68078868648b70d79bcccc260"}, + {file = "cachebox-5.2.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:82e7002dd343afeeba2fcf0e483131b342a27ec3bc34b2214dc617691bda40d6"}, + {file = "cachebox-5.2.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ccbdc54a6c4b5758408c1083bdfa217bd382894a8331c7d0a54b84ba0cf51e5b"}, + {file = "cachebox-5.2.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:df5135a168f143d186b1cc3be0ca16b66446897ab5cedc03bd80bcc926fcd403"}, + {file = "cachebox-5.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10bedf96db8f9766cc956f9adcc623e604264e5d6fa2e255432f8c2ed7519143"}, + {file = "cachebox-5.2.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f22732d0d69bb84ad2dca7480bffdfd0430c647152d488936e152ecbbfee52fb"}, + {file = "cachebox-5.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:26ae0b68979204d360327f4c0725cfdc95cfc34ab73ab1a8f528e3bd2f6d023c"}, + {file = "cachebox-5.2.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:f3d628b816e28a6e7661d460e02dd5b421247cc2cd275814f80ea79621245fc4"}, + {file = "cachebox-5.2.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:64057caa6b741320655cd3c5997fe642dae5dbff571eb530e6f53e58272bb43b"}, + {file = "cachebox-5.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa325306084aa2dc0b21e07723d7700f4d43dece3732c7fdaf7a269dc5e35aa7"}, + {file = "cachebox-5.2.3-cp313-cp313-win32.whl", hash = "sha256:55003089d21c2f5515089c307be063b45558e884a4a1cc9593944374c89975c4"}, + {file = "cachebox-5.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:dcc5edb6ecf2b516e90b773d232360c5e4ed8fdcda038b19441da2ed9cf208ab"}, + {file = "cachebox-5.2.3-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:a4b7559fa4994c4032dd07466c2041d57e055feb814762e1f73f4e8beef188d0"}, + {file = "cachebox-5.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f57afada3d9327adf87f3b5cf0094348c6fd49354ab2e9bd20b044648eb094ae"}, + {file = "cachebox-5.2.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8342ff350ce86f062492752d612e9f056ac5dc56375713d75c3bf6e83b4d18db"}, + {file = "cachebox-5.2.3-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:405f9cc8492fc9d953b5a6b9e2b661e99583755c6639ab8d09a287fdf336503c"}, + {file = "cachebox-5.2.3-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:94aae393ec1d9b26565d346445bb6afa3963d2a0d3eb5e4188d0e510fab871a0"}, + {file = "cachebox-5.2.3-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8b0b575066fc09f6fae0d4bd30d6ff56584a6870cbe7d202916c5e0d725cfd4"}, + {file = "cachebox-5.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41e99c1240106d39b63ce7868a6cd8c9da9243fef08848b85d428164e0769fd2"}, + {file = "cachebox-5.2.3-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:432ca62b99f7eafc21af669d76c88c1b7377db179b89fb6fca3ea93b8f9fff19"}, + {file = "cachebox-5.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e51d9c59006b53447f806145406eb37a7fc3c25553d4fd24c3887f3b268d214e"}, + {file = "cachebox-5.2.3-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:5e48a405f699fb001b8af120a6e0b4a981277f84eb5dd66a1faa21e4b6fe9485"}, + {file = "cachebox-5.2.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8cbfc007ea78af61d75d7d26e5854df53dc5da6877d074afd4b4696c074f4ee7"}, + {file = "cachebox-5.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6a94d0da8133b3a0707ae11c9ea321f8fc37e3b5a14517019a05d632218b0f56"}, + {file = "cachebox-5.2.3-cp313-cp313t-win32.whl", hash = "sha256:5fee33549877c03c2494ec5359a57a7667f872fe8e296a7f39d3dfe08dd3914c"}, + {file = "cachebox-5.2.3-cp313-cp313t-win_amd64.whl", hash = "sha256:67548a05cd41fcc4f7af80a2f97f742fef3d436537ac2e1a1dce0fcba5d41190"}, + {file = "cachebox-5.2.3-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:37fa0891f0defee053c09f5f43f802f731e36e6e6ca055d7d174af07f77232ca"}, + {file = "cachebox-5.2.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:dc6315902f2ef4afbf10bc8e08c54ff34de5ce124546b8e0016c9b0d327be21e"}, + {file = "cachebox-5.2.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7df1735ca778480d51b8232fed397ffe3935158f20d34fb1c5ed171b53d5a6e2"}, + {file = "cachebox-5.2.3-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e22451cde8f884051e941b21870e4fc91fcf58d0d8c285bb8964107e1f02445c"}, + {file = "cachebox-5.2.3-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dcbccf3015d9a42bcf41260fa5cc048a5bdb75aa10997d514d6c976117f30ee2"}, + {file = "cachebox-5.2.3-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:311eae5079e256cbbfafdc3dcff1714b6598a767f9c1ef8c3709e74ea0cc12b0"}, + {file = "cachebox-5.2.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f4d2a80a5cd3380739c67f7d89e596634f5897b8d5a4a3dc1598312cb077535"}, + {file = "cachebox-5.2.3-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3977515b727a5203f494c44c4566fb936c4b940351c01d3d8e7b5d104dff4f53"}, + {file = "cachebox-5.2.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c5be17dd5c4fabcfecd5bcf6d54f9c6fb719daed3ef01ac1c03a14af0e2b26c1"}, + {file = "cachebox-5.2.3-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:6d37334fc218fdaee31db8a4f938938716e7c3b1b4059e25de27c8447fc95fde"}, + {file = "cachebox-5.2.3-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:1e5f1b7e23411b748d919348c3b65db1f9f8927ab8f6f3acae19bd617543df2d"}, + {file = "cachebox-5.2.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e7b06a75a898b31fd73c4d8bf727a9b9f8b5b7738cccd0ab5e6fd2a9cf659d3c"}, + {file = "cachebox-5.2.3-cp314-cp314-win32.whl", hash = "sha256:3b798052719f09a2ce7bf9fa9452dc0a7d4dc53b50a2d3aba6ce6ebc12d39df7"}, + {file = "cachebox-5.2.3-cp314-cp314-win_amd64.whl", hash = "sha256:4afc8b8575e3228a42ad8d819de5fbbecc6bd0b521295966b00244be37ae3b9b"}, + {file = "cachebox-5.2.3-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:0e8a34b82be30d3d9fb7dfaf9a86ec2b3ab9bc264715909ef27fc3d3587324d2"}, + {file = "cachebox-5.2.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:4d4e336aebf866463878ccd28a4d0ef4003ea216708cf4a02a7f198481b3af81"}, + {file = "cachebox-5.2.3-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b102fcdd97b0602bf5d6ba1a571bba3e3d6fa912b89fd768b0da5427408eab8"}, + {file = "cachebox-5.2.3-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:245a79fb2c5d3bff252f4263f76210ef3ad7c2ff9b0234859b26974830a80491"}, + {file = "cachebox-5.2.3-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd0e8dbd8fd4cf664c645c08f9e10508e133353756705c4a738e90a5406224b5"}, + {file = "cachebox-5.2.3-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fdb74294bdc33e39e26606919a9b2229038d5fac0edb80c9056683c08584d4a9"}, + {file = "cachebox-5.2.3-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bba3e9a7f52fa196b434522f39675f3b32a076976ef2373ded6f1065e99f4d20"}, + {file = "cachebox-5.2.3-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:abb21f0f937fb66528f1b9f1a04874d6aa503e78bbb26f4cf33bf67faddbdd68"}, + {file = "cachebox-5.2.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:dab6fd3189b0c746fb03e1915fd947aaca9112cedf26ef3a0c39383acf87d2e5"}, + {file = "cachebox-5.2.3-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:b4e7d2935b9df11d3717f99c7237b6780f1f8c70e6a99b69b8430d89929ec825"}, + {file = "cachebox-5.2.3-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:611aa260fe1b2506330ff72f415e2cb4053c9c4e3776ac68fe2eedee0e1b91b1"}, + {file = "cachebox-5.2.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a424ffb8514a9cb49bacff7995b7c767625cb2239692bd6524245e8579e375cc"}, + {file = "cachebox-5.2.3-cp314-cp314t-win32.whl", hash = "sha256:83988dd8e9075ee837e8407e26db49a9944ae74924d5db57b477444d7d98622c"}, + {file = "cachebox-5.2.3-cp314-cp314t-win_amd64.whl", hash = "sha256:dbda6390fa5070a19157ae35ab8066d3fe468634e0e9e21452c68ce7999c7d0c"}, + {file = "cachebox-5.2.3-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c798cddfb780156db09d3d96ed5da4c2d5fc01dad4bc7b54db5b20c34f221926"}, + {file = "cachebox-5.2.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:c8f3de4afeb3fd721620be3d02f2338bcbc3fdbd464ca14e1c474088c9669db0"}, + {file = "cachebox-5.2.3-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b39022c258872185327acffa9ad42d6bdf42f37d006d35c825a684eb5fa98d40"}, + {file = "cachebox-5.2.3-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5a0599fb85dcb6df9a86502435643fe90c793bbcd50b5d85217c70f2bc2e38fc"}, + {file = "cachebox-5.2.3-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3cdbe8f1b7716a44dc82ef3a6830a612260c7379478cfa80804632e2e6252b8e"}, + {file = "cachebox-5.2.3-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:783d1b9a0b3c77c43e7ae331b9d6561ad75827e16b2484e2a6cc289ec4d392ee"}, + {file = "cachebox-5.2.3-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c6476a2a842906fee782d92f8fbcb03ecfd22eecc39adb7fb5b047d7e1cf020"}, + {file = "cachebox-5.2.3-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:184bbcfa1370415b6d1f09e4fb74ab697dac8df09f522aa217a2fac65f973744"}, + {file = "cachebox-5.2.3-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:f89df36b46f8f5e11c0c49701ec3cebddf51191f96afb7bb75c394faf3c1cbc8"}, + {file = "cachebox-5.2.3-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:fb0bdcd9e28686e3b91d5210c843542858f0f10de151181aee27a7978fe4992e"}, + {file = "cachebox-5.2.3-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:5196f0d2c2f99c92ddf0d2c37803ff90509d14a5df211b7754feb8b61ffd8740"}, + {file = "cachebox-5.2.3-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:73671850d8c3634ab217398c83715d3feb52589ec97bd8e2f4d22e472741ea48"}, + {file = "cachebox-5.2.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:70c718f6bb77e6ba142b9a055b81ce85412a0c0e5e82a154489b45e6f91d09ec"}, + {file = "cachebox-5.2.3.tar.gz", hash = "sha256:b1f68246685aa739bbbd2734befb1465363a1e1042407c154feadb065f17a099"}, ] -[package.dependencies] -tinycss2 = {version = ">=1.1.0,<1.5", optional = true, markers = "extra == \"css\""} -webencodings = "*" - -[package.extras] -css = ["tinycss2 (>=1.1.0,<1.5)"] - [[package]] name = "certifi" version = "2025.10.5" description = "Python package for providing Mozilla's CA Bundle." -optional = true +optional = false python-versions = ">=3.7" groups = ["main"] -markers = "extra == \"dev\"" files = [ {file = "certifi-2025.10.5-py3-none-any.whl", hash = "sha256:0f212c2744a9bb6de0c56639a6f68afe01ecd92d91f14ae897c4fe7bbeeef0de"}, {file = "certifi-2025.10.5.tar.gz", hash = "sha256:47c09d31ccf2acf0be3f701ea53595ee7e0b8fa08801c6624be771df09ae7b43"}, @@ -258,10 +358,10 @@ files = [ name = "cffi" version = "2.0.0" description = "Foreign Function Interface for Python calling C code." -optional = true +optional = false python-versions = ">=3.9" groups = ["main"] -markers = "extra == \"dev\"" +markers = "extra == \"dev\" or implementation_name == \"pypy\"" files = [ {file = "cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44"}, {file = "cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49"}, @@ -352,14 +452,67 @@ files = [ [package.dependencies] pycparser = {version = "*", markers = "implementation_name != \"PyPy\""} +[[package]] +name = "cftime" +version = "1.6.5" +description = "Time-handling functionality from netcdf4-python" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "cftime-1.6.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8ad81e8cb0eb873b33c3d1e22c6168163fdc64daa8f7aeb4da8092f272575f4d"}, + {file = "cftime-1.6.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:12d95c6af852114a13301c5a61e41afdbd1542e72939c1083796f8418b9b8b0e"}, + {file = "cftime-1.6.5-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2659b7df700e27d9e3671f686ce474dfb5fc274966961edf996acc148dfa094a"}, + {file = "cftime-1.6.5-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:94cebdfcda6a985b8e69aed22d00d6b8aa1f421495adbdcff1d59b3e896d81e2"}, + {file = "cftime-1.6.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:179681b023349a2fe277ceccc89d4fc52c0dd105cb59b7187b5bc5d442875133"}, + {file = "cftime-1.6.5-cp310-cp310-win_amd64.whl", hash = "sha256:d8b9fdecb466879cfe8ca4472b229b6f8d0bb65e4ffd44266ae17484bac2cf38"}, + {file = "cftime-1.6.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:474e728f5a387299418f8d7cb9c52248dcd5d977b2a01de7ec06bba572e26b02"}, + {file = "cftime-1.6.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ab9e80d4de815cac2e2d88a2335231254980e545d0196eb34ee8f7ed612645f1"}, + {file = "cftime-1.6.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ad24a563784e4795cb3d04bd985895b5db49ace2cbb71fcf1321fd80141f9a52"}, + {file = "cftime-1.6.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a3cda6fd12c7fb25eff40a6a857a2bf4d03e8cc71f80485d8ddc65ccbd80f16a"}, + {file = "cftime-1.6.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:28cda78d685397ba23d06273b9c916c3938d8d9e6872a537e76b8408a321369b"}, + {file = "cftime-1.6.5-cp311-cp311-win_amd64.whl", hash = "sha256:93ead088e3a216bdeb9368733a0ef89a7451dfc1d2de310c1c0366a56ad60dc8"}, + {file = "cftime-1.6.5-cp311-cp311-win_arm64.whl", hash = "sha256:3384d69a0a7f3d45bded21a8cbcce66c8ba06c13498eac26c2de41b1b9b6e890"}, + {file = "cftime-1.6.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:eef25caed5ebd003a38719bd3ff8847cd52ef2ea56c3ebdb2c9345ba131fc7c5"}, + {file = "cftime-1.6.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c87d2f3b949e45463e559233c69e6a9cf691b2b378c1f7556166adfabbd1c6b0"}, + {file = "cftime-1.6.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:82cb413973cc51b55642b3a1ca5b28db5b93a294edbef7dc049c074b478b4647"}, + {file = "cftime-1.6.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:85ba8e7356d239cfe56ef7707ac30feaf67964642ac760a82e507ee3c5db4ac4"}, + {file = "cftime-1.6.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:456039af7907a3146689bb80bfd8edabd074c7f3b4eca61f91b9c2670addd7ad"}, + {file = "cftime-1.6.5-cp312-cp312-win_amd64.whl", hash = "sha256:da84534c43699960dc980a9a765c33433c5de1a719a4916748c2d0e97a071e44"}, + {file = "cftime-1.6.5-cp312-cp312-win_arm64.whl", hash = "sha256:c62cd8db9ea40131eea7d4523691c5d806d3265d31279e4a58574a42c28acd77"}, + {file = "cftime-1.6.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4aba66fd6497711a47c656f3a732c2d1755ad15f80e323c44a8716ebde39ddd5"}, + {file = "cftime-1.6.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:89e7cba699242366e67d6fb5aee579440e791063f92a93853610c91647167c0d"}, + {file = "cftime-1.6.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2f1eb43d7a7b919ec99aee709fb62ef87ef1cf0679829ef93d37cc1c725781e9"}, + {file = "cftime-1.6.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e02a1d80ffc33fe469c7db68aa24c4a87f01da0c0c621373e5edadc92964900b"}, + {file = "cftime-1.6.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:18ab754805233cdd889614b2b3b86a642f6d51a57a1ec327c48053f3414f87d8"}, + {file = "cftime-1.6.5-cp313-cp313-win_amd64.whl", hash = "sha256:6c27add8f907f4a4cd400e89438f2ea33e2eb5072541a157a4d013b7dbe93f9c"}, + {file = "cftime-1.6.5-cp313-cp313-win_arm64.whl", hash = "sha256:31d1ff8f6bbd4ca209099d24459ec16dea4fb4c9ab740fbb66dd057ccbd9b1b9"}, + {file = "cftime-1.6.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:c69ce3bdae6a322cbb44e9ebc20770d47748002fb9d68846a1e934f1bd5daf0b"}, + {file = "cftime-1.6.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e62e9f2943e014c5ef583245bf2e878398af131c97e64f8cd47c1d7baef5c4e2"}, + {file = "cftime-1.6.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7da5fdaa4360d8cb89b71b8ded9314f2246aa34581e8105c94ad58d6102d9e4f"}, + {file = "cftime-1.6.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bff865b4ea4304f2744a1ad2b8149b8328b321dd7a2b9746ef926d229bd7cd49"}, + {file = "cftime-1.6.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e552c5d1c8a58f25af7521e49237db7ca52ed2953e974fe9f7c4491e95fdd36c"}, + {file = "cftime-1.6.5-cp314-cp314-win_amd64.whl", hash = "sha256:e645b095dc50a38ac454b7e7f0742f639e7d7f6b108ad329358544a6ff8c9ba2"}, + {file = "cftime-1.6.5-cp314-cp314-win_arm64.whl", hash = "sha256:b9044d7ac82d3d8af189df1032fdc871bbd3f3dd41a6ec79edceb5029b71e6e0"}, + {file = "cftime-1.6.5-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:9ef56460cb0576e1a9161e1428c9e1a633f809a23fa9d598f313748c1ae5064e"}, + {file = "cftime-1.6.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:4f4873d38b10032f9f3111c547a1d485519ae64eee6a7a2d091f1f8b08e1ba50"}, + {file = "cftime-1.6.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ccce0f4c9d3f38dd948a117e578b50d0e0db11e2ca9435fb358fd524813e4b61"}, + {file = "cftime-1.6.5-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:19cbfc5152fb0b34ce03acf9668229af388d7baa63a78f936239cb011ccbe6b1"}, + {file = "cftime-1.6.5-cp314-cp314t-win_amd64.whl", hash = "sha256:4470cd5ef3c2514566f53efbcbb64dd924fa0584637d90285b2f983bd4ee7d97"}, + {file = "cftime-1.6.5-cp314-cp314t-win_arm64.whl", hash = "sha256:034c15a67144a0a5590ef150c99f844897618b148b87131ed34fda7072614662"}, + {file = "cftime-1.6.5.tar.gz", hash = "sha256:8225fed6b9b43fb87683ebab52130450fc1730011150d3092096a90e54d1e81e"}, +] + +[package.dependencies] +numpy = ">=1.21.2" + [[package]] name = "charset-normalizer" version = "3.4.4" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -optional = true +optional = false python-versions = ">=3.7" groups = ["main"] -markers = "extra == \"dev\"" files = [ {file = "charset_normalizer-3.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d"}, {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8"}, @@ -483,12 +636,30 @@ description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" groups = ["main"] -markers = "extra == \"dev\" and sys_platform == \"win32\" or platform_system == \"Windows\"" +markers = "platform_system == \"Windows\" or sys_platform == \"win32\" and extra == \"dev\"" files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +[[package]] +name = "coloredlogs" +version = "15.0.1" +description = "Colored terminal output for Python's logging module" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["main"] +files = [ + {file = "coloredlogs-15.0.1-py2.py3-none-any.whl", hash = "sha256:612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934"}, + {file = "coloredlogs-15.0.1.tar.gz", hash = "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0"}, +] + +[package.dependencies] +humanfriendly = ">=9.1" + +[package.extras] +cron = ["capturer (>=2.4)"] + [[package]] name = "comm" version = "0.2.3" @@ -509,10 +680,10 @@ test = ["pytest"] name = "contourpy" version = "1.3.0" description = "Python library for calculating contours of 2D quadrilateral grids" -optional = true +optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version < \"3.14\" and (extra == \"dev\" or extra == \"examples\")" +markers = "python_version < \"3.11\"" files = [ {file = "contourpy-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:880ea32e5c774634f9fcd46504bf9f080a41ad855f4fef54f5380f5133d343c7"}, {file = "contourpy-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:76c905ef940a4474a6289c71d53122a4f77766eef23c03cd57016ce19d0f7b42"}, @@ -595,10 +766,10 @@ test-no-images = ["pytest", "pytest-cov", "pytest-rerunfailures", "pytest-xdist" name = "contourpy" version = "1.3.3" description = "Python library for calculating contours of 2D quadrilateral grids" -optional = true +optional = false python-versions = ">=3.11" groups = ["main"] -markers = "python_version >= \"3.14\" and (extra == \"dev\" or extra == \"examples\")" +markers = "python_version >= \"3.11\"" files = [ {file = "contourpy-1.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:709a48ef9a690e1343202916450bc48b9e51c049b089c7f79a267b46cffcdaa1"}, {file = "contourpy-1.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:23416f38bfd74d5d28ab8429cc4d63fa67d5068bd711a85edb1c3fb0c3e2f381"}, @@ -684,14 +855,35 @@ mypy = ["bokeh", "contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.17.0)", " test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] test-no-images = ["pytest", "pytest-cov", "pytest-rerunfailures", "pytest-xdist", "wurlitzer"] +[[package]] +name = "control" +version = "0.10.2" +description = "Python Control Systems Library" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "control-0.10.2-py3-none-any.whl", hash = "sha256:8f7b5c58f5ccd761a6c070e3dedceca4c53c7a9cf105fcc22caba7a67f99025a"}, + {file = "control-0.10.2.tar.gz", hash = "sha256:d0cf63f6cfb68a4c8e827c26c3744d129e9777fedc9a5d86ca4740548f23a98b"}, +] + +[package.dependencies] +matplotlib = ">=3.6" +numpy = ">=1.23" +scipy = ">=1.8" + +[package.extras] +cvxopt = ["cvxopt (>=1.2.0)"] +slycot = ["slycot (>=0.4.0)"] +test = ["numpydoc", "pytest", "pytest-timeout", "ruff"] + [[package]] name = "cycler" version = "0.12.1" description = "Composable style cycles" -optional = true +optional = false python-versions = ">=3.8" groups = ["main"] -markers = "extra == \"dev\" or extra == \"examples\"" files = [ {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, @@ -755,6 +947,31 @@ files = [ {file = "decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360"}, ] +[[package]] +name = "deepdiff" +version = "9.1.0" +description = "Deep Difference and Search of any Python object/data. Recreate objects by adding adding deltas to each other." +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "deepdiff-9.1.0-py3-none-any.whl", hash = "sha256:80c0460e1993b04f6f0ca79abf25548b129fd218478c4ebb08f80560f5d10610"}, + {file = "deepdiff-9.1.0.tar.gz", hash = "sha256:07e9e366fab4297755153c4eab795ad4ef3cbd0d51660e847f5751c6bd727687"}, +] + +[package.dependencies] +cachebox = ">=5.2,<6" +orderly-set = ">=5.5.0,<6" + +[package.extras] +cli = ["click (>=8.3.1,<8.4.0)", "pyyaml (>=6.0.3,<6.1.0)"] +coverage = ["coverage (>=7.13.5,<7.14.0)"] +dev = ["bump2version (>=1.0.1,<1.1.0)", "flit-core (==3.12.0)", "ipdb (>=0.13.13,<0.14.0)", "jsonpickle (>=4.1.1,<4.2.0)", "nox (==2026.2.9)", "numpy (>=2.2.0,<2.3.0) ; python_version < \"3.14\"", "numpy (>=2.4.3,<2.5.0) ; python_version >= \"3.14\"", "orjson (>=3.11.7,<3.12.0)", "pandas (>=2.2.0,<2.3.0) ; python_version < \"3.11\"", "pandas (>=3.0.1,<3.1.0) ; python_version >= \"3.11\"", "polars (>=1.39.3,<1.40.0)", "python-dateutil (>=2.9.0.post0,<2.10.0)", "pytz", "tomli (>=2.4.0,<2.5.0)", "tomli-w (>=1.2.0,<1.3.0)", "uuid6 (==2025.0.1)"] +docs = ["Sphinx (>=8.1.3,<8.2.0)", "furo (>=2024.8.6)", "sphinx-sitemap (>=2.9.0,<2.10.0)", "sphinxemoji (>=0.3.2,<0.4.0)"] +optimize = ["orjson"] +static = ["flake8 (>=7.3.0,<7.4.0)", "flake8-pyproject (>=1.2.4,<1.3.0)", "pydantic (>=2.12.5,<2.13.0)"] +test = ["pytest (>=9.0.3,<9.1.0)", "pytest-benchmark (>=5.2.3,<5.3.0)", "pytest-cov (>=7.1.0,<7.2.0)", "python-dotenv (>=1.2.2,<1.3.0)"] + [[package]] name = "defusedxml" version = "0.7.1" @@ -768,6 +985,34 @@ files = [ {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, ] +[[package]] +name = "dill" +version = "0.4.1" +description = "serialize all of Python" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "dill-0.4.1-py3-none-any.whl", hash = "sha256:1e1ce33e978ae97fcfcff5638477032b801c46c7c65cf717f95fbc2248f79a9d"}, + {file = "dill-0.4.1.tar.gz", hash = "sha256:423092df4182177d4d8ba8290c8a5b640c66ab35ec7da59ccfa00f6fa3eea5fa"}, +] + +[package.extras] +graph = ["objgraph (>=1.7.2)"] +profile = ["gprof2dot (>=2022.7.29)"] + +[[package]] +name = "et-xmlfile" +version = "2.0.0" +description = "An implementation of lxml.xmlfile for the standard library" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa"}, + {file = "et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54"}, +] + [[package]] name = "exceptiongroup" version = "1.3.0" @@ -775,7 +1020,7 @@ description = "Backport of PEP 654 (exception groups)" optional = true python-versions = ">=3.7" groups = ["main"] -markers = "extra == \"dev\" and python_version < \"3.11\"" +markers = "python_version < \"3.11\" and extra == \"dev\"" files = [ {file = "exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10"}, {file = "exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88"}, @@ -819,14 +1064,45 @@ files = [ [package.extras] devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] +[[package]] +name = "floris" +version = "4.6.6" +description = "A controls-oriented engineering wake model." +optional = false +python-versions = ">=3.10, <3.15" +groups = ["main"] +files = [] +develop = false + +[package.dependencies] +attrs = "*" +coloredlogs = ">=15.0,<16.0" +matplotlib = ">=3.0,<4.0" +numexpr = ">=2.0,<3.0" +numpy = ">=2.0,<3.0" +pandas = ">=2.0,<4" +pathos = ">=0.3,<1.0" +pyyaml = ">=6.0,<7.0" +scipy = ">=1.1,<2.0" +shapely = ">=2.0,<3.0" + +[package.extras] +develop = ["isort (>=5,<9)", "pre-commit (>=4.0,<5.0)", "pytest (>=8,<10)", "pytest-benchmark (>=5.1,<6.0)", "ruff (>=0.9,<1.0)"] +docs = ["bokeh (>=3.7,<4.0)", "jupyter-book (>=1.0,<2.0)", "ruamel.yaml (>=0.18.0,<0.19.0)", "sphinx-autodoc-typehints (>=2,<4)", "sphinx-book-theme (>=1.0,<2.0)", "sphinxcontrib-autoyaml (>=1.0,<2.0)", "sphinxcontrib.mermaid (>=1,<3)"] + +[package.source] +type = "git" +url = "https://github.com/NatLabRockies/floris.git" +reference = "dev/v5-beta" +resolved_reference = "1f417ea73e27149fb5f67dec74c35e03e317f459" + [[package]] name = "fonttools" version = "4.60.1" description = "Tools to manipulate font files" -optional = true +optional = false python-versions = ">=3.9" groups = ["main"] -markers = "extra == \"dev\" or extra == \"examples\"" files = [ {file = "fonttools-4.60.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9a52f254ce051e196b8fe2af4634c2d2f02c981756c6464dc192f1b6050b4e28"}, {file = "fonttools-4.60.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c7420a2696a44650120cdd269a5d2e56a477e2bfa9d95e86229059beb1c19e15"}, @@ -992,82 +1268,34 @@ socks = ["socksio (==1.*)"] zstd = ["zstandard (>=0.18.0)"] [[package]] -name = "idna" -version = "3.11" -description = "Internationalized Domain Names in Applications (IDNA)" -optional = true -python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"dev\"" -files = [ - {file = "idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea"}, - {file = "idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902"}, -] - -[package.extras] -all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] - -[[package]] -name = "importlib-metadata" -version = "8.7.0" -description = "Read metadata from Python packages" -optional = true -python-versions = ">=3.9" +name = "humanfriendly" +version = "10.0" +description = "Human friendly output for text interfaces using Python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" groups = ["main"] -markers = "extra == \"dev\" and python_version == \"3.9\"" files = [ - {file = "importlib_metadata-8.7.0-py3-none-any.whl", hash = "sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd"}, - {file = "importlib_metadata-8.7.0.tar.gz", hash = "sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000"}, + {file = "humanfriendly-10.0-py2.py3-none-any.whl", hash = "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477"}, + {file = "humanfriendly-10.0.tar.gz", hash = "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc"}, ] [package.dependencies] -zipp = ">=3.20" - -[package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] -cover = ["pytest-cov"] -doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -enabler = ["pytest-enabler (>=2.2)"] -perf = ["ipython"] -test = ["flufl.flake8", "importlib_resources (>=1.3) ; python_version < \"3.9\"", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] -type = ["pytest-mypy"] +pyreadline3 = {version = "*", markers = "sys_platform == \"win32\" and python_version >= \"3.8\""} [[package]] -name = "importlib-resources" -version = "6.5.2" -description = "Read resources from Python packages" -optional = true -python-versions = ">=3.9" +name = "idna" +version = "3.11" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.8" groups = ["main"] -markers = "(extra == \"dev\" or extra == \"examples\") and python_version == \"3.9\"" files = [ - {file = "importlib_resources-6.5.2-py3-none-any.whl", hash = "sha256:789cfdc3ed28c78b67a06acb8126751ced69a3d5f79c095a98298cd8a760ccec"}, - {file = "importlib_resources-6.5.2.tar.gz", hash = "sha256:185f87adef5bcc288449d98fb4fba07cea78bc036455dd44c5fc4a2fe78fed2c"}, + {file = "idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea"}, + {file = "idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902"}, ] -[package.dependencies] -zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} - [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] -cover = ["pytest-cov"] -doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -enabler = ["pytest-enabler (>=2.2)"] -test = ["jaraco.test (>=5.4)", "pytest (>=6,!=8.1.*)", "zipp (>=3.17)"] -type = ["pytest-mypy"] - -[[package]] -name = "iniconfig" -version = "2.1.0" -description = "brain-dead simple config-ini parsing" -optional = true -python-versions = ">=3.8" -groups = ["main"] -markers = "python_version < \"3.14\" and extra == \"dev\"" -files = [ - {file = "iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760"}, - {file = "iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7"}, -] +all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] [[package]] name = "iniconfig" @@ -1076,7 +1304,7 @@ description = "brain-dead simple config-ini parsing" optional = true python-versions = ">=3.10" groups = ["main"] -markers = "python_version >= \"3.14\" and extra == \"dev\"" +markers = "extra == \"dev\"" files = [ {file = "iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12"}, {file = "iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730"}, @@ -1117,45 +1345,6 @@ pyqt5 = ["pyqt5"] pyside6 = ["pyside6"] test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0,<9)", "pytest-asyncio (>=0.23.5)", "pytest-cov", "pytest-timeout"] -[[package]] -name = "ipython" -version = "8.18.1" -description = "IPython: Productive Interactive Computing" -optional = true -python-versions = ">=3.9" -groups = ["main"] -markers = "python_version < \"3.14\" and extra == \"dev\"" -files = [ - {file = "ipython-8.18.1-py3-none-any.whl", hash = "sha256:e8267419d72d81955ec1177f8a29aaa90ac80ad647499201119e2f05e99aa397"}, - {file = "ipython-8.18.1.tar.gz", hash = "sha256:ca6f079bb33457c66e233e4580ebfc4128855b4cf6370dddd73842a9563e8a27"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} -decorator = "*" -exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} -jedi = ">=0.16" -matplotlib-inline = "*" -pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} -prompt-toolkit = ">=3.0.41,<3.1.0" -pygments = ">=2.4.0" -stack-data = "*" -traitlets = ">=5" -typing-extensions = {version = "*", markers = "python_version < \"3.10\""} - -[package.extras] -all = ["black", "curio", "docrepr", "exceptiongroup", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] -black = ["black"] -doc = ["docrepr", "exceptiongroup", "ipykernel", "matplotlib", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] -kernel = ["ipykernel"] -nbconvert = ["nbconvert"] -nbformat = ["nbformat"] -notebook = ["ipywidgets", "notebook"] -parallel = ["ipyparallel"] -qtconsole = ["qtconsole"] -test = ["pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath"] -test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath", "trio"] - [[package]] name = "ipython" version = "8.37.0" @@ -1163,7 +1352,7 @@ description = "IPython: Productive Interactive Computing" optional = true python-versions = ">=3.10" groups = ["main"] -markers = "python_version >= \"3.14\" and extra == \"dev\"" +markers = "extra == \"dev\"" files = [ {file = "ipython-8.37.0-py3-none-any.whl", hash = "sha256:ed87326596b878932dbcb171e3e698845434d8c61b8d8cd474bf663041a9dcf2"}, {file = "ipython-8.37.0.tar.gz", hash = "sha256:ca815841e1a41a1e6b73a0b08f3038af9b2252564d01fc405356d34033012216"}, @@ -1172,6 +1361,7 @@ files = [ [package.dependencies] colorama = {version = "*", markers = "sys_platform == \"win32\""} decorator = "*" +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} jedi = ">=0.16" matplotlib-inline = "*" pexpect = {version = ">4.3", markers = "sys_platform != \"win32\" and sys_platform != \"emscripten\""} @@ -1179,6 +1369,7 @@ prompt_toolkit = ">=3.0.41,<3.1.0" pygments = ">=2.4.0" stack_data = "*" traitlets = ">=5.13.0" +typing_extensions = {version = ">=4.6", markers = "python_version < \"3.12\""} [package.extras] all = ["ipython[black,doc,kernel,matplotlib,nbconvert,nbformat,notebook,parallel,qtconsole]", "ipython[test,test-extra]"] @@ -1273,6 +1464,18 @@ MarkupSafe = ">=2.0" [package.extras] i18n = ["Babel (>=2.7)"] +[[package]] +name = "joblib" +version = "1.5.3" +description = "Lightweight pipelining with Python functions" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "joblib-1.5.3-py3-none-any.whl", hash = "sha256:5fc3c5039fc5ca8c0276333a188bbd59d6b7ab37fe6632daa76bc7f9ec18e713"}, + {file = "joblib-1.5.3.tar.gz", hash = "sha256:8561a3269e6801106863fd0d6d84bb737be9e7631e33aaed3fb9ce5953688da3"}, +] + [[package]] name = "json5" version = "0.12.1" @@ -1289,6 +1492,21 @@ files = [ [package.extras] dev = ["build (==1.2.2.post1)", "coverage (==7.5.4) ; python_version < \"3.9\"", "coverage (==7.8.0) ; python_version >= \"3.9\"", "mypy (==1.14.1) ; python_version < \"3.9\"", "mypy (==1.15.0) ; python_version >= \"3.9\"", "pip (==25.0.1)", "pylint (==3.2.7) ; python_version < \"3.9\"", "pylint (==3.3.6) ; python_version >= \"3.9\"", "ruff (==0.11.2)", "twine (==6.1.0)", "uv (==0.6.11)"] +[[package]] +name = "jsonmerge" +version = "1.9.2" +description = "Merge a series of JSON documents." +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "jsonmerge-1.9.2-py3-none-any.whl", hash = "sha256:cab93ee7763fb51a4a09bbdab2eacf499ffb208ab94247ae86acea3e0e823b05"}, + {file = "jsonmerge-1.9.2.tar.gz", hash = "sha256:c43757e0180b0e19b7ae4c130ad42a07cc580c31912f61f4823e8eaf2fa394a3"}, +] + +[package.dependencies] +jsonschema = ">2.4.0" + [[package]] name = "jsonpointer" version = "3.0.0" @@ -1306,10 +1524,9 @@ files = [ name = "jsonschema" version = "4.25.1" description = "An implementation of JSON Schema validation for Python" -optional = true +optional = false python-versions = ">=3.9" groups = ["main"] -markers = "extra == \"dev\"" files = [ {file = "jsonschema-4.25.1-py3-none-any.whl", hash = "sha256:3fba0169e345c7175110351d456342c364814cfcf3b964ba4587f22915230a63"}, {file = "jsonschema-4.25.1.tar.gz", hash = "sha256:e4a9655ce0da0c0b67a085847e00a3a51449e1157f4f75e9fb5aa545e122eb85"}, @@ -1321,7 +1538,7 @@ fqdn = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} idna = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} isoduration = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format-nongpl\""} -jsonschema-specifications = ">=2023.03.6" +jsonschema-specifications = ">=2023.3.6" referencing = ">=0.28.4" rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} rfc3986-validator = {version = ">0.1.0", optional = true, markers = "extra == \"format-nongpl\""} @@ -1338,10 +1555,9 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- name = "jsonschema-specifications" version = "2025.9.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" -optional = true +optional = false python-versions = ">=3.9" groups = ["main"] -markers = "extra == \"dev\"" files = [ {file = "jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe"}, {file = "jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d"}, @@ -1385,7 +1601,6 @@ files = [ ] [package.dependencies] -importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" python-dateutil = ">=2.8.2" pyzmq = ">=23.0" @@ -1422,28 +1637,6 @@ traitlets = ">=5.4" [package.extras] test = ["flaky", "pexpect", "pytest"] -[[package]] -name = "jupyter-core" -version = "5.8.1" -description = "Jupyter core package. A base package on which Jupyter projects rely." -optional = true -python-versions = ">=3.8" -groups = ["main"] -markers = "python_version < \"3.14\" and extra == \"dev\"" -files = [ - {file = "jupyter_core-5.8.1-py3-none-any.whl", hash = "sha256:c28d268fc90fb53f1338ded2eb410704c5449a358406e8a948b75706e24863d0"}, - {file = "jupyter_core-5.8.1.tar.gz", hash = "sha256:0a5f9706f70e64786b75acba995988915ebd4601c8a52e534a40b51c95f59941"}, -] - -[package.dependencies] -platformdirs = ">=2.5" -pywin32 = {version = ">=300", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} -traitlets = ">=5.3" - -[package.extras] -docs = ["intersphinx-registry", "myst-parser", "pydata-sphinx-theme", "sphinx-autodoc-typehints", "sphinxcontrib-spelling", "traitlets"] -test = ["ipykernel", "pre-commit", "pytest (<9)", "pytest-cov", "pytest-timeout"] - [[package]] name = "jupyter-core" version = "5.9.1" @@ -1451,7 +1644,7 @@ description = "Jupyter core package. A base package on which Jupyter projects re optional = true python-versions = ">=3.10" groups = ["main"] -markers = "python_version >= \"3.14\" and extra == \"dev\"" +markers = "extra == \"dev\"" files = [ {file = "jupyter_core-5.9.1-py3-none-any.whl", hash = "sha256:ebf87fdc6073d142e114c72c9e29a9d7ca03fad818c5d300ce2adc1fb0743407"}, {file = "jupyter_core-5.9.1.tar.gz", hash = "sha256:4d09aaff303b9566c3ce657f580bd089ff5c91f5f89cf7d8846c3cdf465b5508"}, @@ -1507,7 +1700,6 @@ files = [ ] [package.dependencies] -importlib_metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} jupyter_server = ">=1.1.2" [[package]] @@ -1585,7 +1777,6 @@ files = [ [package.dependencies] async-lru = ">=1.0.0" httpx = ">=0.25.0,<1" -importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} ipykernel = ">=6.5.0,<6.30.0 || >6.30.0" jinja2 = ">=3.0.3" jupyter-core = "*" @@ -1634,7 +1825,6 @@ files = [ [package.dependencies] babel = ">=2.10" -importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} jinja2 = ">=3.0.3" json5 = ">=0.9.0" jsonschema = ">=4.18.0" @@ -1660,139 +1850,13 @@ files = [ {file = "jupyterlab_widgets-3.0.15.tar.gz", hash = "sha256:2920888a0c2922351a9202817957a68c07d99673504d6cd37345299e971bb08b"}, ] -[[package]] -name = "kiwisolver" -version = "1.4.7" -description = "A fast implementation of the Cassowary constraint solver" -optional = true -python-versions = ">=3.8" -groups = ["main"] -markers = "python_version < \"3.14\" and (extra == \"dev\" or extra == \"examples\")" -files = [ - {file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8a9c83f75223d5e48b0bc9cb1bf2776cf01563e00ade8775ffe13b0b6e1af3a6"}, - {file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:58370b1ffbd35407444d57057b57da5d6549d2d854fa30249771775c63b5fe17"}, - {file = "kiwisolver-1.4.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aa0abdf853e09aff551db11fce173e2177d00786c688203f52c87ad7fcd91ef9"}, - {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8d53103597a252fb3ab8b5845af04c7a26d5e7ea8122303dd7a021176a87e8b9"}, - {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:88f17c5ffa8e9462fb79f62746428dd57b46eb931698e42e990ad63103f35e6c"}, - {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88a9ca9c710d598fd75ee5de59d5bda2684d9db36a9f50b6125eaea3969c2599"}, - {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f4d742cb7af1c28303a51b7a27aaee540e71bb8e24f68c736f6f2ffc82f2bf05"}, - {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e28c7fea2196bf4c2f8d46a0415c77a1c480cc0724722f23d7410ffe9842c407"}, - {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e968b84db54f9d42046cf154e02911e39c0435c9801681e3fc9ce8a3c4130278"}, - {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0c18ec74c0472de033e1bebb2911c3c310eef5649133dd0bedf2a169a1b269e5"}, - {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8f0ea6da6d393d8b2e187e6a5e3fb81f5862010a40c3945e2c6d12ae45cfb2ad"}, - {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:f106407dda69ae456dd1227966bf445b157ccc80ba0dff3802bb63f30b74e895"}, - {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:84ec80df401cfee1457063732d90022f93951944b5b58975d34ab56bb150dfb3"}, - {file = "kiwisolver-1.4.7-cp310-cp310-win32.whl", hash = "sha256:71bb308552200fb2c195e35ef05de12f0c878c07fc91c270eb3d6e41698c3bcc"}, - {file = "kiwisolver-1.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:44756f9fd339de0fb6ee4f8c1696cfd19b2422e0d70b4cefc1cc7f1f64045a8c"}, - {file = "kiwisolver-1.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:78a42513018c41c2ffd262eb676442315cbfe3c44eed82385c2ed043bc63210a"}, - {file = "kiwisolver-1.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d2b0e12a42fb4e72d509fc994713d099cbb15ebf1103545e8a45f14da2dfca54"}, - {file = "kiwisolver-1.4.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2a8781ac3edc42ea4b90bc23e7d37b665d89423818e26eb6df90698aa2287c95"}, - {file = "kiwisolver-1.4.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:46707a10836894b559e04b0fd143e343945c97fd170d69a2d26d640b4e297935"}, - {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef97b8df011141c9b0f6caf23b29379f87dd13183c978a30a3c546d2c47314cb"}, - {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab58c12a2cd0fc769089e6d38466c46d7f76aced0a1f54c77652446733d2d02"}, - {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:803b8e1459341c1bb56d1c5c010406d5edec8a0713a0945851290a7930679b51"}, - {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9a9e8a507420fe35992ee9ecb302dab68550dedc0da9e2880dd88071c5fb052"}, - {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18077b53dc3bb490e330669a99920c5e6a496889ae8c63b58fbc57c3d7f33a18"}, - {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6af936f79086a89b3680a280c47ea90b4df7047b5bdf3aa5c524bbedddb9e545"}, - {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:3abc5b19d24af4b77d1598a585b8a719beb8569a71568b66f4ebe1fb0449460b"}, - {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:933d4de052939d90afbe6e9d5273ae05fb836cc86c15b686edd4b3560cc0ee36"}, - {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:65e720d2ab2b53f1f72fb5da5fb477455905ce2c88aaa671ff0a447c2c80e8e3"}, - {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3bf1ed55088f214ba6427484c59553123fdd9b218a42bbc8c6496d6754b1e523"}, - {file = "kiwisolver-1.4.7-cp311-cp311-win32.whl", hash = "sha256:4c00336b9dd5ad96d0a558fd18a8b6f711b7449acce4c157e7343ba92dd0cf3d"}, - {file = "kiwisolver-1.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:929e294c1ac1e9f615c62a4e4313ca1823ba37326c164ec720a803287c4c499b"}, - {file = "kiwisolver-1.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:e33e8fbd440c917106b237ef1a2f1449dfbb9b6f6e1ce17c94cd6a1e0d438376"}, - {file = "kiwisolver-1.4.7-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:5360cc32706dab3931f738d3079652d20982511f7c0ac5711483e6eab08efff2"}, - {file = "kiwisolver-1.4.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:942216596dc64ddb25adb215c3c783215b23626f8d84e8eff8d6d45c3f29f75a"}, - {file = "kiwisolver-1.4.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:48b571ecd8bae15702e4f22d3ff6a0f13e54d3d00cd25216d5e7f658242065ee"}, - {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad42ba922c67c5f219097b28fae965e10045ddf145d2928bfac2eb2e17673640"}, - {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:612a10bdae23404a72941a0fc8fa2660c6ea1217c4ce0dbcab8a8f6543ea9e7f"}, - {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e838bba3a3bac0fe06d849d29772eb1afb9745a59710762e4ba3f4cb8424483"}, - {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:22f499f6157236c19f4bbbd472fa55b063db77a16cd74d49afe28992dff8c258"}, - {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693902d433cf585133699972b6d7c42a8b9f8f826ebcaf0132ff55200afc599e"}, - {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4e77f2126c3e0b0d055f44513ed349038ac180371ed9b52fe96a32aa071a5107"}, - {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:657a05857bda581c3656bfc3b20e353c232e9193eb167766ad2dc58b56504948"}, - {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4bfa75a048c056a411f9705856abfc872558e33c055d80af6a380e3658766038"}, - {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:34ea1de54beef1c104422d210c47c7d2a4999bdecf42c7b5718fbe59a4cac383"}, - {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:90da3b5f694b85231cf93586dad5e90e2d71b9428f9aad96952c99055582f520"}, - {file = "kiwisolver-1.4.7-cp312-cp312-win32.whl", hash = "sha256:18e0cca3e008e17fe9b164b55735a325140a5a35faad8de92dd80265cd5eb80b"}, - {file = "kiwisolver-1.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:58cb20602b18f86f83a5c87d3ee1c766a79c0d452f8def86d925e6c60fbf7bfb"}, - {file = "kiwisolver-1.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:f5a8b53bdc0b3961f8b6125e198617c40aeed638b387913bf1ce78afb1b0be2a"}, - {file = "kiwisolver-1.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2e6039dcbe79a8e0f044f1c39db1986a1b8071051efba3ee4d74f5b365f5226e"}, - {file = "kiwisolver-1.4.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a1ecf0ac1c518487d9d23b1cd7139a6a65bc460cd101ab01f1be82ecf09794b6"}, - {file = "kiwisolver-1.4.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7ab9ccab2b5bd5702ab0803676a580fffa2aa178c2badc5557a84cc943fcf750"}, - {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f816dd2277f8d63d79f9c8473a79fe54047bc0467754962840782c575522224d"}, - {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf8bcc23ceb5a1b624572a1623b9f79d2c3b337c8c455405ef231933a10da379"}, - {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dea0bf229319828467d7fca8c7c189780aa9ff679c94539eed7532ebe33ed37c"}, - {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c06a4c7cf15ec739ce0e5971b26c93638730090add60e183530d70848ebdd34"}, - {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:913983ad2deb14e66d83c28b632fd35ba2b825031f2fa4ca29675e665dfecbe1"}, - {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5337ec7809bcd0f424c6b705ecf97941c46279cf5ed92311782c7c9c2026f07f"}, - {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4c26ed10c4f6fa6ddb329a5120ba3b6db349ca192ae211e882970bfc9d91420b"}, - {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c619b101e6de2222c1fcb0531e1b17bbffbe54294bfba43ea0d411d428618c27"}, - {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:073a36c8273647592ea332e816e75ef8da5c303236ec0167196793eb1e34657a"}, - {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3ce6b2b0231bda412463e152fc18335ba32faf4e8c23a754ad50ffa70e4091ee"}, - {file = "kiwisolver-1.4.7-cp313-cp313-win32.whl", hash = "sha256:f4c9aee212bc89d4e13f58be11a56cc8036cabad119259d12ace14b34476fd07"}, - {file = "kiwisolver-1.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:8a3ec5aa8e38fc4c8af308917ce12c536f1c88452ce554027e55b22cbbfbff76"}, - {file = "kiwisolver-1.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:76c8094ac20ec259471ac53e774623eb62e6e1f56cd8690c67ce6ce4fcb05650"}, - {file = "kiwisolver-1.4.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5d5abf8f8ec1f4e22882273c423e16cae834c36856cac348cfbfa68e01c40f3a"}, - {file = "kiwisolver-1.4.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:aeb3531b196ef6f11776c21674dba836aeea9d5bd1cf630f869e3d90b16cfade"}, - {file = "kiwisolver-1.4.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b7d755065e4e866a8086c9bdada157133ff466476a2ad7861828e17b6026e22c"}, - {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08471d4d86cbaec61f86b217dd938a83d85e03785f51121e791a6e6689a3be95"}, - {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7bbfcb7165ce3d54a3dfbe731e470f65739c4c1f85bb1018ee912bae139e263b"}, - {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d34eb8494bea691a1a450141ebb5385e4b69d38bb8403b5146ad279f4b30fa3"}, - {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9242795d174daa40105c1d86aba618e8eab7bf96ba8c3ee614da8302a9f95503"}, - {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a0f64a48bb81af7450e641e3fe0b0394d7381e342805479178b3d335d60ca7cf"}, - {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:8e045731a5416357638d1700927529e2b8ab304811671f665b225f8bf8d8f933"}, - {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:4322872d5772cae7369f8351da1edf255a604ea7087fe295411397d0cfd9655e"}, - {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:e1631290ee9271dffe3062d2634c3ecac02c83890ada077d225e081aca8aab89"}, - {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:edcfc407e4eb17e037bca59be0e85a2031a2ac87e4fed26d3e9df88b4165f92d"}, - {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:4d05d81ecb47d11e7f8932bd8b61b720bf0b41199358f3f5e36d38e28f0532c5"}, - {file = "kiwisolver-1.4.7-cp38-cp38-win32.whl", hash = "sha256:b38ac83d5f04b15e515fd86f312479d950d05ce2368d5413d46c088dda7de90a"}, - {file = "kiwisolver-1.4.7-cp38-cp38-win_amd64.whl", hash = "sha256:d83db7cde68459fc803052a55ace60bea2bae361fc3b7a6d5da07e11954e4b09"}, - {file = "kiwisolver-1.4.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3f9362ecfca44c863569d3d3c033dbe8ba452ff8eed6f6b5806382741a1334bd"}, - {file = "kiwisolver-1.4.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e8df2eb9b2bac43ef8b082e06f750350fbbaf2887534a5be97f6cf07b19d9583"}, - {file = "kiwisolver-1.4.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f32d6edbc638cde7652bd690c3e728b25332acbadd7cad670cc4a02558d9c417"}, - {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e2e6c39bd7b9372b0be21456caab138e8e69cc0fc1190a9dfa92bd45a1e6e904"}, - {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dda56c24d869b1193fcc763f1284b9126550eaf84b88bbc7256e15028f19188a"}, - {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79849239c39b5e1fd906556c474d9b0439ea6792b637511f3fe3a41158d89ca8"}, - {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5e3bc157fed2a4c02ec468de4ecd12a6e22818d4f09cde2c31ee3226ffbefab2"}, - {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3da53da805b71e41053dc670f9a820d1157aae77b6b944e08024d17bcd51ef88"}, - {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8705f17dfeb43139a692298cb6637ee2e59c0194538153e83e9ee0c75c2eddde"}, - {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:82a5c2f4b87c26bb1a0ef3d16b5c4753434633b83d365cc0ddf2770c93829e3c"}, - {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce8be0466f4c0d585cdb6c1e2ed07232221df101a4c6f28821d2aa754ca2d9e2"}, - {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:409afdfe1e2e90e6ee7fc896f3df9a7fec8e793e58bfa0d052c8a82f99c37abb"}, - {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5b9c3f4ee0b9a439d2415012bd1b1cc2df59e4d6a9939f4d669241d30b414327"}, - {file = "kiwisolver-1.4.7-cp39-cp39-win32.whl", hash = "sha256:a79ae34384df2b615eefca647a2873842ac3b596418032bef9a7283675962644"}, - {file = "kiwisolver-1.4.7-cp39-cp39-win_amd64.whl", hash = "sha256:cf0438b42121a66a3a667de17e779330fc0f20b0d97d59d2f2121e182b0505e4"}, - {file = "kiwisolver-1.4.7-cp39-cp39-win_arm64.whl", hash = "sha256:764202cc7e70f767dab49e8df52c7455e8de0df5d858fa801a11aa0d882ccf3f"}, - {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:94252291e3fe68001b1dd747b4c0b3be12582839b95ad4d1b641924d68fd4643"}, - {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5b7dfa3b546da08a9f622bb6becdb14b3e24aaa30adba66749d38f3cc7ea9706"}, - {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd3de6481f4ed8b734da5df134cd5a6a64fe32124fe83dde1e5b5f29fe30b1e6"}, - {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a91b5f9f1205845d488c928e8570dcb62b893372f63b8b6e98b863ebd2368ff2"}, - {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40fa14dbd66b8b8f470d5fc79c089a66185619d31645f9b0773b88b19f7223c4"}, - {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:eb542fe7933aa09d8d8f9d9097ef37532a7df6497819d16efe4359890a2f417a"}, - {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bfa1acfa0c54932d5607e19a2c24646fb4c1ae2694437789129cf099789a3b00"}, - {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:eee3ea935c3d227d49b4eb85660ff631556841f6e567f0f7bda972df6c2c9935"}, - {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f3160309af4396e0ed04db259c3ccbfdc3621b5559b5453075e5de555e1f3a1b"}, - {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a17f6a29cf8935e587cc8a4dbfc8368c55edc645283db0ce9801016f83526c2d"}, - {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10849fb2c1ecbfae45a693c070e0320a91b35dd4bcf58172c023b994283a124d"}, - {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:ac542bf38a8a4be2dc6b15248d36315ccc65f0743f7b1a76688ffb6b5129a5c2"}, - {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:8b01aac285f91ca889c800042c35ad3b239e704b150cfd3382adfc9dcc780e39"}, - {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:48be928f59a1f5c8207154f935334d374e79f2b5d212826307d072595ad76a2e"}, - {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f37cfe618a117e50d8c240555331160d73d0411422b59b5ee217843d7b693608"}, - {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:599b5c873c63a1f6ed7eead644a8a380cfbdf5db91dcb6f85707aaab213b1674"}, - {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:801fa7802e5cfabe3ab0c81a34c323a319b097dfb5004be950482d882f3d7225"}, - {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0c6c43471bc764fad4bc99c5c2d6d16a676b1abf844ca7c8702bdae92df01ee0"}, - {file = "kiwisolver-1.4.7.tar.gz", hash = "sha256:9893ff81bd7107f7b685d3017cc6583daadb4fc26e4a888350df530e41980a60"}, -] - [[package]] name = "kiwisolver" version = "1.4.9" description = "A fast implementation of the Cassowary constraint solver" -optional = true +optional = false python-versions = ">=3.10" groups = ["main"] -markers = "python_version >= \"3.14\" and (extra == \"dev\" or extra == \"examples\")" files = [ {file = "kiwisolver-1.4.9-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b4b4d74bda2b8ebf4da5bd42af11d02d04428b2c32846e4c2c93219df8a7987b"}, {file = "kiwisolver-1.4.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fb3b8132019ea572f4611d770991000d7f58127560c4889729248eb5852a102f"}, @@ -2017,80 +2081,27 @@ files = [ ] [[package]] -name = "matplotlib" -version = "3.9.4" -description = "Python plotting package" -optional = true -python-versions = ">=3.9" +name = "marmot-agents" +version = "0.2.5" +description = "Agent based processs modeling." +optional = false +python-versions = "*" groups = ["main"] -markers = "python_version < \"3.14\" and (extra == \"dev\" or extra == \"examples\")" -files = [ - {file = "matplotlib-3.9.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:c5fdd7abfb706dfa8d307af64a87f1a862879ec3cd8d0ec8637458f0885b9c50"}, - {file = "matplotlib-3.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d89bc4e85e40a71d1477780366c27fb7c6494d293e1617788986f74e2a03d7ff"}, - {file = "matplotlib-3.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ddf9f3c26aae695c5daafbf6b94e4c1a30d6cd617ba594bbbded3b33a1fcfa26"}, - {file = "matplotlib-3.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18ebcf248030173b59a868fda1fe42397253f6698995b55e81e1f57431d85e50"}, - {file = "matplotlib-3.9.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:974896ec43c672ec23f3f8c648981e8bc880ee163146e0312a9b8def2fac66f5"}, - {file = "matplotlib-3.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:4598c394ae9711cec135639374e70871fa36b56afae17bdf032a345be552a88d"}, - {file = "matplotlib-3.9.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d4dd29641d9fb8bc4492420c5480398dd40a09afd73aebe4eb9d0071a05fbe0c"}, - {file = "matplotlib-3.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30e5b22e8bcfb95442bf7d48b0d7f3bdf4a450cbf68986ea45fca3d11ae9d099"}, - {file = "matplotlib-3.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bb0030d1d447fd56dcc23b4c64a26e44e898f0416276cac1ebc25522e0ac249"}, - {file = "matplotlib-3.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aca90ed222ac3565d2752b83dbb27627480d27662671e4d39da72e97f657a423"}, - {file = "matplotlib-3.9.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a181b2aa2906c608fcae72f977a4a2d76e385578939891b91c2550c39ecf361e"}, - {file = "matplotlib-3.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:1f6882828231eca17f501c4dcd98a05abb3f03d157fbc0769c6911fe08b6cfd3"}, - {file = "matplotlib-3.9.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:dfc48d67e6661378a21c2983200a654b72b5c5cdbd5d2cf6e5e1ece860f0cc70"}, - {file = "matplotlib-3.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:47aef0fab8332d02d68e786eba8113ffd6f862182ea2999379dec9e237b7e483"}, - {file = "matplotlib-3.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fba1f52c6b7dc764097f52fd9ab627b90db452c9feb653a59945de16752e965f"}, - {file = "matplotlib-3.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:173ac3748acaac21afcc3fa1633924609ba1b87749006bc25051c52c422a5d00"}, - {file = "matplotlib-3.9.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:320edea0cadc07007765e33f878b13b3738ffa9745c5f707705692df70ffe0e0"}, - {file = "matplotlib-3.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a4a4cfc82330b27042a7169533da7991e8789d180dd5b3daeaee57d75cd5a03b"}, - {file = "matplotlib-3.9.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:37eeffeeca3c940985b80f5b9a7b95ea35671e0e7405001f249848d2b62351b6"}, - {file = "matplotlib-3.9.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3e7465ac859ee4abcb0d836137cd8414e7bb7ad330d905abced457217d4f0f45"}, - {file = "matplotlib-3.9.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4c12302c34afa0cf061bea23b331e747e5e554b0fa595c96e01c7b75bc3b858"}, - {file = "matplotlib-3.9.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b8c97917f21b75e72108b97707ba3d48f171541a74aa2a56df7a40626bafc64"}, - {file = "matplotlib-3.9.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0229803bd7e19271b03cb09f27db76c918c467aa4ce2ae168171bc67c3f508df"}, - {file = "matplotlib-3.9.4-cp313-cp313-win_amd64.whl", hash = "sha256:7c0d8ef442ebf56ff5e206f8083d08252ee738e04f3dc88ea882853a05488799"}, - {file = "matplotlib-3.9.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a04c3b00066a688834356d196136349cb32f5e1003c55ac419e91585168b88fb"}, - {file = "matplotlib-3.9.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:04c519587f6c210626741a1e9a68eefc05966ede24205db8982841826af5871a"}, - {file = "matplotlib-3.9.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:308afbf1a228b8b525fcd5cec17f246bbbb63b175a3ef6eb7b4d33287ca0cf0c"}, - {file = "matplotlib-3.9.4-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddb3b02246ddcffd3ce98e88fed5b238bc5faff10dbbaa42090ea13241d15764"}, - {file = "matplotlib-3.9.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8a75287e9cb9eee48cb79ec1d806f75b29c0fde978cb7223a1f4c5848d696041"}, - {file = "matplotlib-3.9.4-cp313-cp313t-win_amd64.whl", hash = "sha256:488deb7af140f0ba86da003e66e10d55ff915e152c78b4b66d231638400b1965"}, - {file = "matplotlib-3.9.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:3c3724d89a387ddf78ff88d2a30ca78ac2b4c89cf37f2db4bd453c34799e933c"}, - {file = "matplotlib-3.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d5f0a8430ffe23d7e32cfd86445864ccad141797f7d25b7c41759a5b5d17cfd7"}, - {file = "matplotlib-3.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bb0141a21aef3b64b633dc4d16cbd5fc538b727e4958be82a0e1c92a234160e"}, - {file = "matplotlib-3.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57aa235109e9eed52e2c2949db17da185383fa71083c00c6c143a60e07e0888c"}, - {file = "matplotlib-3.9.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b18c600061477ccfdd1e6fd050c33d8be82431700f3452b297a56d9ed7037abb"}, - {file = "matplotlib-3.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:ef5f2d1b67d2d2145ff75e10f8c008bfbf71d45137c4b648c87193e7dd053eac"}, - {file = "matplotlib-3.9.4-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:44e0ed786d769d85bc787b0606a53f2d8d2d1d3c8a2608237365e9121c1a338c"}, - {file = "matplotlib-3.9.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:09debb9ce941eb23ecdbe7eab972b1c3e0276dcf01688073faff7b0f61d6c6ca"}, - {file = "matplotlib-3.9.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcc53cf157a657bfd03afab14774d54ba73aa84d42cfe2480c91bd94873952db"}, - {file = "matplotlib-3.9.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ad45da51be7ad02387801fd154ef74d942f49fe3fcd26a64c94842ba7ec0d865"}, - {file = "matplotlib-3.9.4.tar.gz", hash = "sha256:1e00e8be7393cbdc6fedfa8a6fba02cf3e83814b285db1c60b906a023ba41bc3"}, +files = [ + {file = "marmot-agents-0.2.5.tar.gz", hash = "sha256:d0038c28928681b74352397a357f290da00c86a10c9626219b3ae36899faa915"}, + {file = "marmot_agents-0.2.5-py3-none-any.whl", hash = "sha256:f7678a830593222436396163fb0788d9d113bf84afb956b8854aad465830c2a6"}, ] [package.dependencies] -contourpy = ">=1.0.1" -cycler = ">=0.10" -fonttools = ">=4.22.0" -importlib-resources = {version = ">=3.2.0", markers = "python_version < \"3.10\""} -kiwisolver = ">=1.3.1" -numpy = ">=1.23" -packaging = ">=20.0" -pillow = ">=8" -pyparsing = ">=2.3.1" -python-dateutil = ">=2.7" - -[package.extras] -dev = ["meson-python (>=0.13.1,<0.17.0)", "numpy (>=1.25)", "pybind11 (>=2.6,!=2.13.3)", "setuptools (>=64)", "setuptools_scm (>=7)"] +numpy = "*" [[package]] name = "matplotlib" version = "3.10.7" description = "Python plotting package" -optional = true +optional = false python-versions = ">=3.10" groups = ["main"] -markers = "python_version >= \"3.14\" and (extra == \"dev\" or extra == \"examples\")" files = [ {file = "matplotlib-3.10.7-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:7ac81eee3b7c266dd92cee1cd658407b16c57eed08c7421fa354ed68234de380"}, {file = "matplotlib-3.10.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:667ecd5d8d37813a845053d8f5bf110b534c3c9f30e69ebd25d4701385935a6d"}, @@ -2203,22 +2214,80 @@ name = "mitrotor" version = "0.2.1" description = "" optional = false -python-versions = "^3.8" +python-versions = ">3.10, <3.15" groups = ["main"] files = [] develop = false [package.dependencies] -numpy = ">=1.16.5" +floris = {git = "https://github.com/NatLabRockies/floris.git", branch = "dev/v5-beta"} +joblib = "^1.5.3" +numpy = "^2.2.1" pyyaml = "^6.0.1" +rosco = "^2.10.4" +ruamel-yaml = "^0.19.1" scipy = ">=1.6" +seaborn = "^0.13.2" +tqdm-joblib = "^0.0.5" unified-momentum-model = {git = "https://github.com/Howland-Lab/Unified-Momentum-Model.git"} [package.source] type = "git" url = "https://github.com/Howland-Lab/MITRotor.git" -reference = "HEAD" -resolved_reference = "452992865f68f7a74a19fdab55b36f9bf77328d0" +reference = "sg/floris_interface" +resolved_reference = "63daecce5611b8f20cd34471085f23c8ed5ed245" + +[[package]] +name = "moorpy" +version = "1.3.0" +description = "A design-oriented mooring system library for Python" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "moorpy-1.3.0-py3-none-any.whl", hash = "sha256:2a6bf0f9db32fd49624471aeb152925ede383c0414db853c47069d5b3cd55b12"}, + {file = "moorpy-1.3.0.tar.gz", hash = "sha256:ccef5e65a8a0f65be48e0fc39275918c318390937bf426c26a96d5fda0692256"}, +] + +[package.dependencies] +matplotlib = "*" +numpy = "*" +pyyaml = "*" +scipy = "*" + +[package.extras] +dev = ["pre-commit"] +docs = ["sphinx", "sphinx-rtd-theme"] +test = ["pytest", "pytest-cov", "pytest-xdist"] + +[[package]] +name = "multiprocess" +version = "0.70.19" +description = "better multiprocessing and multithreading in Python" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "multiprocess-0.70.19-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:02e5c35d7d6cd2bdc89c1858867f7bde4012837411023a4696c148c1bdd7c80e"}, + {file = "multiprocess-0.70.19-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:79576c02d1207ec405b00cabf2c643c36070800cca433860e14539df7818b2aa"}, + {file = "multiprocess-0.70.19-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c6b6d78d43a03b68014ca1f0b7937d965393a670c5de7c29026beb2258f2f896"}, + {file = "multiprocess-0.70.19-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1bbf1b69af1cf64cd05f65337d9215b88079ec819cd0ea7bac4dab84e162efe7"}, + {file = "multiprocess-0.70.19-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:5be9ec7f0c1c49a4f4a6fd20d5dda4aeabc2d39a50f4ad53720f1cd02b3a7c2e"}, + {file = "multiprocess-0.70.19-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1c3dce098845a0db43b32a0b76a228ca059a668071cfeaa0f40c36c0b1585d45"}, + {file = "multiprocess-0.70.19-pp39-pypy39_pp73-macosx_10_13_arm64.whl", hash = "sha256:e5e7dc3e3e1732e88c07aaec17eeb9917f9ed1107d9e60d5ab985cdc14bac43a"}, + {file = "multiprocess-0.70.19-pp39-pypy39_pp73-macosx_10_13_x86_64.whl", hash = "sha256:e6c0674d34b8adac22533f6786576b3de4e396aaeda9e0c15378af9b8ada2702"}, + {file = "multiprocess-0.70.19-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d6db91ca6391eebc139c352f34578cea382df6bfa03d3b4146ed12b18b01cc14"}, + {file = "multiprocess-0.70.19-py310-none-any.whl", hash = "sha256:97404393419dcb2a8385910864eedf47a3cadf82c66345b44f036420eb0b5d87"}, + {file = "multiprocess-0.70.19-py311-none-any.whl", hash = "sha256:928851ae7973aea4ce0eaf330bbdafb2e01398a91518d5c8818802845564f45c"}, + {file = "multiprocess-0.70.19-py312-none-any.whl", hash = "sha256:3a56c0e85dd5025161bac5ce138dcac1e49174c7d8e74596537e729fd5c53c28"}, + {file = "multiprocess-0.70.19-py313-none-any.whl", hash = "sha256:8d5eb4ec5017ba2fab4e34a747c6d2c2b6fecfe9e7236e77988db91580ada952"}, + {file = "multiprocess-0.70.19-py314-none-any.whl", hash = "sha256:e8cc7fbdff15c0613f0a1f1f8744bef961b0a164c0ca29bdff53e9d2d93c5e5f"}, + {file = "multiprocess-0.70.19-py39-none-any.whl", hash = "sha256:0d4b4397ed669d371c81dcd1ef33fd384a44d6c3de1bd0ca7ac06d837720d3c5"}, + {file = "multiprocess-0.70.19.tar.gz", hash = "sha256:952021e0e6c55a4a9fe4cd787895b86e239a40e76802a789d6305398d3975897"}, +] + +[package.dependencies] +dill = ">=0.4.1" [[package]] name = "mypy" @@ -2336,7 +2405,6 @@ files = [ beautifulsoup4 = "*" bleach = {version = "!=5.0.0", extras = ["css"]} defusedxml = "*" -importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} jinja2 = ">=3.0" jupyter-core = ">=4.7" jupyterlab-pygments = "*" @@ -2394,6 +2462,151 @@ files = [ {file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"}, ] +[[package]] +name = "netcdf4" +version = "1.7.3" +description = "Provides an object-oriented python interface to the netCDF version 4 library" +optional = false +python-versions = ">=3.10" +groups = ["main"] +markers = "python_version < \"3.11\" and platform_system == \"Windows\" and platform_machine == \"ARM64\"" +files = [ + {file = "netcdf4-1.7.3-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:db761afd3a6b9482df018c4783e0bdf99141a41db1f14c68c89986effb182d57"}, + {file = "netcdf4-1.7.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:ad4c2d9b469248d83cbacb70ad9e7d3a6c0ba27febe839c90192147199745ba4"}, + {file = "netcdf4-1.7.3-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c6986d039717582071e55ae9c6fbebfe4e5bbbc3af122fc3db0c0c09c4d8955e"}, + {file = "netcdf4-1.7.3-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:348e79b4f26f2e403fe3c54364e9297e4ef326c7ee12f9be01c037db853d26c0"}, + {file = "netcdf4-1.7.3-cp310-cp310-win_amd64.whl", hash = "sha256:6ab71f5d70e55e8584d168d5158efdb2fd8d350a033d0c27d942c3d399587f54"}, + {file = "netcdf4-1.7.3-cp311-abi3-macosx_13_0_x86_64.whl", hash = "sha256:801c222d8ad35fd7dc7e9aa7ea6373d184bcb3b8ee6b794c5fbecaa5155b1792"}, + {file = "netcdf4-1.7.3-cp311-abi3-macosx_14_0_arm64.whl", hash = "sha256:83dbfd6f10a0ec785d5296016bd821bbe9f0df780be72fc00a1f0d179d9c5f0f"}, + {file = "netcdf4-1.7.3-cp311-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:949e086d4d2612b49e5b95f60119d216c9ceb7b17bc771e9e0fa0e9b9c0a2f9f"}, + {file = "netcdf4-1.7.3-cp311-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0c764ba6f6a1421cab5496097e8a1c4d2e36be2a04880dfd288bb61b348c217e"}, + {file = "netcdf4-1.7.3-cp311-abi3-win_amd64.whl", hash = "sha256:1b6c646fa179fb1e5e8d6e8231bc78cc0311eceaa1241256b5a853f1d04055b9"}, + {file = "netcdf4-1.7.3.tar.gz", hash = "sha256:83f122fc3415e92b1d4904fd6a0898468b5404c09432c34beb6b16c533884673"}, +] + +[package.dependencies] +certifi = "*" +cftime = "*" +numpy = "*" + +[package.extras] +parallel = ["mpi4py"] +tests = ["Cython", "packaging", "pytest", "typing-extensions (>=4.15.0)"] + +[[package]] +name = "netcdf4" +version = "1.7.4" +description = "Provides an object-oriented python interface to the netCDF version 4 library" +optional = false +python-versions = ">=3.10" +groups = ["main"] +markers = "platform_system != \"Windows\" or platform_machine != \"ARM64\" or python_version >= \"3.11\"" +files = [ + {file = "netcdf4-1.7.4-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:b1c1a7ea3678db76bf33d14f7e202385d634db38c5e70d8cf4895971023eebb9"}, + {file = "netcdf4-1.7.4-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:d3f9497873454207f9480847d02b1b19a4bc81ad6e9166e1c17d4e2f8f3555d1"}, + {file = "netcdf4-1.7.4-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c8e18294af803e80f8c0339f791901942e268c334c099bbd5f7ea8325a49801a"}, + {file = "netcdf4-1.7.4-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0b06c0b93fd0ecc1ec67a582f3ba98b7db9da1fa843c8f83fd75990e3701771e"}, + {file = "netcdf4-1.7.4-cp310-cp310-win_amd64.whl", hash = "sha256:889ba77f084504aebaba9c6f9a88ac213431fef0e897f887cd35aef351ff7740"}, + {file = "netcdf4-1.7.4-cp311-abi3-macosx_13_0_x86_64.whl", hash = "sha256:dec70e809cc65b04ebe95113ee9c85ba46a51c3a37c058d2b2b0cadc4d3052d8"}, + {file = "netcdf4-1.7.4-cp311-abi3-macosx_14_0_arm64.whl", hash = "sha256:75cf59100f0775bc4d6b9d4aca7cbabd12e2b8cf3b9a4fb16d810b92743a315a"}, + {file = "netcdf4-1.7.4-cp311-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ddfc7e9d261125c74708119440c85ea288b5fee41db676d2ba1ce9be11f96932"}, + {file = "netcdf4-1.7.4-cp311-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a72c9f58767779ec14cb7451c3b56bdd8fdc027a792fac2062b14e090c5617f3"}, + {file = "netcdf4-1.7.4-cp311-abi3-win_amd64.whl", hash = "sha256:9476e1f23161ae5159cd1548c50c8a37922e77d76583e247133f256ef7b825fc"}, + {file = "netcdf4-1.7.4-cp311-abi3-win_arm64.whl", hash = "sha256:876ad9d58f09c98741c066c726164c45a098a58fb90e5fac9e74de4bb8a793fd"}, + {file = "netcdf4-1.7.4-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:56688c03444fffe0d0c7512cb45245e650389cd841c955b30e4552fa681c4cd9"}, + {file = "netcdf4-1.7.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7ecf471ba8a6ddb2200121949bedfa0095db228822f38227d5da680694a38358"}, + {file = "netcdf4-1.7.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a5841de0735e8e4875b367c668e81d334287858d64dd9f3e3e2261e808c84922"}, + {file = "netcdf4-1.7.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:86fac03a8c5b250d57866e7d98918a64742e4b0de1681c5c86bac5726bab8aee"}, + {file = "netcdf4-1.7.4-cp314-cp314t-macosx_13_0_x86_64.whl", hash = "sha256:ad083d260301b5add74b1669c75ab0df03bdf986decfcc092cb45eec2615b5f1"}, + {file = "netcdf4-1.7.4-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:7f22014092cc9da3f056b0368e2e38c42afd5725c87ad4843eb2f467e16dd4f6"}, + {file = "netcdf4-1.7.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:224a15434c165a5e0225e5831f591edf62533044b1ce62fdfee815195bbd077d"}, + {file = "netcdf4-1.7.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:31a2318305de6831a18df25ad0df9f03b6d68666af0356d4f6057d66c02ffeb6"}, + {file = "netcdf4-1.7.4-cp314-cp314t-win_amd64.whl", hash = "sha256:6c4a0aa9446c3a616ef3be015b629dc6173643f8b09546de26a4e40e272cd1ed"}, + {file = "netcdf4-1.7.4-cp314-cp314t-win_arm64.whl", hash = "sha256:034220887d48da032cb2db5958f69759dbb04eb33e279ec6390571d4aea734fe"}, + {file = "netcdf4-1.7.4.tar.gz", hash = "sha256:cdbfdc92d6f4d7192ca8506c9b3d4c1d9892969ff28d8e8e1fc97ca08bf12164"}, +] + +[package.dependencies] +certifi = "*" +cftime = "*" +numpy = [ + {version = ">=1.21.2", markers = "platform_system != \"Windows\" or platform_machine != \"ARM64\""}, + {version = ">=2.3.0", markers = "platform_system == \"Windows\" and platform_machine == \"ARM64\""}, +] + +[package.extras] +parallel = ["mpi4py"] +tests = ["Cython", "packaging", "pytest", "typing-extensions (>=4.15.0)"] + +[[package]] +name = "networkx" +version = "3.4.2" +description = "Python package for creating and manipulating graphs and networks" +optional = false +python-versions = ">=3.10" +groups = ["main"] +markers = "python_version < \"3.11\"" +files = [ + {file = "networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f"}, + {file = "networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1"}, +] + +[package.extras] +default = ["matplotlib (>=3.7)", "numpy (>=1.24)", "pandas (>=2.0)", "scipy (>=1.10,!=1.11.0,!=1.11.1)"] +developer = ["changelist (==0.5)", "mypy (>=1.1)", "pre-commit (>=3.2)", "rtoml"] +doc = ["intersphinx-registry", "myst-nb (>=1.1)", "numpydoc (>=1.8.0)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.15)", "sphinx (>=7.3)", "sphinx-gallery (>=0.16)", "texext (>=0.6.7)"] +example = ["cairocffi (>=1.7)", "contextily (>=1.6)", "igraph (>=0.11)", "momepy (>=0.7.2)", "osmnx (>=1.9)", "scikit-learn (>=1.5)", "seaborn (>=0.13)"] +extra = ["lxml (>=4.6)", "pydot (>=3.0.1)", "pygraphviz (>=1.14)", "sympy (>=1.10)"] +test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] + +[[package]] +name = "networkx" +version = "3.6" +description = "Python package for creating and manipulating graphs and networks" +optional = false +python-versions = ">=3.11" +groups = ["main"] +markers = "python_version == \"3.14\"" +files = [ + {file = "networkx-3.6-py3-none-any.whl", hash = "sha256:cdb395b105806062473d3be36458d8f1459a4e4b98e236a66c3a48996e07684f"}, + {file = "networkx-3.6.tar.gz", hash = "sha256:285276002ad1f7f7da0f7b42f004bcba70d381e936559166363707fdad3d72ad"}, +] + +[package.extras] +benchmarking = ["asv", "virtualenv"] +default = ["matplotlib (>=3.8)", "numpy (>=1.25)", "pandas (>=2.0)", "scipy (>=1.11.2)"] +developer = ["mypy (>=1.15)", "pre-commit (>=4.1)"] +doc = ["intersphinx-registry", "myst-nb (>=1.1)", "numpydoc (>=1.8.0)", "pillow (>=10)", "pydata-sphinx-theme (>=0.16)", "sphinx (>=8.0)", "sphinx-gallery (>=0.18)", "texext (>=0.6.7)"] +example = ["cairocffi (>=1.7)", "contextily (>=1.6)", "igraph (>=0.11)", "iplotx (>=0.9.0)", "momepy (>=0.7.2)", "osmnx (>=2.0.0)", "scikit-learn (>=1.5)", "seaborn (>=0.13)"] +extra = ["lxml (>=4.6)", "pydot (>=3.0.1)", "pygraphviz (>=1.14)", "sympy (>=1.10)"] +release = ["build (>=0.10)", "changelist (==0.5)", "twine (>=4.0)", "wheel (>=0.40)"] +test = ["pytest (>=7.2)", "pytest-cov (>=4.0)", "pytest-xdist (>=3.0)"] +test-extras = ["pytest-mpl", "pytest-randomly"] + +[[package]] +name = "networkx" +version = "3.6.1" +description = "Python package for creating and manipulating graphs and networks" +optional = false +python-versions = "!=3.14.1,>=3.11" +groups = ["main"] +markers = "python_version < \"3.14\" and python_version >= \"3.11\"" +files = [ + {file = "networkx-3.6.1-py3-none-any.whl", hash = "sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762"}, + {file = "networkx-3.6.1.tar.gz", hash = "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509"}, +] + +[package.extras] +benchmarking = ["asv", "virtualenv"] +default = ["matplotlib (>=3.8)", "numpy (>=1.25)", "pandas (>=2.0)", "scipy (>=1.11.2)"] +developer = ["mypy (>=1.15)", "pre-commit (>=4.1)"] +doc = ["intersphinx-registry", "myst-nb (>=1.1)", "numpydoc (>=1.8.0)", "pillow (>=10)", "pydata-sphinx-theme (>=0.16)", "sphinx (>=8.0)", "sphinx-gallery (>=0.18)", "texext (>=0.6.7)"] +example = ["cairocffi (>=1.7)", "contextily (>=1.6)", "igraph (>=0.11)", "iplotx (>=0.9.0)", "momepy (>=0.7.2)", "osmnx (>=2.0.0)", "scikit-learn (>=1.5)", "seaborn (>=0.13)"] +extra = ["lxml (>=4.6)", "pydot (>=3.0.1)", "pygraphviz (>=1.14)", "sympy (>=1.10)"] +release = ["build (>=0.10)", "changelist (==0.5)", "twine (>=4.0)", "wheel (>=0.40)"] +test = ["pytest (>=7.2)", "pytest-cov (>=4.0)", "pytest-xdist (>=3.0)"] +test-extras = ["pytest-mpl", "pytest-randomly"] + [[package]] name = "notebook" version = "7.4.7" @@ -2438,60 +2651,201 @@ jupyter-server = ">=1.8,<3" [package.extras] test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync"] +[[package]] +name = "numexpr" +version = "2.14.1" +description = "Fast numerical expression evaluator for NumPy" +optional = false +python-versions = ">=3.10" +groups = ["main"] +markers = "python_version < \"3.11\"" +files = [ + {file = "numexpr-2.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d0fab3fd06a04f6b86102552b26aa5d85e20ac7d8296c15764c726eeabae6cc8"}, + {file = "numexpr-2.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:64ae5dfd62d74a3ef82fe0b37f80527247f3626171ad82025900f46ffca4b39a"}, + {file = "numexpr-2.14.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:955c92b064f9074d2970cf3138f5e3b965be673b82024962ed526f39bc25a920"}, + {file = "numexpr-2.14.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:75440c54fc01e130396650fdf307aa9d41a67dc06ddbfb288971b591c13a395b"}, + {file = "numexpr-2.14.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:dde9fa47ed319e1e1728940a539df3cb78326b7754bc7c6ab3152afc91808f9b"}, + {file = "numexpr-2.14.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:76db0bc6267e591ab9c4df405ffb533598e4c88239db7338d11ae9e4b368a85a"}, + {file = "numexpr-2.14.1-cp310-cp310-win32.whl", hash = "sha256:0d1dcbdc4d0374c0d523cee2f94f06b001623cbc1fd163612841017a3495427c"}, + {file = "numexpr-2.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:823cd82c8e7937981339f634e7a9c6a92cb2d0b9d0a5cf627a5e394fffc05377"}, + {file = "numexpr-2.14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2d03fcb4644a12f70a14d74006f72662824da5b6128bf1bcd10cc3ed80e64c34"}, + {file = "numexpr-2.14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2773ee1133f77009a1fc2f34fe236f3d9823779f5f75450e183137d49f00499f"}, + {file = "numexpr-2.14.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ebe4980f9494b9f94d10d2e526edc29e72516698d3bf95670ba79415492212a4"}, + {file = "numexpr-2.14.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2a381e5e919a745c9503bcefffc1c7f98c972c04ec58fc8e999ed1a929e01ba6"}, + {file = "numexpr-2.14.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d08856cfc1b440eb1caaa60515235369654321995dd68eb9377577392020f6cb"}, + {file = "numexpr-2.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:03130afa04edf83a7b590d207444f05a00363c9b9ea5d81c0f53b1ea13fad55a"}, + {file = "numexpr-2.14.1-cp311-cp311-win32.whl", hash = "sha256:db78fa0c9fcbaded3ae7453faf060bd7a18b0dc10299d7fcd02d9362be1213ed"}, + {file = "numexpr-2.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:e9b2f957798c67a2428be96b04bce85439bed05efe78eb78e4c2ca43737578e7"}, + {file = "numexpr-2.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:91ebae0ab18c799b0e6b8c5a8d11e1fa3848eb4011271d99848b297468a39430"}, + {file = "numexpr-2.14.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:47041f2f7b9e69498fb311af672ba914a60e6e6d804011caacb17d66f639e659"}, + {file = "numexpr-2.14.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d686dfb2c1382d9e6e0ee0b7647f943c1886dba3adbf606c625479f35f1956c1"}, + {file = "numexpr-2.14.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eee6d4fbbbc368e6cdd0772734d6249128d957b3b8ad47a100789009f4de7083"}, + {file = "numexpr-2.14.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3a2839efa25f3c8d4133252ea7342d8f81226c7c4dda81f97a57e090b9d87a48"}, + {file = "numexpr-2.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9f9137f1351b310436662b5dc6f4082a245efa8950c3b0d9008028df92fefb9b"}, + {file = "numexpr-2.14.1-cp312-cp312-win32.whl", hash = "sha256:36f8d5c1bd1355df93b43d766790f9046cccfc1e32b7c6163f75bcde682cda07"}, + {file = "numexpr-2.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:fdd886f4b7dbaf167633ee396478f0d0aa58ea2f9e7ccc3c6431019623e8d68f"}, + {file = "numexpr-2.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:09078ba73cffe94745abfbcc2d81ab8b4b4e9d7bfbbde6cac2ee5dbf38eee222"}, + {file = "numexpr-2.14.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:dce0b5a0447baa7b44bc218ec2d7dcd175b8eee6083605293349c0c1d9b82fb6"}, + {file = "numexpr-2.14.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:06855053de7a3a8425429bd996e8ae3c50b57637ad3e757e0fa0602a7874be30"}, + {file = "numexpr-2.14.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:05f9366d23a2e991fd5a8b5e61a17558f028ba86158a4552f8f239b005cdf83c"}, + {file = "numexpr-2.14.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c5f1b1605695778896534dfc6e130d54a65cd52be7ed2cd0cfee3981fd676bf5"}, + {file = "numexpr-2.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a4ba71db47ea99c659d88ee6233fa77b6dc83392f1d324e0c90ddf617ae3f421"}, + {file = "numexpr-2.14.1-cp313-cp313-win32.whl", hash = "sha256:638dce8320f4a1483d5ca4fda69f60a70ed7e66be6e68bc23fb9f1a6b78a9e3b"}, + {file = "numexpr-2.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:9fdcd4735121658a313f878fd31136d1bfc6a5b913219e7274e9fca9f8dac3bb"}, + {file = "numexpr-2.14.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:557887ad7f5d3c2a40fd7310e50597045a68e66b20a77b3f44d7bc7608523b4b"}, + {file = "numexpr-2.14.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:af111c8fe6fc55d15e4c7cab11920fc50740d913636d486545b080192cd0ad73"}, + {file = "numexpr-2.14.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:33265294376e7e2ae4d264d75b798a915d2acf37b9dd2b9405e8b04f84d05cfc"}, + {file = "numexpr-2.14.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:83647d846d3eeeb9a9255311236135286728b398d0d41d35dedb532dca807fe9"}, + {file = "numexpr-2.14.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6e575fd3ad41ddf3355d0c7ef6bd0168619dc1779a98fe46693cad5e95d25e6e"}, + {file = "numexpr-2.14.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:67ea4771029ce818573b1998f5ca416bd255156feea017841b86176a938f7d19"}, + {file = "numexpr-2.14.1-cp313-cp313t-win32.whl", hash = "sha256:15015d47d3d1487072d58c0e7682ef2eb608321e14099c39d52e2dd689483611"}, + {file = "numexpr-2.14.1-cp313-cp313t-win_amd64.whl", hash = "sha256:94c711f6d8f17dfb4606842b403699603aa591ab9f6bf23038b488ea9cfb0f09"}, + {file = "numexpr-2.14.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ede79f7ff06629f599081de644546ce7324f1581c09b0ac174da88a470d39c21"}, + {file = "numexpr-2.14.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2eac7a5a2f70b3768c67056445d1ceb4ecd9b853c8eda9563823b551aeaa5082"}, + {file = "numexpr-2.14.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5aedf38d4c0c19d3cecfe0334c3f4099fb496f54c146223d30fa930084bc8574"}, + {file = "numexpr-2.14.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:439ec4d57b853792ebe5456e3160312281c3a7071ecac5532ded3278ede614de"}, + {file = "numexpr-2.14.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e23b87f744e04e302d82ac5e2189ae20a533566aec76a46885376e20b0645bf8"}, + {file = "numexpr-2.14.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:44f84e0e5af219dbb62a081606156420815890e041b87252fbcea5df55214c4c"}, + {file = "numexpr-2.14.1-cp314-cp314-win32.whl", hash = "sha256:1f1a5e817c534539351aa75d26088e9e1e0ef1b3a6ab484047618a652ccc4fc3"}, + {file = "numexpr-2.14.1-cp314-cp314-win_amd64.whl", hash = "sha256:587c41509bc373dfb1fe6086ba55a73147297247bedb6d588cda69169fc412f2"}, + {file = "numexpr-2.14.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:ec368819502b64f190c3f71be14a304780b5935c42aae5bf22c27cc2cbba70b5"}, + {file = "numexpr-2.14.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7e87f6d203ac57239de32261c941e9748f9309cbc0da6295eabd0c438b920d3a"}, + {file = "numexpr-2.14.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd72d8c2a165fe45ea7650b16eb8cc1792a94a722022006bb97c86fe51fd2091"}, + {file = "numexpr-2.14.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:70d80fcb418a54ca208e9a38e58ddc425c07f66485176b261d9a67c7f2864f73"}, + {file = "numexpr-2.14.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:edea2f20c2040df8b54ee8ca8ebda63de9545b2112872466118e9df4d0ae99f3"}, + {file = "numexpr-2.14.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:790447be6879a6c51b9545f79612d24c9ea0a41d537a84e15e6a8ddef0b6268e"}, + {file = "numexpr-2.14.1-cp314-cp314t-win32.whl", hash = "sha256:538961096c2300ea44240209181e31fae82759d26b51713b589332b9f2a4117e"}, + {file = "numexpr-2.14.1-cp314-cp314t-win_amd64.whl", hash = "sha256:a40b350cd45b4446076fa11843fa32bbe07024747aeddf6d467290bf9011b392"}, + {file = "numexpr-2.14.1.tar.gz", hash = "sha256:4be00b1086c7b7a5c32e31558122b7b80243fe098579b170967da83f3152b48b"}, +] + +[package.dependencies] +numpy = ">=1.23.0" + +[[package]] +name = "numexpr" +version = "2.14.2" +description = "Fast numerical expression evaluator for NumPy" +optional = false +python-versions = ">=3.11" +groups = ["main"] +markers = "python_version >= \"3.11\"" +files = [ + {file = "numexpr-2.14.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2aa65ddc2243f19c6915f34ee0978b4a2df20f297230a793c4ee6d55f3472599"}, + {file = "numexpr-2.14.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bf959e6df6cb603611c034b6cba7b03a361be0ad0b80b73f163fab95f5ccbb7f"}, + {file = "numexpr-2.14.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d534ecb456a4ae3995f99c8a5deb469bfff05d4ec610a7885c175c881d12f710"}, + {file = "numexpr-2.14.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f41170e9d0dbba76851e35d80cfa9f4ca5fe78628c5bf24d941cf3364940ab7a"}, + {file = "numexpr-2.14.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6acafb2fdbeaaa6681a8f1a1d8b3f7dcd33704baace7057b950754b258be7c43"}, + {file = "numexpr-2.14.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7ca9e71195b36cc7aeafe97347549e1e1c1e889ff700238782ef6447651ec26d"}, + {file = "numexpr-2.14.2-cp311-cp311-win32.whl", hash = "sha256:779129d50974e7d6d6581d322f75b8f8375e96215b6861a2d5460347997ef649"}, + {file = "numexpr-2.14.2-cp311-cp311-win_amd64.whl", hash = "sha256:2f132777d7d425471c458af5617e023402f13f5006301eacf8a1a6e7118ea70c"}, + {file = "numexpr-2.14.2-cp311-cp311-win_arm64.whl", hash = "sha256:f1de5c88515ed9fbcad42699a0e2b5821b4d0f0adb0da6fb7e009e5cb19d8493"}, + {file = "numexpr-2.14.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:606ceaf5722e295ef965ca591736fc26d9e5f13ad950a479e64cead1947f8a3d"}, + {file = "numexpr-2.14.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:790da022539fe7c37dc893acf530a91c2ca6964d7ba11f464131383729d058f3"}, + {file = "numexpr-2.14.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:327be9ee62251c173236dc620147ff2d0e732a32f5bad918d78a10082f502f63"}, + {file = "numexpr-2.14.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6a5d8fc7016bf6f6e1808b011510aa7c3bd75ec1407f7650874ec591db59f5e"}, + {file = "numexpr-2.14.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4b1ff261c3e69c4c59578d3a9ca6132603619d38ae1abe73325563bed3b9bbaf"}, + {file = "numexpr-2.14.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8b8384592c49cb15a91caa54e2cd84d1ce18edb7af030bb76cd29b52e5dc155d"}, + {file = "numexpr-2.14.2-cp312-cp312-win32.whl", hash = "sha256:41cdeacf1b4e51c1143983ea61fcee68139ca47222b55a9265b4fa73826c4260"}, + {file = "numexpr-2.14.2-cp312-cp312-win_amd64.whl", hash = "sha256:8fc55d14bcf17b3fe69213bea14f999451892b4690717008c66f2edfd6a085ce"}, + {file = "numexpr-2.14.2-cp312-cp312-win_arm64.whl", hash = "sha256:806a4471310fe20aa7cb1b2816a6f5e508073a1ad1c2e18041b83e57066fad6a"}, + {file = "numexpr-2.14.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0741efbd75c284e709b0fd430c85c31982b44c9962922ba8a9cbbea1bf413321"}, + {file = "numexpr-2.14.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92b00c78664070e3af155c6be713a0a5d75d598647ce32a5609adb79a8f961d3"}, + {file = "numexpr-2.14.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:149ab5744a5222f07b1d60455c4021c754d395e44938944ac7c7c2495f7feb54"}, + {file = "numexpr-2.14.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fd2f5882a66a7792aa6614c68831aa20085b499d41422aedd001080624ebb14c"}, + {file = "numexpr-2.14.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:375d8bee15be42dab22100a0a3de05fe6689a2de853eca012858768a9a7e02ab"}, + {file = "numexpr-2.14.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c1ffaf805d8636c3f95d0996517ecf9684c9ac62d768030ca78d1d00af2b3504"}, + {file = "numexpr-2.14.2-cp313-cp313-win32.whl", hash = "sha256:449a57fb9d38de136e742b1fc429572b42f29778f1d695c3fe50ffec9d3c9a71"}, + {file = "numexpr-2.14.2-cp313-cp313-win_amd64.whl", hash = "sha256:dd905922d7dce457947d54b84c7ac345cef37332b724445e159a5a1a2080ce2b"}, + {file = "numexpr-2.14.2-cp313-cp313-win_arm64.whl", hash = "sha256:b02738853b9b5b8a995f6c680f8f6ef33e8f419395b8fa380e38690495fdb911"}, + {file = "numexpr-2.14.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:76e87c7bd70d721ce4d418e81f4fb7ecf9e7e67d7cea8102527b07fd3d3facf9"}, + {file = "numexpr-2.14.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:939c89f613b814e64bb568859397dc9f99b219c3ef681a72fb99a86e435262f9"}, + {file = "numexpr-2.14.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b20c1c55aba7812ff2f2c6a50006425d02282fabb1eaf8d75fe638ffcf6deb02"}, + {file = "numexpr-2.14.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bac00898930f962f360c3d763a8e2273fc931f65a1759ff1bf64b3cf13d65aee"}, + {file = "numexpr-2.14.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:022e61a3d5dbf5807746264b62126d1c2c24057ad90052478a4d4482ab2555c2"}, + {file = "numexpr-2.14.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:1d4593e2c6fa060cd7441e8b6ef25c16321a6be2144b3c82d1e00885f1fb6e94"}, + {file = "numexpr-2.14.2-cp314-cp314-win32.whl", hash = "sha256:66f3b125b1104241322811de87918724d6709bf082dc0703722d0cecb7b29e82"}, + {file = "numexpr-2.14.2-cp314-cp314-win_amd64.whl", hash = "sha256:ef576a1cded27ba2f3129bc3c42df452a1c498072680d560793f98b0024cd7e6"}, + {file = "numexpr-2.14.2-cp314-cp314-win_arm64.whl", hash = "sha256:8274c51ae1842948f3ae7fe6951a23dcf4ddcbeeaff3737e978e7740b754662d"}, + {file = "numexpr-2.14.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:f3526699350f94c6277fb16863773a1af9defd95a6f78bbd69b1f0338fd94756"}, + {file = "numexpr-2.14.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:91e7928435f14fcb351c0157000bce65122b897cc8b0df6bcc48251f25850a6d"}, + {file = "numexpr-2.14.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c66925deb968f0b5280f723e2bb5918c11e6be2ca60e9e1530006286ab44031d"}, + {file = "numexpr-2.14.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a404c9a55902572eec810068d06b79a7c99e96f0400f5a7d73f39dff5ec5e371"}, + {file = "numexpr-2.14.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:44dc6b1dfa9abcbfc9917297f0d2af7c87c16b6ecd45747a8e70f54399a3a2f9"}, + {file = "numexpr-2.14.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:93233040f4bed3bce5abb0c2d20aeb1074511f29cbaa9c14828f86bcfa44d321"}, + {file = "numexpr-2.14.2-cp314-cp314t-win32.whl", hash = "sha256:2aceefa08f8f86317fa6e8fe9f6dc20d24ab8365d715be4a26306acf406d2dbe"}, + {file = "numexpr-2.14.2-cp314-cp314t-win_amd64.whl", hash = "sha256:cd684ac9daa539fcdac3437678834797b29d7780cfaad71111745132d466d51f"}, + {file = "numexpr-2.14.2-cp314-cp314t-win_arm64.whl", hash = "sha256:2ef72de3d3dd466cb0c435cae7141c99b0f8091b1eae9d03dcb38690f56c3f79"}, + {file = "numexpr-2.14.2.tar.gz", hash = "sha256:e7144e83ea9e581f2273e0304f15836736c4e470e2bd2e378ce617662a1ca278"}, +] + +[package.dependencies] +numpy = ">=1.26.0" + [[package]] name = "numpy" -version = "2.0.2" +version = "2.2.6" description = "Fundamental package for array computing in Python" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["main"] -markers = "python_version < \"3.14\"" -files = [ - {file = "numpy-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:51129a29dbe56f9ca83438b706e2e69a39892b5eda6cedcb6b0c9fdc9b0d3ece"}, - {file = "numpy-2.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f15975dfec0cf2239224d80e32c3170b1d168335eaedee69da84fbe9f1f9cd04"}, - {file = "numpy-2.0.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:8c5713284ce4e282544c68d1c3b2c7161d38c256d2eefc93c1d683cf47683e66"}, - {file = "numpy-2.0.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:becfae3ddd30736fe1889a37f1f580e245ba79a5855bff5f2a29cb3ccc22dd7b"}, - {file = "numpy-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2da5960c3cf0df7eafefd806d4e612c5e19358de82cb3c343631188991566ccd"}, - {file = "numpy-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:496f71341824ed9f3d2fd36cf3ac57ae2e0165c143b55c3a035ee219413f3318"}, - {file = "numpy-2.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a61ec659f68ae254e4d237816e33171497e978140353c0c2038d46e63282d0c8"}, - {file = "numpy-2.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d731a1c6116ba289c1e9ee714b08a8ff882944d4ad631fd411106a30f083c326"}, - {file = "numpy-2.0.2-cp310-cp310-win32.whl", hash = "sha256:984d96121c9f9616cd33fbd0618b7f08e0cfc9600a7ee1d6fd9b239186d19d97"}, - {file = "numpy-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:c7b0be4ef08607dd04da4092faee0b86607f111d5ae68036f16cc787e250a131"}, - {file = "numpy-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:49ca4decb342d66018b01932139c0961a8f9ddc7589611158cb3c27cbcf76448"}, - {file = "numpy-2.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:11a76c372d1d37437857280aa142086476136a8c0f373b2e648ab2c8f18fb195"}, - {file = "numpy-2.0.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:807ec44583fd708a21d4a11d94aedf2f4f3c3719035c76a2bbe1fe8e217bdc57"}, - {file = "numpy-2.0.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8cafab480740e22f8d833acefed5cc87ce276f4ece12fdaa2e8903db2f82897a"}, - {file = "numpy-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a15f476a45e6e5a3a79d8a14e62161d27ad897381fecfa4a09ed5322f2085669"}, - {file = "numpy-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13e689d772146140a252c3a28501da66dfecd77490b498b168b501835041f951"}, - {file = "numpy-2.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9ea91dfb7c3d1c56a0e55657c0afb38cf1eeae4544c208dc465c3c9f3a7c09f9"}, - {file = "numpy-2.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c1c9307701fec8f3f7a1e6711f9089c06e6284b3afbbcd259f7791282d660a15"}, - {file = "numpy-2.0.2-cp311-cp311-win32.whl", hash = "sha256:a392a68bd329eafac5817e5aefeb39038c48b671afd242710b451e76090e81f4"}, - {file = "numpy-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:286cd40ce2b7d652a6f22efdfc6d1edf879440e53e76a75955bc0c826c7e64dc"}, - {file = "numpy-2.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:df55d490dea7934f330006d0f81e8551ba6010a5bf035a249ef61a94f21c500b"}, - {file = "numpy-2.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8df823f570d9adf0978347d1f926b2a867d5608f434a7cff7f7908c6570dcf5e"}, - {file = "numpy-2.0.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:9a92ae5c14811e390f3767053ff54eaee3bf84576d99a2456391401323f4ec2c"}, - {file = "numpy-2.0.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:a842d573724391493a97a62ebbb8e731f8a5dcc5d285dfc99141ca15a3302d0c"}, - {file = "numpy-2.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05e238064fc0610c840d1cf6a13bf63d7e391717d247f1bf0318172e759e692"}, - {file = "numpy-2.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0123ffdaa88fa4ab64835dcbde75dcdf89c453c922f18dced6e27c90d1d0ec5a"}, - {file = "numpy-2.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:96a55f64139912d61de9137f11bf39a55ec8faec288c75a54f93dfd39f7eb40c"}, - {file = "numpy-2.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ec9852fb39354b5a45a80bdab5ac02dd02b15f44b3804e9f00c556bf24b4bded"}, - {file = "numpy-2.0.2-cp312-cp312-win32.whl", hash = "sha256:671bec6496f83202ed2d3c8fdc486a8fc86942f2e69ff0e986140339a63bcbe5"}, - {file = "numpy-2.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:cfd41e13fdc257aa5778496b8caa5e856dc4896d4ccf01841daee1d96465467a"}, - {file = "numpy-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9059e10581ce4093f735ed23f3b9d283b9d517ff46009ddd485f1747eb22653c"}, - {file = "numpy-2.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:423e89b23490805d2a5a96fe40ec507407b8ee786d66f7328be214f9679df6dd"}, - {file = "numpy-2.0.2-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:2b2955fa6f11907cf7a70dab0d0755159bca87755e831e47932367fc8f2f2d0b"}, - {file = "numpy-2.0.2-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:97032a27bd9d8988b9a97a8c4d2c9f2c15a81f61e2f21404d7e8ef00cb5be729"}, - {file = "numpy-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e795a8be3ddbac43274f18588329c72939870a16cae810c2b73461c40718ab1"}, - {file = "numpy-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26b258c385842546006213344c50655ff1555a9338e2e5e02a0756dc3e803dd"}, - {file = "numpy-2.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5fec9451a7789926bcf7c2b8d187292c9f93ea30284802a0ab3f5be8ab36865d"}, - {file = "numpy-2.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9189427407d88ff25ecf8f12469d4d39d35bee1db5d39fc5c168c6f088a6956d"}, - {file = "numpy-2.0.2-cp39-cp39-win32.whl", hash = "sha256:905d16e0c60200656500c95b6b8dca5d109e23cb24abc701d41c02d74c6b3afa"}, - {file = "numpy-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:a3f4ab0caa7f053f6797fcd4e1e25caee367db3112ef2b6ef82d749530768c73"}, - {file = "numpy-2.0.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7f0a0c6f12e07fa94133c8a67404322845220c06a9e80e85999afe727f7438b8"}, - {file = "numpy-2.0.2-pp39-pypy39_pp73-macosx_14_0_x86_64.whl", hash = "sha256:312950fdd060354350ed123c0e25a71327d3711584beaef30cdaa93320c392d4"}, - {file = "numpy-2.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26df23238872200f63518dd2aa984cfca675d82469535dc7162dc2ee52d9dd5c"}, - {file = "numpy-2.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a46288ec55ebbd58947d31d72be2c63cbf839f0a63b49cb755022310792a3385"}, - {file = "numpy-2.0.2.tar.gz", hash = "sha256:883c987dee1880e2a864ab0dc9892292582510604156762362d9326444636e78"}, +markers = "python_version < \"3.11\"" +files = [ + {file = "numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb"}, + {file = "numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90"}, + {file = "numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163"}, + {file = "numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf"}, + {file = "numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83"}, + {file = "numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915"}, + {file = "numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680"}, + {file = "numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289"}, + {file = "numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d"}, + {file = "numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3"}, + {file = "numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae"}, + {file = "numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a"}, + {file = "numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42"}, + {file = "numpy-2.2.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:481b49095335f8eed42e39e8041327c05b0f6f4780488f61286ed3c01368d491"}, + {file = "numpy-2.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b64d8d4d17135e00c8e346e0a738deb17e754230d7e0810ac5012750bbd85a5a"}, + {file = "numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf"}, + {file = "numpy-2.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd48227a919f1bafbdda0583705e547892342c26fb127219d60a5c36882609d1"}, + {file = "numpy-2.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9551a499bf125c1d4f9e250377c1ee2eddd02e01eac6644c080162c0c51778ab"}, + {file = "numpy-2.2.6-cp311-cp311-win32.whl", hash = "sha256:0678000bb9ac1475cd454c6b8c799206af8107e310843532b04d49649c717a47"}, + {file = "numpy-2.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:e8213002e427c69c45a52bbd94163084025f533a55a59d6f9c5b820774ef3303"}, + {file = "numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff"}, + {file = "numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c"}, + {file = "numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3"}, + {file = "numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282"}, + {file = "numpy-2.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87"}, + {file = "numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249"}, + {file = "numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49"}, + {file = "numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de"}, + {file = "numpy-2.2.6-cp312-cp312-win32.whl", hash = "sha256:4eeaae00d789f66c7a25ac5f34b71a7035bb474e679f410e5e1a94deb24cf2d4"}, + {file = "numpy-2.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2"}, + {file = "numpy-2.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84"}, + {file = "numpy-2.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b"}, + {file = "numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d"}, + {file = "numpy-2.2.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566"}, + {file = "numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f"}, + {file = "numpy-2.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f"}, + {file = "numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868"}, + {file = "numpy-2.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d"}, + {file = "numpy-2.2.6-cp313-cp313-win32.whl", hash = "sha256:5beb72339d9d4fa36522fc63802f469b13cdbe4fdab4a288f0c441b74272ebfd"}, + {file = "numpy-2.2.6-cp313-cp313-win_amd64.whl", hash = "sha256:b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c"}, + {file = "numpy-2.2.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6"}, + {file = "numpy-2.2.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda"}, + {file = "numpy-2.2.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40"}, + {file = "numpy-2.2.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8"}, + {file = "numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f"}, + {file = "numpy-2.2.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa"}, + {file = "numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571"}, + {file = "numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1"}, + {file = "numpy-2.2.6-cp313-cp313t-win32.whl", hash = "sha256:038613e9fb8c72b0a41f025a7e4c3f0b7a1b5d768ece4796b674c8f3fe13efff"}, + {file = "numpy-2.2.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06"}, + {file = "numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d"}, + {file = "numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db"}, + {file = "numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543"}, + {file = "numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00"}, + {file = "numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd"}, ] [[package]] @@ -2501,7 +2855,7 @@ description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.11" groups = ["main"] -markers = "python_version >= \"3.14\"" +markers = "python_version >= \"3.11\"" files = [ {file = "numpy-2.3.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e78aecd2800b32e8347ce49316d3eaf04aed849cd5b38e0af39f829a4e59f5eb"}, {file = "numpy-2.3.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7fd09cc5d65bda1e79432859c40978010622112e9194e581e3415a3eccc7f43f"}, @@ -2579,6 +2933,120 @@ files = [ {file = "numpy-2.3.4.tar.gz", hash = "sha256:a7d018bfedb375a8d979ac758b120ba846a7fe764911a64465fd87b8729f4a6a"}, ] +[[package]] +name = "openfast-io" +version = "5.0.0" +description = "Readers and writers for OpenFAST files." +optional = false +python-versions = ">3.10" +groups = ["main"] +files = [ + {file = "openfast_io-5.0.0-py3-none-any.whl", hash = "sha256:3558880af3af7d319e1644c3063eb44f067bd50db727b68dfc4578250deda093"}, + {file = "openfast_io-5.0.0.tar.gz", hash = "sha256:5b683f2f381eee506d1a6ce90e3324273c027dea831b9dd969edc6254ce61241"}, +] + +[package.dependencies] +deepdiff = ">8.0" +numpy = ">1.0" +pandas = ">2.0" +ruamel-yaml = ">0.18" + +[package.extras] +all = ["rosco (>2.9.2)", "xlrd (>2.0)"] +rosco = ["rosco (>2.9.2)"] +xlrd = ["xlrd (>2.0)"] + +[[package]] +name = "openmdao" +version = "3.45.0" +description = "OpenMDAO framework infrastructure" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "openmdao-3.45.0-py3-none-any.whl", hash = "sha256:ef01406fc29e763b69b979ffe7a3652351de5a68653da478cd4bbe02e2318f90"}, + {file = "openmdao-3.45.0.tar.gz", hash = "sha256:2e342398386230706999433a0eafc3df566e71f89709479323c3f00ab1b69e54"}, +] + +[package.dependencies] +networkx = ">=3.3" +numpy = ">=2.0,<2.4.0 || >2.4.0" +packaging = "*" +requests = "*" +scipy = ">=1.13" + +[package.extras] +all = ["aiounittest", "bokeh (>=3.4.0)", "colorama", "coverage (>=7.6.0)", "idna (>=3.7)", "ipympl", "ipyparallel", "jax (>=0.4.0)", "jaxlib (>=0.4.0)", "jinja2 (>=3.1.4)", "jupyter-book (>=1.0.3,<2)", "matplotlib", "notebook", "num2words", "numpydoc (>=1.1)", "panel", "parameterized", "playwright (>=1.20)", "pre-commit", "pycodestyle (>=2.4.0)", "pydata-sphinx-theme (>=0.15.0,<0.16.0)", "pydocstyle (>=2.0.0)", "pydoe3", "rich", "sphinx-sitemap", "testflo (>=1.3.6)", "tqdm (>=4.66.3)", "websockets (>8)"] +docs = ["idna (>=3.7)", "ipyparallel", "jinja2 (>=3.1.4)", "jupyter-book (>=1.0.3,<2)", "matplotlib", "numpydoc (>=1.1)", "pydata-sphinx-theme (>=0.15.0,<0.16.0)", "sphinx-sitemap", "tqdm (>=4.66.3)"] +doe = ["pydoe3"] +jax = ["jax (>=0.4.0)", "jaxlib (>=0.4.0)"] +julia = ["omjlcomps (>=0.2.6)"] +notebooks = ["idna (>=3.7)", "ipympl", "notebook"] +numba = ["numba"] +test = ["aiounittest", "coverage (>=7.6.0)", "num2words", "numpydoc (>=1.1)", "parameterized", "playwright (>=1.20)", "pre-commit", "pycodestyle (>=2.4.0)", "pydocstyle (>=2.0.0)", "testflo (>=1.3.6)", "websockets (>8)"] +visualization = ["bokeh (>=3.4.0)", "colorama", "matplotlib", "panel", "rich"] + +[[package]] +name = "openpyxl" +version = "3.1.5" +description = "A Python library to read/write Excel 2010 xlsx/xlsm files" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2"}, + {file = "openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050"}, +] + +[package.dependencies] +et-xmlfile = "*" + +[[package]] +name = "orbit-nrel" +version = "1.3" +description = "Offshore Renewables Balance of system and Installation Tool" +optional = false +python-versions = ">3.9" +groups = ["main"] +files = [ + {file = "orbit_nrel-1.3-py3-none-any.whl", hash = "sha256:011925d18deb982f8265f35c4af30047807f5a08dc0b0fcb5f594b4eab15c8a2"}, + {file = "orbit_nrel-1.3.tar.gz", hash = "sha256:3cf16a4f4dec822c85b04743ca1ab6eebb830e47d2205b7cdcf95cb7ccc05537"}, +] + +[package.dependencies] +marmot-agents = ">=0.2.5" +matplotlib = "*" +numpy = "*" +pandas = "*" +python-benedict = "*" +pyyaml = "*" +scipy = "*" +simpy = "*" +statsmodels = "*" + +[package.extras] +dev = ["black", "isort", "pre-commit", "pytest (>=9)", "pytest-cov", "ruff"] +docs = ["jupyter-book (>=1,<2)", "linkify-it-py (>=2)", "myst-nb (>=0.16)", "myst-parser (>=0.17)", "nbformat (>=5.0.0)", "sphinx-autodoc-typehints", "sphinxcontrib-autoyaml", "sphinxcontrib-bibtex (>=2.4)", "sphinxcontrib-spelling (>=7)"] + +[[package]] +name = "orderly-set" +version = "5.5.0" +description = "Orderly set" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "orderly_set-5.5.0-py3-none-any.whl", hash = "sha256:46f0b801948e98f427b412fcabb831677194c05c3b699b80de260374baa0b1e7"}, + {file = "orderly_set-5.5.0.tar.gz", hash = "sha256:e87185c8e4d8afa64e7f8160ee2c542a475b738bc891dc3f58102e654125e6ce"}, +] + +[package.extras] +coverage = ["coverage (>=7.6.0,<7.7.0)"] +dev = ["bump2version (>=1.0.0,<1.1.0)", "ipdb (>=0.13.0,<0.14.0)"] +optimize = ["orjson"] +static = ["flake8 (>=7.1.0,<7.2.0)", "flake8-pyproject (>=1.2.3,<1.3.0)"] +test = ["pytest (>=8.3.0,<8.4.0)", "pytest-benchmark (>=5.1.0,<5.2.0)", "pytest-cov (>=6.0.0,<6.1.0)", "python-dotenv (>=1.0.0,<1.1.0)"] + [[package]] name = "overrides" version = "7.7.0" @@ -2586,7 +3054,7 @@ description = "A decorator to automatically detect mismatch when overriding a me optional = true python-versions = ">=3.6" groups = ["main"] -markers = "extra == \"dev\" and python_version < \"3.12\"" +markers = "python_version <= \"3.11\" and extra == \"dev\"" files = [ {file = "overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49"}, {file = "overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a"}, @@ -2596,15 +3064,198 @@ files = [ name = "packaging" version = "25.0" description = "Core utilities for Python packages" -optional = true +optional = false python-versions = ">=3.8" groups = ["main"] -markers = "extra == \"dev\" or extra == \"examples\"" files = [ {file = "packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484"}, {file = "packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"}, ] +[[package]] +name = "pandas" +version = "2.3.3" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "python_version < \"3.11\"" +files = [ + {file = "pandas-2.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:376c6446ae31770764215a6c937f72d917f214b43560603cd60da6408f183b6c"}, + {file = "pandas-2.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e19d192383eab2f4ceb30b412b22ea30690c9e618f78870357ae1d682912015a"}, + {file = "pandas-2.3.3-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5caf26f64126b6c7aec964f74266f435afef1c1b13da3b0636c7518a1fa3e2b1"}, + {file = "pandas-2.3.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dd7478f1463441ae4ca7308a70e90b33470fa593429f9d4c578dd00d1fa78838"}, + {file = "pandas-2.3.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4793891684806ae50d1288c9bae9330293ab4e083ccd1c5e383c34549c6e4250"}, + {file = "pandas-2.3.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:28083c648d9a99a5dd035ec125d42439c6c1c525098c58af0fc38dd1a7a1b3d4"}, + {file = "pandas-2.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:503cf027cf9940d2ceaa1a93cfb5f8c8c7e6e90720a2850378f0b3f3b1e06826"}, + {file = "pandas-2.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:602b8615ebcc4a0c1751e71840428ddebeb142ec02c786e8ad6b1ce3c8dec523"}, + {file = "pandas-2.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8fe25fc7b623b0ef6b5009149627e34d2a4657e880948ec3c840e9402e5c1b45"}, + {file = "pandas-2.3.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b468d3dad6ff947df92dcb32ede5b7bd41a9b3cceef0a30ed925f6d01fb8fa66"}, + {file = "pandas-2.3.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b98560e98cb334799c0b07ca7967ac361a47326e9b4e5a7dfb5ab2b1c9d35a1b"}, + {file = "pandas-2.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37b5848ba49824e5c30bedb9c830ab9b7751fd049bc7914533e01c65f79791"}, + {file = "pandas-2.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db4301b2d1f926ae677a751eb2bd0e8c5f5319c9cb3f88b0becbbb0b07b34151"}, + {file = "pandas-2.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:f086f6fe114e19d92014a1966f43a3e62285109afe874f067f5abbdcbb10e59c"}, + {file = "pandas-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53"}, + {file = "pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35"}, + {file = "pandas-2.3.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908"}, + {file = "pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89"}, + {file = "pandas-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98"}, + {file = "pandas-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084"}, + {file = "pandas-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b"}, + {file = "pandas-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56851a737e3470de7fa88e6131f41281ed440d29a9268dcbf0002da5ac366713"}, + {file = "pandas-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdcd9d1167f4885211e401b3036c0c8d9e274eee67ea8d0758a256d60704cfe8"}, + {file = "pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d"}, + {file = "pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac"}, + {file = "pandas-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c"}, + {file = "pandas-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493"}, + {file = "pandas-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee"}, + {file = "pandas-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:75ea25f9529fdec2d2e93a42c523962261e567d250b0013b16210e1d40d7c2e5"}, + {file = "pandas-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74ecdf1d301e812db96a465a525952f4dde225fdb6d8e5a521d47e1f42041e21"}, + {file = "pandas-2.3.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78"}, + {file = "pandas-2.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110"}, + {file = "pandas-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86"}, + {file = "pandas-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc"}, + {file = "pandas-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ee15f284898e7b246df8087fc82b87b01686f98ee67d85a17b7ab44143a3a9a0"}, + {file = "pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1611aedd912e1ff81ff41c745822980c49ce4a7907537be8692c8dbc31924593"}, + {file = "pandas-2.3.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d2cefc361461662ac48810cb14365a365ce864afe85ef1f447ff5a1e99ea81c"}, + {file = "pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ee67acbbf05014ea6c763beb097e03cd629961c8a632075eeb34247120abcb4b"}, + {file = "pandas-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c46467899aaa4da076d5abc11084634e2d197e9460643dd455ac3db5856b24d6"}, + {file = "pandas-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6253c72c6a1d990a410bc7de641d34053364ef8bcd3126f7e7450125887dffe3"}, + {file = "pandas-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:1b07204a219b3b7350abaae088f451860223a52cfb8a6c53358e7948735158e5"}, + {file = "pandas-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2462b1a365b6109d275250baaae7b760fd25c726aaca0054649286bcfbb3e8ec"}, + {file = "pandas-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0242fe9a49aa8b4d78a4fa03acb397a58833ef6199e9aa40a95f027bb3a1b6e7"}, + {file = "pandas-2.3.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a21d830e78df0a515db2b3d2f5570610f5e6bd2e27749770e8bb7b524b89b450"}, + {file = "pandas-2.3.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5"}, + {file = "pandas-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788"}, + {file = "pandas-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87"}, + {file = "pandas-2.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c503ba5216814e295f40711470446bc3fd00f0faea8a086cbc688808e26f92a2"}, + {file = "pandas-2.3.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a637c5cdfa04b6d6e2ecedcb81fc52ffb0fd78ce2ebccc9ea964df9f658de8c8"}, + {file = "pandas-2.3.3-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:854d00d556406bffe66a4c0802f334c9ad5a96b4f1f868adf036a21b11ef13ff"}, + {file = "pandas-2.3.3-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bf1f8a81d04ca90e32a0aceb819d34dbd378a98bf923b6398b9a3ec0bf44de29"}, + {file = "pandas-2.3.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:23ebd657a4d38268c7dfbdf089fbc31ea709d82e4923c5ffd4fbd5747133ce73"}, + {file = "pandas-2.3.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5554c929ccc317d41a5e3d1234f3be588248e61f08a74dd17c9eabb535777dc9"}, + {file = "pandas-2.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:d3e28b3e83862ccf4d85ff19cf8c20b2ae7e503881711ff2d534dc8f761131aa"}, + {file = "pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b"}, +] + +[package.dependencies] +numpy = {version = ">=1.22.4", markers = "python_version < \"3.11\""} +python-dateutil = ">=2.8.2" +pytz = ">=2020.1" +tzdata = ">=2022.7" + +[package.extras] +all = ["PyQt5 (>=5.15.9)", "SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)", "beautifulsoup4 (>=4.11.2)", "bottleneck (>=1.3.6)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=2022.12.0)", "fsspec (>=2022.11.0)", "gcsfs (>=2022.11.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.9.2)", "matplotlib (>=3.6.3)", "numba (>=0.56.4)", "numexpr (>=2.8.4)", "odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "pandas-gbq (>=0.19.0)", "psycopg2 (>=2.9.6)", "pyarrow (>=10.0.1)", "pymysql (>=1.0.2)", "pyreadstat (>=1.2.0)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "qtpy (>=2.3.0)", "s3fs (>=2022.11.0)", "scipy (>=1.10.0)", "tables (>=3.8.0)", "tabulate (>=0.9.0)", "xarray (>=2022.12.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)", "zstandard (>=0.19.0)"] +aws = ["s3fs (>=2022.11.0)"] +clipboard = ["PyQt5 (>=5.15.9)", "qtpy (>=2.3.0)"] +compression = ["zstandard (>=0.19.0)"] +computation = ["scipy (>=1.10.0)", "xarray (>=2022.12.0)"] +consortium-standard = ["dataframe-api-compat (>=0.1.7)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)"] +feather = ["pyarrow (>=10.0.1)"] +fss = ["fsspec (>=2022.11.0)"] +gcp = ["gcsfs (>=2022.11.0)", "pandas-gbq (>=0.19.0)"] +hdf5 = ["tables (>=3.8.0)"] +html = ["beautifulsoup4 (>=4.11.2)", "html5lib (>=1.1)", "lxml (>=4.9.2)"] +mysql = ["SQLAlchemy (>=2.0.0)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.9.0)"] +parquet = ["pyarrow (>=10.0.1)"] +performance = ["bottleneck (>=1.3.6)", "numba (>=0.56.4)", "numexpr (>=2.8.4)"] +plot = ["matplotlib (>=3.6.3)"] +postgresql = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "psycopg2 (>=2.9.6)"] +pyarrow = ["pyarrow (>=10.0.1)"] +spss = ["pyreadstat (>=1.2.0)"] +sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)"] +test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] +xml = ["lxml (>=4.9.2)"] + +[[package]] +name = "pandas" +version = "3.0.5" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.11" +groups = ["main"] +markers = "python_version >= \"3.11\"" +files = [ + {file = "pandas-3.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2946e77e4a53cd248cbde631a12f0e51c8324ce354c3eba4d20147c1ad6f4282"}, + {file = "pandas-3.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:71ecc8fb7ed1a7aa4392316b5309a6347e8e7f832f38fd897846b3a1457a9298"}, + {file = "pandas-3.0.5-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b173f5951ff6b8b0ec7675e20dff3c97b7e7a57dfcce387c2d7c5afe87cb7899"}, + {file = "pandas-3.0.5-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2c0cf1dd9b55a22d105fc46c1b489af3bd42264fcba7c66297bf47a9a1d9c78a"}, + {file = "pandas-3.0.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0fac0010c75e4efb6b99e249c183a8993ce0dc95c240f9b120a5e67c727b7928"}, + {file = "pandas-3.0.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:08d24fe11a17dc33bd6e937dc9c665f9cba08fbdc9f657f405713515febe300d"}, + {file = "pandas-3.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:b1261758dfb6cf12c3cff8300e21cefad30e7ec709abb4c24ac7318e6a52462a"}, + {file = "pandas-3.0.5-cp311-cp311-win_arm64.whl", hash = "sha256:679f4e85b30ddb1515458ab1e788d3e260eae369b1f78da7a3aa4cac8ebf4a2a"}, + {file = "pandas-3.0.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fa290c16964d4963fbfbc358928239cf3bd755b20e988ce944877def2f44471d"}, + {file = "pandas-3.0.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c2e26bb46934b8a2ca0c3de1d3d606fc5f6746584791b2db264d58cf370e08dc"}, + {file = "pandas-3.0.5-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:73fa87b08a7ef706f8aafda39ddaccf2a99047bea62d8c88a0361bcafb2237bc"}, + {file = "pandas-3.0.5-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d373ce03ffd84010ed9839fa73672a9c8256990532e158440c0085db7d914b34"}, + {file = "pandas-3.0.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2a29c53d85ea98c5e792c59ef82ee9fbe6ca902c0d0adb6b23f45ef894cd7bf6"}, + {file = "pandas-3.0.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a5ad3b02ed6bc7d7ae9b70804b2c6aa31827489d150f8e623ce82491b82085d7"}, + {file = "pandas-3.0.5-cp312-cp312-pyemscripten_2024_0_wasm32.whl", hash = "sha256:b2acb4650527eec6822c3dadb2b771277b65e7dae7a267d4bccf65fd1bb3fbce"}, + {file = "pandas-3.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:80a611068e8a3ac23f7398c6c14eb46dc974e5cc9997f653e2dcfd1da74edd41"}, + {file = "pandas-3.0.5-cp312-cp312-win_arm64.whl", hash = "sha256:25ff585b972a18ef1fe9ffa3ac6544d9950508aa76832e5147640b6022821e49"}, + {file = "pandas-3.0.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c1c05a767fe8e5b4fe9e1c29806829c582052eaedb9120a3da83ba3f69e24a5b"}, + {file = "pandas-3.0.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b86765f268b56f7e665b93bce9d5df69dee7f99e595cf8fb839483ab315942a3"}, + {file = "pandas-3.0.5-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c597ecf5616b5c420372c1d4d4c00dbbfba7398bea857dcc984347e1ea48417b"}, + {file = "pandas-3.0.5-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4b11c36e218331d0387cbe3a0a5f75162357a1d92d57b2b08a336ff94b19b2be"}, + {file = "pandas-3.0.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cf52e1f61d229496da17dc7ab54acdee627357e7008fd4fecba3d0ba2937fa58"}, + {file = "pandas-3.0.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:db172144bb56422bd157812f3b021eacc255451470b31e2c633c349490a1cfee"}, + {file = "pandas-3.0.5-cp313-cp313-win_amd64.whl", hash = "sha256:0d298e951f23016ce4699951d044ae6418dbc91bf68cefca0f77666fcbb4e5c6"}, + {file = "pandas-3.0.5-cp313-cp313-win_arm64.whl", hash = "sha256:66266d3442a5e8b3c90274c2b8b230bee42dd1c286bc822cc2f9f2c7e12b883e"}, + {file = "pandas-3.0.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:2f264fc46911cc8131a7322a16199bbf8e353d27c10bb211f5bd0c814324dc36"}, + {file = "pandas-3.0.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:53730687fcd161883b24e10411c06d6a4c0f2275d2faf3bb2bc25deb4ba8007c"}, + {file = "pandas-3.0.5-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:960d3ebcf249f75206899fcd2c6de53f736b7265759ced0d3e559df0b8b709b0"}, + {file = "pandas-3.0.5-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e94c2c5ca43bd3ca32bf64d32308887b65e5f9bfd8023ea52755107a999f93b"}, + {file = "pandas-3.0.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e819dd5f62966b481a8cb649d3299ebd886a1ea91ed5a99bf7ce77c98d18ab94"}, + {file = "pandas-3.0.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:3c5ed2e7c06e91d340dfd091d7934f9bc82e4a36b95f647f090b9d1c9ac649da"}, + {file = "pandas-3.0.5-cp314-cp314-win_amd64.whl", hash = "sha256:cd8f7c6dc98527058ee6264219343f5392240a6f1bfa654fc5d79023020d0c92"}, + {file = "pandas-3.0.5-cp314-cp314-win_arm64.whl", hash = "sha256:5183427f5a8156d480f30333777bc978be93650a49a7c01db26adffe95b31e85"}, + {file = "pandas-3.0.5-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:303da736987d481074ca720ada325f8bd80c64ebc2d45ed79b29df3aaa4a26ca"}, + {file = "pandas-3.0.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:3b2801bbb049d0136f6c213eae02b5fca969384fc2064dd728d8620552aa49da"}, + {file = "pandas-3.0.5-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cce3a9d11d2b1f82c69a27ec1f4948a170e2c403c4bbfa8cca62e3fdebe2ef3a"}, + {file = "pandas-3.0.5-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ef01af4d8dc6cd2c8d6c7736f149574ef93fe043811eeb5e445f2647154b5040"}, + {file = "pandas-3.0.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e2759e890db96dfcffdbd9b86c3c2cb6afaf58def482820317e06163ec1066cd"}, + {file = "pandas-3.0.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b58b1b39d46a5862e3fb18f50d1a201398619d16a0f9f73f57eea5583cf0e63c"}, + {file = "pandas-3.0.5-cp314-cp314t-win_amd64.whl", hash = "sha256:1c10461f6eeb35d8f05b6184c65c8b9991663b66c46b1d559b682cb34ae7c6ea"}, + {file = "pandas-3.0.5-cp314-cp314t-win_arm64.whl", hash = "sha256:3c5015fd1730fbf883647e88068176c839c102cea883ba1769a6f4593bfc1f8c"}, + {file = "pandas-3.0.5.tar.gz", hash = "sha256:dca3734d6ab7c906e6730f0788b0a1dbb9f2467731f9711f77995c8e9d62d712"}, +] + +[package.dependencies] +numpy = [ + {version = ">=1.26.0", markers = "python_version < \"3.14\""}, + {version = ">=2.3.3", markers = "python_version >= \"3.14\""}, +] +python-dateutil = ">=2.8.2" +tzdata = {version = "*", markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\""} + +[package.extras] +all = ["PyQt5 (>=5.15.9)", "SQLAlchemy (>=2.0.36)", "adbc-driver-postgresql (>=1.2.0)", "adbc-driver-sqlite (>=1.2.0)", "beautifulsoup4 (>=4.12.3)", "bottleneck (>=1.4.2)", "fastparquet (>=2024.11.0)", "fsspec (>=2024.10.0)", "gcsfs (>=2024.10.0)", "html5lib (>=1.1)", "hypothesis (>=6.116.0)", "jinja2 (>=3.1.5)", "lxml (>=5.3.0)", "matplotlib (>=3.9.3)", "numba (>=0.60.0)", "numexpr (>=2.10.2)", "odfpy (>=1.4.1)", "openpyxl (>=3.1.5)", "psycopg2 (>=2.9.10)", "pyarrow (>=13.0.0)", "pyiceberg (>=0.8.1)", "pymysql (>=1.1.1)", "pyreadstat (>=1.2.8)", "pytest (>=8.3.4)", "pytest-xdist (>=3.6.1)", "python-calamine (>=0.3.0)", "pytz (>=2020.1)", "pyxlsb (>=1.0.10)", "qtpy (>=2.4.2)", "s3fs (>=2024.10.0)", "scipy (>=1.14.1)", "tables (>=3.10.1)", "tabulate (>=0.9.0)", "xarray (>=2024.10.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.2.0)", "zstandard (>=0.23.0)"] +aws = ["s3fs (>=2024.10.0)"] +clipboard = ["PyQt5 (>=5.15.9)", "qtpy (>=2.4.2)"] +compression = ["zstandard (>=0.23.0)"] +computation = ["scipy (>=1.14.1)", "xarray (>=2024.10.0)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.1.5)", "python-calamine (>=0.3.0)", "pyxlsb (>=1.0.10)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.2.0)"] +feather = ["pyarrow (>=13.0.0)"] +fss = ["fsspec (>=2024.10.0)"] +gcp = ["gcsfs (>=2024.10.0)"] +hdf5 = ["tables (>=3.10.1)"] +html = ["beautifulsoup4 (>=4.12.3)", "html5lib (>=1.1)", "lxml (>=5.3.0)"] +iceberg = ["pyiceberg (>=0.8.1)"] +mysql = ["SQLAlchemy (>=2.0.36)", "pymysql (>=1.1.1)"] +output-formatting = ["jinja2 (>=3.1.5)", "tabulate (>=0.9.0)"] +parquet = ["pyarrow (>=13.0.0)"] +performance = ["bottleneck (>=1.4.2)", "numba (>=0.60.0)", "numexpr (>=2.10.2)"] +plot = ["matplotlib (>=3.9.3)"] +postgresql = ["SQLAlchemy (>=2.0.36)", "adbc-driver-postgresql (>=1.2.0)", "psycopg2 (>=2.9.10)"] +pyarrow = ["pyarrow (>=13.0.0)"] +spss = ["pyreadstat (>=1.2.8)"] +sql-other = ["SQLAlchemy (>=2.0.36)", "adbc-driver-postgresql (>=1.2.0)", "adbc-driver-sqlite (>=1.2.0)"] +test = ["hypothesis (>=6.116.0)", "pytest (>=8.3.4,<9.1)", "pytest-xdist (>=3.6.1)"] +timezone = ["pytz (>=2020.1)"] +xml = ["lxml (>=5.3.0)"] + [[package]] name = "pandocfilters" version = "1.5.1" @@ -2635,6 +3286,24 @@ files = [ qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] testing = ["docopt", "pytest"] +[[package]] +name = "pathos" +version = "0.3.5" +description = "parallel graph management and execution in heterogeneous computing" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pathos-0.3.5-py3-none-any.whl", hash = "sha256:c95b04103c40a16c08db69cd4b5c52624d55208beadf1348681edece809ec4f8"}, + {file = "pathos-0.3.5.tar.gz", hash = "sha256:8fe041b8545c5d3880a038f866022bdebf935e5cf68f56ed3407cb7e65193a61"}, +] + +[package.dependencies] +dill = ">=0.4.1" +multiprocess = ">=0.70.19" +pox = ">=0.3.7" +ppft = ">=1.7.8" + [[package]] name = "pathspec" version = "0.12.1" @@ -2648,6 +3317,24 @@ files = [ {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, ] +[[package]] +name = "patsy" +version = "1.0.2" +description = "A Python package for describing statistical models and for building design matrices." +optional = false +python-versions = ">=3.6" +groups = ["main"] +files = [ + {file = "patsy-1.0.2-py2.py3-none-any.whl", hash = "sha256:37bfddbc58fcf0362febb5f54f10743f8b21dd2aa73dec7e7ef59d1b02ae668a"}, + {file = "patsy-1.0.2.tar.gz", hash = "sha256:cdc995455f6233e90e22de72c37fcadb344e7586fb83f06696f54d92f8ce74c0"}, +] + +[package.dependencies] +numpy = ">=1.4" + +[package.extras] +test = ["pytest", "pytest-cov", "scipy"] + [[package]] name = "pexpect" version = "4.9.0" @@ -2655,7 +3342,7 @@ description = "Pexpect allows easy control of interactive console applications." optional = true python-versions = "*" groups = ["main"] -markers = "extra == \"dev\" and sys_platform != \"win32\" and (python_version < \"3.14\" or sys_platform != \"win32\" and sys_platform != \"emscripten\")" +markers = "sys_platform != \"win32\" and sys_platform != \"emscripten\" and extra == \"dev\"" files = [ {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"}, @@ -2664,140 +3351,13 @@ files = [ [package.dependencies] ptyprocess = ">=0.5" -[[package]] -name = "pillow" -version = "11.3.0" -description = "Python Imaging Library (Fork)" -optional = true -python-versions = ">=3.9" -groups = ["main"] -markers = "python_version < \"3.14\" and (extra == \"dev\" or extra == \"examples\")" -files = [ - {file = "pillow-11.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1b9c17fd4ace828b3003dfd1e30bff24863e0eb59b535e8f80194d9cc7ecf860"}, - {file = "pillow-11.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:65dc69160114cdd0ca0f35cb434633c75e8e7fad4cf855177a05bf38678f73ad"}, - {file = "pillow-11.3.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7107195ddc914f656c7fc8e4a5e1c25f32e9236ea3ea860f257b0436011fddd0"}, - {file = "pillow-11.3.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cc3e831b563b3114baac7ec2ee86819eb03caa1a2cef0b481a5675b59c4fe23b"}, - {file = "pillow-11.3.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f1f182ebd2303acf8c380a54f615ec883322593320a9b00438eb842c1f37ae50"}, - {file = "pillow-11.3.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4445fa62e15936a028672fd48c4c11a66d641d2c05726c7ec1f8ba6a572036ae"}, - {file = "pillow-11.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:71f511f6b3b91dd543282477be45a033e4845a40278fa8dcdbfdb07109bf18f9"}, - {file = "pillow-11.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:040a5b691b0713e1f6cbe222e0f4f74cd233421e105850ae3b3c0ceda520f42e"}, - {file = "pillow-11.3.0-cp310-cp310-win32.whl", hash = "sha256:89bd777bc6624fe4115e9fac3352c79ed60f3bb18651420635f26e643e3dd1f6"}, - {file = "pillow-11.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:19d2ff547c75b8e3ff46f4d9ef969a06c30ab2d4263a9e287733aa8b2429ce8f"}, - {file = "pillow-11.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:819931d25e57b513242859ce1876c58c59dc31587847bf74cfe06b2e0cb22d2f"}, - {file = "pillow-11.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:1cd110edf822773368b396281a2293aeb91c90a2db00d78ea43e7e861631b722"}, - {file = "pillow-11.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9c412fddd1b77a75aa904615ebaa6001f169b26fd467b4be93aded278266b288"}, - {file = "pillow-11.3.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7d1aa4de119a0ecac0a34a9c8bde33f34022e2e8f99104e47a3ca392fd60e37d"}, - {file = "pillow-11.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:91da1d88226663594e3f6b4b8c3c8d85bd504117d043740a8e0ec449087cc494"}, - {file = "pillow-11.3.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:643f189248837533073c405ec2f0bb250ba54598cf80e8c1e043381a60632f58"}, - {file = "pillow-11.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:106064daa23a745510dabce1d84f29137a37224831d88eb4ce94bb187b1d7e5f"}, - {file = "pillow-11.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cd8ff254faf15591e724dc7c4ddb6bf4793efcbe13802a4ae3e863cd300b493e"}, - {file = "pillow-11.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:932c754c2d51ad2b2271fd01c3d121daaa35e27efae2a616f77bf164bc0b3e94"}, - {file = "pillow-11.3.0-cp311-cp311-win32.whl", hash = "sha256:b4b8f3efc8d530a1544e5962bd6b403d5f7fe8b9e08227c6b255f98ad82b4ba0"}, - {file = "pillow-11.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:1a992e86b0dd7aeb1f053cd506508c0999d710a8f07b4c791c63843fc6a807ac"}, - {file = "pillow-11.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:30807c931ff7c095620fe04448e2c2fc673fcbb1ffe2a7da3fb39613489b1ddd"}, - {file = "pillow-11.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdae223722da47b024b867c1ea0be64e0df702c5e0a60e27daad39bf960dd1e4"}, - {file = "pillow-11.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:921bd305b10e82b4d1f5e802b6850677f965d8394203d182f078873851dada69"}, - {file = "pillow-11.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb76541cba2f958032d79d143b98a3a6b3ea87f0959bbe256c0b5e416599fd5d"}, - {file = "pillow-11.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:67172f2944ebba3d4a7b54f2e95c786a3a50c21b88456329314caaa28cda70f6"}, - {file = "pillow-11.3.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97f07ed9f56a3b9b5f49d3661dc9607484e85c67e27f3e8be2c7d28ca032fec7"}, - {file = "pillow-11.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:676b2815362456b5b3216b4fd5bd89d362100dc6f4945154ff172e206a22c024"}, - {file = "pillow-11.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3e184b2f26ff146363dd07bde8b711833d7b0202e27d13540bfe2e35a323a809"}, - {file = "pillow-11.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6be31e3fc9a621e071bc17bb7de63b85cbe0bfae91bb0363c893cbe67247780d"}, - {file = "pillow-11.3.0-cp312-cp312-win32.whl", hash = "sha256:7b161756381f0918e05e7cb8a371fff367e807770f8fe92ecb20d905d0e1c149"}, - {file = "pillow-11.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:a6444696fce635783440b7f7a9fc24b3ad10a9ea3f0ab66c5905be1c19ccf17d"}, - {file = "pillow-11.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:2aceea54f957dd4448264f9bf40875da0415c83eb85f55069d89c0ed436e3542"}, - {file = "pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:1c627742b539bba4309df89171356fcb3cc5a9178355b2727d1b74a6cf155fbd"}, - {file = "pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:30b7c02f3899d10f13d7a48163c8969e4e653f8b43416d23d13d1bbfdc93b9f8"}, - {file = "pillow-11.3.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:7859a4cc7c9295f5838015d8cc0a9c215b77e43d07a25e460f35cf516df8626f"}, - {file = "pillow-11.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ec1ee50470b0d050984394423d96325b744d55c701a439d2bd66089bff963d3c"}, - {file = "pillow-11.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7db51d222548ccfd274e4572fdbf3e810a5e66b00608862f947b163e613b67dd"}, - {file = "pillow-11.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2d6fcc902a24ac74495df63faad1884282239265c6839a0a6416d33faedfae7e"}, - {file = "pillow-11.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f0f5d8f4a08090c6d6d578351a2b91acf519a54986c055af27e7a93feae6d3f1"}, - {file = "pillow-11.3.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c37d8ba9411d6003bba9e518db0db0c58a680ab9fe5179f040b0463644bc9805"}, - {file = "pillow-11.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:13f87d581e71d9189ab21fe0efb5a23e9f28552d5be6979e84001d3b8505abe8"}, - {file = "pillow-11.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:023f6d2d11784a465f09fd09a34b150ea4672e85fb3d05931d89f373ab14abb2"}, - {file = "pillow-11.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:45dfc51ac5975b938e9809451c51734124e73b04d0f0ac621649821a63852e7b"}, - {file = "pillow-11.3.0-cp313-cp313-win32.whl", hash = "sha256:a4d336baed65d50d37b88ca5b60c0fa9d81e3a87d4a7930d3880d1624d5b31f3"}, - {file = "pillow-11.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0bce5c4fd0921f99d2e858dc4d4d64193407e1b99478bc5cacecba2311abde51"}, - {file = "pillow-11.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:1904e1264881f682f02b7f8167935cce37bc97db457f8e7849dc3a6a52b99580"}, - {file = "pillow-11.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4c834a3921375c48ee6b9624061076bc0a32a60b5532b322cc0ea64e639dd50e"}, - {file = "pillow-11.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5e05688ccef30ea69b9317a9ead994b93975104a677a36a8ed8106be9260aa6d"}, - {file = "pillow-11.3.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1019b04af07fc0163e2810167918cb5add8d74674b6267616021ab558dc98ced"}, - {file = "pillow-11.3.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f944255db153ebb2b19c51fe85dd99ef0ce494123f21b9db4877ffdfc5590c7c"}, - {file = "pillow-11.3.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1f85acb69adf2aaee8b7da124efebbdb959a104db34d3a2cb0f3793dbae422a8"}, - {file = "pillow-11.3.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:05f6ecbeff5005399bb48d198f098a9b4b6bdf27b8487c7f38ca16eeb070cd59"}, - {file = "pillow-11.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a7bc6e6fd0395bc052f16b1a8670859964dbd7003bd0af2ff08342eb6e442cfe"}, - {file = "pillow-11.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:83e1b0161c9d148125083a35c1c5a89db5b7054834fd4387499e06552035236c"}, - {file = "pillow-11.3.0-cp313-cp313t-win32.whl", hash = "sha256:2a3117c06b8fb646639dce83694f2f9eac405472713fcb1ae887469c0d4f6788"}, - {file = "pillow-11.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:857844335c95bea93fb39e0fa2726b4d9d758850b34075a7e3ff4f4fa3aa3b31"}, - {file = "pillow-11.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:8797edc41f3e8536ae4b10897ee2f637235c94f27404cac7297f7b607dd0716e"}, - {file = "pillow-11.3.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:d9da3df5f9ea2a89b81bb6087177fb1f4d1c7146d583a3fe5c672c0d94e55e12"}, - {file = "pillow-11.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0b275ff9b04df7b640c59ec5a3cb113eefd3795a8df80bac69646ef699c6981a"}, - {file = "pillow-11.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0743841cabd3dba6a83f38a92672cccbd69af56e3e91777b0ee7f4dba4385632"}, - {file = "pillow-11.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2465a69cf967b8b49ee1b96d76718cd98c4e925414ead59fdf75cf0fd07df673"}, - {file = "pillow-11.3.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41742638139424703b4d01665b807c6468e23e699e8e90cffefe291c5832b027"}, - {file = "pillow-11.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:93efb0b4de7e340d99057415c749175e24c8864302369e05914682ba642e5d77"}, - {file = "pillow-11.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7966e38dcd0fa11ca390aed7c6f20454443581d758242023cf36fcb319b1a874"}, - {file = "pillow-11.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:98a9afa7b9007c67ed84c57c9e0ad86a6000da96eaa638e4f8abe5b65ff83f0a"}, - {file = "pillow-11.3.0-cp314-cp314-win32.whl", hash = "sha256:02a723e6bf909e7cea0dac1b0e0310be9d7650cd66222a5f1c571455c0a45214"}, - {file = "pillow-11.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:a418486160228f64dd9e9efcd132679b7a02a5f22c982c78b6fc7dab3fefb635"}, - {file = "pillow-11.3.0-cp314-cp314-win_arm64.whl", hash = "sha256:155658efb5e044669c08896c0c44231c5e9abcaadbc5cd3648df2f7c0b96b9a6"}, - {file = "pillow-11.3.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:59a03cdf019efbfeeed910bf79c7c93255c3d54bc45898ac2a4140071b02b4ae"}, - {file = "pillow-11.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f8a5827f84d973d8636e9dc5764af4f0cf2318d26744b3d902931701b0d46653"}, - {file = "pillow-11.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ee92f2fd10f4adc4b43d07ec5e779932b4eb3dbfbc34790ada5a6669bc095aa6"}, - {file = "pillow-11.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c96d333dcf42d01f47b37e0979b6bd73ec91eae18614864622d9b87bbd5bbf36"}, - {file = "pillow-11.3.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c96f993ab8c98460cd0c001447bff6194403e8b1d7e149ade5f00594918128b"}, - {file = "pillow-11.3.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41342b64afeba938edb034d122b2dda5db2139b9a4af999729ba8818e0056477"}, - {file = "pillow-11.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:068d9c39a2d1b358eb9f245ce7ab1b5c3246c7c8c7d9ba58cfa5b43146c06e50"}, - {file = "pillow-11.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a1bc6ba083b145187f648b667e05a2534ecc4b9f2784c2cbe3089e44868f2b9b"}, - {file = "pillow-11.3.0-cp314-cp314t-win32.whl", hash = "sha256:118ca10c0d60b06d006be10a501fd6bbdfef559251ed31b794668ed569c87e12"}, - {file = "pillow-11.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:8924748b688aa210d79883357d102cd64690e56b923a186f35a82cbc10f997db"}, - {file = "pillow-11.3.0-cp314-cp314t-win_arm64.whl", hash = "sha256:79ea0d14d3ebad43ec77ad5272e6ff9bba5b679ef73375ea760261207fa8e0aa"}, - {file = "pillow-11.3.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:48d254f8a4c776de343051023eb61ffe818299eeac478da55227d96e241de53f"}, - {file = "pillow-11.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7aee118e30a4cf54fdd873bd3a29de51e29105ab11f9aad8c32123f58c8f8081"}, - {file = "pillow-11.3.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:23cff760a9049c502721bdb743a7cb3e03365fafcdfc2ef9784610714166e5a4"}, - {file = "pillow-11.3.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6359a3bc43f57d5b375d1ad54a0074318a0844d11b76abccf478c37c986d3cfc"}, - {file = "pillow-11.3.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:092c80c76635f5ecb10f3f83d76716165c96f5229addbd1ec2bdbbda7d496e06"}, - {file = "pillow-11.3.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cadc9e0ea0a2431124cde7e1697106471fc4c1da01530e679b2391c37d3fbb3a"}, - {file = "pillow-11.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:6a418691000f2a418c9135a7cf0d797c1bb7d9a485e61fe8e7722845b95ef978"}, - {file = "pillow-11.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:97afb3a00b65cc0804d1c7abddbf090a81eaac02768af58cbdcaaa0a931e0b6d"}, - {file = "pillow-11.3.0-cp39-cp39-win32.whl", hash = "sha256:ea944117a7974ae78059fcc1800e5d3295172bb97035c0c1d9345fca1419da71"}, - {file = "pillow-11.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:e5c5858ad8ec655450a7c7df532e9842cf8df7cc349df7225c60d5d348c8aada"}, - {file = "pillow-11.3.0-cp39-cp39-win_arm64.whl", hash = "sha256:6abdbfd3aea42be05702a8dd98832329c167ee84400a1d1f61ab11437f1717eb"}, - {file = "pillow-11.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:3cee80663f29e3843b68199b9d6f4f54bd1d4a6b59bdd91bceefc51238bcb967"}, - {file = "pillow-11.3.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b5f56c3f344f2ccaf0dd875d3e180f631dc60a51b314295a3e681fe8cf851fbe"}, - {file = "pillow-11.3.0-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e67d793d180c9df62f1f40aee3accca4829d3794c95098887edc18af4b8b780c"}, - {file = "pillow-11.3.0-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d000f46e2917c705e9fb93a3606ee4a819d1e3aa7a9b442f6444f07e77cf5e25"}, - {file = "pillow-11.3.0-pp310-pypy310_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:527b37216b6ac3a12d7838dc3bd75208ec57c1c6d11ef01902266a5a0c14fc27"}, - {file = "pillow-11.3.0-pp310-pypy310_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:be5463ac478b623b9dd3937afd7fb7ab3d79dd290a28e2b6df292dc75063eb8a"}, - {file = "pillow-11.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:8dc70ca24c110503e16918a658b869019126ecfe03109b754c402daff12b3d9f"}, - {file = "pillow-11.3.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7c8ec7a017ad1bd562f93dbd8505763e688d388cde6e4a010ae1486916e713e6"}, - {file = "pillow-11.3.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:9ab6ae226de48019caa8074894544af5b53a117ccb9d3b3dcb2871464c829438"}, - {file = "pillow-11.3.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fe27fb049cdcca11f11a7bfda64043c37b30e6b91f10cb5bab275806c32f6ab3"}, - {file = "pillow-11.3.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:465b9e8844e3c3519a983d58b80be3f668e2a7a5db97f2784e7079fbc9f9822c"}, - {file = "pillow-11.3.0-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5418b53c0d59b3824d05e029669efa023bbef0f3e92e75ec8428f3799487f361"}, - {file = "pillow-11.3.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:504b6f59505f08ae014f724b6207ff6222662aab5cc9542577fb084ed0676ac7"}, - {file = "pillow-11.3.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c84d689db21a1c397d001aa08241044aa2069e7587b398c8cc63020390b1c1b8"}, - {file = "pillow-11.3.0.tar.gz", hash = "sha256:3828ee7586cd0b2091b6209e5ad53e20d0649bbe87164a459d0676e035e8f523"}, -] - -[package.extras] -docs = ["furo", "olefile", "sphinx (>=8.2)", "sphinx-autobuild", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"] -fpx = ["olefile"] -mic = ["olefile"] -test-arrow = ["pyarrow"] -tests = ["check-manifest", "coverage (>=7.4.2)", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "trove-classifiers (>=2024.10.12)"] -typing = ["typing-extensions ; python_version < \"3.10\""] -xmp = ["defusedxml"] - [[package]] name = "pillow" version = "12.0.0" description = "Python Imaging Library (fork)" -optional = true +optional = false python-versions = ">=3.10" groups = ["main"] -markers = "python_version >= \"3.14\" and (extra == \"dev\" or extra == \"examples\")" files = [ {file = "pillow-12.0.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:3adfb466bbc544b926d50fe8f4a4e6abd8c6bffd28a26177594e6e9b2b76572b"}, {file = "pillow-12.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1ac11e8ea4f611c3c0147424eae514028b5e9077dd99ab91e1bd7bc33ff145e1"}, @@ -2900,24 +3460,6 @@ test-arrow = ["arro3-compute", "arro3-core", "nanoarrow", "pyarrow"] tests = ["check-manifest", "coverage (>=7.4.2)", "defusedxml", "markdown2", "olefile", "packaging", "pyroma (>=5)", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "trove-classifiers (>=2024.10.12)"] xmp = ["defusedxml"] -[[package]] -name = "platformdirs" -version = "4.4.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." -optional = true -python-versions = ">=3.9" -groups = ["main"] -markers = "python_version < \"3.14\" and extra == \"dev\"" -files = [ - {file = "platformdirs-4.4.0-py3-none-any.whl", hash = "sha256:abd01743f24e5287cd7a5db3752faf1a2d65353f38ec26d98e25a6db65958c85"}, - {file = "platformdirs-4.4.0.tar.gz", hash = "sha256:ca753cf4d81dc309bc67b0ea38fd15dc97bc30ce419a7f58d13eb3bf14c4febf"}, -] - -[package.extras] -docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.4)", "pytest-cov (>=6)", "pytest-mock (>=3.14)"] -type = ["mypy (>=1.14.1)"] - [[package]] name = "platformdirs" version = "4.5.0" @@ -2925,7 +3467,7 @@ description = "A small Python package for determining appropriate platform-speci optional = true python-versions = ">=3.10" groups = ["main"] -markers = "python_version >= \"3.14\" and extra == \"dev\"" +markers = "extra == \"dev\"" files = [ {file = "platformdirs-4.5.0-py3-none-any.whl", hash = "sha256:e578a81bb873cbb89a41fcc904c7ef523cc18284b7e3b3ccf06aca1403b7ebd3"}, {file = "platformdirs-4.5.0.tar.gz", hash = "sha256:70ddccdd7c99fc5942e9fc25636a8b34d04c24b335100223152c2803e4063312"}, @@ -2990,6 +3532,33 @@ timezone = ["backports.zoneinfo ; python_version < \"3.9\"", "tzdata ; platform_ xlsx2csv = ["xlsx2csv (>=0.8.0)"] xlsxwriter = ["xlsxwriter"] +[[package]] +name = "pox" +version = "0.3.7" +description = "utilities for filesystem exploration and automated builds" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pox-0.3.7-py3-none-any.whl", hash = "sha256:82a495249d13371314c1a5b5626a115e067ef5215d49530bf5efa37fbc25b56a"}, + {file = "pox-0.3.7.tar.gz", hash = "sha256:0652f6f2103fe6d4ba638beb6fa8d3e8a68fd44bcb63315c614118515bcc3afb"}, +] + +[[package]] +name = "ppft" +version = "1.7.8" +description = "distributed and parallel Python" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "ppft-1.7.8-py3-none-any.whl", hash = "sha256:d3e0e395215b14afc3dd5adfc032ccecfda2d4ed50dc7ded076cd1d215442843"}, + {file = "ppft-1.7.8.tar.gz", hash = "sha256:5f696d4f397ae9b0af39b1faffb31957c51dfbc5a3815856472d4f4e872937ee"}, +] + +[package.extras] +dill = ["dill (>=0.4.1)"] + [[package]] name = "prometheus-client" version = "0.23.1" @@ -3063,7 +3632,7 @@ description = "Run a subprocess in a pseudo terminal" optional = true python-versions = "*" groups = ["main"] -markers = "extra == \"dev\" and (sys_platform != \"win32\" or os_name != \"nt\") and (python_version < \"3.14\" or sys_platform != \"win32\" and sys_platform != \"emscripten\" or os_name != \"nt\")" +markers = "extra == \"dev\" and (os_name != \"nt\" or sys_platform != \"win32\" and sys_platform != \"emscripten\")" files = [ {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, @@ -3089,15 +3658,34 @@ tests = ["pytest"] name = "pycparser" version = "2.23" description = "C parser in Python" -optional = true +optional = false python-versions = ">=3.8" groups = ["main"] -markers = "extra == \"dev\" and implementation_name != \"PyPy\"" +markers = "(extra == \"dev\" or implementation_name == \"pypy\") and implementation_name != \"PyPy\"" files = [ {file = "pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934"}, {file = "pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2"}, ] +[[package]] +name = "pydoe3" +version = "1.6.2" +description = "Design of experiments for Python" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "pydoe3-1.6.2-py2.py3-none-any.whl", hash = "sha256:21b5c3ef10a350bed01f59df54ae262fd1eda9983efac294b679988f311f3445"}, + {file = "pydoe3-1.6.2.tar.gz", hash = "sha256:ff7377c30e0a2ea8af3f074723488779f557457c8b74029965896c30b8a1a541"}, +] + +[package.dependencies] +numpy = "*" +scipy = "*" + +[package.extras] +docs = ["mkdocs (>=1.6.1)", "mkdocs-material (>=9.6.22)", "mkdocs-minify-plugin (>=0.8.0)", "mkdocstrings[python] (>=0.30.1)", "pymdown-extensions (>=10.16.1)"] + [[package]] name = "pygments" version = "2.19.2" @@ -3118,10 +3706,9 @@ windows-terminal = ["colorama (>=0.4.6)"] name = "pyparsing" version = "3.2.5" description = "pyparsing - Classes and methods to define and execute parsing grammars" -optional = true +optional = false python-versions = ">=3.9" groups = ["main"] -markers = "extra == \"dev\" or extra == \"examples\"" files = [ {file = "pyparsing-3.2.5-py3-none-any.whl", hash = "sha256:e38a4f02064cf41fe6593d328d0512495ad1f3d8a91c4f73fc401b3079a59a5e"}, {file = "pyparsing-3.2.5.tar.gz", hash = "sha256:2df8d5b7b2802ef88e8d016a2eb9c7aeaa923529cd251ed0fe4608275d4105b6"}, @@ -3130,6 +3717,22 @@ files = [ [package.extras] diagrams = ["jinja2", "railroad-diagrams"] +[[package]] +name = "pyreadline3" +version = "3.5.6" +description = "A python implementation of GNU readline." +optional = false +python-versions = ">=3.8" +groups = ["main"] +markers = "sys_platform == \"win32\"" +files = [ + {file = "pyreadline3-3.5.6-py3-none-any.whl", hash = "sha256:8449b734232e42a5dcd74048e39b60db2839a4c38cf3ae2bf7707d58b5389c0d"}, + {file = "pyreadline3-3.5.6.tar.gz", hash = "sha256:61e53218b99656091ddb077df9e71f25850e72e030b6183b39c9b7e6e4f4a9bf"}, +] + +[package.extras] +dev = ["build", "flake8", "mypy", "pytest", "twine"] + [[package]] name = "pytest" version = "7.4.4" @@ -3154,14 +3757,41 @@ tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} [package.extras] testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] +[[package]] +name = "python-benedict" +version = "0.38.0" +description = "python-benedict is a dict subclass with keylist/keypath/keyattr support, normalized I/O operations (base64, csv, ini, json, pickle, plist, query-string, toml, xls, xml, yaml) and many utilities... for humans, obviously." +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "python_benedict-0.38.0-py3-none-any.whl", hash = "sha256:5f4cbdfdda245d3f2899a7fd9d59ee68e69e6d1e0d57693f8626f186a11fcc6b"}, + {file = "python_benedict-0.38.0.tar.gz", hash = "sha256:71e066b73f15d2231927b3021469a1db57a3e96092a99917018b63f51329e49c"}, +] + +[package.dependencies] +python-slugify = ">=7.0.0,<9.0.0" +typing_extensions = ">=4.13.2,<4.16.0" + +[package.extras] +all = ["python-benedict[io,parse,s3,schema]"] +html = ["beautifulsoup4 (>=4.12.0,<5.0.0)", "python-benedict[xml]"] +io = ["python-benedict[html,toml,xls,xml,yaml]", "python-fsutil (>=0.17.0,<1.0.0)", "requests (>=2.33.0,<3.0.0)"] +parse = ["ftfy (>=6.0.0,<7.0.0)", "mailchecker (>=4.1.0,<7.0.0)", "phonenumbers (>=8.12.0,<10.0.0)", "python-dateutil (>=2.8.0,<3.0.0)"] +s3 = ["boto3 (>=1.24.89,<2.0.0)", "python-fsutil (>=0.17.0,<1.0.0)"] +schema = ["pydantic (>=2.0.0,<3.0.0)"] +toml = ["tomli (>=2.0.0,<3.0.0) ; python_version < \"3.11\"", "tomli-w (>=1.0.0,<2.0.0)"] +xls = ["openpyxl (>=3.0.0,<4.0.0)", "python-fsutil (>=0.17.0,<1.0.0)", "xlrd (>=2.0.0,<3.0.0)"] +xml = ["xmltodict (>=0.12.0,<2.0.0)"] +yaml = ["pyyaml (>=6.0,<7.0)"] + [[package]] name = "python-dateutil" version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" -optional = true +optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" groups = ["main"] -markers = "extra == \"dev\" or extra == \"examples\"" files = [ {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, @@ -3183,41 +3813,38 @@ files = [ {file = "python_json_logger-4.0.0.tar.gz", hash = "sha256:f58e68eb46e1faed27e0f574a55a0455eecd7b8a5b88b85a784519ba3cff047f"}, ] +[package.extras] +dev = ["backports.zoneinfo ; python_version < \"3.9\"", "black", "build", "freezegun", "mdx_truly_sane_lists", "mike", "mkdocs", "mkdocs-awesome-pages-plugin", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-material (>=8.5)", "mkdocstrings[python]", "msgspec ; implementation_name != \"pypy\"", "mypy", "orjson ; implementation_name != \"pypy\"", "pylint", "pytest", "tzdata", "validate-pyproject[all]"] + +[[package]] +name = "python-slugify" +version = "8.0.4" +description = "A Python slugify application that also handles Unicode" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "python-slugify-8.0.4.tar.gz", hash = "sha256:59202371d1d05b54a9e7720c5e038f928f45daaffe41dd10822f3907b937c856"}, + {file = "python_slugify-8.0.4-py2.py3-none-any.whl", hash = "sha256:276540b79961052b66b7d116620b36518847f52d5fd9e3a70164fc8c50faa6b8"}, +] + [package.dependencies] -typing_extensions = {version = "*", markers = "python_version < \"3.10\""} +text-unidecode = ">=1.3" [package.extras] -dev = ["backports.zoneinfo ; python_version < \"3.9\"", "black", "build", "freezegun", "mdx_truly_sane_lists", "mike", "mkdocs", "mkdocs-awesome-pages-plugin", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-material (>=8.5)", "mkdocstrings[python]", "msgspec ; implementation_name != \"pypy\"", "mypy", "orjson ; implementation_name != \"pypy\"", "pylint", "pytest", "tzdata", "validate-pyproject[all]"] +unidecode = ["Unidecode (>=1.1.1)"] [[package]] -name = "pywin32" -version = "311" -description = "Python for Window Extensions" -optional = true +name = "pytz" +version = "2026.3.post1" +description = "World timezone definitions, modern and historical" +optional = false python-versions = "*" groups = ["main"] -markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\" and extra == \"dev\" and python_version < \"3.14\"" -files = [ - {file = "pywin32-311-cp310-cp310-win32.whl", hash = "sha256:d03ff496d2a0cd4a5893504789d4a15399133fe82517455e78bad62efbb7f0a3"}, - {file = "pywin32-311-cp310-cp310-win_amd64.whl", hash = "sha256:797c2772017851984b97180b0bebe4b620bb86328e8a884bb626156295a63b3b"}, - {file = "pywin32-311-cp310-cp310-win_arm64.whl", hash = "sha256:0502d1facf1fed4839a9a51ccbcc63d952cf318f78ffc00a7e78528ac27d7a2b"}, - {file = "pywin32-311-cp311-cp311-win32.whl", hash = "sha256:184eb5e436dea364dcd3d2316d577d625c0351bf237c4e9a5fabbcfa5a58b151"}, - {file = "pywin32-311-cp311-cp311-win_amd64.whl", hash = "sha256:3ce80b34b22b17ccbd937a6e78e7225d80c52f5ab9940fe0506a1a16f3dab503"}, - {file = "pywin32-311-cp311-cp311-win_arm64.whl", hash = "sha256:a733f1388e1a842abb67ffa8e7aad0e70ac519e09b0f6a784e65a136ec7cefd2"}, - {file = "pywin32-311-cp312-cp312-win32.whl", hash = "sha256:750ec6e621af2b948540032557b10a2d43b0cee2ae9758c54154d711cc852d31"}, - {file = "pywin32-311-cp312-cp312-win_amd64.whl", hash = "sha256:b8c095edad5c211ff31c05223658e71bf7116daa0ecf3ad85f3201ea3190d067"}, - {file = "pywin32-311-cp312-cp312-win_arm64.whl", hash = "sha256:e286f46a9a39c4a18b319c28f59b61de793654af2f395c102b4f819e584b5852"}, - {file = "pywin32-311-cp313-cp313-win32.whl", hash = "sha256:f95ba5a847cba10dd8c4d8fefa9f2a6cf283b8b88ed6178fa8a6c1ab16054d0d"}, - {file = "pywin32-311-cp313-cp313-win_amd64.whl", hash = "sha256:718a38f7e5b058e76aee1c56ddd06908116d35147e133427e59a3983f703a20d"}, - {file = "pywin32-311-cp313-cp313-win_arm64.whl", hash = "sha256:7b4075d959648406202d92a2310cb990fea19b535c7f4a78d3f5e10b926eeb8a"}, - {file = "pywin32-311-cp314-cp314-win32.whl", hash = "sha256:b7a2c10b93f8986666d0c803ee19b5990885872a7de910fc460f9b0c2fbf92ee"}, - {file = "pywin32-311-cp314-cp314-win_amd64.whl", hash = "sha256:3aca44c046bd2ed8c90de9cb8427f581c479e594e99b5c0bb19b29c10fd6cb87"}, - {file = "pywin32-311-cp314-cp314-win_arm64.whl", hash = "sha256:a508e2d9025764a8270f93111a970e1d0fbfc33f4153b388bb649b7eec4f9b42"}, - {file = "pywin32-311-cp38-cp38-win32.whl", hash = "sha256:6c6f2969607b5023b0d9ce2541f8d2cbb01c4f46bc87456017cf63b73f1e2d8c"}, - {file = "pywin32-311-cp38-cp38-win_amd64.whl", hash = "sha256:c8015b09fb9a5e188f83b7b04de91ddca4658cee2ae6f3bc483f0b21a77ef6cd"}, - {file = "pywin32-311-cp39-cp39-win32.whl", hash = "sha256:aba8f82d551a942cb20d4a83413ccbac30790b50efb89a75e4f586ac0bb8056b"}, - {file = "pywin32-311-cp39-cp39-win_amd64.whl", hash = "sha256:e0c4cfb0621281fe40387df582097fd796e80430597cb9944f0ae70447bacd91"}, - {file = "pywin32-311-cp39-cp39-win_arm64.whl", hash = "sha256:62ea666235135fee79bb154e695f3ff67370afefd71bd7fea7512fc70ef31e3d"}, +markers = "python_version < \"3.11\"" +files = [ + {file = "pytz-2026.3.post1-py2.py3-none-any.whl", hash = "sha256:dd95840dd199baea12d9cc096a1d452caa6596a1c1e4b5f3dbd1541855d5e815"}, + {file = "pytz-2026.3.post1.tar.gz", hash = "sha256:2211d3fcf9a797d3405cac96ac7f61d80e6a644f72a3309607282fe8a2010c5d"}, ] [[package]] @@ -3327,10 +3954,9 @@ files = [ name = "pyzmq" version = "27.1.0" description = "Python bindings for 0MQ" -optional = true +optional = false python-versions = ">=3.8" groups = ["main"] -markers = "extra == \"dev\"" files = [ {file = "pyzmq-27.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:508e23ec9bc44c0005c4946ea013d9317ae00ac67778bd47519fdf5a0e930ff4"}, {file = "pyzmq-27.1.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:507b6f430bdcf0ee48c0d30e734ea89ce5567fd7b8a0f0044a369c176aa44556"}, @@ -3429,32 +4055,13 @@ files = [ [package.dependencies] cffi = {version = "*", markers = "implementation_name == \"pypy\""} -[[package]] -name = "referencing" -version = "0.36.2" -description = "JSON Referencing + Python" -optional = true -python-versions = ">=3.9" -groups = ["main"] -markers = "python_version < \"3.14\" and extra == \"dev\"" -files = [ - {file = "referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0"}, - {file = "referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa"}, -] - -[package.dependencies] -attrs = ">=22.2.0" -rpds-py = ">=0.7.0" -typing-extensions = {version = ">=4.4.0", markers = "python_version < \"3.13\""} - [[package]] name = "referencing" version = "0.37.0" description = "JSON Referencing + Python" -optional = true +optional = false python-versions = ">=3.10" groups = ["main"] -markers = "python_version >= \"3.14\" and extra == \"dev\"" files = [ {file = "referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231"}, {file = "referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8"}, @@ -3463,15 +4070,15 @@ files = [ [package.dependencies] attrs = ">=22.2.0" rpds-py = ">=0.7.0" +typing-extensions = {version = ">=4.4.0", markers = "python_version < \"3.13\""} [[package]] name = "requests" version = "2.32.5" description = "Python HTTP for Humans." -optional = true +optional = false python-versions = ">=3.9" groups = ["main"] -markers = "extra == \"dev\"" files = [ {file = "requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6"}, {file = "requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf"}, @@ -3536,179 +4143,80 @@ lark = ">=1.2.2" testing = ["pytest (>=8.3.5)"] [[package]] -name = "rpds-py" -version = "0.27.1" -description = "Python bindings to Rust's persistent data structures (rpds)" -optional = true +name = "rosco" +version = "2.10.4" +description = "A reference open source controller toolset for wind turbine applications." +optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version < \"3.14\" and extra == \"dev\"" -files = [ - {file = "rpds_py-0.27.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:68afeec26d42ab3b47e541b272166a0b4400313946871cba3ed3a4fc0cab1cef"}, - {file = "rpds_py-0.27.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:74e5b2f7bb6fa38b1b10546d27acbacf2a022a8b5543efb06cfebc72a59c85be"}, - {file = "rpds_py-0.27.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9024de74731df54546fab0bfbcdb49fae19159ecaecfc8f37c18d2c7e2c0bd61"}, - {file = "rpds_py-0.27.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:31d3ebadefcd73b73928ed0b2fd696f7fefda8629229f81929ac9c1854d0cffb"}, - {file = "rpds_py-0.27.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2e7f8f169d775dd9092a1743768d771f1d1300453ddfe6325ae3ab5332b4657"}, - {file = "rpds_py-0.27.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d905d16f77eb6ab2e324e09bfa277b4c8e5e6b8a78a3e7ff8f3cdf773b4c013"}, - {file = "rpds_py-0.27.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50c946f048209e6362e22576baea09193809f87687a95a8db24e5fbdb307b93a"}, - {file = "rpds_py-0.27.1-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:3deab27804d65cd8289eb814c2c0e807c4b9d9916c9225e363cb0cf875eb67c1"}, - {file = "rpds_py-0.27.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8b61097f7488de4be8244c89915da8ed212832ccf1e7c7753a25a394bf9b1f10"}, - {file = "rpds_py-0.27.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8a3f29aba6e2d7d90528d3c792555a93497fe6538aa65eb675b44505be747808"}, - {file = "rpds_py-0.27.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dd6cd0485b7d347304067153a6dc1d73f7d4fd995a396ef32a24d24b8ac63ac8"}, - {file = "rpds_py-0.27.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6f4461bf931108c9fa226ffb0e257c1b18dc2d44cd72b125bec50ee0ab1248a9"}, - {file = "rpds_py-0.27.1-cp310-cp310-win32.whl", hash = "sha256:ee5422d7fb21f6a00c1901bf6559c49fee13a5159d0288320737bbf6585bd3e4"}, - {file = "rpds_py-0.27.1-cp310-cp310-win_amd64.whl", hash = "sha256:3e039aabf6d5f83c745d5f9a0a381d031e9ed871967c0a5c38d201aca41f3ba1"}, - {file = "rpds_py-0.27.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:be898f271f851f68b318872ce6ebebbc62f303b654e43bf72683dbdc25b7c881"}, - {file = "rpds_py-0.27.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:62ac3d4e3e07b58ee0ddecd71d6ce3b1637de2d373501412df395a0ec5f9beb5"}, - {file = "rpds_py-0.27.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4708c5c0ceb2d034f9991623631d3d23cb16e65c83736ea020cdbe28d57c0a0e"}, - {file = "rpds_py-0.27.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:abfa1171a9952d2e0002aba2ad3780820b00cc3d9c98c6630f2e93271501f66c"}, - {file = "rpds_py-0.27.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b507d19f817ebaca79574b16eb2ae412e5c0835542c93fe9983f1e432aca195"}, - {file = "rpds_py-0.27.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:168b025f8fd8d8d10957405f3fdcef3dc20f5982d398f90851f4abc58c566c52"}, - {file = "rpds_py-0.27.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb56c6210ef77caa58e16e8c17d35c63fe3f5b60fd9ba9d424470c3400bcf9ed"}, - {file = "rpds_py-0.27.1-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:d252f2d8ca0195faa707f8eb9368955760880b2b42a8ee16d382bf5dd807f89a"}, - {file = "rpds_py-0.27.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6e5e54da1e74b91dbc7996b56640f79b195d5925c2b78efaa8c5d53e1d88edde"}, - {file = "rpds_py-0.27.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ffce0481cc6e95e5b3f0a47ee17ffbd234399e6d532f394c8dce320c3b089c21"}, - {file = "rpds_py-0.27.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:a205fdfe55c90c2cd8e540ca9ceba65cbe6629b443bc05db1f590a3db8189ff9"}, - {file = "rpds_py-0.27.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:689fb5200a749db0415b092972e8eba85847c23885c8543a8b0f5c009b1a5948"}, - {file = "rpds_py-0.27.1-cp311-cp311-win32.whl", hash = "sha256:3182af66048c00a075010bc7f4860f33913528a4b6fc09094a6e7598e462fe39"}, - {file = "rpds_py-0.27.1-cp311-cp311-win_amd64.whl", hash = "sha256:b4938466c6b257b2f5c4ff98acd8128ec36b5059e5c8f8372d79316b1c36bb15"}, - {file = "rpds_py-0.27.1-cp311-cp311-win_arm64.whl", hash = "sha256:2f57af9b4d0793e53266ee4325535a31ba48e2f875da81a9177c9926dfa60746"}, - {file = "rpds_py-0.27.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ae2775c1973e3c30316892737b91f9283f9908e3cc7625b9331271eaaed7dc90"}, - {file = "rpds_py-0.27.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2643400120f55c8a96f7c9d858f7be0c88d383cd4653ae2cf0d0c88f668073e5"}, - {file = "rpds_py-0.27.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16323f674c089b0360674a4abd28d5042947d54ba620f72514d69be4ff64845e"}, - {file = "rpds_py-0.27.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a1f4814b65eacac94a00fc9a526e3fdafd78e439469644032032d0d63de4881"}, - {file = "rpds_py-0.27.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ba32c16b064267b22f1850a34051121d423b6f7338a12b9459550eb2096e7ec"}, - {file = "rpds_py-0.27.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5c20f33fd10485b80f65e800bbe5f6785af510b9f4056c5a3c612ebc83ba6cb"}, - {file = "rpds_py-0.27.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:466bfe65bd932da36ff279ddd92de56b042f2266d752719beb97b08526268ec5"}, - {file = "rpds_py-0.27.1-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:41e532bbdcb57c92ba3be62c42e9f096431b4cf478da9bc3bc6ce5c38ab7ba7a"}, - {file = "rpds_py-0.27.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f149826d742b406579466283769a8ea448eed82a789af0ed17b0cd5770433444"}, - {file = "rpds_py-0.27.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:80c60cfb5310677bd67cb1e85a1e8eb52e12529545441b43e6f14d90b878775a"}, - {file = "rpds_py-0.27.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:7ee6521b9baf06085f62ba9c7a3e5becffbc32480d2f1b351559c001c38ce4c1"}, - {file = "rpds_py-0.27.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a512c8263249a9d68cac08b05dd59d2b3f2061d99b322813cbcc14c3c7421998"}, - {file = "rpds_py-0.27.1-cp312-cp312-win32.whl", hash = "sha256:819064fa048ba01b6dadc5116f3ac48610435ac9a0058bbde98e569f9e785c39"}, - {file = "rpds_py-0.27.1-cp312-cp312-win_amd64.whl", hash = "sha256:d9199717881f13c32c4046a15f024971a3b78ad4ea029e8da6b86e5aa9cf4594"}, - {file = "rpds_py-0.27.1-cp312-cp312-win_arm64.whl", hash = "sha256:33aa65b97826a0e885ef6e278fbd934e98cdcfed80b63946025f01e2f5b29502"}, - {file = "rpds_py-0.27.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:e4b9fcfbc021633863a37e92571d6f91851fa656f0180246e84cbd8b3f6b329b"}, - {file = "rpds_py-0.27.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1441811a96eadca93c517d08df75de45e5ffe68aa3089924f963c782c4b898cf"}, - {file = "rpds_py-0.27.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55266dafa22e672f5a4f65019015f90336ed31c6383bd53f5e7826d21a0e0b83"}, - {file = "rpds_py-0.27.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d78827d7ac08627ea2c8e02c9e5b41180ea5ea1f747e9db0915e3adf36b62dcf"}, - {file = "rpds_py-0.27.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae92443798a40a92dc5f0b01d8a7c93adde0c4dc965310a29ae7c64d72b9fad2"}, - {file = "rpds_py-0.27.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c46c9dd2403b66a2a3b9720ec4b74d4ab49d4fabf9f03dfdce2d42af913fe8d0"}, - {file = "rpds_py-0.27.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2efe4eb1d01b7f5f1939f4ef30ecea6c6b3521eec451fb93191bf84b2a522418"}, - {file = "rpds_py-0.27.1-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:15d3b4d83582d10c601f481eca29c3f138d44c92187d197aff663a269197c02d"}, - {file = "rpds_py-0.27.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4ed2e16abbc982a169d30d1a420274a709949e2cbdef119fe2ec9d870b42f274"}, - {file = "rpds_py-0.27.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a75f305c9b013289121ec0f1181931975df78738cdf650093e6b86d74aa7d8dd"}, - {file = "rpds_py-0.27.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:67ce7620704745881a3d4b0ada80ab4d99df390838839921f99e63c474f82cf2"}, - {file = "rpds_py-0.27.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9d992ac10eb86d9b6f369647b6a3f412fc0075cfd5d799530e84d335e440a002"}, - {file = "rpds_py-0.27.1-cp313-cp313-win32.whl", hash = "sha256:4f75e4bd8ab8db624e02c8e2fc4063021b58becdbe6df793a8111d9343aec1e3"}, - {file = "rpds_py-0.27.1-cp313-cp313-win_amd64.whl", hash = "sha256:f9025faafc62ed0b75a53e541895ca272815bec18abe2249ff6501c8f2e12b83"}, - {file = "rpds_py-0.27.1-cp313-cp313-win_arm64.whl", hash = "sha256:ed10dc32829e7d222b7d3b93136d25a406ba9788f6a7ebf6809092da1f4d279d"}, - {file = "rpds_py-0.27.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:92022bbbad0d4426e616815b16bc4127f83c9a74940e1ccf3cfe0b387aba0228"}, - {file = "rpds_py-0.27.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:47162fdab9407ec3f160805ac3e154df042e577dd53341745fc7fb3f625e6d92"}, - {file = "rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb89bec23fddc489e5d78b550a7b773557c9ab58b7946154a10a6f7a214a48b2"}, - {file = "rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e48af21883ded2b3e9eb48cb7880ad8598b31ab752ff3be6457001d78f416723"}, - {file = "rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6f5b7bd8e219ed50299e58551a410b64daafb5017d54bbe822e003856f06a802"}, - {file = "rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08f1e20bccf73b08d12d804d6e1c22ca5530e71659e6673bce31a6bb71c1e73f"}, - {file = "rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dc5dceeaefcc96dc192e3a80bbe1d6c410c469e97bdd47494a7d930987f18b2"}, - {file = "rpds_py-0.27.1-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:d76f9cc8665acdc0c9177043746775aa7babbf479b5520b78ae4002d889f5c21"}, - {file = "rpds_py-0.27.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:134fae0e36022edad8290a6661edf40c023562964efea0cc0ec7f5d392d2aaef"}, - {file = "rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:eb11a4f1b2b63337cfd3b4d110af778a59aae51c81d195768e353d8b52f88081"}, - {file = "rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:13e608ac9f50a0ed4faec0e90ece76ae33b34c0e8656e3dceb9a7db994c692cd"}, - {file = "rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dd2135527aa40f061350c3f8f89da2644de26cd73e4de458e79606384f4f68e7"}, - {file = "rpds_py-0.27.1-cp313-cp313t-win32.whl", hash = "sha256:3020724ade63fe320a972e2ffd93b5623227e684315adce194941167fee02688"}, - {file = "rpds_py-0.27.1-cp313-cp313t-win_amd64.whl", hash = "sha256:8ee50c3e41739886606388ba3ab3ee2aae9f35fb23f833091833255a31740797"}, - {file = "rpds_py-0.27.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:acb9aafccaae278f449d9c713b64a9e68662e7799dbd5859e2c6b3c67b56d334"}, - {file = "rpds_py-0.27.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:b7fb801aa7f845ddf601c49630deeeccde7ce10065561d92729bfe81bd21fb33"}, - {file = "rpds_py-0.27.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe0dd05afb46597b9a2e11c351e5e4283c741237e7f617ffb3252780cca9336a"}, - {file = "rpds_py-0.27.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b6dfb0e058adb12d8b1d1b25f686e94ffa65d9995a5157afe99743bf7369d62b"}, - {file = "rpds_py-0.27.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed090ccd235f6fa8bb5861684567f0a83e04f52dfc2e5c05f2e4b1309fcf85e7"}, - {file = "rpds_py-0.27.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf876e79763eecf3e7356f157540d6a093cef395b65514f17a356f62af6cc136"}, - {file = "rpds_py-0.27.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:12ed005216a51b1d6e2b02a7bd31885fe317e45897de81d86dcce7d74618ffff"}, - {file = "rpds_py-0.27.1-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:ee4308f409a40e50593c7e3bb8cbe0b4d4c66d1674a316324f0c2f5383b486f9"}, - {file = "rpds_py-0.27.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0b08d152555acf1f455154d498ca855618c1378ec810646fcd7c76416ac6dc60"}, - {file = "rpds_py-0.27.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:dce51c828941973a5684d458214d3a36fcd28da3e1875d659388f4f9f12cc33e"}, - {file = "rpds_py-0.27.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:c1476d6f29eb81aa4151c9a31219b03f1f798dc43d8af1250a870735516a1212"}, - {file = "rpds_py-0.27.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:3ce0cac322b0d69b63c9cdb895ee1b65805ec9ffad37639f291dd79467bee675"}, - {file = "rpds_py-0.27.1-cp314-cp314-win32.whl", hash = "sha256:dfbfac137d2a3d0725758cd141f878bf4329ba25e34979797c89474a89a8a3a3"}, - {file = "rpds_py-0.27.1-cp314-cp314-win_amd64.whl", hash = "sha256:a6e57b0abfe7cc513450fcf529eb486b6e4d3f8aee83e92eb5f1ef848218d456"}, - {file = "rpds_py-0.27.1-cp314-cp314-win_arm64.whl", hash = "sha256:faf8d146f3d476abfee026c4ae3bdd9ca14236ae4e4c310cbd1cf75ba33d24a3"}, - {file = "rpds_py-0.27.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:ba81d2b56b6d4911ce735aad0a1d4495e808b8ee4dc58715998741a26874e7c2"}, - {file = "rpds_py-0.27.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:84f7d509870098de0e864cad0102711c1e24e9b1a50ee713b65928adb22269e4"}, - {file = "rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9e960fc78fecd1100539f14132425e1d5fe44ecb9239f8f27f079962021523e"}, - {file = "rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:62f85b665cedab1a503747617393573995dac4600ff51869d69ad2f39eb5e817"}, - {file = "rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fed467af29776f6556250c9ed85ea5a4dd121ab56a5f8b206e3e7a4c551e48ec"}, - {file = "rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2729615f9d430af0ae6b36cf042cb55c0936408d543fb691e1a9e36648fd35a"}, - {file = "rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b207d881a9aef7ba753d69c123a35d96ca7cb808056998f6b9e8747321f03b8"}, - {file = "rpds_py-0.27.1-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:639fd5efec029f99b79ae47e5d7e00ad8a773da899b6309f6786ecaf22948c48"}, - {file = "rpds_py-0.27.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fecc80cb2a90e28af8a9b366edacf33d7a91cbfe4c2c4544ea1246e949cfebeb"}, - {file = "rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:42a89282d711711d0a62d6f57d81aa43a1368686c45bc1c46b7f079d55692734"}, - {file = "rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:cf9931f14223de59551ab9d38ed18d92f14f055a5f78c1d8ad6493f735021bbb"}, - {file = "rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f39f58a27cc6e59f432b568ed8429c7e1641324fbe38131de852cd77b2d534b0"}, - {file = "rpds_py-0.27.1-cp314-cp314t-win32.whl", hash = "sha256:d5fa0ee122dc09e23607a28e6d7b150da16c662e66409bbe85230e4c85bb528a"}, - {file = "rpds_py-0.27.1-cp314-cp314t-win_amd64.whl", hash = "sha256:6567d2bb951e21232c2f660c24cf3470bb96de56cdcb3f071a83feeaff8a2772"}, - {file = "rpds_py-0.27.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c918c65ec2e42c2a78d19f18c553d77319119bf43aa9e2edf7fb78d624355527"}, - {file = "rpds_py-0.27.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1fea2b1a922c47c51fd07d656324531adc787e415c8b116530a1d29c0516c62d"}, - {file = "rpds_py-0.27.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbf94c58e8e0cd6b6f38d8de67acae41b3a515c26169366ab58bdca4a6883bb8"}, - {file = "rpds_py-0.27.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c2a8fed130ce946d5c585eddc7c8eeef0051f58ac80a8ee43bd17835c144c2cc"}, - {file = "rpds_py-0.27.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:037a2361db72ee98d829bc2c5b7cc55598ae0a5e0ec1823a56ea99374cfd73c1"}, - {file = "rpds_py-0.27.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5281ed1cc1d49882f9997981c88df1a22e140ab41df19071222f7e5fc4e72125"}, - {file = "rpds_py-0.27.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fd50659a069c15eef8aa3d64bbef0d69fd27bb4a50c9ab4f17f83a16cbf8905"}, - {file = "rpds_py-0.27.1-cp39-cp39-manylinux_2_31_riscv64.whl", hash = "sha256:c4b676c4ae3921649a15d28ed10025548e9b561ded473aa413af749503c6737e"}, - {file = "rpds_py-0.27.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:079bc583a26db831a985c5257797b2b5d3affb0386e7ff886256762f82113b5e"}, - {file = "rpds_py-0.27.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4e44099bd522cba71a2c6b97f68e19f40e7d85399de899d66cdb67b32d7cb786"}, - {file = "rpds_py-0.27.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:e202e6d4188e53c6661af813b46c37ca2c45e497fc558bacc1a7630ec2695aec"}, - {file = "rpds_py-0.27.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f41f814b8eaa48768d1bb551591f6ba45f87ac76899453e8ccd41dba1289b04b"}, - {file = "rpds_py-0.27.1-cp39-cp39-win32.whl", hash = "sha256:9e71f5a087ead99563c11fdaceee83ee982fd39cf67601f4fd66cb386336ee52"}, - {file = "rpds_py-0.27.1-cp39-cp39-win_amd64.whl", hash = "sha256:71108900c9c3c8590697244b9519017a400d9ba26a36c48381b3f64743a44aab"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7ba22cb9693df986033b91ae1d7a979bc399237d45fccf875b76f62bb9e52ddf"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5b640501be9288c77738b5492b3fd3abc4ba95c50c2e41273c8a1459f08298d3"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb08b65b93e0c6dd70aac7f7890a9c0938d5ec71d5cb32d45cf844fb8ae47636"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d7ff07d696a7a38152ebdb8212ca9e5baab56656749f3d6004b34ab726b550b8"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fb7c72262deae25366e3b6c0c0ba46007967aea15d1eea746e44ddba8ec58dcc"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7b002cab05d6339716b03a4a3a2ce26737f6231d7b523f339fa061d53368c9d8"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23f6b69d1c26c4704fec01311963a41d7de3ee0570a84ebde4d544e5a1859ffc"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:530064db9146b247351f2a0250b8f00b289accea4596a033e94be2389977de71"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7b90b0496570bd6b0321724a330d8b545827c4df2034b6ddfc5f5275f55da2ad"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:879b0e14a2da6a1102a3fc8af580fc1ead37e6d6692a781bd8c83da37429b5ab"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:0d807710df3b5faa66c731afa162ea29717ab3be17bdc15f90f2d9f183da4059"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:3adc388fc3afb6540aec081fa59e6e0d3908722771aa1e37ffe22b220a436f0b"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c796c0c1cc68cb08b0284db4229f5af76168172670c74908fdbd4b7d7f515819"}, - {file = "rpds_py-0.27.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cdfe4bb2f9fe7458b7453ad3c33e726d6d1c7c0a72960bcc23800d77384e42df"}, - {file = "rpds_py-0.27.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:8fabb8fd848a5f75a2324e4a84501ee3a5e3c78d8603f83475441866e60b94a3"}, - {file = "rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eda8719d598f2f7f3e0f885cba8646644b55a187762bec091fa14a2b819746a9"}, - {file = "rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3c64d07e95606ec402a0a1c511fe003873fa6af630bda59bac77fac8b4318ebc"}, - {file = "rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:93a2ed40de81bcff59aabebb626562d48332f3d028ca2036f1d23cbb52750be4"}, - {file = "rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:387ce8c44ae94e0ec50532d9cb0edce17311024c9794eb196b90e1058aadeb66"}, - {file = "rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aaf94f812c95b5e60ebaf8bfb1898a7d7cb9c1af5744d4a67fa47796e0465d4e"}, - {file = "rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:4848ca84d6ded9b58e474dfdbad4b8bfb450344c0551ddc8d958bf4b36aa837c"}, - {file = "rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2bde09cbcf2248b73c7c323be49b280180ff39fadcfe04e7b6f54a678d02a7cf"}, - {file = "rpds_py-0.27.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:94c44ee01fd21c9058f124d2d4f0c9dc7634bec93cd4b38eefc385dabe71acbf"}, - {file = "rpds_py-0.27.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:df8b74962e35c9249425d90144e721eed198e6555a0e22a563d29fe4486b51f6"}, - {file = "rpds_py-0.27.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:dc23e6820e3b40847e2f4a7726462ba0cf53089512abe9ee16318c366494c17a"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:aa8933159edc50be265ed22b401125c9eebff3171f570258854dbce3ecd55475"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a50431bf02583e21bf273c71b89d710e7a710ad5e39c725b14e685610555926f"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78af06ddc7fe5cc0e967085a9115accee665fb912c22a3f54bad70cc65b05fe6"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:70d0738ef8fee13c003b100c2fbd667ec4f133468109b3472d249231108283a3"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2f6fd8a1cea5bbe599b6e78a6e5ee08db434fc8ffea51ff201c8765679698b3"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8177002868d1426305bb5de1e138161c2ec9eb2d939be38291d7c431c4712df8"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:008b839781d6c9bf3b6a8984d1d8e56f0ec46dc56df61fd669c49b58ae800400"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:a55b9132bb1ade6c734ddd2759c8dc132aa63687d259e725221f106b83a0e485"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a46fdec0083a26415f11d5f236b79fa1291c32aaa4a17684d82f7017a1f818b1"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:8a63b640a7845f2bdd232eb0d0a4a2dd939bcdd6c57e6bb134526487f3160ec5"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:7e32721e5d4922deaaf963469d795d5bde6093207c52fec719bd22e5d1bedbc4"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:2c426b99a068601b5f4623573df7a7c3d72e87533a2dd2253353a03e7502566c"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4fc9b7fe29478824361ead6e14e4f5aed570d477e06088826537e202d25fe859"}, - {file = "rpds_py-0.27.1.tar.gz", hash = "sha256:26a1c73171d10b7acccbded82bf6a586ab8203601e565badc74bbbf8bc5a10f8"}, +files = [ + {file = "rosco-2.10.4-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:58b8744a6a8c66a16fb48c27b2846320cfc26b03bb5533581184543459ce804f"}, + {file = "rosco-2.10.4-cp310-cp310-macosx_15_0_arm64.whl", hash = "sha256:b6e932f0c6e2055950dfa81b1d5c10a5ce4278f5bd71f5cf52a3363c1938f574"}, + {file = "rosco-2.10.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a40d9aee6618d95b0a8f9bccbfcd3c30d62daa847f699a14b1f8c4848b19b136"}, + {file = "rosco-2.10.4-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e98960b71fc0e1b72a56b47974b8f11cc850df976e305e7705567e37a6843bb"}, + {file = "rosco-2.10.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8bb08688239e6a8fe97e82cb86003cc30825600e0fbbd06c5244d980bd1b67ed"}, + {file = "rosco-2.10.4-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:bb43839d10b87d45320d930b2a7632f8257d3df74070cce336c0a21f1216e6d0"}, + {file = "rosco-2.10.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:798759543f92dfbf0ab3be304f7d5a758c709702eb8529cc229699a496a2bb22"}, + {file = "rosco-2.10.4-cp310-cp310-win_amd64.whl", hash = "sha256:9d7d9b3c376b3dd7a5065b323e53382168908797acdf5c56341f9b9784513613"}, + {file = "rosco-2.10.4-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:bbc0eb6d2d743ee001329a3dffb05c2a9f16c7a12117d21f1240b5b55826f7d1"}, + {file = "rosco-2.10.4-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:1d623e9747bd416798edcb915f9c7aabc11e2ba606479f41dc630f05979d9fe8"}, + {file = "rosco-2.10.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b91f51ba2a7cb91e3e14e7f21099df075c5667dccd877c789386c63ad45fc0c"}, + {file = "rosco-2.10.4-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:764b5d07c63c30b22eff9b9b361b3468cde114568767f725febfffe96f8f9091"}, + {file = "rosco-2.10.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3f4301427aabfd2764c65786cd058e975a986ccc52883ff0bdabcc58f182113"}, + {file = "rosco-2.10.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1e45628f6e95ccb2e2a83fa4039a95fc0e3254cb8c7a6873076fa0e26d013381"}, + {file = "rosco-2.10.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f19795c0b8fb08d60aa9bf8077faee59d07228e32554eb70af5eaef3ab82c803"}, + {file = "rosco-2.10.4-cp311-cp311-win_amd64.whl", hash = "sha256:cdd8e01aff72f553dd4f112deeed33984b681e44598d33c3f5d70a6441f68b03"}, + {file = "rosco-2.10.4-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3cef4ebad5fa6c1c110154a8cc212c721c8c162ff0875196500979dbfa9e0b54"}, + {file = "rosco-2.10.4-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:3a79547b516c899a2db1bc446a64d7b01d25a1d4cc6f058e073e7b126489a803"}, + {file = "rosco-2.10.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7103499a61bbc2a8510423ac5a43840372983dd7d1bf99cbe99fcde1cec621e4"}, + {file = "rosco-2.10.4-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d795a2f1615a3ff281a36f62132ed24e1791726ad7c8a66bf4c4897315c6e4e8"}, + {file = "rosco-2.10.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef54a8570861b0a5e5ff030d5b50ea19ba1fcd4e614c8b14124b54b2fa4e988d"}, + {file = "rosco-2.10.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:776a234aab93a0f510eb4b62f5d3448b4d682e20029305c370f1c41678fde539"}, + {file = "rosco-2.10.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:03e7ce8282e821fd23d2cf0f933f2a207f2a9611d29e0477890b398d354dc8c4"}, + {file = "rosco-2.10.4-cp312-cp312-win_amd64.whl", hash = "sha256:c85a25eb99aa230670020aad3a9cd17fdb0fc05a35ee5828cdee71060cd89e32"}, + {file = "rosco-2.10.4-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8d3bf944755ad7c0516238a9b009b5f7990106e6a6aa55ed2d98f3ed514af116"}, + {file = "rosco-2.10.4-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:3b70954bd965278c3e3cc88bb5cfc1a49782fed0ec3214bd81cda0206d52a555"}, + {file = "rosco-2.10.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9651f32435789135b7d1a0f29b335bb82e07cd87e6aaa63d5c39e49752f48ad3"}, + {file = "rosco-2.10.4-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f34bac456efab5be143f2574f832d507c8583129d7311d8ac87b8c34c4cd3764"}, + {file = "rosco-2.10.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d152646cb400db753efecc786a24b6b028b1d83b4bed0c45d5fe6b0235f3a1d"}, + {file = "rosco-2.10.4-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b1c2791e865b23c703fbb9bf0a169e2814aedc785f0fa533079fdd09bcaa63fd"}, + {file = "rosco-2.10.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4220572d09b31b27603d3a7ef3fff263dccbdfbfbf4268713600d5db8997adf9"}, + {file = "rosco-2.10.4-cp313-cp313-win_amd64.whl", hash = "sha256:41661ac2089bb6cfaec2399bb9c45dbae4e0f8b3050bbc9c618839cef1f84e80"}, + {file = "rosco-2.10.4-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:74f509eb0415ca5729f508ae783f178568367f5e45950bf3c69513d3f2248f75"}, + {file = "rosco-2.10.4-cp39-cp39-macosx_15_0_arm64.whl", hash = "sha256:0d2002d3a392a285959adcf93990c209632b589099cd6387f4eebf41e549d26b"}, + {file = "rosco-2.10.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3aa0b894715242fb9191f2f10e80fed8a53ae9ad361b2346e2028ab73b79831"}, + {file = "rosco-2.10.4-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:133486ba634d0e47d5d756794b91a62778e2ad94d31aad44e6d33235f40c9765"}, + {file = "rosco-2.10.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d40b16110cc8ee5aed206dc839eee92f62377ecb7b661d5eab560128ecfee653"}, + {file = "rosco-2.10.4-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:be7f9c7500c2a57899ced8431a1f76b06a32c4f030035914bfb30c3e40961a52"}, + {file = "rosco-2.10.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:632d3dd73a8a7444bc1aad841beda7f5e99839b7009d8d2bdffd64045c6c6c49"}, + {file = "rosco-2.10.4-cp39-cp39-win_amd64.whl", hash = "sha256:9275097a862b263feceed0543dea3d8f81ee89512314c108328c8bdb46e677ad"}, + {file = "rosco-2.10.4.tar.gz", hash = "sha256:15e06f46bd8096dfa6f8cab7b312dacdfe3a88ad3f20fef9f320621cae462aaf"}, ] +[package.dependencies] +control = "*" +matplotlib = "*" +numpy = "*" +openfast_io = "*" +pandas = "*" +pyparsing = "*" +pyYAML = "*" +pyzmq = "*" +"ruamel.yaml" = "*" +scipy = "*" +wisdem = "*" + +[package.extras] +dev = ["cmake"] +test = ["pytest", "treon"] + [[package]] name = "rpds-py" version = "0.28.0" description = "Python bindings to Rust's persistent data structures (rpds)" -optional = true +optional = false python-versions = ">=3.10" groups = ["main"] -markers = "python_version >= \"3.14\" and extra == \"dev\"" files = [ {file = "rpds_py-0.28.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:7b6013db815417eeb56b2d9d7324e64fcd4fa289caeee6e7a78b2e11fc9b438a"}, {file = "rpds_py-0.28.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1a4c6b05c685c0c03f80dabaeb73e74218c49deea965ca63f76a752807397207"}, @@ -3827,6 +4335,24 @@ files = [ {file = "rpds_py-0.28.0.tar.gz", hash = "sha256:abd4df20485a0983e2ca334a216249b6186d6e3c1627e106651943dbdb791aea"}, ] +[[package]] +name = "ruamel-yaml" +version = "0.19.1" +description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "ruamel_yaml-0.19.1-py3-none-any.whl", hash = "sha256:27592957fedf6e0b62f281e96effd28043345e0e66001f97683aa9a40c667c93"}, + {file = "ruamel_yaml-0.19.1.tar.gz", hash = "sha256:53eb66cd27849eff968ebf8f0bf61f46cdac2da1d1f3576dd4ccee9b25c31993"}, +] + +[package.extras] +docs = ["mercurial (>5.7)", "ryd"] +jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] +libyaml = ["ruamel.yaml.clibz (>=0.3.7) ; platform_python_implementation == \"CPython\""] +oldlibyaml = ["ruamel.yaml.clib ; platform_python_implementation == \"CPython\""] + [[package]] name = "ruff" version = "0.1.15" @@ -3862,7 +4388,7 @@ description = "Fundamental algorithms for scientific computing in Python" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version < \"3.14\"" +markers = "python_version < \"3.11\"" files = [ {file = "scipy-1.13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:20335853b85e9a49ff7572ab453794298bcf0354d8068c5f6775a0eabf350aca"}, {file = "scipy-1.13.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d605e9c23906d1994f55ace80e0125c587f96c020037ea6aa98d01b4bd2e222f"}, @@ -3906,7 +4432,7 @@ description = "Fundamental algorithms for scientific computing in Python" optional = false python-versions = ">=3.11" groups = ["main"] -markers = "python_version >= \"3.14\"" +markers = "python_version >= \"3.11\"" files = [ {file = "scipy-1.16.3-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:40be6cf99e68b6c4321e9f8782e7d5ff8265af28ef2cd56e9c9b2638fa08ad97"}, {file = "scipy-1.16.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:8be1ca9170fcb6223cc7c27f4305d680ded114a1567c0bd2bfcbf947d1b17511"}, @@ -3979,6 +4505,28 @@ dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy (==1.10.0)", "pycodest doc = ["intersphinx_registry", "jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.19.1)", "jupytext", "linkify-it-py", "matplotlib (>=3.5)", "myst-nb (>=1.2.0)", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0,<8.2.0)", "sphinx-copybutton", "sphinx-design (>=0.4.0)"] test = ["Cython", "array-api-strict (>=2.3.1)", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja ; sys_platform != \"emscripten\"", "pooch", "pytest (>=8.0.0)", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] +[[package]] +name = "seaborn" +version = "0.13.2" +description = "Statistical data visualization" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "seaborn-0.13.2-py3-none-any.whl", hash = "sha256:636f8336facf092165e27924f223d3c62ca560b1f2bb5dff7ab7fad265361987"}, + {file = "seaborn-0.13.2.tar.gz", hash = "sha256:93e60a40988f4d65e9f4885df477e2fdaff6b73a9ded434c1ab356dd57eefff7"}, +] + +[package.dependencies] +matplotlib = ">=3.4,<3.6.1 || >3.6.1" +numpy = ">=1.20,<1.24.0 || >1.24.0" +pandas = ">=1.2" + +[package.extras] +dev = ["flake8", "flit", "mypy", "pandas-stubs", "pre-commit", "pytest", "pytest-cov", "pytest-xdist"] +docs = ["ipykernel", "nbconvert", "numpydoc", "pydata_sphinx_theme (==0.10.0rc2)", "pyyaml", "sphinx (<6.0.0)", "sphinx-copybutton", "sphinx-design", "sphinx-issues"] +stats = ["scipy (>=1.7)", "statsmodels (>=0.12)"] + [[package]] name = "send2trash" version = "1.8.3" @@ -4019,14 +4567,99 @@ enabler = ["pytest-enabler (>=2.2)"] test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21) ; python_version >= \"3.9\" and sys_platform != \"cygwin\"", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf ; sys_platform != \"cygwin\"", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] type = ["importlib_metadata (>=7.0.2) ; python_version < \"3.10\"", "jaraco.develop (>=7.21) ; sys_platform != \"cygwin\"", "mypy (==1.14.*)", "pytest-mypy"] +[[package]] +name = "shapely" +version = "2.1.2" +description = "Manipulation and analysis of geometric objects" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "shapely-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7ae48c236c0324b4e139bea88a306a04ca630f49be66741b340729d380d8f52f"}, + {file = "shapely-2.1.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eba6710407f1daa8e7602c347dfc94adc02205ec27ed956346190d66579eb9ea"}, + {file = "shapely-2.1.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ef4a456cc8b7b3d50ccec29642aa4aeda959e9da2fe9540a92754770d5f0cf1f"}, + {file = "shapely-2.1.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e38a190442aacc67ff9f75ce60aec04893041f16f97d242209106d502486a142"}, + {file = "shapely-2.1.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:40d784101f5d06a1fd30b55fc11ea58a61be23f930d934d86f19a180909908a4"}, + {file = "shapely-2.1.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f6f6cd5819c50d9bcf921882784586aab34a4bd53e7553e175dece6db513a6f0"}, + {file = "shapely-2.1.2-cp310-cp310-win32.whl", hash = "sha256:fe9627c39c59e553c90f5bc3128252cb85dc3b3be8189710666d2f8bc3a5503e"}, + {file = "shapely-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:1d0bfb4b8f661b3b4ec3565fa36c340bfb1cda82087199711f86a88647d26b2f"}, + {file = "shapely-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:91121757b0a36c9aac3427a651a7e6567110a4a67c97edf04f8d55d4765f6618"}, + {file = "shapely-2.1.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:16a9c722ba774cf50b5d4541242b4cce05aafd44a015290c82ba8a16931ff63d"}, + {file = "shapely-2.1.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cc4f7397459b12c0b196c9efe1f9d7e92463cbba142632b4cc6d8bbbbd3e2b09"}, + {file = "shapely-2.1.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:136ab87b17e733e22f0961504d05e77e7be8c9b5a8184f685b4a91a84efe3c26"}, + {file = "shapely-2.1.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:16c5d0fc45d3aa0a69074979f4f1928ca2734fb2e0dde8af9611e134e46774e7"}, + {file = "shapely-2.1.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6ddc759f72b5b2b0f54a7e7cde44acef680a55019eb52ac63a7af2cf17cb9cd2"}, + {file = "shapely-2.1.2-cp311-cp311-win32.whl", hash = "sha256:2fa78b49485391224755a856ed3b3bd91c8455f6121fee0db0e71cefb07d0ef6"}, + {file = "shapely-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:c64d5c97b2f47e3cd9b712eaced3b061f2b71234b3fc263e0fcf7d889c6559dc"}, + {file = "shapely-2.1.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fe2533caae6a91a543dec62e8360fe86ffcdc42a7c55f9dfd0128a977a896b94"}, + {file = "shapely-2.1.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ba4d1333cc0bc94381d6d4308d2e4e008e0bd128bdcff5573199742ee3634359"}, + {file = "shapely-2.1.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0bd308103340030feef6c111d3eb98d50dc13feea33affc8a6f9fa549e9458a3"}, + {file = "shapely-2.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1e7d4d7ad262a48bb44277ca12c7c78cb1b0f56b32c10734ec9a1d30c0b0c54b"}, + {file = "shapely-2.1.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e9eddfe513096a71896441a7c37db72da0687b34752c4e193577a145c71736fc"}, + {file = "shapely-2.1.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:980c777c612514c0cf99bc8a9de6d286f5e186dcaf9091252fcd444e5638193d"}, + {file = "shapely-2.1.2-cp312-cp312-win32.whl", hash = "sha256:9111274b88e4d7b54a95218e243282709b330ef52b7b86bc6aaf4f805306f454"}, + {file = "shapely-2.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:743044b4cfb34f9a67205cee9279feaf60ba7d02e69febc2afc609047cb49179"}, + {file = "shapely-2.1.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b510dda1a3672d6879beb319bc7c5fd302c6c354584690973c838f46ec3e0fa8"}, + {file = "shapely-2.1.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8cff473e81017594d20ec55d86b54bc635544897e13a7cfc12e36909c5309a2a"}, + {file = "shapely-2.1.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fe7b77dc63d707c09726b7908f575fc04ff1d1ad0f3fb92aec212396bc6cfe5e"}, + {file = "shapely-2.1.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7ed1a5bbfb386ee8332713bf7508bc24e32d24b74fc9a7b9f8529a55db9f4ee6"}, + {file = "shapely-2.1.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a84e0582858d841d54355246ddfcbd1fce3179f185da7470f41ce39d001ee1af"}, + {file = "shapely-2.1.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dc3487447a43d42adcdf52d7ac73804f2312cbfa5d433a7d2c506dcab0033dfd"}, + {file = "shapely-2.1.2-cp313-cp313-win32.whl", hash = "sha256:9c3a3c648aedc9f99c09263b39f2d8252f199cb3ac154fadc173283d7d111350"}, + {file = "shapely-2.1.2-cp313-cp313-win_amd64.whl", hash = "sha256:ca2591bff6645c216695bdf1614fca9c82ea1144d4a7591a466fef64f28f0715"}, + {file = "shapely-2.1.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2d93d23bdd2ed9dc157b46bc2f19b7da143ca8714464249bef6771c679d5ff40"}, + {file = "shapely-2.1.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:01d0d304b25634d60bd7cf291828119ab55a3bab87dc4af1e44b07fb225f188b"}, + {file = "shapely-2.1.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8d8382dd120d64b03698b7298b89611a6ea6f55ada9d39942838b79c9bc89801"}, + {file = "shapely-2.1.2-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:19efa3611eef966e776183e338b2d7ea43569ae99ab34f8d17c2c054d3205cc0"}, + {file = "shapely-2.1.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:346ec0c1a0fcd32f57f00e4134d1200e14bf3f5ae12af87ba83ca275c502498c"}, + {file = "shapely-2.1.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6305993a35989391bd3476ee538a5c9a845861462327efe00dd11a5c8c709a99"}, + {file = "shapely-2.1.2-cp313-cp313t-win32.whl", hash = "sha256:c8876673449f3401f278c86eb33224c5764582f72b653a415d0e6672fde887bf"}, + {file = "shapely-2.1.2-cp313-cp313t-win_amd64.whl", hash = "sha256:4a44bc62a10d84c11a7a3d7c1c4fe857f7477c3506e24c9062da0db0ae0c449c"}, + {file = "shapely-2.1.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:9a522f460d28e2bf4e12396240a5fc1518788b2fcd73535166d748399ef0c223"}, + {file = "shapely-2.1.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1ff629e00818033b8d71139565527ced7d776c269a49bd78c9df84e8f852190c"}, + {file = "shapely-2.1.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f67b34271dedc3c653eba4e3d7111aa421d5be9b4c4c7d38d30907f796cb30df"}, + {file = "shapely-2.1.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:21952dc00df38a2c28375659b07a3979d22641aeb104751e769c3ee825aadecf"}, + {file = "shapely-2.1.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1f2f33f486777456586948e333a56ae21f35ae273be99255a191f5c1fa302eb4"}, + {file = "shapely-2.1.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:cf831a13e0d5a7eb519e96f58ec26e049b1fad411fc6fc23b162a7ce04d9cffc"}, + {file = "shapely-2.1.2-cp314-cp314-win32.whl", hash = "sha256:61edcd8d0d17dd99075d320a1dd39c0cb9616f7572f10ef91b4b5b00c4aeb566"}, + {file = "shapely-2.1.2-cp314-cp314-win_amd64.whl", hash = "sha256:a444e7afccdb0999e203b976adb37ea633725333e5b119ad40b1ca291ecf311c"}, + {file = "shapely-2.1.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:5ebe3f84c6112ad3d4632b1fd2290665aa75d4cef5f6c5d77c4c95b324527c6a"}, + {file = "shapely-2.1.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5860eb9f00a1d49ebb14e881f5caf6c2cf472c7fd38bd7f253bbd34f934eb076"}, + {file = "shapely-2.1.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b705c99c76695702656327b819c9660768ec33f5ce01fa32b2af62b56ba400a1"}, + {file = "shapely-2.1.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a1fd0ea855b2cf7c9cddaf25543e914dd75af9de08785f20ca3085f2c9ca60b0"}, + {file = "shapely-2.1.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:df90e2db118c3671a0754f38e36802db75fe0920d211a27481daf50a711fdf26"}, + {file = "shapely-2.1.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:361b6d45030b4ac64ddd0a26046906c8202eb60d0f9f53085f5179f1d23021a0"}, + {file = "shapely-2.1.2-cp314-cp314t-win32.whl", hash = "sha256:b54df60f1fbdecc8ebc2c5b11870461a6417b3d617f555e5033f1505d36e5735"}, + {file = "shapely-2.1.2-cp314-cp314t-win_amd64.whl", hash = "sha256:0036ac886e0923417932c2e6369b6c52e38e0ff5d9120b90eef5cd9a5fc5cae9"}, + {file = "shapely-2.1.2.tar.gz", hash = "sha256:2ed4ecb28320a433db18a5bf029986aa8afcfd740745e78847e330d5d94922a9"}, +] + +[package.dependencies] +numpy = ">=1.21" + +[package.extras] +docs = ["matplotlib", "numpydoc (==1.1.*)", "sphinx", "sphinx-book-theme", "sphinx-remove-toctrees"] +test = ["pytest", "pytest-cov", "scipy-doctest"] + +[[package]] +name = "simpy" +version = "4.1.2" +description = "Event discrete, process based simulation for Python." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "simpy-4.1.2-py3-none-any.whl", hash = "sha256:43071f84b6512c9b4fcb33ef057f240ccb1d1f3b263f9b4f9229d072e310b372"}, + {file = "simpy-4.1.2.tar.gz", hash = "sha256:76ef36b71e0436ba94e55febc001c78879e493a323f045bbcfbb0b216e9b1fbc"}, +] + [[package]] name = "six" version = "1.17.0" description = "Python 2 and 3 compatibility utilities" -optional = true +optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" groups = ["main"] -markers = "extra == \"dev\" or extra == \"examples\"" files = [ {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, @@ -4045,6 +4678,18 @@ files = [ {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, ] +[[package]] +name = "sortedcontainers" +version = "2.4.0" +description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"}, + {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, +] + [[package]] name = "soupsieve" version = "2.8" @@ -4079,6 +4724,64 @@ pure-eval = "*" [package.extras] tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] +[[package]] +name = "statsmodels" +version = "0.14.6" +description = "Statistical computations and models for Python" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "statsmodels-0.14.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f4ff0649a2df674c7ffb6fa1a06bffdb82a6adf09a48e90e000a15a6aaa734b0"}, + {file = "statsmodels-0.14.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:109012088b3e370080846ab053c76d125268631410142daad2f8c10770e8e8d9"}, + {file = "statsmodels-0.14.6-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e93bd5d220f3cb6fc5fc1bffd5b094966cab8ee99f6c57c02e95710513d6ac3f"}, + {file = "statsmodels-0.14.6-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:06eec42d682fdb09fe5d70a05930857efb141754ec5a5056a03304c1b5e32fd9"}, + {file = "statsmodels-0.14.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0444e88557df735eda7db330806fe09d51c9f888bb1f5906cb3a61fb1a3ed4a8"}, + {file = "statsmodels-0.14.6-cp310-cp310-win_amd64.whl", hash = "sha256:e83a9abe653835da3b37fb6ae04b45480c1de11b3134bd40b09717192a1456ea"}, + {file = "statsmodels-0.14.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6ad5c2810fc6c684254a7792bf1cbaf1606cdee2a253f8bd259c43135d87cfb4"}, + {file = "statsmodels-0.14.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:341fa68a7403e10a95c7b6e41134b0da3a7b835ecff1eb266294408535a06eb6"}, + {file = "statsmodels-0.14.6-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bdf1dfe2a3ca56f5529118baf33a13efed2783c528f4a36409b46bbd2d9d48eb"}, + {file = "statsmodels-0.14.6-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a3764ba8195c9baf0925a96da0743ff218067a269f01d155ca3558deed2658ca"}, + {file = "statsmodels-0.14.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9e8d2e519852adb1b420e018f5ac6e6684b2b877478adf7fda2cfdb58f5acb5d"}, + {file = "statsmodels-0.14.6-cp311-cp311-win_amd64.whl", hash = "sha256:2738a00fca51196f5a7d44b06970ace6b8b30289839e4808d656f8a98e35faa7"}, + {file = "statsmodels-0.14.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fe76140ae7adc5ff0e60a3f0d56f4fffef484efa803c3efebf2fcd734d72ecb5"}, + {file = "statsmodels-0.14.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:26d4f0ed3b31f3c86f83a92f5c1f5cbe63fc992cd8915daf28ca49be14463a1c"}, + {file = "statsmodels-0.14.6-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8c00a42863e4f4733ac9d078bbfad816249c01451740e6f5053ecc7db6d6368"}, + {file = "statsmodels-0.14.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:19b58cf7474aa9e7e3b0771a66537148b2df9b5884fbf156096c0e6c1ff0469d"}, + {file = "statsmodels-0.14.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:81e7dcc5e9587f2567e52deaff5220b175bf2f648951549eae5fc9383b62bc37"}, + {file = "statsmodels-0.14.6-cp312-cp312-win_amd64.whl", hash = "sha256:b5eb07acd115aa6208b4058211138393a7e6c2cf12b6f213ede10f658f6a714f"}, + {file = "statsmodels-0.14.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:47ee7af083623d2091954fa71c7549b8443168f41b7c5dce66510274c50fd73e"}, + {file = "statsmodels-0.14.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:aa60d82e29fcd0a736e86feb63a11d2380322d77a9369a54be8b0965a3985f71"}, + {file = "statsmodels-0.14.6-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:89ee7d595f5939cc20bf946faedcb5137d975f03ae080f300ebb4398f16a5bd4"}, + {file = "statsmodels-0.14.6-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:730f3297b26749b216a06e4327fe0be59b8d05f7d594fb6caff4287b69654589"}, + {file = "statsmodels-0.14.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f1c08befa85e93acc992b72a390ddb7bd876190f1360e61d10cf43833463bc9c"}, + {file = "statsmodels-0.14.6-cp313-cp313-win_amd64.whl", hash = "sha256:8021271a79f35b842c02a1794465a651a9d06ec2080f76ebc3b7adce77d08233"}, + {file = "statsmodels-0.14.6-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:00781869991f8f02ad3610da6627fd26ebe262210287beb59761982a8fa88cae"}, + {file = "statsmodels-0.14.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:73f305fbf31607b35ce919fae636ab8b80d175328ed38fdc6f354e813b86ee37"}, + {file = "statsmodels-0.14.6-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e443e7077a6e2d3faeea72f5a92c9f12c63722686eb80bb40a0f04e4a7e267ad"}, + {file = "statsmodels-0.14.6-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3414e40c073d725007a6603a18247ab7af3467e1af4a5e5a24e4c27bc26673b4"}, + {file = "statsmodels-0.14.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a518d3f9889ef920116f9fa56d0338069e110f823926356946dae83bc9e33e19"}, + {file = "statsmodels-0.14.6-cp314-cp314-win_amd64.whl", hash = "sha256:151b73e29f01fe619dbce7f66d61a356e9d1fe5e906529b78807df9189c37721"}, + {file = "statsmodels-0.14.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4d0c1b0f9f6915619e2a0d3853e5763d4d66876892ad352e7d7b93a737556978"}, + {file = "statsmodels-0.14.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9e0fc891d6358bf376cc0ae1fee10a650478172ae9ba359daba1785fc496cd1a"}, + {file = "statsmodels-0.14.6-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f52ef0f0b63b8fd11e1ef1c2a1e73a410720b8715c9a83a26d733b6815597fe"}, + {file = "statsmodels-0.14.6-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b328eafa86a2a67303fdb1d25677d15b70cd2a5229aabec7670ec5ea840f1375"}, + {file = "statsmodels-0.14.6-cp39-cp39-win_amd64.whl", hash = "sha256:3bef39f8587754f2d644b2e831e102fa08ace9a5a1af4b583b122e6fd3e083ab"}, + {file = "statsmodels-0.14.6.tar.gz", hash = "sha256:4d17873d3e607d398b85126cd4ed7aad89e4e9d89fc744cdab1af3189a996c2a"}, +] + +[package.dependencies] +numpy = ">=1.22.3,<3" +packaging = ">=21.3" +pandas = ">=1.4,<2.1.0 || >2.1.0" +patsy = ">=0.5.6" +scipy = ">=1.8,<1.9.2 || >1.9.2" + +[package.extras] +build = ["cython (>=3.0.10)"] +develop = ["colorama", "cython (>=3.0.10)", "cython (>=3.0.10,<4)", "flake8", "isort", "jinja2", "joblib", "matplotlib (>=3)", "pytest (>=7.3.0,<8)", "pytest-cov", "pytest-randomly", "pytest-xdist", "pywinpty ; os_name == \"nt\"", "setuptools_scm[toml] (>=8.0,<9.0)"] +docs = ["ipykernel", "jupyter_client", "matplotlib", "nbconvert", "nbformat", "numpydoc", "pandas-datareader", "sphinx"] + [[package]] name = "terminado" version = "0.18.1" @@ -4102,6 +4805,18 @@ docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] typing = ["mypy (>=1.6,<2.0)", "traitlets (>=5.11.1)"] +[[package]] +name = "text-unidecode" +version = "1.3" +description = "The most basic Text::Unidecode port" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "text-unidecode-1.3.tar.gz", hash = "sha256:bad6603bb14d279193107714b288be206cac565dfa49aa5b105294dd5c4aab93"}, + {file = "text_unidecode-1.3-py2.py3-none-any.whl", hash = "sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8"}, +] + [[package]] name = "tinycss2" version = "1.4.0" @@ -4129,7 +4844,7 @@ description = "A lil' TOML parser" optional = true python-versions = ">=3.8" groups = ["main"] -markers = "extra == \"dev\" and python_version < \"3.11\"" +markers = "python_version < \"3.11\" and extra == \"dev\"" files = [ {file = "tomli-2.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:88bd15eb972f3664f5ed4b57c1634a97153b4bac4479dcb6a495f41921eb7f45"}, {file = "tomli-2.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:883b1c0d6398a6a9d29b508c331fa56adbcdff647f6ace4dfca0f50e90dfd0ba"}, @@ -4220,6 +4935,21 @@ notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] +[[package]] +name = "tqdm-joblib" +version = "0.0.5" +description = "Tracking progress of joblib.Parallel execution" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "tqdm_joblib-0.0.5-py3-none-any.whl", hash = "sha256:5948fccca627970cc8340dd56ac49d29222ed110b9ee39fd310b76a1483b471f"}, + {file = "tqdm_joblib-0.0.5.tar.gz", hash = "sha256:34dd63c92e1b88b5118661a41eaf91001cac2687bfe217a4b6a9ab1bbf0f1c64"}, +] + +[package.dependencies] +tqdm = "*" + [[package]] name = "traitlets" version = "5.14.3" @@ -4241,10 +4971,9 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0, name = "typing-extensions" version = "4.15.0" description = "Backported and Experimental Type Hints for Python 3.9+" -optional = true +optional = false python-versions = ">=3.9" groups = ["main"] -markers = "extra == \"dev\"" files = [ {file = "typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548"}, {file = "typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"}, @@ -4254,10 +4983,10 @@ files = [ name = "tzdata" version = "2025.2" description = "Provider of IANA time zone data" -optional = true +optional = false python-versions = ">=2" groups = ["main"] -markers = "extra == \"dev\"" +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or extra == \"dev\" or python_version < \"3.11\"" files = [ {file = "tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8"}, {file = "tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9"}, @@ -4265,7 +4994,7 @@ files = [ [[package]] name = "unified-momentum-model" -version = "0.4.1" +version = "0.5.0" description = "" optional = false python-versions = "^3.8" @@ -4289,7 +5018,7 @@ figures = ["dualitic @ git+https://github.com/jaimeliew1/Dualitic.git", "ipykern type = "git" url = "https://github.com/Howland-Lab/Unified-Momentum-Model.git" reference = "HEAD" -resolved_reference = "e55945a541db1a88d70b34f408dbf26a772f1c2c" +resolved_reference = "1d515e60d3403a0a6160acbbc67430d70adea125" [[package]] name = "uri-template" @@ -4311,10 +5040,9 @@ dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake name = "urllib3" version = "2.5.0" description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = true +optional = false python-versions = ">=3.9" groups = ["main"] -markers = "extra == \"dev\"" files = [ {file = "urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc"}, {file = "urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760"}, @@ -4397,25 +5125,163 @@ files = [ ] [[package]] -name = "zipp" -version = "3.23.0" -description = "Backport of pathlib-compatible object wrapper for zip files" -optional = true +name = "windio" +version = "2.1.1" +description = "Frameworks defining the inputs and outputs for systems engineering MDAO of wind turbine and plants." +optional = false python-versions = ">=3.9" groups = ["main"] -markers = "(extra == \"dev\" or extra == \"examples\") and python_version == \"3.9\"" files = [ - {file = "zipp-3.23.0-py3-none-any.whl", hash = "sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e"}, - {file = "zipp-3.23.0.tar.gz", hash = "sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166"}, + {file = "windio-2.1.1-py3-none-any.whl", hash = "sha256:333820957a0b38651d1ea48df5a2544f17d4cf766cee7bb2b1caed5557e7d35b"}, + {file = "windio-2.1.1.tar.gz", hash = "sha256:ca5581a8a54425695b7726713bbc878ad1f2073a767b568166fa1e8340ec7de9"}, ] +[package.dependencies] +jsonschema = "*" +netcdf4 = "*" +"ruamel.yaml" = "*" +xarray = "*" + [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] -cover = ["pytest-cov"] -doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -enabler = ["pytest-enabler (>=2.2)"] -test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more_itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] -type = ["pytest-mypy"] +docs = ["gitpython", "json-schema-for-humans", "pydata-sphinx-theme", "sphinx (<=6.2)", "sphinx_multiversion"] +test = ["numpy", "pint", "pytest", "pytest-subtests", "scipy"] + +[[package]] +name = "wisdem" +version = "4.0.5" +description = "Wind-Plant Integrated System Design & Engineering Model" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "wisdem-4.0.5-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:5334e38e26efba43c9848de4a4a4fc681b438635f0b773aff01ba6ed29d61833"}, + {file = "wisdem-4.0.5-cp310-cp310-macosx_15_0_arm64.whl", hash = "sha256:8040476014ce81342a996dbb1b3355605a8fc0b824af7ea6d5b4a95735699895"}, + {file = "wisdem-4.0.5-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0e8749f4f3a81c3d3759451bf7c221e84165ec4c9c3200bf27d4250890b4caa1"}, + {file = "wisdem-4.0.5-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:34cf7d3d26ab8fb56b447f6c3ad00697dfa1709a90059ae2ae724f4b15abbcc0"}, + {file = "wisdem-4.0.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fe5590a9a6bec0226944533930b8b2ecc088463464b1b89296612f548eeb1b3c"}, + {file = "wisdem-4.0.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:39fd308ddd7aa52f071eda69171c7eca09af9847d66072dd0e5036997056a3ec"}, + {file = "wisdem-4.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:6b53a9df4a08e4377066632a8b9030b193ad22725e3d2b220b4cc1b1a1443b95"}, + {file = "wisdem-4.0.5-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:74cd83d116e79dc2855866bab1e3b821e842bc589c682f5fea848a0cad645e0e"}, + {file = "wisdem-4.0.5-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:5d5b494a31f17c5160b0387a8fc23271813740276661b9587b8e596e286fa04b"}, + {file = "wisdem-4.0.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:225245e10812ae99532dc81ec51625188baf85e96bdd5ecd50f1b0df84f855cd"}, + {file = "wisdem-4.0.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:47e531fa4caea3b17dd661bbcbc8e9ccb21a32ea8523d229345dfc594697d30e"}, + {file = "wisdem-4.0.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3fcfc81a86be6930bb1c361e1e98181c94dea921a9b082a55ab30257de66fe44"}, + {file = "wisdem-4.0.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7a5e0042b9209857c92166b86428a2ece2f08a356a95b558df0558ba564a640a"}, + {file = "wisdem-4.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b9aab5fd74ed7f6f5d4ec019f21b4dc1396a1a8b6081c76b5ba696986cbd781"}, + {file = "wisdem-4.0.5-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:fd71cc4a9bf22b33b44a012b0fd93e07446cd873ef7dd51868026873d23d8e56"}, + {file = "wisdem-4.0.5-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:7ba8a539a7ea88226fbb88d7f3b85ce77fd9008baa86f2d70277a78b12d92df8"}, + {file = "wisdem-4.0.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b424a88bcaff9563edd58b6591428a0184f3f048505196780114680a436e28ca"}, + {file = "wisdem-4.0.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a80913729f90fccce7bcf0270a42410a93980a181878c23dfb998323a6cb4a7b"}, + {file = "wisdem-4.0.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b64dbc7f44a32a56c6af6579f18e57147fe50fa8d3f82e952693bcde5ed513d5"}, + {file = "wisdem-4.0.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:14b9080f1ed81c5484eee80902bb6135e19e35265154169cc01bda79a257ac2d"}, + {file = "wisdem-4.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:0ee7d2561072255c326787909a6b44e42a660e08a327682286874f19d20c03ff"}, + {file = "wisdem-4.0.5-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:399fdfb699dde9ecf2370ea70f11d2166f5576ff6f17924001a0091bb64d3ed9"}, + {file = "wisdem-4.0.5-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:aea2768334208adc94a98aebdfaac087ded95a2191b25889efc0e8111954e7c3"}, + {file = "wisdem-4.0.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7c7eaa94675c5dfce17e66f808b492939d05da538943e26a26c764179682e44b"}, + {file = "wisdem-4.0.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d9e9dba0f90efb450a3b3d0d6bbde95efd9c55e3e56fde9102597199be0a5611"}, + {file = "wisdem-4.0.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:db7898d130fc3de7ddd25fe5a2f844e3ee58a6b5507b7b93fd8140518376c784"}, + {file = "wisdem-4.0.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:244a31cfc048c8089ab40662a34c98a4c05547e3ec692cb9722d9f0530a93cdd"}, + {file = "wisdem-4.0.5-cp313-cp313-win_amd64.whl", hash = "sha256:d5816268c275139e0de18306e6b27d38ea73e9a3da8c3b719da00fdb4286bb7d"}, + {file = "wisdem-4.0.5-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:e3d78c2b617a4bac8de1bd42293effaabbb7fc7d0c11bd17e37a61f3a396f036"}, + {file = "wisdem-4.0.5-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:ed7ad36a201b4583a54b34ef84055f82c954bcd961edf80892217f6a0551a5a3"}, + {file = "wisdem-4.0.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2b1ed6bd1db1bd5e00f997a8be19fb7bd1275603595d94b088bb23a30f45a4be"}, + {file = "wisdem-4.0.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dfab853f51bf4930cc809262c9bc9104d074dbf355103623f39be7b2a99b7506"}, + {file = "wisdem-4.0.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:114603f3b38e8c48bcf8489e9dbcd66c2ede51162ea0124f5942bb615e42b6d9"}, + {file = "wisdem-4.0.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:efb89da281fa9d4fd1282e83364ad63e1207fa0956ef7102dd2938ac7771ceb2"}, + {file = "wisdem-4.0.5-cp314-cp314-win_amd64.whl", hash = "sha256:b912a57ffb8206b8e635ab710d51d96429c8e06f139dd9733212576e0b2f5265"}, + {file = "wisdem-4.0.5-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:92d5843bd9065d0ee08e8fc43bc222246c9374d3cb7b41d82ab3cd2616273e0f"}, + {file = "wisdem-4.0.5-cp314-cp314t-macosx_15_0_arm64.whl", hash = "sha256:64df7bd76d79e7cd412308f615c21c287cd2cb3842abde7412d0355d1375d2af"}, + {file = "wisdem-4.0.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5870790fb8d44535db0b8e50195f4352fe050be95163026f2337e5bfc5170bd2"}, + {file = "wisdem-4.0.5-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c26d49792394ab6ff7d4a85c808b94641ee5fdc5e8d9732c4ef20342f1a140f1"}, + {file = "wisdem-4.0.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c946c169d7bd679ad7b7c89d81c58735e3bff3d79a848d3c27b2d6aa1787bc96"}, + {file = "wisdem-4.0.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9ebd315b7f4dbd93acaef36470ea7a303df02484866b5904fa0a5040729baf1a"}, + {file = "wisdem-4.0.5-cp314-cp314t-win_amd64.whl", hash = "sha256:1198f91fb5c8964bda81bda1cd6c161350536679bd03fb41166ecacd865564fe"}, + {file = "wisdem-4.0.5-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:035e242eb82b0cbf80497d487afb49d92474a96627a59684682eea479f703007"}, + {file = "wisdem-4.0.5-cp39-cp39-macosx_15_0_arm64.whl", hash = "sha256:fd68a77551832707d9ab2c5f7b5adbcb1826b5c9c1bc6baf766fc86d43da39a2"}, + {file = "wisdem-4.0.5-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:77f39e9e9d934d6ecd0aa46772b174c493f58f8c1ef95d15e978d1909e5b26ce"}, + {file = "wisdem-4.0.5-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:38a812b5bcd165ee9ccbc5b9cdcc11903488fcc5faaac043ac45867def1e4d57"}, + {file = "wisdem-4.0.5-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ec75b435f752a7de52acb2ad25eb750593e1dab8f704fae06d772923d6033017"}, + {file = "wisdem-4.0.5-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:fde662130fa928552cbe0e8a28ccb87bc066c497d50be12b52dee40bf1b15a49"}, + {file = "wisdem-4.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:441662d687e55bb0417ed73b75c6d2b63ce0f6a10d889d4a2a1a50c90e441685"}, + {file = "wisdem-4.0.5.tar.gz", hash = "sha256:2361912b9816d02f71bbe5f5852bc434d4f3d606821ecfb345c2254711081019"}, +] + +[package.dependencies] +jsonmerge = "*" +jsonschema = "*" +moorpy = ">=1.2" +numpy = "*" +openmdao = "*" +openpyxl = "*" +orbit-nrel = ">=1.2.1" +pandas = "*" +pydoe3 = "*" +pyyaml = "*" +scipy = "*" +sortedcontainers = "*" +statsmodels = ">=0.14.5" +windIO = "*" + +[package.extras] +dev = ["black", "isort", "meson", "ninja", "pre-commit", "swig"] +docs = ["numpydoc", "sphinx", "sphinx-copybutton", "sphinx-jsonschema", "sphinx_rtd_theme (>=1.3)", "sphinxcontrib-bibtex"] +gui = ["dearpygui"] +opt = ["nlopt", "pyoptsparse"] +test = ["coveralls", "pytest", "pytest-cov"] + +[[package]] +name = "xarray" +version = "2025.6.1" +description = "N-D labeled arrays and datasets in Python" +optional = false +python-versions = ">=3.10" +groups = ["main"] +markers = "python_version < \"3.11\"" +files = [ + {file = "xarray-2025.6.1-py3-none-any.whl", hash = "sha256:8b988b47f67a383bdc3b04c5db475cd165e580134c1f1943d52aee4a9c97651b"}, + {file = "xarray-2025.6.1.tar.gz", hash = "sha256:a84f3f07544634a130d7dc615ae44175419f4c77957a7255161ed99c69c7c8b0"}, +] + +[package.dependencies] +numpy = ">=1.24" +packaging = ">=23.2" +pandas = ">=2.1" + +[package.extras] +accel = ["bottleneck", "flox", "numba (>=0.54)", "numbagg", "opt_einsum", "scipy"] +complete = ["xarray[accel,etc,io,parallel,viz]"] +etc = ["sparse"] +io = ["cftime", "fsspec", "h5netcdf", "netCDF4", "pooch", "pydap ; python_version < \"3.10\"", "scipy", "zarr"] +parallel = ["dask[complete]"] +types = ["pandas-stubs", "scipy-stubs", "types-PyYAML", "types-Pygments", "types-colorama", "types-decorator", "types-defusedxml", "types-docutils", "types-networkx", "types-openpyxl", "types-pexpect", "types-psutil", "types-pycurl", "types-python-dateutil", "types-pytz", "types-setuptools"] +viz = ["cartopy", "matplotlib", "nc-time-axis", "seaborn"] + +[[package]] +name = "xarray" +version = "2026.7.0" +description = "N-D labeled arrays and datasets in Python" +optional = false +python-versions = ">=3.11" +groups = ["main"] +markers = "python_version >= \"3.11\"" +files = [ + {file = "xarray-2026.7.0-py3-none-any.whl", hash = "sha256:bf9dd130b93806dc78e90c1b7ac24851b31557b888674c53622235691cf21824"}, + {file = "xarray-2026.7.0.tar.gz", hash = "sha256:361b495928fdbf5b58d0969bb6775339019da5e93ca74d61ddf4eb5edd6ce604"}, +] + +[package.dependencies] +numpy = ">=1.26" +packaging = ">=24.2" +pandas = ">=2.2" + +[package.extras] +accel = ["bottleneck", "flox (>=0.10)", "numba (>=0.62)", "numbagg (>=0.9)", "opt_einsum", "scipy (>=1.15)"] +complete = ["xarray[accel,etc,io,parallel,viz]"] +etc = ["sparse (>=0.15)"] +io = ["cftime", "fsspec", "h5netcdf[h5py] (>=1.5.0)", "netCDF4 (>=1.6.0)", "pooch", "pydap", "scipy (>=1.15)", "zarr (>=3.0)"] +parallel = ["dask[complete]"] +types = ["pandas-stubs", "scipy-stubs", "types-PyYAML", "types-Pygments", "types-colorama", "types-decorator", "types-defusedxml", "types-docutils", "types-networkx", "types-openpyxl", "types-pexpect", "types-psutil", "types-pycurl", "types-python-dateutil", "types-pytz", "types-requests", "types-setuptools", "types-xlrd"] +viz = ["cartopy (>=0.24)", "matplotlib (>=3.10)", "nc-time-axis", "seaborn"] [extras] dev = ["ipykernel", "ipython", "jupyter", "matplotlib", "mypy", "pytest", "ruff"] @@ -4423,5 +5289,5 @@ examples = ["matplotlib"] [metadata] lock-version = "2.1" -python-versions = "^3.9" -content-hash = "998ce3ac791e098ab649fa2ef5511a6c76138ae47222af93cfd94159004486bd" +python-versions = ">3.10,<3.15" +content-hash = "7ac8e1d1f543ba9a26138f8d453504a7894dc392ea35aebae041d2b03d170ef2" diff --git a/pyproject.toml b/pyproject.toml index 1511be3..983f024 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,7 +6,7 @@ authors = ["Jaime Liew "] readme = "README.md" [tool.poetry.dependencies] -python = "^3.9" +python = ">3.10,<3.15" numpy = "^2.1.1" scipy = ">=1.6" mitrotor = { git = "https://github.com/Howland-Lab/MITRotor.git", branch = "sg/floris_interface"} From a077b8613b627c0c72c4651dc411f141522799ce Mon Sep 17 00:00:00 2001 From: misi9170 Date: Thu, 6 Aug 2026 12:58:33 -0600 Subject: [PATCH 31/52] Move x0 calc to dedicated call in CurledWindfarm model --- examples/example_11_floris_interface.py | 1 - mitwindfarm/CurledWake.py | 9 ++---- mitwindfarm/FlorisInterface.py | 32 ++++-------------- mitwindfarm/Rotor.py | 24 +++++++++++++- tests/test_floris_interface.py | 43 ++----------------------- 5 files changed, 34 insertions(+), 75 deletions(-) diff --git a/examples/example_11_floris_interface.py b/examples/example_11_floris_interface.py index 82f454a..703224c 100644 --- a/examples/example_11_floris_interface.py +++ b/examples/example_11_floris_interface.py @@ -117,7 +117,6 @@ def run_model_comparison(yaw_angle=0.0, tilt=False): fmodel.set_wake_model(FlorisCurledWindfarm( solver_kwargs=solver_kwargs, use_floris_tilt=tilt, - use_TI_term=True, )) fmodel.run() powers_cwf = fmodel.get_turbine_powers() diff --git a/mitwindfarm/CurledWake.py b/mitwindfarm/CurledWake.py index dd82458..14babc6 100644 --- a/mitwindfarm/CurledWake.py +++ b/mitwindfarm/CurledWake.py @@ -17,7 +17,7 @@ from scipy.interpolate import interpn, make_interp_spline from mitwindfarm.Windfield import Windfield -from mitwindfarm.Rotor import RotorSolution +from mitwindfarm.Rotor import RotorSolution, compute_x0_with_TI from mitwindfarm.utils.integrate import ( Integrator, IntegrationException, @@ -951,12 +951,7 @@ def get_heaviside(x, yax, turbines, default_x0=1): """ ret = np.zeros_like(yax) for t in turbines: - try: - x0 = t.rotor_solution.extra.x0 - if x0 == np.inf: - x0 = default_x0 - except AttributeError: - x0 = default_x0 + x0 = compute_x0_with_TI(t.rotor_solution) if x >= t.xt and x < t.xt + x0: # yids = (yax >= (t.yt - t.D/2)) & (yax <= (t.yt + t.D/2)) diff --git a/mitwindfarm/FlorisInterface.py b/mitwindfarm/FlorisInterface.py index 08991d0..545a442 100644 --- a/mitwindfarm/FlorisInterface.py +++ b/mitwindfarm/FlorisInterface.py @@ -33,7 +33,6 @@ class FlorisCurledWindfarm(BaseWakeModel): solver_kwargs: dict = field(default=None) use_floris_tilt: bool = field(default=True, init=True) - use_TI_term: bool = field(default=False, init=True) def turbine_solve(self, farm, flow_field, grid): self._check_valid_turbine_types(farm) @@ -86,7 +85,6 @@ def _solve_and_evaluate(self, farm, flow_field, grid, turbine_grid): cubature_weights=grid.cubature_weights, correct_cp_ct_for_tilt=farm.turbines[0].correct_cp_ct_for_tilt, use_floris_tilt=self.use_floris_tilt, - use_TI_term=self.use_TI_term, ) # Create variables to store turbine outputs, and assign to farm at @@ -168,7 +166,6 @@ def __init__(self, cubature_weights = None, correct_cp_ct_for_tilt = True, use_floris_tilt = True, - use_TI_term = False, ): self.operation_model = operation_model self.power_thrust_table = power_thrust_table @@ -179,7 +176,6 @@ def __init__(self, self.cubature_weights = cubature_weights self.correct_cp_ct_for_tilt = correct_cp_ct_for_tilt self.use_floris_tilt = use_floris_tilt - self.use_TI_term = use_TI_term # Unpack and nondimensionalize the rotor points self.rotor_x = (rotor_points[0] - rotor_points[0].mean()) / rotor_diameter @@ -332,9 +328,7 @@ def __call__( # Add second cosine term, as not done in CosineLoss model Ct = Ct * np.cos(calc_eff_yaw(yaw_r, tilt_r)) - u4, v4, w4, x0 = near_wake_velocities_standin( - Ct, Us, yaw_r, tilt_r, TI=TIs if self.use_TI_term else None - ) + u4, v4, w4 = near_wake_velocities_standin(Ct, Us, yaw_r, tilt_r) elif isinstance(self.operation_model, SimpleTurbine): if yaw_r != 0 or tilt_r != 0: raise NotImplementedError( @@ -342,9 +336,7 @@ def __call__( "Cannot compute near wake velocities. Consider using CosineLossTurbine instead." ) - u4, v4, w4, x0 = near_wake_velocities_standin( - Ct, Us, 0.0, 0.0, TI=TIs if self.use_TI_term else None - ) + u4, v4, w4 = near_wake_velocities_standin(Ct, Us, 0.0, 0.0) else: raise NotImplementedError( "The operation model does not have a near_wake_velocities method, and is not a" \ @@ -359,11 +351,11 @@ class extra: Small class to return normalized values for axial induction and u4. Also used to store turbine power so that it can be passed back to FLORIS. """ - def __init__(self, a, u4, Ct, x0, REWS, power): + def __init__(self, a, u4, Ct, REWS, power): self.an = a self.Ct = Ct self.u4 = u4 / REWS - self.x0 = x0 + self.x0 = None # Computed within CurledWindfarm solve self.power = power # Remove null numpy dimensions and return floats as RotorSolution @@ -379,11 +371,11 @@ def __init__(self, a, u4, Ct, x0, REWS, power): tilt=np.deg2rad(tilt) if self.use_floris_tilt else 0.0, w4=w4[0,0] * Us, TI=TIs, - extra=extra(a[0,0], u4[0,0], Ct[0,0], x0[0,0], Us, P[0,0]) + extra=extra(a[0,0], u4[0,0], Ct[0,0], Us, P[0,0]) ) return rotor_solution -def near_wake_velocities_standin(Ct, Us, yaw_r, tilt_r, TI=None): +def near_wake_velocities_standin(Ct, Us, yaw_r, tilt_r): yaw_r_eff = calc_eff_yaw(yaw_r, tilt_r) @@ -392,17 +384,7 @@ def near_wake_velocities_standin(Ct, Us, yaw_r, tilt_r, TI=None): v4 = - (1/4) * Ct * np.sin(yaw_r_eff) * Us w4 = 0.0 - a = 1 + 0.5 * (Ct * Us)/(u4 - Us) - - beta = 0.1403 - alpha = 2.32 # If this term isn't to be used, pass TI = None - x0 = ( - (np.cos(yaw_r_eff) * (Us + u4)) / - ((2*beta) * np.abs(Us - u4) + 4 * alpha * (TI if TI is not None else 0.0)) - * np.sqrt(((1 - a) * np.cos(yaw_r_eff) * Us)/(Us + u4)) - ) - # Convert to global frame of reference u4, v4, w4 = eff_yaw_inv_rotation(u4, v4, w4, yaw_r_eff, yaw_r, tilt_r) - return u4, v4, w4, x0 + return u4, v4, w4 diff --git a/mitwindfarm/Rotor.py b/mitwindfarm/Rotor.py index 491f80e..76ec309 100644 --- a/mitwindfarm/Rotor.py +++ b/mitwindfarm/Rotor.py @@ -30,6 +30,7 @@ import numpy as np from UnifiedMomentumModel.Momentum import Heck, UnifiedMomentum, MomentumSolution +from UnifiedMomentumModel.Utilities.Geometry import calc_eff_yaw from MITRotor import BEM as _BEM from MITRotor import BEMSolution, RotorDefinition from .Windfield import Windfield @@ -559,4 +560,25 @@ def residual( + p_g ) - dp - return e_an, e_u4, e_v4, e_x0, e_dp \ No newline at end of file + return e_an, e_u4, e_v4, e_x0, e_dp + +def compute_x0_with_TI(rotor_solution: RotorSolution, alpha=2.32, beta=0.1403): + + # Extract rotor effective wind speed and thrust coefficient for ease of use + Us = rotor_solution.REWS # TODO: Do we need this? + # Use "extra" version of Ct, as this one has not been scaled by velocity squared + Ct = rotor_solution.extra.Ct + + # Recompute induction quantities in rotated frame of reference + yaw_eff = calc_eff_yaw(rotor_solution.yaw, rotor_solution.tilt) + u4 = Us * np.sqrt(1 - 1/16 * Ct**2 * np.sin(yaw_eff)**2 - Ct) + a = 1 + 0.5 * (Ct * Us)/(u4 - Us) + + # Compute near wake length x0 + x0 = ( + (np.cos(yaw_eff) * (Us + u4)) / + ((2*beta) * np.abs(Us - u4) + 4 * alpha * rotor_solution.TI) + * np.sqrt(((1 - a) * np.cos(yaw_eff) * Us)/(Us + u4)) + ) + + return x0 \ No newline at end of file diff --git a/tests/test_floris_interface.py b/tests/test_floris_interface.py index 0970388..054da95 100644 --- a/tests/test_floris_interface.py +++ b/tests/test_floris_interface.py @@ -80,55 +80,16 @@ def test_user_flags(): fmodel = _setup_basic_floris_model() # Tilt flag behavior - fmodel.set_wake_model(FlorisCurledWindfarm(use_floris_tilt=True, use_TI_term=False)) + fmodel.set_wake_model(FlorisCurledWindfarm(use_floris_tilt=True)) fmodel.run() powers_tilted = fmodel.get_turbine_powers() - fmodel.set_wake_model(FlorisCurledWindfarm(use_floris_tilt=False, use_TI_term=False)) + fmodel.set_wake_model(FlorisCurledWindfarm(use_floris_tilt=False)) fmodel.run() powers_not_tilted = fmodel.get_turbine_powers() # Freestream turbines produce more power when not tilted assert powers_tilted[0,0] < powers_not_tilted[0,0] - # TI term flag behavior - fmodel.set_wake_model(FlorisCurledWindfarm(use_floris_tilt=False, use_TI_term=False)) - fmodel.run() - powers_no_TI_term_const = fmodel.get_turbine_powers() - - fmodel.set_wake_model(FlorisCurledWindfarm(use_floris_tilt=False, use_TI_term=True)) - fmodel.run() - powers_TI_term_const = fmodel.get_turbine_powers() - - # Default "const" k_model does not account for x0, so unaffected - assert np.allclose(powers_TI_term_const, powers_no_TI_term_const) - - - # Adding TI term shortens the near wake and promotes faster recovery, so downstream turbines - # should produce more power when TI term is used - fmodel.set_wake_model(FlorisCurledWindfarm( - solver_kwargs={"k_model": "k-l"}, - use_floris_tilt=False, - use_TI_term=False, - )) - fmodel.run() - powers_no_TI_term = fmodel.get_turbine_powers() - - fmodel.set_wake_model(FlorisCurledWindfarm( - solver_kwargs={"k_model": "k-l"}, - use_floris_tilt=False, - use_TI_term=True, - )) - fmodel.run() - powers_TI_term = fmodel.get_turbine_powers() - - - # Freestream turbines unaffected by TI term - assert np.isclose(powers_TI_term[0,0], powers_no_TI_term[0,0]) - assert np.allclose(powers_TI_term[1,:], powers_no_TI_term[1,:]) - - # Second turbine produces more power when TI term is used - assert powers_TI_term[0,1] > powers_no_TI_term[0,1] - def test_raises_errors(): fmodel = _setup_basic_floris_model() fmodel.set_wake_model(FlorisCurledWindfarm()) From 9b250d2773a35488ca85a36f43683a78f6dc8dc2 Mon Sep 17 00:00:00 2001 From: misi9170 Date: Thu, 6 Aug 2026 13:20:35 -0600 Subject: [PATCH 32/52] Move example output figure to file --- examples/example_11_floris_interface.py | 50 +++++++++++++++---------- mitwindfarm/Rotor.py | 2 +- 2 files changed, 32 insertions(+), 20 deletions(-) diff --git a/examples/example_11_floris_interface.py b/examples/example_11_floris_interface.py index 703224c..0e3aa2b 100644 --- a/examples/example_11_floris_interface.py +++ b/examples/example_11_floris_interface.py @@ -9,6 +9,7 @@ Additionally, the example demonstrates how to set yaw and tilt angles for the turbines in the farm. """ +from pathlib import Path import matplotlib.pyplot as plt import numpy as np @@ -20,6 +21,9 @@ from mitwindfarm.Rotor import UnifiedAD_TI from mitwindfarm.windfarm import CurledWindfarm +FIGDIR = Path(__file__).parent.parent / "fig" +FIGDIR.mkdir(exist_ok=True, parents=True) + def run_model_comparison(yaw_angle=0.0, tilt=False): # Turbine parameters (for normalization) @@ -36,7 +40,10 @@ def run_model_comparison(yaw_angle=0.0, tilt=False): TI = 0.06 U = 8.0 rotation_angle = -5 # First wind direction is 270; second is 270 + rotation_angle - + + # Create figure for placing plots + fig, axes = plt.subplots(2, 3, figsize=(15, 5)) + fig.suptitle(f"Wind farm comparison: yaw={yaw_angle} deg, tilt={tilt}") # CurledWindfarm parameters layout = Layout([0, 12 / 2, 24 / 2], [0, 0, 0], [0, 0, 0]) @@ -66,10 +73,9 @@ def run_model_comparison(yaw_angle=0.0, tilt=False): windfarm_sol = windfarm(layout, setpoints) windfarm_sol_rotated = windfarm(layout.rotate(rotation_angle), setpoints) - fig, axes_windfarm = plt.subplots(2) - Plotting.plot_windfarm(windfarm_sol, axes_windfarm[0], vmin=0, vmax=2) - Plotting.plot_windfarm(windfarm_sol_rotated, axes_windfarm[1], vmin=0, vmax=2) - axes_windfarm[0].scatter(samples_x/D, samples_y/D, color="k", marker=".") + Plotting.plot_windfarm(windfarm_sol, axes[0, 0], vmin=0, vmax=2) # Left plots + Plotting.plot_windfarm(windfarm_sol_rotated, axes[1, 0], vmin=0, vmax=2) + axes[0, 0].scatter(samples_x/D, samples_y/D, color="k", marker=".") windfarm_sol = windfarm(layout, setpoints) windfarm_v_rel = windfarm_sol.windfield.wsp(samples_x/D, samples_y/D, (samples_z-H)/D) @@ -85,8 +91,8 @@ def run_model_comparison(yaw_angle=0.0, tilt=False): + (samples_x/D - 6) * np.sin(np.radians(rotation_angle)) + 0 ) - axes_windfarm[1].scatter(rotated_x, rotated_y, color="k", marker=".") - fig.suptitle("Direct CurledWindfarm call") + axes[1, 0].scatter(rotated_x, rotated_y, color="k", marker=".") + axes[0, 0].set_title("Direct CurledWindfarm call") windfarm_v_rel_rot = windfarm_sol_rotated.windfield.wsp(rotated_x, rotated_y, (samples_z-H)/D) windfarm_v_rel = np.vstack([windfarm_v_rel, windfarm_v_rel_rot]) @@ -110,7 +116,8 @@ def run_model_comparison(yaw_angle=0.0, tilt=False): fmodel.run() powers_gauss = fmodel.get_turbine_powers() floris_visualization( - fmodel, H, rotation_angle, samples_x, samples_y, "FLORIS Gauss wake model" + fmodel, H, rotation_angle, samples_x, samples_y, "FLORIS Gauss wake model", + axes[0, 2], axes[1, 2] # Right plots ) # Assign MITWindfarm wake model, rerun @@ -121,7 +128,8 @@ def run_model_comparison(yaw_angle=0.0, tilt=False): fmodel.run() powers_cwf = fmodel.get_turbine_powers() floris_visualization( - fmodel, H, rotation_angle, samples_x, samples_y, "CurledWindfarm via FLORIS" + fmodel, H, rotation_angle, samples_x, samples_y, "CurledWindfarm via FLORIS", + axes[0, 1], axes[1, 1] # Middle plots ) floris_vels = fmodel.sample_flow_at_points(samples_x, samples_y, samples_z) @@ -137,20 +145,24 @@ def run_model_comparison(yaw_angle=0.0, tilt=False): print("\nFLORIS CurledWindfarm turbine powers [MW]:") print(powers_cwf / 1e6) -def floris_visualization(fmodel, H, rotation_angle, samples_x, samples_y, title): + tilt_append = "_tilt" if tilt else "" + fig.savefig( + FIGDIR / f"{Path(__file__).stem}_yaw_{yaw_angle}{tilt_append}.png", bbox_inches="tight" + ) + +def floris_visualization(fmodel, H, rotation_angle, samples_x, samples_y, title, ax0, ax1): cmap_floris = "pink" # Extracting and plotting FLORIS results - fig, axes_floris = plt.subplots(2) horizontal_plane = fmodel.calculate_horizontal_plane( x_resolution=200, y_resolution=100, height=H, findex_for_viz=0, ) - plot_turbine_rotors(fmodel, ax=axes_floris[0]) + plot_turbine_rotors(fmodel, ax=ax0) visualize_cut_plane( horizontal_plane, - ax=axes_floris[0], + ax=ax0, cmap=cmap_floris, clevels=100, levels=[], @@ -162,19 +174,19 @@ def floris_visualization(fmodel, H, rotation_angle, samples_x, samples_y, title) findex_for_viz=1, ) plot_turbine_rotors( - fmodel, ax=axes_floris[1], yaw_angles=[-rotation_angle]*len(fmodel.layout_x) + fmodel, ax=ax1, yaw_angles=[-rotation_angle]*len(fmodel.layout_x) ) visualize_cut_plane( horizontal_plane, - ax=axes_floris[1], + ax=ax1, cmap=cmap_floris, clevels=100, levels=[], ) - axes_floris[0].scatter(samples_x, samples_y, color="k", marker=".") - axes_floris[1].scatter(samples_x, samples_y, color="k", marker=".") - fig.suptitle(title) + ax0.scatter(samples_x, samples_y, color="k", marker=".") + ax1.scatter(samples_x, samples_y, color="k", marker=".") + ax0.set_title(title) if __name__ == "__main__": @@ -188,4 +200,4 @@ def floris_visualization(fmodel, H, rotation_angle, samples_x, samples_y, title) # Include yaw and tilt print("\n\n"+"="*30+"\nYawed 25 degrees, include tilt\n"+"="*30) run_model_comparison(yaw_angle=25.0, tilt=True) - plt.show() + plt.close() diff --git a/mitwindfarm/Rotor.py b/mitwindfarm/Rotor.py index 76ec309..a972a9a 100644 --- a/mitwindfarm/Rotor.py +++ b/mitwindfarm/Rotor.py @@ -565,7 +565,7 @@ def residual( def compute_x0_with_TI(rotor_solution: RotorSolution, alpha=2.32, beta=0.1403): # Extract rotor effective wind speed and thrust coefficient for ease of use - Us = rotor_solution.REWS # TODO: Do we need this? + Us = rotor_solution.REWS # Use "extra" version of Ct, as this one has not been scaled by velocity squared Ct = rotor_solution.extra.Ct From a38b131355b2fa156e67de0261e3eedbafdbf678 Mon Sep 17 00:00:00 2001 From: misi9170 Date: Thu, 6 Aug 2026 13:29:21 -0600 Subject: [PATCH 33/52] Remove returned x0 from near_wake_velocities method --- mitwindfarm/FlorisInterface.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mitwindfarm/FlorisInterface.py b/mitwindfarm/FlorisInterface.py index 545a442..a639ed2 100644 --- a/mitwindfarm/FlorisInterface.py +++ b/mitwindfarm/FlorisInterface.py @@ -304,7 +304,7 @@ def __call__( tilt = self.tilt_interp(Us) if hasattr(self.operation_model, "near_wake_velocities"): - u4, v4, w4, x0 = self.operation_model.near_wake_velocities( + u4, v4, w4 = self.operation_model.near_wake_velocities( power_thrust_table=self.power_thrust_table, velocities=(Us_grid * self.Uref)[None, None, :, :], turbulence_intensities=np.array([[TIs]]), From 9b5e019fe177d3fcac7a8a5868217ba21e11d43b Mon Sep 17 00:00:00 2001 From: misi9170 Date: Fri, 7 Aug 2026 11:52:51 -0600 Subject: [PATCH 34/52] Bugfix---remove double application of Us --- mitwindfarm/FlorisInterface.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mitwindfarm/FlorisInterface.py b/mitwindfarm/FlorisInterface.py index a639ed2..7f86b09 100644 --- a/mitwindfarm/FlorisInterface.py +++ b/mitwindfarm/FlorisInterface.py @@ -354,7 +354,7 @@ class extra: def __init__(self, a, u4, Ct, REWS, power): self.an = a self.Ct = Ct - self.u4 = u4 / REWS + self.u4 = u4 / REWS # Non-dimensional version self.x0 = None # Computed within CurledWindfarm solve self.power = power @@ -365,11 +365,11 @@ def __init__(self, a, u4, Ct, REWS, power): Ct=Ct[0,0] * Us**2, Ctprime=Ctprime[0,0], an=a[0,0] * Us, - u4=u4[0,0] * Us, - v4=v4[0,0] * Us, + u4=u4[0,0], + v4=v4[0,0], REWS=Us, tilt=np.deg2rad(tilt) if self.use_floris_tilt else 0.0, - w4=w4[0,0] * Us, + w4=w4[0,0], TI=TIs, extra=extra(a[0,0], u4[0,0], Ct[0,0], Us, P[0,0]) ) From b5ab2b13a27b8219fdbccbb287ea826d17e2f62a Mon Sep 17 00:00:00 2001 From: misi9170 Date: Fri, 7 Aug 2026 11:57:15 -0600 Subject: [PATCH 35/52] Use saved versions of quantities on rotor_solution --- mitwindfarm/FlorisInterface.py | 2 +- mitwindfarm/Rotor.py | 12 +++++------- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/mitwindfarm/FlorisInterface.py b/mitwindfarm/FlorisInterface.py index 7f86b09..25344af 100644 --- a/mitwindfarm/FlorisInterface.py +++ b/mitwindfarm/FlorisInterface.py @@ -380,7 +380,7 @@ def near_wake_velocities_standin(Ct, Us, yaw_r, tilt_r): yaw_r_eff = calc_eff_yaw(yaw_r, tilt_r) # In rotated frame of reference - u4 = Us * np.sqrt(1 - 1/16 * Ct**2 * np.sin(yaw_r_eff)**2 - Ct) + u4 = np.sqrt(1 - 1/16 * Ct**2 * np.sin(yaw_r_eff)**2 - Ct) * Us v4 = - (1/4) * Ct * np.sin(yaw_r_eff) * Us w4 = 0.0 diff --git a/mitwindfarm/Rotor.py b/mitwindfarm/Rotor.py index a972a9a..3d9a154 100644 --- a/mitwindfarm/Rotor.py +++ b/mitwindfarm/Rotor.py @@ -564,17 +564,15 @@ def residual( def compute_x0_with_TI(rotor_solution: RotorSolution, alpha=2.32, beta=0.1403): - # Extract rotor effective wind speed and thrust coefficient for ease of use + # Extract quantities from rotor solution for ease of use and documentation Us = rotor_solution.REWS - # Use "extra" version of Ct, as this one has not been scaled by velocity squared - Ct = rotor_solution.extra.Ct + a = rotor_solution.extra.an # HAS NOT been scaled by velocity + u4 = rotor_solution.u4 # HAS been scaled by velocity - # Recompute induction quantities in rotated frame of reference + # Convert yaw, tilt to rotated frame of reference yaw_eff = calc_eff_yaw(rotor_solution.yaw, rotor_solution.tilt) - u4 = Us * np.sqrt(1 - 1/16 * Ct**2 * np.sin(yaw_eff)**2 - Ct) - a = 1 + 0.5 * (Ct * Us)/(u4 - Us) - # Compute near wake length x0 + # Compute near wake length x0 and return x0 = ( (np.cos(yaw_eff) * (Us + u4)) / ((2*beta) * np.abs(Us - u4) + 4 * alpha * rotor_solution.TI) From 55431bfd214aa211fcc22d7762b469310442766c Mon Sep 17 00:00:00 2001 From: misi9170 <39596329+misi9170@users.noreply.github.com> Date: Wed, 12 Aug 2026 08:11:29 -0600 Subject: [PATCH 36/52] Apply @skygering suggestions Co-authored-by: Skylar A Gering --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 983f024..3adcf61 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "mitwindfarm" -version = "1.1.1" +version = "1.1.2" description = "" authors = ["Jaime Liew "] readme = "README.md" @@ -9,7 +9,7 @@ readme = "README.md" python = ">3.10,<3.15" numpy = "^2.1.1" scipy = ">=1.6" -mitrotor = { git = "https://github.com/Howland-Lab/MITRotor.git", branch = "sg/floris_interface"} +mitrotor = { git = "https://github.com/Howland-Lab/MITRotor.git"} unified-momentum-model = { git = "https://github.com/Howland-Lab/Unified-Momentum-Model.git"} floris = { git = "https://github.com/NatLabRockies/floris.git", branch = "dev/v5-beta"} From 83086be1728e2243a4850e24b868f13d2eb7f98c Mon Sep 17 00:00:00 2001 From: misi9170 Date: Wed, 12 Aug 2026 08:31:51 -0600 Subject: [PATCH 37/52] Update poetry lock --- poetry.lock | 1075 ++------------------------------------------------- 1 file changed, 31 insertions(+), 1044 deletions(-) diff --git a/poetry.lock b/poetry.lock index 515a235..a9b5b7b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -220,135 +220,14 @@ webencodings = "*" [package.extras] css = ["tinycss2 (>=1.1.0,<1.5)"] -[[package]] -name = "cachebox" -version = "5.2.3" -description = "The fastest memoizing and caching Python library written in Rust" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "cachebox-5.2.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:c2c89720547271d36e10cad2c7302bbe11f46eb39eead0a2c321c2d371b8f8b6"}, - {file = "cachebox-5.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e7f33d24e90dc8aa26762e25898c91a1223b66685420a28a3628fa2e006924f5"}, - {file = "cachebox-5.2.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56cb03ec6289a2ac5daf7422d755683324f02d821bfa796087100df2a7ebd5de"}, - {file = "cachebox-5.2.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a71a71df463ba4c86bc843fa01c3a2a721033adefad888af28c6b65e1915a75c"}, - {file = "cachebox-5.2.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbe4655371d19fc9f4f5874312bcb6e5b5b6182989979ac33d93c34c8d10c012"}, - {file = "cachebox-5.2.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4974476d1779961df89d6e6f79e6103a1659289d3ee11c92adcb52e236a8aaeb"}, - {file = "cachebox-5.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad16d733219f4cab3eec6533af30ab7b9c919c6e3e22ad1ef4eb82629a62edef"}, - {file = "cachebox-5.2.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:12a9e0a93774ca2b3a9fe8a2a0d0812e399fac4af0fce6246a5bca1e7009b8fc"}, - {file = "cachebox-5.2.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:be89497a011eb7a638d13cc520244d77579c0f515b95bf759b3de0b90a015203"}, - {file = "cachebox-5.2.3-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:dd01fc0c1934cccb76493eb4b149a9232d299e5e0275f557adf875c3d25cec81"}, - {file = "cachebox-5.2.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a0dfd97b0968f8bd48c33098a03d10f797964559c3a437c84bf97a9973545714"}, - {file = "cachebox-5.2.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:223ccf7ac60f595def258e7bc74c0b1d6f43991c9cae6d06749c803d22786d99"}, - {file = "cachebox-5.2.3-cp310-cp310-win32.whl", hash = "sha256:745b805fdd99931c3ce1d87d2ee21ca3fb62cba6b4e1f674907af87aad73dce4"}, - {file = "cachebox-5.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:a87b19c0a3d8d665a9805b5b4afd64b40082395b70ebe2756131ed1edb0c8f02"}, - {file = "cachebox-5.2.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:996f49d04b234082530afcc650bdd00556afbebc19c6c0daaafb85950340cb3c"}, - {file = "cachebox-5.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:23a3300ebbb526fa12ce6fa53699002f5fba6da23b4bbbaf8ba8b18a3f03e6b3"}, - {file = "cachebox-5.2.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79c63ee1589364caa04c018405e625d2e44e0bf9994f2715b2f322075d8c45b6"}, - {file = "cachebox-5.2.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ebd0f8d4ebc3943c1ddcbbdc54f1a8ddf95505c862ed5731319cebd1eb98ae41"}, - {file = "cachebox-5.2.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:569966efcc6309aa7d774443e3513cdbb8671efae0158138ba2ebb7d8cc9d8ed"}, - {file = "cachebox-5.2.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5774d06f0da37dd566239a4376d6ca8cf983d3e4c3228712ec22b4130f662f21"}, - {file = "cachebox-5.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae5bf8755bc66bcf42e7ca5c42d703a041a7aaad58f9a0c3be54d5b1cefd2641"}, - {file = "cachebox-5.2.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:63f061cc6a5ca70bbce2e6be0588fe2fee00a93a1b0581b1086d54b10288cdb6"}, - {file = "cachebox-5.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:577c781f18b559f4dc9eea176c6aed008843ef4b8e045cf61bb519e09dccc9ef"}, - {file = "cachebox-5.2.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:7f691e25572a3ddbb018e19d796f774713bd6b0f7ce9be2e71f6e18572de264a"}, - {file = "cachebox-5.2.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:33368adf86669c29b936fbae5d6219cf90aacd4b1db71dae2e23d584a8219cd6"}, - {file = "cachebox-5.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:38ce67b7b45713e49459a09411d07f82de04022c04aecde6202cd32f934c2b1f"}, - {file = "cachebox-5.2.3-cp311-cp311-win32.whl", hash = "sha256:a7cd2c81347063ab6c512d0f569aeb5f75fc2dfe686c8486258ffd08052324f4"}, - {file = "cachebox-5.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:7e45798d6b969794840bb302857946d710ecb32af78dfcb3ab40f4e68ee7fdaf"}, - {file = "cachebox-5.2.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:09c0340e9daa7b4530801e5a570cb0c1a1ad941a85d245d360020d3986d0e787"}, - {file = "cachebox-5.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f3162758792626685ec34950eedd565d015b115d0ff0d751d2716031fc32d51b"}, - {file = "cachebox-5.2.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a189a780c3ccd7b9d157074ba6bf3e191e522b39abbdb590075111851f02d50d"}, - {file = "cachebox-5.2.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:410b67baa99d433644199b11289627f7ebba4ee5786f95ca9858f238afcee157"}, - {file = "cachebox-5.2.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f81474dc19d3865fa5e57263f834bc6bbc00e471a594fb9d934ed552732c02fd"}, - {file = "cachebox-5.2.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:85ccd827193b3e3e887a88a16b88ef7ed174e7e65be515b5253322aa75e665c3"}, - {file = "cachebox-5.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a1e7d3cb8a5e7e68996a8619e3ef8771a124d14568c251f9e586eba88d759c1"}, - {file = "cachebox-5.2.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:adcedfcfcb933b21e7fdcfe560c79887bc8287abceab0586aa3730417dd0277d"}, - {file = "cachebox-5.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c7f0c72c51a3a9e7049ea6ff2a43cd3877ab7fee966eb65771a59621563b75e3"}, - {file = "cachebox-5.2.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:c48c10e498d573511aafbd545570e7f43b40a7428dc282183bf5adc334d9e1a8"}, - {file = "cachebox-5.2.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:2f1e086ab5ffd082a68bb63699d517655a59b06414927bfc84e01df91b81e34d"}, - {file = "cachebox-5.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:649d18399f13735bb82daa33800196f815529c49e967767c40ca221723e68afa"}, - {file = "cachebox-5.2.3-cp312-cp312-win32.whl", hash = "sha256:0a17aeb4e5b1c6ef1c3db8fc5186f9986e215ba5ea5a5d08baa45bcf55f261b2"}, - {file = "cachebox-5.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:cfd69114141ab362acaa2099e425a1b965cf7b021a539a4e953143d593930b74"}, - {file = "cachebox-5.2.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:9527c5c70f8735f2d696331d8bcf77254f03b4dc8542046807823bd36ed4e8ba"}, - {file = "cachebox-5.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:40ac878af00d5969862c1f6bc076de1e34ca248662fce6aecca1761f52e33e32"}, - {file = "cachebox-5.2.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5ff26bfd8f7e95b3becf6d5f65c25edaca50fa68078868648b70d79bcccc260"}, - {file = "cachebox-5.2.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:82e7002dd343afeeba2fcf0e483131b342a27ec3bc34b2214dc617691bda40d6"}, - {file = "cachebox-5.2.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ccbdc54a6c4b5758408c1083bdfa217bd382894a8331c7d0a54b84ba0cf51e5b"}, - {file = "cachebox-5.2.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:df5135a168f143d186b1cc3be0ca16b66446897ab5cedc03bd80bcc926fcd403"}, - {file = "cachebox-5.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10bedf96db8f9766cc956f9adcc623e604264e5d6fa2e255432f8c2ed7519143"}, - {file = "cachebox-5.2.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f22732d0d69bb84ad2dca7480bffdfd0430c647152d488936e152ecbbfee52fb"}, - {file = "cachebox-5.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:26ae0b68979204d360327f4c0725cfdc95cfc34ab73ab1a8f528e3bd2f6d023c"}, - {file = "cachebox-5.2.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:f3d628b816e28a6e7661d460e02dd5b421247cc2cd275814f80ea79621245fc4"}, - {file = "cachebox-5.2.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:64057caa6b741320655cd3c5997fe642dae5dbff571eb530e6f53e58272bb43b"}, - {file = "cachebox-5.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa325306084aa2dc0b21e07723d7700f4d43dece3732c7fdaf7a269dc5e35aa7"}, - {file = "cachebox-5.2.3-cp313-cp313-win32.whl", hash = "sha256:55003089d21c2f5515089c307be063b45558e884a4a1cc9593944374c89975c4"}, - {file = "cachebox-5.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:dcc5edb6ecf2b516e90b773d232360c5e4ed8fdcda038b19441da2ed9cf208ab"}, - {file = "cachebox-5.2.3-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:a4b7559fa4994c4032dd07466c2041d57e055feb814762e1f73f4e8beef188d0"}, - {file = "cachebox-5.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f57afada3d9327adf87f3b5cf0094348c6fd49354ab2e9bd20b044648eb094ae"}, - {file = "cachebox-5.2.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8342ff350ce86f062492752d612e9f056ac5dc56375713d75c3bf6e83b4d18db"}, - {file = "cachebox-5.2.3-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:405f9cc8492fc9d953b5a6b9e2b661e99583755c6639ab8d09a287fdf336503c"}, - {file = "cachebox-5.2.3-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:94aae393ec1d9b26565d346445bb6afa3963d2a0d3eb5e4188d0e510fab871a0"}, - {file = "cachebox-5.2.3-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8b0b575066fc09f6fae0d4bd30d6ff56584a6870cbe7d202916c5e0d725cfd4"}, - {file = "cachebox-5.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41e99c1240106d39b63ce7868a6cd8c9da9243fef08848b85d428164e0769fd2"}, - {file = "cachebox-5.2.3-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:432ca62b99f7eafc21af669d76c88c1b7377db179b89fb6fca3ea93b8f9fff19"}, - {file = "cachebox-5.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e51d9c59006b53447f806145406eb37a7fc3c25553d4fd24c3887f3b268d214e"}, - {file = "cachebox-5.2.3-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:5e48a405f699fb001b8af120a6e0b4a981277f84eb5dd66a1faa21e4b6fe9485"}, - {file = "cachebox-5.2.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8cbfc007ea78af61d75d7d26e5854df53dc5da6877d074afd4b4696c074f4ee7"}, - {file = "cachebox-5.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6a94d0da8133b3a0707ae11c9ea321f8fc37e3b5a14517019a05d632218b0f56"}, - {file = "cachebox-5.2.3-cp313-cp313t-win32.whl", hash = "sha256:5fee33549877c03c2494ec5359a57a7667f872fe8e296a7f39d3dfe08dd3914c"}, - {file = "cachebox-5.2.3-cp313-cp313t-win_amd64.whl", hash = "sha256:67548a05cd41fcc4f7af80a2f97f742fef3d436537ac2e1a1dce0fcba5d41190"}, - {file = "cachebox-5.2.3-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:37fa0891f0defee053c09f5f43f802f731e36e6e6ca055d7d174af07f77232ca"}, - {file = "cachebox-5.2.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:dc6315902f2ef4afbf10bc8e08c54ff34de5ce124546b8e0016c9b0d327be21e"}, - {file = "cachebox-5.2.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7df1735ca778480d51b8232fed397ffe3935158f20d34fb1c5ed171b53d5a6e2"}, - {file = "cachebox-5.2.3-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e22451cde8f884051e941b21870e4fc91fcf58d0d8c285bb8964107e1f02445c"}, - {file = "cachebox-5.2.3-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dcbccf3015d9a42bcf41260fa5cc048a5bdb75aa10997d514d6c976117f30ee2"}, - {file = "cachebox-5.2.3-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:311eae5079e256cbbfafdc3dcff1714b6598a767f9c1ef8c3709e74ea0cc12b0"}, - {file = "cachebox-5.2.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f4d2a80a5cd3380739c67f7d89e596634f5897b8d5a4a3dc1598312cb077535"}, - {file = "cachebox-5.2.3-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3977515b727a5203f494c44c4566fb936c4b940351c01d3d8e7b5d104dff4f53"}, - {file = "cachebox-5.2.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c5be17dd5c4fabcfecd5bcf6d54f9c6fb719daed3ef01ac1c03a14af0e2b26c1"}, - {file = "cachebox-5.2.3-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:6d37334fc218fdaee31db8a4f938938716e7c3b1b4059e25de27c8447fc95fde"}, - {file = "cachebox-5.2.3-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:1e5f1b7e23411b748d919348c3b65db1f9f8927ab8f6f3acae19bd617543df2d"}, - {file = "cachebox-5.2.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e7b06a75a898b31fd73c4d8bf727a9b9f8b5b7738cccd0ab5e6fd2a9cf659d3c"}, - {file = "cachebox-5.2.3-cp314-cp314-win32.whl", hash = "sha256:3b798052719f09a2ce7bf9fa9452dc0a7d4dc53b50a2d3aba6ce6ebc12d39df7"}, - {file = "cachebox-5.2.3-cp314-cp314-win_amd64.whl", hash = "sha256:4afc8b8575e3228a42ad8d819de5fbbecc6bd0b521295966b00244be37ae3b9b"}, - {file = "cachebox-5.2.3-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:0e8a34b82be30d3d9fb7dfaf9a86ec2b3ab9bc264715909ef27fc3d3587324d2"}, - {file = "cachebox-5.2.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:4d4e336aebf866463878ccd28a4d0ef4003ea216708cf4a02a7f198481b3af81"}, - {file = "cachebox-5.2.3-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b102fcdd97b0602bf5d6ba1a571bba3e3d6fa912b89fd768b0da5427408eab8"}, - {file = "cachebox-5.2.3-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:245a79fb2c5d3bff252f4263f76210ef3ad7c2ff9b0234859b26974830a80491"}, - {file = "cachebox-5.2.3-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd0e8dbd8fd4cf664c645c08f9e10508e133353756705c4a738e90a5406224b5"}, - {file = "cachebox-5.2.3-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fdb74294bdc33e39e26606919a9b2229038d5fac0edb80c9056683c08584d4a9"}, - {file = "cachebox-5.2.3-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bba3e9a7f52fa196b434522f39675f3b32a076976ef2373ded6f1065e99f4d20"}, - {file = "cachebox-5.2.3-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:abb21f0f937fb66528f1b9f1a04874d6aa503e78bbb26f4cf33bf67faddbdd68"}, - {file = "cachebox-5.2.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:dab6fd3189b0c746fb03e1915fd947aaca9112cedf26ef3a0c39383acf87d2e5"}, - {file = "cachebox-5.2.3-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:b4e7d2935b9df11d3717f99c7237b6780f1f8c70e6a99b69b8430d89929ec825"}, - {file = "cachebox-5.2.3-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:611aa260fe1b2506330ff72f415e2cb4053c9c4e3776ac68fe2eedee0e1b91b1"}, - {file = "cachebox-5.2.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a424ffb8514a9cb49bacff7995b7c767625cb2239692bd6524245e8579e375cc"}, - {file = "cachebox-5.2.3-cp314-cp314t-win32.whl", hash = "sha256:83988dd8e9075ee837e8407e26db49a9944ae74924d5db57b477444d7d98622c"}, - {file = "cachebox-5.2.3-cp314-cp314t-win_amd64.whl", hash = "sha256:dbda6390fa5070a19157ae35ab8066d3fe468634e0e9e21452c68ce7999c7d0c"}, - {file = "cachebox-5.2.3-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c798cddfb780156db09d3d96ed5da4c2d5fc01dad4bc7b54db5b20c34f221926"}, - {file = "cachebox-5.2.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:c8f3de4afeb3fd721620be3d02f2338bcbc3fdbd464ca14e1c474088c9669db0"}, - {file = "cachebox-5.2.3-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b39022c258872185327acffa9ad42d6bdf42f37d006d35c825a684eb5fa98d40"}, - {file = "cachebox-5.2.3-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5a0599fb85dcb6df9a86502435643fe90c793bbcd50b5d85217c70f2bc2e38fc"}, - {file = "cachebox-5.2.3-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3cdbe8f1b7716a44dc82ef3a6830a612260c7379478cfa80804632e2e6252b8e"}, - {file = "cachebox-5.2.3-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:783d1b9a0b3c77c43e7ae331b9d6561ad75827e16b2484e2a6cc289ec4d392ee"}, - {file = "cachebox-5.2.3-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c6476a2a842906fee782d92f8fbcb03ecfd22eecc39adb7fb5b047d7e1cf020"}, - {file = "cachebox-5.2.3-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:184bbcfa1370415b6d1f09e4fb74ab697dac8df09f522aa217a2fac65f973744"}, - {file = "cachebox-5.2.3-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:f89df36b46f8f5e11c0c49701ec3cebddf51191f96afb7bb75c394faf3c1cbc8"}, - {file = "cachebox-5.2.3-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:fb0bdcd9e28686e3b91d5210c843542858f0f10de151181aee27a7978fe4992e"}, - {file = "cachebox-5.2.3-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:5196f0d2c2f99c92ddf0d2c37803ff90509d14a5df211b7754feb8b61ffd8740"}, - {file = "cachebox-5.2.3-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:73671850d8c3634ab217398c83715d3feb52589ec97bd8e2f4d22e472741ea48"}, - {file = "cachebox-5.2.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:70c718f6bb77e6ba142b9a055b81ce85412a0c0e5e82a154489b45e6f91d09ec"}, - {file = "cachebox-5.2.3.tar.gz", hash = "sha256:b1f68246685aa739bbbd2734befb1465363a1e1042407c154feadb065f17a099"}, -] - [[package]] name = "certifi" version = "2025.10.5" description = "Python package for providing Mozilla's CA Bundle." -optional = false +optional = true python-versions = ">=3.7" groups = ["main"] +markers = "extra == \"dev\"" files = [ {file = "certifi-2025.10.5-py3-none-any.whl", hash = "sha256:0f212c2744a9bb6de0c56639a6f68afe01ecd92d91f14ae897c4fe7bbeeef0de"}, {file = "certifi-2025.10.5.tar.gz", hash = "sha256:47c09d31ccf2acf0be3f701ea53595ee7e0b8fa08801c6624be771df09ae7b43"}, @@ -358,10 +237,10 @@ files = [ name = "cffi" version = "2.0.0" description = "Foreign Function Interface for Python calling C code." -optional = false +optional = true python-versions = ">=3.9" groups = ["main"] -markers = "extra == \"dev\" or implementation_name == \"pypy\"" +markers = "extra == \"dev\"" files = [ {file = "cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44"}, {file = "cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49"}, @@ -452,67 +331,14 @@ files = [ [package.dependencies] pycparser = {version = "*", markers = "implementation_name != \"PyPy\""} -[[package]] -name = "cftime" -version = "1.6.5" -description = "Time-handling functionality from netcdf4-python" -optional = false -python-versions = ">=3.10" -groups = ["main"] -files = [ - {file = "cftime-1.6.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8ad81e8cb0eb873b33c3d1e22c6168163fdc64daa8f7aeb4da8092f272575f4d"}, - {file = "cftime-1.6.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:12d95c6af852114a13301c5a61e41afdbd1542e72939c1083796f8418b9b8b0e"}, - {file = "cftime-1.6.5-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2659b7df700e27d9e3671f686ce474dfb5fc274966961edf996acc148dfa094a"}, - {file = "cftime-1.6.5-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:94cebdfcda6a985b8e69aed22d00d6b8aa1f421495adbdcff1d59b3e896d81e2"}, - {file = "cftime-1.6.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:179681b023349a2fe277ceccc89d4fc52c0dd105cb59b7187b5bc5d442875133"}, - {file = "cftime-1.6.5-cp310-cp310-win_amd64.whl", hash = "sha256:d8b9fdecb466879cfe8ca4472b229b6f8d0bb65e4ffd44266ae17484bac2cf38"}, - {file = "cftime-1.6.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:474e728f5a387299418f8d7cb9c52248dcd5d977b2a01de7ec06bba572e26b02"}, - {file = "cftime-1.6.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ab9e80d4de815cac2e2d88a2335231254980e545d0196eb34ee8f7ed612645f1"}, - {file = "cftime-1.6.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ad24a563784e4795cb3d04bd985895b5db49ace2cbb71fcf1321fd80141f9a52"}, - {file = "cftime-1.6.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a3cda6fd12c7fb25eff40a6a857a2bf4d03e8cc71f80485d8ddc65ccbd80f16a"}, - {file = "cftime-1.6.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:28cda78d685397ba23d06273b9c916c3938d8d9e6872a537e76b8408a321369b"}, - {file = "cftime-1.6.5-cp311-cp311-win_amd64.whl", hash = "sha256:93ead088e3a216bdeb9368733a0ef89a7451dfc1d2de310c1c0366a56ad60dc8"}, - {file = "cftime-1.6.5-cp311-cp311-win_arm64.whl", hash = "sha256:3384d69a0a7f3d45bded21a8cbcce66c8ba06c13498eac26c2de41b1b9b6e890"}, - {file = "cftime-1.6.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:eef25caed5ebd003a38719bd3ff8847cd52ef2ea56c3ebdb2c9345ba131fc7c5"}, - {file = "cftime-1.6.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c87d2f3b949e45463e559233c69e6a9cf691b2b378c1f7556166adfabbd1c6b0"}, - {file = "cftime-1.6.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:82cb413973cc51b55642b3a1ca5b28db5b93a294edbef7dc049c074b478b4647"}, - {file = "cftime-1.6.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:85ba8e7356d239cfe56ef7707ac30feaf67964642ac760a82e507ee3c5db4ac4"}, - {file = "cftime-1.6.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:456039af7907a3146689bb80bfd8edabd074c7f3b4eca61f91b9c2670addd7ad"}, - {file = "cftime-1.6.5-cp312-cp312-win_amd64.whl", hash = "sha256:da84534c43699960dc980a9a765c33433c5de1a719a4916748c2d0e97a071e44"}, - {file = "cftime-1.6.5-cp312-cp312-win_arm64.whl", hash = "sha256:c62cd8db9ea40131eea7d4523691c5d806d3265d31279e4a58574a42c28acd77"}, - {file = "cftime-1.6.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4aba66fd6497711a47c656f3a732c2d1755ad15f80e323c44a8716ebde39ddd5"}, - {file = "cftime-1.6.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:89e7cba699242366e67d6fb5aee579440e791063f92a93853610c91647167c0d"}, - {file = "cftime-1.6.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2f1eb43d7a7b919ec99aee709fb62ef87ef1cf0679829ef93d37cc1c725781e9"}, - {file = "cftime-1.6.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e02a1d80ffc33fe469c7db68aa24c4a87f01da0c0c621373e5edadc92964900b"}, - {file = "cftime-1.6.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:18ab754805233cdd889614b2b3b86a642f6d51a57a1ec327c48053f3414f87d8"}, - {file = "cftime-1.6.5-cp313-cp313-win_amd64.whl", hash = "sha256:6c27add8f907f4a4cd400e89438f2ea33e2eb5072541a157a4d013b7dbe93f9c"}, - {file = "cftime-1.6.5-cp313-cp313-win_arm64.whl", hash = "sha256:31d1ff8f6bbd4ca209099d24459ec16dea4fb4c9ab740fbb66dd057ccbd9b1b9"}, - {file = "cftime-1.6.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:c69ce3bdae6a322cbb44e9ebc20770d47748002fb9d68846a1e934f1bd5daf0b"}, - {file = "cftime-1.6.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e62e9f2943e014c5ef583245bf2e878398af131c97e64f8cd47c1d7baef5c4e2"}, - {file = "cftime-1.6.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7da5fdaa4360d8cb89b71b8ded9314f2246aa34581e8105c94ad58d6102d9e4f"}, - {file = "cftime-1.6.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bff865b4ea4304f2744a1ad2b8149b8328b321dd7a2b9746ef926d229bd7cd49"}, - {file = "cftime-1.6.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e552c5d1c8a58f25af7521e49237db7ca52ed2953e974fe9f7c4491e95fdd36c"}, - {file = "cftime-1.6.5-cp314-cp314-win_amd64.whl", hash = "sha256:e645b095dc50a38ac454b7e7f0742f639e7d7f6b108ad329358544a6ff8c9ba2"}, - {file = "cftime-1.6.5-cp314-cp314-win_arm64.whl", hash = "sha256:b9044d7ac82d3d8af189df1032fdc871bbd3f3dd41a6ec79edceb5029b71e6e0"}, - {file = "cftime-1.6.5-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:9ef56460cb0576e1a9161e1428c9e1a633f809a23fa9d598f313748c1ae5064e"}, - {file = "cftime-1.6.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:4f4873d38b10032f9f3111c547a1d485519ae64eee6a7a2d091f1f8b08e1ba50"}, - {file = "cftime-1.6.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ccce0f4c9d3f38dd948a117e578b50d0e0db11e2ca9435fb358fd524813e4b61"}, - {file = "cftime-1.6.5-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:19cbfc5152fb0b34ce03acf9668229af388d7baa63a78f936239cb011ccbe6b1"}, - {file = "cftime-1.6.5-cp314-cp314t-win_amd64.whl", hash = "sha256:4470cd5ef3c2514566f53efbcbb64dd924fa0584637d90285b2f983bd4ee7d97"}, - {file = "cftime-1.6.5-cp314-cp314t-win_arm64.whl", hash = "sha256:034c15a67144a0a5590ef150c99f844897618b148b87131ed34fda7072614662"}, - {file = "cftime-1.6.5.tar.gz", hash = "sha256:8225fed6b9b43fb87683ebab52130450fc1730011150d3092096a90e54d1e81e"}, -] - -[package.dependencies] -numpy = ">=1.21.2" - [[package]] name = "charset-normalizer" version = "3.4.4" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -optional = false +optional = true python-versions = ">=3.7" groups = ["main"] +markers = "extra == \"dev\"" files = [ {file = "charset_normalizer-3.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d"}, {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8"}, @@ -636,7 +462,7 @@ description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" groups = ["main"] -markers = "platform_system == \"Windows\" or sys_platform == \"win32\" and extra == \"dev\"" +markers = "platform_system == \"Windows\" or extra == \"dev\" and sys_platform == \"win32\"" files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, @@ -855,28 +681,6 @@ mypy = ["bokeh", "contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.17.0)", " test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] test-no-images = ["pytest", "pytest-cov", "pytest-rerunfailures", "pytest-xdist", "wurlitzer"] -[[package]] -name = "control" -version = "0.10.2" -description = "Python Control Systems Library" -optional = false -python-versions = ">=3.10" -groups = ["main"] -files = [ - {file = "control-0.10.2-py3-none-any.whl", hash = "sha256:8f7b5c58f5ccd761a6c070e3dedceca4c53c7a9cf105fcc22caba7a67f99025a"}, - {file = "control-0.10.2.tar.gz", hash = "sha256:d0cf63f6cfb68a4c8e827c26c3744d129e9777fedc9a5d86ca4740548f23a98b"}, -] - -[package.dependencies] -matplotlib = ">=3.6" -numpy = ">=1.23" -scipy = ">=1.8" - -[package.extras] -cvxopt = ["cvxopt (>=1.2.0)"] -slycot = ["slycot (>=0.4.0)"] -test = ["numpydoc", "pytest", "pytest-timeout", "ruff"] - [[package]] name = "cycler" version = "0.12.1" @@ -947,31 +751,6 @@ files = [ {file = "decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360"}, ] -[[package]] -name = "deepdiff" -version = "9.1.0" -description = "Deep Difference and Search of any Python object/data. Recreate objects by adding adding deltas to each other." -optional = false -python-versions = ">=3.10" -groups = ["main"] -files = [ - {file = "deepdiff-9.1.0-py3-none-any.whl", hash = "sha256:80c0460e1993b04f6f0ca79abf25548b129fd218478c4ebb08f80560f5d10610"}, - {file = "deepdiff-9.1.0.tar.gz", hash = "sha256:07e9e366fab4297755153c4eab795ad4ef3cbd0d51660e847f5751c6bd727687"}, -] - -[package.dependencies] -cachebox = ">=5.2,<6" -orderly-set = ">=5.5.0,<6" - -[package.extras] -cli = ["click (>=8.3.1,<8.4.0)", "pyyaml (>=6.0.3,<6.1.0)"] -coverage = ["coverage (>=7.13.5,<7.14.0)"] -dev = ["bump2version (>=1.0.1,<1.1.0)", "flit-core (==3.12.0)", "ipdb (>=0.13.13,<0.14.0)", "jsonpickle (>=4.1.1,<4.2.0)", "nox (==2026.2.9)", "numpy (>=2.2.0,<2.3.0) ; python_version < \"3.14\"", "numpy (>=2.4.3,<2.5.0) ; python_version >= \"3.14\"", "orjson (>=3.11.7,<3.12.0)", "pandas (>=2.2.0,<2.3.0) ; python_version < \"3.11\"", "pandas (>=3.0.1,<3.1.0) ; python_version >= \"3.11\"", "polars (>=1.39.3,<1.40.0)", "python-dateutil (>=2.9.0.post0,<2.10.0)", "pytz", "tomli (>=2.4.0,<2.5.0)", "tomli-w (>=1.2.0,<1.3.0)", "uuid6 (==2025.0.1)"] -docs = ["Sphinx (>=8.1.3,<8.2.0)", "furo (>=2024.8.6)", "sphinx-sitemap (>=2.9.0,<2.10.0)", "sphinxemoji (>=0.3.2,<0.4.0)"] -optimize = ["orjson"] -static = ["flake8 (>=7.3.0,<7.4.0)", "flake8-pyproject (>=1.2.4,<1.3.0)", "pydantic (>=2.12.5,<2.13.0)"] -test = ["pytest (>=9.0.3,<9.1.0)", "pytest-benchmark (>=5.2.3,<5.3.0)", "pytest-cov (>=7.1.0,<7.2.0)", "python-dotenv (>=1.2.2,<1.3.0)"] - [[package]] name = "defusedxml" version = "0.7.1" @@ -1001,18 +780,6 @@ files = [ graph = ["objgraph (>=1.7.2)"] profile = ["gprof2dot (>=2022.7.29)"] -[[package]] -name = "et-xmlfile" -version = "2.0.0" -description = "An implementation of lxml.xmlfile for the standard library" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa"}, - {file = "et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54"}, -] - [[package]] name = "exceptiongroup" version = "1.3.0" @@ -1286,9 +1053,10 @@ pyreadline3 = {version = "*", markers = "sys_platform == \"win32\" and python_ve name = "idna" version = "3.11" description = "Internationalized Domain Names in Applications (IDNA)" -optional = false +optional = true python-versions = ">=3.8" groups = ["main"] +markers = "extra == \"dev\"" files = [ {file = "idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea"}, {file = "idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902"}, @@ -1464,18 +1232,6 @@ MarkupSafe = ">=2.0" [package.extras] i18n = ["Babel (>=2.7)"] -[[package]] -name = "joblib" -version = "1.5.3" -description = "Lightweight pipelining with Python functions" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "joblib-1.5.3-py3-none-any.whl", hash = "sha256:5fc3c5039fc5ca8c0276333a188bbd59d6b7ab37fe6632daa76bc7f9ec18e713"}, - {file = "joblib-1.5.3.tar.gz", hash = "sha256:8561a3269e6801106863fd0d6d84bb737be9e7631e33aaed3fb9ce5953688da3"}, -] - [[package]] name = "json5" version = "0.12.1" @@ -1492,21 +1248,6 @@ files = [ [package.extras] dev = ["build (==1.2.2.post1)", "coverage (==7.5.4) ; python_version < \"3.9\"", "coverage (==7.8.0) ; python_version >= \"3.9\"", "mypy (==1.14.1) ; python_version < \"3.9\"", "mypy (==1.15.0) ; python_version >= \"3.9\"", "pip (==25.0.1)", "pylint (==3.2.7) ; python_version < \"3.9\"", "pylint (==3.3.6) ; python_version >= \"3.9\"", "ruff (==0.11.2)", "twine (==6.1.0)", "uv (==0.6.11)"] -[[package]] -name = "jsonmerge" -version = "1.9.2" -description = "Merge a series of JSON documents." -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "jsonmerge-1.9.2-py3-none-any.whl", hash = "sha256:cab93ee7763fb51a4a09bbdab2eacf499ffb208ab94247ae86acea3e0e823b05"}, - {file = "jsonmerge-1.9.2.tar.gz", hash = "sha256:c43757e0180b0e19b7ae4c130ad42a07cc580c31912f61f4823e8eaf2fa394a3"}, -] - -[package.dependencies] -jsonschema = ">2.4.0" - [[package]] name = "jsonpointer" version = "3.0.0" @@ -1524,9 +1265,10 @@ files = [ name = "jsonschema" version = "4.25.1" description = "An implementation of JSON Schema validation for Python" -optional = false +optional = true python-versions = ">=3.9" groups = ["main"] +markers = "extra == \"dev\"" files = [ {file = "jsonschema-4.25.1-py3-none-any.whl", hash = "sha256:3fba0169e345c7175110351d456342c364814cfcf3b964ba4587f22915230a63"}, {file = "jsonschema-4.25.1.tar.gz", hash = "sha256:e4a9655ce0da0c0b67a085847e00a3a51449e1157f4f75e9fb5aa545e122eb85"}, @@ -1555,9 +1297,10 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- name = "jsonschema-specifications" version = "2025.9.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" -optional = false +optional = true python-versions = ">=3.9" groups = ["main"] +markers = "extra == \"dev\"" files = [ {file = "jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe"}, {file = "jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d"}, @@ -2080,21 +1823,6 @@ files = [ {file = "markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698"}, ] -[[package]] -name = "marmot-agents" -version = "0.2.5" -description = "Agent based processs modeling." -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "marmot-agents-0.2.5.tar.gz", hash = "sha256:d0038c28928681b74352397a357f290da00c86a10c9626219b3ae36899faa915"}, - {file = "marmot_agents-0.2.5-py3-none-any.whl", hash = "sha256:f7678a830593222436396163fb0788d9d113bf84afb956b8854aad465830c2a6"}, -] - -[package.dependencies] -numpy = "*" - [[package]] name = "matplotlib" version = "3.10.7" @@ -2211,7 +1939,7 @@ typing-extensions = {version = "*", markers = "python_version < \"3.11\""} [[package]] name = "mitrotor" -version = "0.2.1" +version = "0.2.2" description = "" optional = false python-versions = ">3.10, <3.15" @@ -2220,45 +1948,16 @@ files = [] develop = false [package.dependencies] -floris = {git = "https://github.com/NatLabRockies/floris.git", branch = "dev/v5-beta"} -joblib = "^1.5.3" numpy = "^2.2.1" pyyaml = "^6.0.1" -rosco = "^2.10.4" -ruamel-yaml = "^0.19.1" scipy = ">=1.6" -seaborn = "^0.13.2" -tqdm-joblib = "^0.0.5" unified-momentum-model = {git = "https://github.com/Howland-Lab/Unified-Momentum-Model.git"} [package.source] type = "git" url = "https://github.com/Howland-Lab/MITRotor.git" -reference = "sg/floris_interface" -resolved_reference = "63daecce5611b8f20cd34471085f23c8ed5ed245" - -[[package]] -name = "moorpy" -version = "1.3.0" -description = "A design-oriented mooring system library for Python" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "moorpy-1.3.0-py3-none-any.whl", hash = "sha256:2a6bf0f9db32fd49624471aeb152925ede383c0414db853c47069d5b3cd55b12"}, - {file = "moorpy-1.3.0.tar.gz", hash = "sha256:ccef5e65a8a0f65be48e0fc39275918c318390937bf426c26a96d5fda0692256"}, -] - -[package.dependencies] -matplotlib = "*" -numpy = "*" -pyyaml = "*" -scipy = "*" - -[package.extras] -dev = ["pre-commit"] -docs = ["sphinx", "sphinx-rtd-theme"] -test = ["pytest", "pytest-cov", "pytest-xdist"] +reference = "HEAD" +resolved_reference = "132bff810beb8ad75789b61bf5e45db93533d73c" [[package]] name = "multiprocess" @@ -2462,151 +2161,6 @@ files = [ {file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"}, ] -[[package]] -name = "netcdf4" -version = "1.7.3" -description = "Provides an object-oriented python interface to the netCDF version 4 library" -optional = false -python-versions = ">=3.10" -groups = ["main"] -markers = "python_version < \"3.11\" and platform_system == \"Windows\" and platform_machine == \"ARM64\"" -files = [ - {file = "netcdf4-1.7.3-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:db761afd3a6b9482df018c4783e0bdf99141a41db1f14c68c89986effb182d57"}, - {file = "netcdf4-1.7.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:ad4c2d9b469248d83cbacb70ad9e7d3a6c0ba27febe839c90192147199745ba4"}, - {file = "netcdf4-1.7.3-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c6986d039717582071e55ae9c6fbebfe4e5bbbc3af122fc3db0c0c09c4d8955e"}, - {file = "netcdf4-1.7.3-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:348e79b4f26f2e403fe3c54364e9297e4ef326c7ee12f9be01c037db853d26c0"}, - {file = "netcdf4-1.7.3-cp310-cp310-win_amd64.whl", hash = "sha256:6ab71f5d70e55e8584d168d5158efdb2fd8d350a033d0c27d942c3d399587f54"}, - {file = "netcdf4-1.7.3-cp311-abi3-macosx_13_0_x86_64.whl", hash = "sha256:801c222d8ad35fd7dc7e9aa7ea6373d184bcb3b8ee6b794c5fbecaa5155b1792"}, - {file = "netcdf4-1.7.3-cp311-abi3-macosx_14_0_arm64.whl", hash = "sha256:83dbfd6f10a0ec785d5296016bd821bbe9f0df780be72fc00a1f0d179d9c5f0f"}, - {file = "netcdf4-1.7.3-cp311-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:949e086d4d2612b49e5b95f60119d216c9ceb7b17bc771e9e0fa0e9b9c0a2f9f"}, - {file = "netcdf4-1.7.3-cp311-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0c764ba6f6a1421cab5496097e8a1c4d2e36be2a04880dfd288bb61b348c217e"}, - {file = "netcdf4-1.7.3-cp311-abi3-win_amd64.whl", hash = "sha256:1b6c646fa179fb1e5e8d6e8231bc78cc0311eceaa1241256b5a853f1d04055b9"}, - {file = "netcdf4-1.7.3.tar.gz", hash = "sha256:83f122fc3415e92b1d4904fd6a0898468b5404c09432c34beb6b16c533884673"}, -] - -[package.dependencies] -certifi = "*" -cftime = "*" -numpy = "*" - -[package.extras] -parallel = ["mpi4py"] -tests = ["Cython", "packaging", "pytest", "typing-extensions (>=4.15.0)"] - -[[package]] -name = "netcdf4" -version = "1.7.4" -description = "Provides an object-oriented python interface to the netCDF version 4 library" -optional = false -python-versions = ">=3.10" -groups = ["main"] -markers = "platform_system != \"Windows\" or platform_machine != \"ARM64\" or python_version >= \"3.11\"" -files = [ - {file = "netcdf4-1.7.4-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:b1c1a7ea3678db76bf33d14f7e202385d634db38c5e70d8cf4895971023eebb9"}, - {file = "netcdf4-1.7.4-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:d3f9497873454207f9480847d02b1b19a4bc81ad6e9166e1c17d4e2f8f3555d1"}, - {file = "netcdf4-1.7.4-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c8e18294af803e80f8c0339f791901942e268c334c099bbd5f7ea8325a49801a"}, - {file = "netcdf4-1.7.4-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0b06c0b93fd0ecc1ec67a582f3ba98b7db9da1fa843c8f83fd75990e3701771e"}, - {file = "netcdf4-1.7.4-cp310-cp310-win_amd64.whl", hash = "sha256:889ba77f084504aebaba9c6f9a88ac213431fef0e897f887cd35aef351ff7740"}, - {file = "netcdf4-1.7.4-cp311-abi3-macosx_13_0_x86_64.whl", hash = "sha256:dec70e809cc65b04ebe95113ee9c85ba46a51c3a37c058d2b2b0cadc4d3052d8"}, - {file = "netcdf4-1.7.4-cp311-abi3-macosx_14_0_arm64.whl", hash = "sha256:75cf59100f0775bc4d6b9d4aca7cbabd12e2b8cf3b9a4fb16d810b92743a315a"}, - {file = "netcdf4-1.7.4-cp311-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ddfc7e9d261125c74708119440c85ea288b5fee41db676d2ba1ce9be11f96932"}, - {file = "netcdf4-1.7.4-cp311-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a72c9f58767779ec14cb7451c3b56bdd8fdc027a792fac2062b14e090c5617f3"}, - {file = "netcdf4-1.7.4-cp311-abi3-win_amd64.whl", hash = "sha256:9476e1f23161ae5159cd1548c50c8a37922e77d76583e247133f256ef7b825fc"}, - {file = "netcdf4-1.7.4-cp311-abi3-win_arm64.whl", hash = "sha256:876ad9d58f09c98741c066c726164c45a098a58fb90e5fac9e74de4bb8a793fd"}, - {file = "netcdf4-1.7.4-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:56688c03444fffe0d0c7512cb45245e650389cd841c955b30e4552fa681c4cd9"}, - {file = "netcdf4-1.7.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7ecf471ba8a6ddb2200121949bedfa0095db228822f38227d5da680694a38358"}, - {file = "netcdf4-1.7.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a5841de0735e8e4875b367c668e81d334287858d64dd9f3e3e2261e808c84922"}, - {file = "netcdf4-1.7.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:86fac03a8c5b250d57866e7d98918a64742e4b0de1681c5c86bac5726bab8aee"}, - {file = "netcdf4-1.7.4-cp314-cp314t-macosx_13_0_x86_64.whl", hash = "sha256:ad083d260301b5add74b1669c75ab0df03bdf986decfcc092cb45eec2615b5f1"}, - {file = "netcdf4-1.7.4-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:7f22014092cc9da3f056b0368e2e38c42afd5725c87ad4843eb2f467e16dd4f6"}, - {file = "netcdf4-1.7.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:224a15434c165a5e0225e5831f591edf62533044b1ce62fdfee815195bbd077d"}, - {file = "netcdf4-1.7.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:31a2318305de6831a18df25ad0df9f03b6d68666af0356d4f6057d66c02ffeb6"}, - {file = "netcdf4-1.7.4-cp314-cp314t-win_amd64.whl", hash = "sha256:6c4a0aa9446c3a616ef3be015b629dc6173643f8b09546de26a4e40e272cd1ed"}, - {file = "netcdf4-1.7.4-cp314-cp314t-win_arm64.whl", hash = "sha256:034220887d48da032cb2db5958f69759dbb04eb33e279ec6390571d4aea734fe"}, - {file = "netcdf4-1.7.4.tar.gz", hash = "sha256:cdbfdc92d6f4d7192ca8506c9b3d4c1d9892969ff28d8e8e1fc97ca08bf12164"}, -] - -[package.dependencies] -certifi = "*" -cftime = "*" -numpy = [ - {version = ">=1.21.2", markers = "platform_system != \"Windows\" or platform_machine != \"ARM64\""}, - {version = ">=2.3.0", markers = "platform_system == \"Windows\" and platform_machine == \"ARM64\""}, -] - -[package.extras] -parallel = ["mpi4py"] -tests = ["Cython", "packaging", "pytest", "typing-extensions (>=4.15.0)"] - -[[package]] -name = "networkx" -version = "3.4.2" -description = "Python package for creating and manipulating graphs and networks" -optional = false -python-versions = ">=3.10" -groups = ["main"] -markers = "python_version < \"3.11\"" -files = [ - {file = "networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f"}, - {file = "networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1"}, -] - -[package.extras] -default = ["matplotlib (>=3.7)", "numpy (>=1.24)", "pandas (>=2.0)", "scipy (>=1.10,!=1.11.0,!=1.11.1)"] -developer = ["changelist (==0.5)", "mypy (>=1.1)", "pre-commit (>=3.2)", "rtoml"] -doc = ["intersphinx-registry", "myst-nb (>=1.1)", "numpydoc (>=1.8.0)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.15)", "sphinx (>=7.3)", "sphinx-gallery (>=0.16)", "texext (>=0.6.7)"] -example = ["cairocffi (>=1.7)", "contextily (>=1.6)", "igraph (>=0.11)", "momepy (>=0.7.2)", "osmnx (>=1.9)", "scikit-learn (>=1.5)", "seaborn (>=0.13)"] -extra = ["lxml (>=4.6)", "pydot (>=3.0.1)", "pygraphviz (>=1.14)", "sympy (>=1.10)"] -test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] - -[[package]] -name = "networkx" -version = "3.6" -description = "Python package for creating and manipulating graphs and networks" -optional = false -python-versions = ">=3.11" -groups = ["main"] -markers = "python_version == \"3.14\"" -files = [ - {file = "networkx-3.6-py3-none-any.whl", hash = "sha256:cdb395b105806062473d3be36458d8f1459a4e4b98e236a66c3a48996e07684f"}, - {file = "networkx-3.6.tar.gz", hash = "sha256:285276002ad1f7f7da0f7b42f004bcba70d381e936559166363707fdad3d72ad"}, -] - -[package.extras] -benchmarking = ["asv", "virtualenv"] -default = ["matplotlib (>=3.8)", "numpy (>=1.25)", "pandas (>=2.0)", "scipy (>=1.11.2)"] -developer = ["mypy (>=1.15)", "pre-commit (>=4.1)"] -doc = ["intersphinx-registry", "myst-nb (>=1.1)", "numpydoc (>=1.8.0)", "pillow (>=10)", "pydata-sphinx-theme (>=0.16)", "sphinx (>=8.0)", "sphinx-gallery (>=0.18)", "texext (>=0.6.7)"] -example = ["cairocffi (>=1.7)", "contextily (>=1.6)", "igraph (>=0.11)", "iplotx (>=0.9.0)", "momepy (>=0.7.2)", "osmnx (>=2.0.0)", "scikit-learn (>=1.5)", "seaborn (>=0.13)"] -extra = ["lxml (>=4.6)", "pydot (>=3.0.1)", "pygraphviz (>=1.14)", "sympy (>=1.10)"] -release = ["build (>=0.10)", "changelist (==0.5)", "twine (>=4.0)", "wheel (>=0.40)"] -test = ["pytest (>=7.2)", "pytest-cov (>=4.0)", "pytest-xdist (>=3.0)"] -test-extras = ["pytest-mpl", "pytest-randomly"] - -[[package]] -name = "networkx" -version = "3.6.1" -description = "Python package for creating and manipulating graphs and networks" -optional = false -python-versions = "!=3.14.1,>=3.11" -groups = ["main"] -markers = "python_version < \"3.14\" and python_version >= \"3.11\"" -files = [ - {file = "networkx-3.6.1-py3-none-any.whl", hash = "sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762"}, - {file = "networkx-3.6.1.tar.gz", hash = "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509"}, -] - -[package.extras] -benchmarking = ["asv", "virtualenv"] -default = ["matplotlib (>=3.8)", "numpy (>=1.25)", "pandas (>=2.0)", "scipy (>=1.11.2)"] -developer = ["mypy (>=1.15)", "pre-commit (>=4.1)"] -doc = ["intersphinx-registry", "myst-nb (>=1.1)", "numpydoc (>=1.8.0)", "pillow (>=10)", "pydata-sphinx-theme (>=0.16)", "sphinx (>=8.0)", "sphinx-gallery (>=0.18)", "texext (>=0.6.7)"] -example = ["cairocffi (>=1.7)", "contextily (>=1.6)", "igraph (>=0.11)", "iplotx (>=0.9.0)", "momepy (>=0.7.2)", "osmnx (>=2.0.0)", "scikit-learn (>=1.5)", "seaborn (>=0.13)"] -extra = ["lxml (>=4.6)", "pydot (>=3.0.1)", "pygraphviz (>=1.14)", "sympy (>=1.10)"] -release = ["build (>=0.10)", "changelist (==0.5)", "twine (>=4.0)", "wheel (>=0.40)"] -test = ["pytest (>=7.2)", "pytest-cov (>=4.0)", "pytest-xdist (>=3.0)"] -test-extras = ["pytest-mpl", "pytest-randomly"] - [[package]] name = "notebook" version = "7.4.7" @@ -2933,120 +2487,6 @@ files = [ {file = "numpy-2.3.4.tar.gz", hash = "sha256:a7d018bfedb375a8d979ac758b120ba846a7fe764911a64465fd87b8729f4a6a"}, ] -[[package]] -name = "openfast-io" -version = "5.0.0" -description = "Readers and writers for OpenFAST files." -optional = false -python-versions = ">3.10" -groups = ["main"] -files = [ - {file = "openfast_io-5.0.0-py3-none-any.whl", hash = "sha256:3558880af3af7d319e1644c3063eb44f067bd50db727b68dfc4578250deda093"}, - {file = "openfast_io-5.0.0.tar.gz", hash = "sha256:5b683f2f381eee506d1a6ce90e3324273c027dea831b9dd969edc6254ce61241"}, -] - -[package.dependencies] -deepdiff = ">8.0" -numpy = ">1.0" -pandas = ">2.0" -ruamel-yaml = ">0.18" - -[package.extras] -all = ["rosco (>2.9.2)", "xlrd (>2.0)"] -rosco = ["rosco (>2.9.2)"] -xlrd = ["xlrd (>2.0)"] - -[[package]] -name = "openmdao" -version = "3.45.0" -description = "OpenMDAO framework infrastructure" -optional = false -python-versions = ">=3.10" -groups = ["main"] -files = [ - {file = "openmdao-3.45.0-py3-none-any.whl", hash = "sha256:ef01406fc29e763b69b979ffe7a3652351de5a68653da478cd4bbe02e2318f90"}, - {file = "openmdao-3.45.0.tar.gz", hash = "sha256:2e342398386230706999433a0eafc3df566e71f89709479323c3f00ab1b69e54"}, -] - -[package.dependencies] -networkx = ">=3.3" -numpy = ">=2.0,<2.4.0 || >2.4.0" -packaging = "*" -requests = "*" -scipy = ">=1.13" - -[package.extras] -all = ["aiounittest", "bokeh (>=3.4.0)", "colorama", "coverage (>=7.6.0)", "idna (>=3.7)", "ipympl", "ipyparallel", "jax (>=0.4.0)", "jaxlib (>=0.4.0)", "jinja2 (>=3.1.4)", "jupyter-book (>=1.0.3,<2)", "matplotlib", "notebook", "num2words", "numpydoc (>=1.1)", "panel", "parameterized", "playwright (>=1.20)", "pre-commit", "pycodestyle (>=2.4.0)", "pydata-sphinx-theme (>=0.15.0,<0.16.0)", "pydocstyle (>=2.0.0)", "pydoe3", "rich", "sphinx-sitemap", "testflo (>=1.3.6)", "tqdm (>=4.66.3)", "websockets (>8)"] -docs = ["idna (>=3.7)", "ipyparallel", "jinja2 (>=3.1.4)", "jupyter-book (>=1.0.3,<2)", "matplotlib", "numpydoc (>=1.1)", "pydata-sphinx-theme (>=0.15.0,<0.16.0)", "sphinx-sitemap", "tqdm (>=4.66.3)"] -doe = ["pydoe3"] -jax = ["jax (>=0.4.0)", "jaxlib (>=0.4.0)"] -julia = ["omjlcomps (>=0.2.6)"] -notebooks = ["idna (>=3.7)", "ipympl", "notebook"] -numba = ["numba"] -test = ["aiounittest", "coverage (>=7.6.0)", "num2words", "numpydoc (>=1.1)", "parameterized", "playwright (>=1.20)", "pre-commit", "pycodestyle (>=2.4.0)", "pydocstyle (>=2.0.0)", "testflo (>=1.3.6)", "websockets (>8)"] -visualization = ["bokeh (>=3.4.0)", "colorama", "matplotlib", "panel", "rich"] - -[[package]] -name = "openpyxl" -version = "3.1.5" -description = "A Python library to read/write Excel 2010 xlsx/xlsm files" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2"}, - {file = "openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050"}, -] - -[package.dependencies] -et-xmlfile = "*" - -[[package]] -name = "orbit-nrel" -version = "1.3" -description = "Offshore Renewables Balance of system and Installation Tool" -optional = false -python-versions = ">3.9" -groups = ["main"] -files = [ - {file = "orbit_nrel-1.3-py3-none-any.whl", hash = "sha256:011925d18deb982f8265f35c4af30047807f5a08dc0b0fcb5f594b4eab15c8a2"}, - {file = "orbit_nrel-1.3.tar.gz", hash = "sha256:3cf16a4f4dec822c85b04743ca1ab6eebb830e47d2205b7cdcf95cb7ccc05537"}, -] - -[package.dependencies] -marmot-agents = ">=0.2.5" -matplotlib = "*" -numpy = "*" -pandas = "*" -python-benedict = "*" -pyyaml = "*" -scipy = "*" -simpy = "*" -statsmodels = "*" - -[package.extras] -dev = ["black", "isort", "pre-commit", "pytest (>=9)", "pytest-cov", "ruff"] -docs = ["jupyter-book (>=1,<2)", "linkify-it-py (>=2)", "myst-nb (>=0.16)", "myst-parser (>=0.17)", "nbformat (>=5.0.0)", "sphinx-autodoc-typehints", "sphinxcontrib-autoyaml", "sphinxcontrib-bibtex (>=2.4)", "sphinxcontrib-spelling (>=7)"] - -[[package]] -name = "orderly-set" -version = "5.5.0" -description = "Orderly set" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "orderly_set-5.5.0-py3-none-any.whl", hash = "sha256:46f0b801948e98f427b412fcabb831677194c05c3b699b80de260374baa0b1e7"}, - {file = "orderly_set-5.5.0.tar.gz", hash = "sha256:e87185c8e4d8afa64e7f8160ee2c542a475b738bc891dc3f58102e654125e6ce"}, -] - -[package.extras] -coverage = ["coverage (>=7.6.0,<7.7.0)"] -dev = ["bump2version (>=1.0.0,<1.1.0)", "ipdb (>=0.13.0,<0.14.0)"] -optimize = ["orjson"] -static = ["flake8 (>=7.1.0,<7.2.0)", "flake8-pyproject (>=1.2.3,<1.3.0)"] -test = ["pytest (>=8.3.0,<8.4.0)", "pytest-benchmark (>=5.1.0,<5.2.0)", "pytest-cov (>=6.0.0,<6.1.0)", "python-dotenv (>=1.0.0,<1.1.0)"] - [[package]] name = "overrides" version = "7.7.0" @@ -3317,24 +2757,6 @@ files = [ {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, ] -[[package]] -name = "patsy" -version = "1.0.2" -description = "A Python package for describing statistical models and for building design matrices." -optional = false -python-versions = ">=3.6" -groups = ["main"] -files = [ - {file = "patsy-1.0.2-py2.py3-none-any.whl", hash = "sha256:37bfddbc58fcf0362febb5f54f10743f8b21dd2aa73dec7e7ef59d1b02ae668a"}, - {file = "patsy-1.0.2.tar.gz", hash = "sha256:cdc995455f6233e90e22de72c37fcadb344e7586fb83f06696f54d92f8ce74c0"}, -] - -[package.dependencies] -numpy = ">=1.4" - -[package.extras] -test = ["pytest", "pytest-cov", "scipy"] - [[package]] name = "pexpect" version = "4.9.0" @@ -3658,34 +3080,15 @@ tests = ["pytest"] name = "pycparser" version = "2.23" description = "C parser in Python" -optional = false +optional = true python-versions = ">=3.8" groups = ["main"] -markers = "(extra == \"dev\" or implementation_name == \"pypy\") and implementation_name != \"PyPy\"" +markers = "extra == \"dev\" and implementation_name != \"PyPy\"" files = [ {file = "pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934"}, {file = "pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2"}, ] -[[package]] -name = "pydoe3" -version = "1.6.2" -description = "Design of experiments for Python" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "pydoe3-1.6.2-py2.py3-none-any.whl", hash = "sha256:21b5c3ef10a350bed01f59df54ae262fd1eda9983efac294b679988f311f3445"}, - {file = "pydoe3-1.6.2.tar.gz", hash = "sha256:ff7377c30e0a2ea8af3f074723488779f557457c8b74029965896c30b8a1a541"}, -] - -[package.dependencies] -numpy = "*" -scipy = "*" - -[package.extras] -docs = ["mkdocs (>=1.6.1)", "mkdocs-material (>=9.6.22)", "mkdocs-minify-plugin (>=0.8.0)", "mkdocstrings[python] (>=0.30.1)", "pymdown-extensions (>=10.16.1)"] - [[package]] name = "pygments" version = "2.19.2" @@ -3757,34 +3160,6 @@ tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} [package.extras] testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] -[[package]] -name = "python-benedict" -version = "0.38.0" -description = "python-benedict is a dict subclass with keylist/keypath/keyattr support, normalized I/O operations (base64, csv, ini, json, pickle, plist, query-string, toml, xls, xml, yaml) and many utilities... for humans, obviously." -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "python_benedict-0.38.0-py3-none-any.whl", hash = "sha256:5f4cbdfdda245d3f2899a7fd9d59ee68e69e6d1e0d57693f8626f186a11fcc6b"}, - {file = "python_benedict-0.38.0.tar.gz", hash = "sha256:71e066b73f15d2231927b3021469a1db57a3e96092a99917018b63f51329e49c"}, -] - -[package.dependencies] -python-slugify = ">=7.0.0,<9.0.0" -typing_extensions = ">=4.13.2,<4.16.0" - -[package.extras] -all = ["python-benedict[io,parse,s3,schema]"] -html = ["beautifulsoup4 (>=4.12.0,<5.0.0)", "python-benedict[xml]"] -io = ["python-benedict[html,toml,xls,xml,yaml]", "python-fsutil (>=0.17.0,<1.0.0)", "requests (>=2.33.0,<3.0.0)"] -parse = ["ftfy (>=6.0.0,<7.0.0)", "mailchecker (>=4.1.0,<7.0.0)", "phonenumbers (>=8.12.0,<10.0.0)", "python-dateutil (>=2.8.0,<3.0.0)"] -s3 = ["boto3 (>=1.24.89,<2.0.0)", "python-fsutil (>=0.17.0,<1.0.0)"] -schema = ["pydantic (>=2.0.0,<3.0.0)"] -toml = ["tomli (>=2.0.0,<3.0.0) ; python_version < \"3.11\"", "tomli-w (>=1.0.0,<2.0.0)"] -xls = ["openpyxl (>=3.0.0,<4.0.0)", "python-fsutil (>=0.17.0,<1.0.0)", "xlrd (>=2.0.0,<3.0.0)"] -xml = ["xmltodict (>=0.12.0,<2.0.0)"] -yaml = ["pyyaml (>=6.0,<7.0)"] - [[package]] name = "python-dateutil" version = "2.9.0.post0" @@ -3816,24 +3191,6 @@ files = [ [package.extras] dev = ["backports.zoneinfo ; python_version < \"3.9\"", "black", "build", "freezegun", "mdx_truly_sane_lists", "mike", "mkdocs", "mkdocs-awesome-pages-plugin", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-material (>=8.5)", "mkdocstrings[python]", "msgspec ; implementation_name != \"pypy\"", "mypy", "orjson ; implementation_name != \"pypy\"", "pylint", "pytest", "tzdata", "validate-pyproject[all]"] -[[package]] -name = "python-slugify" -version = "8.0.4" -description = "A Python slugify application that also handles Unicode" -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "python-slugify-8.0.4.tar.gz", hash = "sha256:59202371d1d05b54a9e7720c5e038f928f45daaffe41dd10822f3907b937c856"}, - {file = "python_slugify-8.0.4-py2.py3-none-any.whl", hash = "sha256:276540b79961052b66b7d116620b36518847f52d5fd9e3a70164fc8c50faa6b8"}, -] - -[package.dependencies] -text-unidecode = ">=1.3" - -[package.extras] -unidecode = ["Unidecode (>=1.1.1)"] - [[package]] name = "pytz" version = "2026.3.post1" @@ -3954,9 +3311,10 @@ files = [ name = "pyzmq" version = "27.1.0" description = "Python bindings for 0MQ" -optional = false +optional = true python-versions = ">=3.8" groups = ["main"] +markers = "extra == \"dev\"" files = [ {file = "pyzmq-27.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:508e23ec9bc44c0005c4946ea013d9317ae00ac67778bd47519fdf5a0e930ff4"}, {file = "pyzmq-27.1.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:507b6f430bdcf0ee48c0d30e734ea89ce5567fd7b8a0f0044a369c176aa44556"}, @@ -4059,9 +3417,10 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""} name = "referencing" version = "0.37.0" description = "JSON Referencing + Python" -optional = false +optional = true python-versions = ">=3.10" groups = ["main"] +markers = "extra == \"dev\"" files = [ {file = "referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231"}, {file = "referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8"}, @@ -4076,9 +3435,10 @@ typing-extensions = {version = ">=4.4.0", markers = "python_version < \"3.13\""} name = "requests" version = "2.32.5" description = "Python HTTP for Humans." -optional = false +optional = true python-versions = ">=3.9" groups = ["main"] +markers = "extra == \"dev\"" files = [ {file = "requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6"}, {file = "requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf"}, @@ -4142,81 +3502,14 @@ lark = ">=1.2.2" [package.extras] testing = ["pytest (>=8.3.5)"] -[[package]] -name = "rosco" -version = "2.10.4" -description = "A reference open source controller toolset for wind turbine applications." -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "rosco-2.10.4-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:58b8744a6a8c66a16fb48c27b2846320cfc26b03bb5533581184543459ce804f"}, - {file = "rosco-2.10.4-cp310-cp310-macosx_15_0_arm64.whl", hash = "sha256:b6e932f0c6e2055950dfa81b1d5c10a5ce4278f5bd71f5cf52a3363c1938f574"}, - {file = "rosco-2.10.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a40d9aee6618d95b0a8f9bccbfcd3c30d62daa847f699a14b1f8c4848b19b136"}, - {file = "rosco-2.10.4-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e98960b71fc0e1b72a56b47974b8f11cc850df976e305e7705567e37a6843bb"}, - {file = "rosco-2.10.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8bb08688239e6a8fe97e82cb86003cc30825600e0fbbd06c5244d980bd1b67ed"}, - {file = "rosco-2.10.4-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:bb43839d10b87d45320d930b2a7632f8257d3df74070cce336c0a21f1216e6d0"}, - {file = "rosco-2.10.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:798759543f92dfbf0ab3be304f7d5a758c709702eb8529cc229699a496a2bb22"}, - {file = "rosco-2.10.4-cp310-cp310-win_amd64.whl", hash = "sha256:9d7d9b3c376b3dd7a5065b323e53382168908797acdf5c56341f9b9784513613"}, - {file = "rosco-2.10.4-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:bbc0eb6d2d743ee001329a3dffb05c2a9f16c7a12117d21f1240b5b55826f7d1"}, - {file = "rosco-2.10.4-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:1d623e9747bd416798edcb915f9c7aabc11e2ba606479f41dc630f05979d9fe8"}, - {file = "rosco-2.10.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b91f51ba2a7cb91e3e14e7f21099df075c5667dccd877c789386c63ad45fc0c"}, - {file = "rosco-2.10.4-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:764b5d07c63c30b22eff9b9b361b3468cde114568767f725febfffe96f8f9091"}, - {file = "rosco-2.10.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3f4301427aabfd2764c65786cd058e975a986ccc52883ff0bdabcc58f182113"}, - {file = "rosco-2.10.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1e45628f6e95ccb2e2a83fa4039a95fc0e3254cb8c7a6873076fa0e26d013381"}, - {file = "rosco-2.10.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f19795c0b8fb08d60aa9bf8077faee59d07228e32554eb70af5eaef3ab82c803"}, - {file = "rosco-2.10.4-cp311-cp311-win_amd64.whl", hash = "sha256:cdd8e01aff72f553dd4f112deeed33984b681e44598d33c3f5d70a6441f68b03"}, - {file = "rosco-2.10.4-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3cef4ebad5fa6c1c110154a8cc212c721c8c162ff0875196500979dbfa9e0b54"}, - {file = "rosco-2.10.4-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:3a79547b516c899a2db1bc446a64d7b01d25a1d4cc6f058e073e7b126489a803"}, - {file = "rosco-2.10.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7103499a61bbc2a8510423ac5a43840372983dd7d1bf99cbe99fcde1cec621e4"}, - {file = "rosco-2.10.4-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d795a2f1615a3ff281a36f62132ed24e1791726ad7c8a66bf4c4897315c6e4e8"}, - {file = "rosco-2.10.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef54a8570861b0a5e5ff030d5b50ea19ba1fcd4e614c8b14124b54b2fa4e988d"}, - {file = "rosco-2.10.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:776a234aab93a0f510eb4b62f5d3448b4d682e20029305c370f1c41678fde539"}, - {file = "rosco-2.10.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:03e7ce8282e821fd23d2cf0f933f2a207f2a9611d29e0477890b398d354dc8c4"}, - {file = "rosco-2.10.4-cp312-cp312-win_amd64.whl", hash = "sha256:c85a25eb99aa230670020aad3a9cd17fdb0fc05a35ee5828cdee71060cd89e32"}, - {file = "rosco-2.10.4-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8d3bf944755ad7c0516238a9b009b5f7990106e6a6aa55ed2d98f3ed514af116"}, - {file = "rosco-2.10.4-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:3b70954bd965278c3e3cc88bb5cfc1a49782fed0ec3214bd81cda0206d52a555"}, - {file = "rosco-2.10.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9651f32435789135b7d1a0f29b335bb82e07cd87e6aaa63d5c39e49752f48ad3"}, - {file = "rosco-2.10.4-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f34bac456efab5be143f2574f832d507c8583129d7311d8ac87b8c34c4cd3764"}, - {file = "rosco-2.10.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d152646cb400db753efecc786a24b6b028b1d83b4bed0c45d5fe6b0235f3a1d"}, - {file = "rosco-2.10.4-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b1c2791e865b23c703fbb9bf0a169e2814aedc785f0fa533079fdd09bcaa63fd"}, - {file = "rosco-2.10.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4220572d09b31b27603d3a7ef3fff263dccbdfbfbf4268713600d5db8997adf9"}, - {file = "rosco-2.10.4-cp313-cp313-win_amd64.whl", hash = "sha256:41661ac2089bb6cfaec2399bb9c45dbae4e0f8b3050bbc9c618839cef1f84e80"}, - {file = "rosco-2.10.4-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:74f509eb0415ca5729f508ae783f178568367f5e45950bf3c69513d3f2248f75"}, - {file = "rosco-2.10.4-cp39-cp39-macosx_15_0_arm64.whl", hash = "sha256:0d2002d3a392a285959adcf93990c209632b589099cd6387f4eebf41e549d26b"}, - {file = "rosco-2.10.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3aa0b894715242fb9191f2f10e80fed8a53ae9ad361b2346e2028ab73b79831"}, - {file = "rosco-2.10.4-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:133486ba634d0e47d5d756794b91a62778e2ad94d31aad44e6d33235f40c9765"}, - {file = "rosco-2.10.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d40b16110cc8ee5aed206dc839eee92f62377ecb7b661d5eab560128ecfee653"}, - {file = "rosco-2.10.4-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:be7f9c7500c2a57899ced8431a1f76b06a32c4f030035914bfb30c3e40961a52"}, - {file = "rosco-2.10.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:632d3dd73a8a7444bc1aad841beda7f5e99839b7009d8d2bdffd64045c6c6c49"}, - {file = "rosco-2.10.4-cp39-cp39-win_amd64.whl", hash = "sha256:9275097a862b263feceed0543dea3d8f81ee89512314c108328c8bdb46e677ad"}, - {file = "rosco-2.10.4.tar.gz", hash = "sha256:15e06f46bd8096dfa6f8cab7b312dacdfe3a88ad3f20fef9f320621cae462aaf"}, -] - -[package.dependencies] -control = "*" -matplotlib = "*" -numpy = "*" -openfast_io = "*" -pandas = "*" -pyparsing = "*" -pyYAML = "*" -pyzmq = "*" -"ruamel.yaml" = "*" -scipy = "*" -wisdem = "*" - -[package.extras] -dev = ["cmake"] -test = ["pytest", "treon"] - [[package]] name = "rpds-py" version = "0.28.0" description = "Python bindings to Rust's persistent data structures (rpds)" -optional = false +optional = true python-versions = ">=3.10" groups = ["main"] +markers = "extra == \"dev\"" files = [ {file = "rpds_py-0.28.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:7b6013db815417eeb56b2d9d7324e64fcd4fa289caeee6e7a78b2e11fc9b438a"}, {file = "rpds_py-0.28.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1a4c6b05c685c0c03f80dabaeb73e74218c49deea965ca63f76a752807397207"}, @@ -4335,24 +3628,6 @@ files = [ {file = "rpds_py-0.28.0.tar.gz", hash = "sha256:abd4df20485a0983e2ca334a216249b6186d6e3c1627e106651943dbdb791aea"}, ] -[[package]] -name = "ruamel-yaml" -version = "0.19.1" -description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "ruamel_yaml-0.19.1-py3-none-any.whl", hash = "sha256:27592957fedf6e0b62f281e96effd28043345e0e66001f97683aa9a40c667c93"}, - {file = "ruamel_yaml-0.19.1.tar.gz", hash = "sha256:53eb66cd27849eff968ebf8f0bf61f46cdac2da1d1f3576dd4ccee9b25c31993"}, -] - -[package.extras] -docs = ["mercurial (>5.7)", "ryd"] -jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] -libyaml = ["ruamel.yaml.clibz (>=0.3.7) ; platform_python_implementation == \"CPython\""] -oldlibyaml = ["ruamel.yaml.clib ; platform_python_implementation == \"CPython\""] - [[package]] name = "ruff" version = "0.1.15" @@ -4505,28 +3780,6 @@ dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy (==1.10.0)", "pycodest doc = ["intersphinx_registry", "jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.19.1)", "jupytext", "linkify-it-py", "matplotlib (>=3.5)", "myst-nb (>=1.2.0)", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0,<8.2.0)", "sphinx-copybutton", "sphinx-design (>=0.4.0)"] test = ["Cython", "array-api-strict (>=2.3.1)", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja ; sys_platform != \"emscripten\"", "pooch", "pytest (>=8.0.0)", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] -[[package]] -name = "seaborn" -version = "0.13.2" -description = "Statistical data visualization" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "seaborn-0.13.2-py3-none-any.whl", hash = "sha256:636f8336facf092165e27924f223d3c62ca560b1f2bb5dff7ab7fad265361987"}, - {file = "seaborn-0.13.2.tar.gz", hash = "sha256:93e60a40988f4d65e9f4885df477e2fdaff6b73a9ded434c1ab356dd57eefff7"}, -] - -[package.dependencies] -matplotlib = ">=3.4,<3.6.1 || >3.6.1" -numpy = ">=1.20,<1.24.0 || >1.24.0" -pandas = ">=1.2" - -[package.extras] -dev = ["flake8", "flit", "mypy", "pandas-stubs", "pre-commit", "pytest", "pytest-cov", "pytest-xdist"] -docs = ["ipykernel", "nbconvert", "numpydoc", "pydata_sphinx_theme (==0.10.0rc2)", "pyyaml", "sphinx (<6.0.0)", "sphinx-copybutton", "sphinx-design", "sphinx-issues"] -stats = ["scipy (>=1.7)", "statsmodels (>=0.12)"] - [[package]] name = "send2trash" version = "1.8.3" @@ -4641,18 +3894,6 @@ numpy = ">=1.21" docs = ["matplotlib", "numpydoc (==1.1.*)", "sphinx", "sphinx-book-theme", "sphinx-remove-toctrees"] test = ["pytest", "pytest-cov", "scipy-doctest"] -[[package]] -name = "simpy" -version = "4.1.2" -description = "Event discrete, process based simulation for Python." -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "simpy-4.1.2-py3-none-any.whl", hash = "sha256:43071f84b6512c9b4fcb33ef057f240ccb1d1f3b263f9b4f9229d072e310b372"}, - {file = "simpy-4.1.2.tar.gz", hash = "sha256:76ef36b71e0436ba94e55febc001c78879e493a323f045bbcfbb0b216e9b1fbc"}, -] - [[package]] name = "six" version = "1.17.0" @@ -4678,18 +3919,6 @@ files = [ {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, ] -[[package]] -name = "sortedcontainers" -version = "2.4.0" -description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"}, - {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, -] - [[package]] name = "soupsieve" version = "2.8" @@ -4724,64 +3953,6 @@ pure-eval = "*" [package.extras] tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] -[[package]] -name = "statsmodels" -version = "0.14.6" -description = "Statistical computations and models for Python" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "statsmodels-0.14.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f4ff0649a2df674c7ffb6fa1a06bffdb82a6adf09a48e90e000a15a6aaa734b0"}, - {file = "statsmodels-0.14.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:109012088b3e370080846ab053c76d125268631410142daad2f8c10770e8e8d9"}, - {file = "statsmodels-0.14.6-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e93bd5d220f3cb6fc5fc1bffd5b094966cab8ee99f6c57c02e95710513d6ac3f"}, - {file = "statsmodels-0.14.6-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:06eec42d682fdb09fe5d70a05930857efb141754ec5a5056a03304c1b5e32fd9"}, - {file = "statsmodels-0.14.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0444e88557df735eda7db330806fe09d51c9f888bb1f5906cb3a61fb1a3ed4a8"}, - {file = "statsmodels-0.14.6-cp310-cp310-win_amd64.whl", hash = "sha256:e83a9abe653835da3b37fb6ae04b45480c1de11b3134bd40b09717192a1456ea"}, - {file = "statsmodels-0.14.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6ad5c2810fc6c684254a7792bf1cbaf1606cdee2a253f8bd259c43135d87cfb4"}, - {file = "statsmodels-0.14.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:341fa68a7403e10a95c7b6e41134b0da3a7b835ecff1eb266294408535a06eb6"}, - {file = "statsmodels-0.14.6-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bdf1dfe2a3ca56f5529118baf33a13efed2783c528f4a36409b46bbd2d9d48eb"}, - {file = "statsmodels-0.14.6-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a3764ba8195c9baf0925a96da0743ff218067a269f01d155ca3558deed2658ca"}, - {file = "statsmodels-0.14.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9e8d2e519852adb1b420e018f5ac6e6684b2b877478adf7fda2cfdb58f5acb5d"}, - {file = "statsmodels-0.14.6-cp311-cp311-win_amd64.whl", hash = "sha256:2738a00fca51196f5a7d44b06970ace6b8b30289839e4808d656f8a98e35faa7"}, - {file = "statsmodels-0.14.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fe76140ae7adc5ff0e60a3f0d56f4fffef484efa803c3efebf2fcd734d72ecb5"}, - {file = "statsmodels-0.14.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:26d4f0ed3b31f3c86f83a92f5c1f5cbe63fc992cd8915daf28ca49be14463a1c"}, - {file = "statsmodels-0.14.6-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8c00a42863e4f4733ac9d078bbfad816249c01451740e6f5053ecc7db6d6368"}, - {file = "statsmodels-0.14.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:19b58cf7474aa9e7e3b0771a66537148b2df9b5884fbf156096c0e6c1ff0469d"}, - {file = "statsmodels-0.14.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:81e7dcc5e9587f2567e52deaff5220b175bf2f648951549eae5fc9383b62bc37"}, - {file = "statsmodels-0.14.6-cp312-cp312-win_amd64.whl", hash = "sha256:b5eb07acd115aa6208b4058211138393a7e6c2cf12b6f213ede10f658f6a714f"}, - {file = "statsmodels-0.14.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:47ee7af083623d2091954fa71c7549b8443168f41b7c5dce66510274c50fd73e"}, - {file = "statsmodels-0.14.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:aa60d82e29fcd0a736e86feb63a11d2380322d77a9369a54be8b0965a3985f71"}, - {file = "statsmodels-0.14.6-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:89ee7d595f5939cc20bf946faedcb5137d975f03ae080f300ebb4398f16a5bd4"}, - {file = "statsmodels-0.14.6-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:730f3297b26749b216a06e4327fe0be59b8d05f7d594fb6caff4287b69654589"}, - {file = "statsmodels-0.14.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f1c08befa85e93acc992b72a390ddb7bd876190f1360e61d10cf43833463bc9c"}, - {file = "statsmodels-0.14.6-cp313-cp313-win_amd64.whl", hash = "sha256:8021271a79f35b842c02a1794465a651a9d06ec2080f76ebc3b7adce77d08233"}, - {file = "statsmodels-0.14.6-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:00781869991f8f02ad3610da6627fd26ebe262210287beb59761982a8fa88cae"}, - {file = "statsmodels-0.14.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:73f305fbf31607b35ce919fae636ab8b80d175328ed38fdc6f354e813b86ee37"}, - {file = "statsmodels-0.14.6-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e443e7077a6e2d3faeea72f5a92c9f12c63722686eb80bb40a0f04e4a7e267ad"}, - {file = "statsmodels-0.14.6-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3414e40c073d725007a6603a18247ab7af3467e1af4a5e5a24e4c27bc26673b4"}, - {file = "statsmodels-0.14.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a518d3f9889ef920116f9fa56d0338069e110f823926356946dae83bc9e33e19"}, - {file = "statsmodels-0.14.6-cp314-cp314-win_amd64.whl", hash = "sha256:151b73e29f01fe619dbce7f66d61a356e9d1fe5e906529b78807df9189c37721"}, - {file = "statsmodels-0.14.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4d0c1b0f9f6915619e2a0d3853e5763d4d66876892ad352e7d7b93a737556978"}, - {file = "statsmodels-0.14.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9e0fc891d6358bf376cc0ae1fee10a650478172ae9ba359daba1785fc496cd1a"}, - {file = "statsmodels-0.14.6-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f52ef0f0b63b8fd11e1ef1c2a1e73a410720b8715c9a83a26d733b6815597fe"}, - {file = "statsmodels-0.14.6-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b328eafa86a2a67303fdb1d25677d15b70cd2a5229aabec7670ec5ea840f1375"}, - {file = "statsmodels-0.14.6-cp39-cp39-win_amd64.whl", hash = "sha256:3bef39f8587754f2d644b2e831e102fa08ace9a5a1af4b583b122e6fd3e083ab"}, - {file = "statsmodels-0.14.6.tar.gz", hash = "sha256:4d17873d3e607d398b85126cd4ed7aad89e4e9d89fc744cdab1af3189a996c2a"}, -] - -[package.dependencies] -numpy = ">=1.22.3,<3" -packaging = ">=21.3" -pandas = ">=1.4,<2.1.0 || >2.1.0" -patsy = ">=0.5.6" -scipy = ">=1.8,<1.9.2 || >1.9.2" - -[package.extras] -build = ["cython (>=3.0.10)"] -develop = ["colorama", "cython (>=3.0.10)", "cython (>=3.0.10,<4)", "flake8", "isort", "jinja2", "joblib", "matplotlib (>=3)", "pytest (>=7.3.0,<8)", "pytest-cov", "pytest-randomly", "pytest-xdist", "pywinpty ; os_name == \"nt\"", "setuptools_scm[toml] (>=8.0,<9.0)"] -docs = ["ipykernel", "jupyter_client", "matplotlib", "nbconvert", "nbformat", "numpydoc", "pandas-datareader", "sphinx"] - [[package]] name = "terminado" version = "0.18.1" @@ -4805,18 +3976,6 @@ docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] typing = ["mypy (>=1.6,<2.0)", "traitlets (>=5.11.1)"] -[[package]] -name = "text-unidecode" -version = "1.3" -description = "The most basic Text::Unidecode port" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "text-unidecode-1.3.tar.gz", hash = "sha256:bad6603bb14d279193107714b288be206cac565dfa49aa5b105294dd5c4aab93"}, - {file = "text_unidecode-1.3-py2.py3-none-any.whl", hash = "sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8"}, -] - [[package]] name = "tinycss2" version = "1.4.0" @@ -4935,21 +4094,6 @@ notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] -[[package]] -name = "tqdm-joblib" -version = "0.0.5" -description = "Tracking progress of joblib.Parallel execution" -optional = false -python-versions = ">=3.10" -groups = ["main"] -files = [ - {file = "tqdm_joblib-0.0.5-py3-none-any.whl", hash = "sha256:5948fccca627970cc8340dd56ac49d29222ed110b9ee39fd310b76a1483b471f"}, - {file = "tqdm_joblib-0.0.5.tar.gz", hash = "sha256:34dd63c92e1b88b5118661a41eaf91001cac2687bfe217a4b6a9ab1bbf0f1c64"}, -] - -[package.dependencies] -tqdm = "*" - [[package]] name = "traitlets" version = "5.14.3" @@ -4971,9 +4115,10 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0, name = "typing-extensions" version = "4.15.0" description = "Backported and Experimental Type Hints for Python 3.9+" -optional = false +optional = true python-versions = ">=3.9" groups = ["main"] +markers = "extra == \"dev\"" files = [ {file = "typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548"}, {file = "typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"}, @@ -5040,9 +4185,10 @@ dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake name = "urllib3" version = "2.5.0" description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = false +optional = true python-versions = ">=3.9" groups = ["main"] +markers = "extra == \"dev\"" files = [ {file = "urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc"}, {file = "urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760"}, @@ -5124,165 +4270,6 @@ files = [ {file = "widgetsnbextension-4.0.14.tar.gz", hash = "sha256:a3629b04e3edb893212df862038c7232f62973373869db5084aed739b437b5af"}, ] -[[package]] -name = "windio" -version = "2.1.1" -description = "Frameworks defining the inputs and outputs for systems engineering MDAO of wind turbine and plants." -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "windio-2.1.1-py3-none-any.whl", hash = "sha256:333820957a0b38651d1ea48df5a2544f17d4cf766cee7bb2b1caed5557e7d35b"}, - {file = "windio-2.1.1.tar.gz", hash = "sha256:ca5581a8a54425695b7726713bbc878ad1f2073a767b568166fa1e8340ec7de9"}, -] - -[package.dependencies] -jsonschema = "*" -netcdf4 = "*" -"ruamel.yaml" = "*" -xarray = "*" - -[package.extras] -docs = ["gitpython", "json-schema-for-humans", "pydata-sphinx-theme", "sphinx (<=6.2)", "sphinx_multiversion"] -test = ["numpy", "pint", "pytest", "pytest-subtests", "scipy"] - -[[package]] -name = "wisdem" -version = "4.0.5" -description = "Wind-Plant Integrated System Design & Engineering Model" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "wisdem-4.0.5-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:5334e38e26efba43c9848de4a4a4fc681b438635f0b773aff01ba6ed29d61833"}, - {file = "wisdem-4.0.5-cp310-cp310-macosx_15_0_arm64.whl", hash = "sha256:8040476014ce81342a996dbb1b3355605a8fc0b824af7ea6d5b4a95735699895"}, - {file = "wisdem-4.0.5-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0e8749f4f3a81c3d3759451bf7c221e84165ec4c9c3200bf27d4250890b4caa1"}, - {file = "wisdem-4.0.5-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:34cf7d3d26ab8fb56b447f6c3ad00697dfa1709a90059ae2ae724f4b15abbcc0"}, - {file = "wisdem-4.0.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fe5590a9a6bec0226944533930b8b2ecc088463464b1b89296612f548eeb1b3c"}, - {file = "wisdem-4.0.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:39fd308ddd7aa52f071eda69171c7eca09af9847d66072dd0e5036997056a3ec"}, - {file = "wisdem-4.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:6b53a9df4a08e4377066632a8b9030b193ad22725e3d2b220b4cc1b1a1443b95"}, - {file = "wisdem-4.0.5-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:74cd83d116e79dc2855866bab1e3b821e842bc589c682f5fea848a0cad645e0e"}, - {file = "wisdem-4.0.5-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:5d5b494a31f17c5160b0387a8fc23271813740276661b9587b8e596e286fa04b"}, - {file = "wisdem-4.0.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:225245e10812ae99532dc81ec51625188baf85e96bdd5ecd50f1b0df84f855cd"}, - {file = "wisdem-4.0.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:47e531fa4caea3b17dd661bbcbc8e9ccb21a32ea8523d229345dfc594697d30e"}, - {file = "wisdem-4.0.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3fcfc81a86be6930bb1c361e1e98181c94dea921a9b082a55ab30257de66fe44"}, - {file = "wisdem-4.0.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7a5e0042b9209857c92166b86428a2ece2f08a356a95b558df0558ba564a640a"}, - {file = "wisdem-4.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b9aab5fd74ed7f6f5d4ec019f21b4dc1396a1a8b6081c76b5ba696986cbd781"}, - {file = "wisdem-4.0.5-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:fd71cc4a9bf22b33b44a012b0fd93e07446cd873ef7dd51868026873d23d8e56"}, - {file = "wisdem-4.0.5-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:7ba8a539a7ea88226fbb88d7f3b85ce77fd9008baa86f2d70277a78b12d92df8"}, - {file = "wisdem-4.0.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b424a88bcaff9563edd58b6591428a0184f3f048505196780114680a436e28ca"}, - {file = "wisdem-4.0.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a80913729f90fccce7bcf0270a42410a93980a181878c23dfb998323a6cb4a7b"}, - {file = "wisdem-4.0.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b64dbc7f44a32a56c6af6579f18e57147fe50fa8d3f82e952693bcde5ed513d5"}, - {file = "wisdem-4.0.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:14b9080f1ed81c5484eee80902bb6135e19e35265154169cc01bda79a257ac2d"}, - {file = "wisdem-4.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:0ee7d2561072255c326787909a6b44e42a660e08a327682286874f19d20c03ff"}, - {file = "wisdem-4.0.5-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:399fdfb699dde9ecf2370ea70f11d2166f5576ff6f17924001a0091bb64d3ed9"}, - {file = "wisdem-4.0.5-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:aea2768334208adc94a98aebdfaac087ded95a2191b25889efc0e8111954e7c3"}, - {file = "wisdem-4.0.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7c7eaa94675c5dfce17e66f808b492939d05da538943e26a26c764179682e44b"}, - {file = "wisdem-4.0.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d9e9dba0f90efb450a3b3d0d6bbde95efd9c55e3e56fde9102597199be0a5611"}, - {file = "wisdem-4.0.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:db7898d130fc3de7ddd25fe5a2f844e3ee58a6b5507b7b93fd8140518376c784"}, - {file = "wisdem-4.0.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:244a31cfc048c8089ab40662a34c98a4c05547e3ec692cb9722d9f0530a93cdd"}, - {file = "wisdem-4.0.5-cp313-cp313-win_amd64.whl", hash = "sha256:d5816268c275139e0de18306e6b27d38ea73e9a3da8c3b719da00fdb4286bb7d"}, - {file = "wisdem-4.0.5-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:e3d78c2b617a4bac8de1bd42293effaabbb7fc7d0c11bd17e37a61f3a396f036"}, - {file = "wisdem-4.0.5-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:ed7ad36a201b4583a54b34ef84055f82c954bcd961edf80892217f6a0551a5a3"}, - {file = "wisdem-4.0.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2b1ed6bd1db1bd5e00f997a8be19fb7bd1275603595d94b088bb23a30f45a4be"}, - {file = "wisdem-4.0.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dfab853f51bf4930cc809262c9bc9104d074dbf355103623f39be7b2a99b7506"}, - {file = "wisdem-4.0.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:114603f3b38e8c48bcf8489e9dbcd66c2ede51162ea0124f5942bb615e42b6d9"}, - {file = "wisdem-4.0.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:efb89da281fa9d4fd1282e83364ad63e1207fa0956ef7102dd2938ac7771ceb2"}, - {file = "wisdem-4.0.5-cp314-cp314-win_amd64.whl", hash = "sha256:b912a57ffb8206b8e635ab710d51d96429c8e06f139dd9733212576e0b2f5265"}, - {file = "wisdem-4.0.5-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:92d5843bd9065d0ee08e8fc43bc222246c9374d3cb7b41d82ab3cd2616273e0f"}, - {file = "wisdem-4.0.5-cp314-cp314t-macosx_15_0_arm64.whl", hash = "sha256:64df7bd76d79e7cd412308f615c21c287cd2cb3842abde7412d0355d1375d2af"}, - {file = "wisdem-4.0.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5870790fb8d44535db0b8e50195f4352fe050be95163026f2337e5bfc5170bd2"}, - {file = "wisdem-4.0.5-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c26d49792394ab6ff7d4a85c808b94641ee5fdc5e8d9732c4ef20342f1a140f1"}, - {file = "wisdem-4.0.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c946c169d7bd679ad7b7c89d81c58735e3bff3d79a848d3c27b2d6aa1787bc96"}, - {file = "wisdem-4.0.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9ebd315b7f4dbd93acaef36470ea7a303df02484866b5904fa0a5040729baf1a"}, - {file = "wisdem-4.0.5-cp314-cp314t-win_amd64.whl", hash = "sha256:1198f91fb5c8964bda81bda1cd6c161350536679bd03fb41166ecacd865564fe"}, - {file = "wisdem-4.0.5-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:035e242eb82b0cbf80497d487afb49d92474a96627a59684682eea479f703007"}, - {file = "wisdem-4.0.5-cp39-cp39-macosx_15_0_arm64.whl", hash = "sha256:fd68a77551832707d9ab2c5f7b5adbcb1826b5c9c1bc6baf766fc86d43da39a2"}, - {file = "wisdem-4.0.5-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:77f39e9e9d934d6ecd0aa46772b174c493f58f8c1ef95d15e978d1909e5b26ce"}, - {file = "wisdem-4.0.5-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:38a812b5bcd165ee9ccbc5b9cdcc11903488fcc5faaac043ac45867def1e4d57"}, - {file = "wisdem-4.0.5-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ec75b435f752a7de52acb2ad25eb750593e1dab8f704fae06d772923d6033017"}, - {file = "wisdem-4.0.5-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:fde662130fa928552cbe0e8a28ccb87bc066c497d50be12b52dee40bf1b15a49"}, - {file = "wisdem-4.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:441662d687e55bb0417ed73b75c6d2b63ce0f6a10d889d4a2a1a50c90e441685"}, - {file = "wisdem-4.0.5.tar.gz", hash = "sha256:2361912b9816d02f71bbe5f5852bc434d4f3d606821ecfb345c2254711081019"}, -] - -[package.dependencies] -jsonmerge = "*" -jsonschema = "*" -moorpy = ">=1.2" -numpy = "*" -openmdao = "*" -openpyxl = "*" -orbit-nrel = ">=1.2.1" -pandas = "*" -pydoe3 = "*" -pyyaml = "*" -scipy = "*" -sortedcontainers = "*" -statsmodels = ">=0.14.5" -windIO = "*" - -[package.extras] -dev = ["black", "isort", "meson", "ninja", "pre-commit", "swig"] -docs = ["numpydoc", "sphinx", "sphinx-copybutton", "sphinx-jsonschema", "sphinx_rtd_theme (>=1.3)", "sphinxcontrib-bibtex"] -gui = ["dearpygui"] -opt = ["nlopt", "pyoptsparse"] -test = ["coveralls", "pytest", "pytest-cov"] - -[[package]] -name = "xarray" -version = "2025.6.1" -description = "N-D labeled arrays and datasets in Python" -optional = false -python-versions = ">=3.10" -groups = ["main"] -markers = "python_version < \"3.11\"" -files = [ - {file = "xarray-2025.6.1-py3-none-any.whl", hash = "sha256:8b988b47f67a383bdc3b04c5db475cd165e580134c1f1943d52aee4a9c97651b"}, - {file = "xarray-2025.6.1.tar.gz", hash = "sha256:a84f3f07544634a130d7dc615ae44175419f4c77957a7255161ed99c69c7c8b0"}, -] - -[package.dependencies] -numpy = ">=1.24" -packaging = ">=23.2" -pandas = ">=2.1" - -[package.extras] -accel = ["bottleneck", "flox", "numba (>=0.54)", "numbagg", "opt_einsum", "scipy"] -complete = ["xarray[accel,etc,io,parallel,viz]"] -etc = ["sparse"] -io = ["cftime", "fsspec", "h5netcdf", "netCDF4", "pooch", "pydap ; python_version < \"3.10\"", "scipy", "zarr"] -parallel = ["dask[complete]"] -types = ["pandas-stubs", "scipy-stubs", "types-PyYAML", "types-Pygments", "types-colorama", "types-decorator", "types-defusedxml", "types-docutils", "types-networkx", "types-openpyxl", "types-pexpect", "types-psutil", "types-pycurl", "types-python-dateutil", "types-pytz", "types-setuptools"] -viz = ["cartopy", "matplotlib", "nc-time-axis", "seaborn"] - -[[package]] -name = "xarray" -version = "2026.7.0" -description = "N-D labeled arrays and datasets in Python" -optional = false -python-versions = ">=3.11" -groups = ["main"] -markers = "python_version >= \"3.11\"" -files = [ - {file = "xarray-2026.7.0-py3-none-any.whl", hash = "sha256:bf9dd130b93806dc78e90c1b7ac24851b31557b888674c53622235691cf21824"}, - {file = "xarray-2026.7.0.tar.gz", hash = "sha256:361b495928fdbf5b58d0969bb6775339019da5e93ca74d61ddf4eb5edd6ce604"}, -] - -[package.dependencies] -numpy = ">=1.26" -packaging = ">=24.2" -pandas = ">=2.2" - -[package.extras] -accel = ["bottleneck", "flox (>=0.10)", "numba (>=0.62)", "numbagg (>=0.9)", "opt_einsum", "scipy (>=1.15)"] -complete = ["xarray[accel,etc,io,parallel,viz]"] -etc = ["sparse (>=0.15)"] -io = ["cftime", "fsspec", "h5netcdf[h5py] (>=1.5.0)", "netCDF4 (>=1.6.0)", "pooch", "pydap", "scipy (>=1.15)", "zarr (>=3.0)"] -parallel = ["dask[complete]"] -types = ["pandas-stubs", "scipy-stubs", "types-PyYAML", "types-Pygments", "types-colorama", "types-decorator", "types-defusedxml", "types-docutils", "types-networkx", "types-openpyxl", "types-pexpect", "types-psutil", "types-pycurl", "types-python-dateutil", "types-pytz", "types-requests", "types-setuptools", "types-xlrd"] -viz = ["cartopy (>=0.24)", "matplotlib (>=3.10)", "nc-time-axis", "seaborn"] - [extras] dev = ["ipykernel", "ipython", "jupyter", "matplotlib", "mypy", "pytest", "ruff"] examples = ["matplotlib"] @@ -5290,4 +4277,4 @@ examples = ["matplotlib"] [metadata] lock-version = "2.1" python-versions = ">3.10,<3.15" -content-hash = "7ac8e1d1f543ba9a26138f8d453504a7894dc392ea35aebae041d2b03d170ef2" +content-hash = "6134680bc3125735b7661654808d576e9cb04da95a9fae736cb0511ba6efa6db" From 7d5d32998295d571a586755ed83a93be25f0824a Mon Sep 17 00:00:00 2001 From: misi9170 <39596329+misi9170@users.noreply.github.com> Date: Wed, 12 Aug 2026 11:28:21 -0600 Subject: [PATCH 38/52] Move floris dependency to optional group Co-authored-by: Skylar A Gering --- pyproject.toml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index 3adcf61..5b3ac26 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,6 +11,10 @@ numpy = "^2.1.1" scipy = ">=1.6" mitrotor = { git = "https://github.com/Howland-Lab/MITRotor.git"} unified-momentum-model = { git = "https://github.com/Howland-Lab/Unified-Momentum-Model.git"} +[tool.poetry.group.floris] +optional = true + +[tool.poetry.group.floris.dependencies] floris = { git = "https://github.com/NatLabRockies/floris.git", branch = "dev/v5-beta"} # [tool.poetry.group.dev.dependencies] From 79b62d8190421acfac9e6513083abaac930406b2 Mon Sep 17 00:00:00 2001 From: misi9170 Date: Wed, 12 Aug 2026 11:31:28 -0600 Subject: [PATCH 39/52] Update github test workflow to use poetry --- .github/workflows/pytest.yml | 12 +- poetry.lock | 394 +++++++++++++---------------------- 2 files changed, 155 insertions(+), 251 deletions(-) diff --git a/.github/workflows/pytest.yml b/.github/workflows/pytest.yml index 1969924..886b932 100644 --- a/.github/workflows/pytest.yml +++ b/.github/workflows/pytest.yml @@ -24,11 +24,11 @@ jobs: with: python-version: ${{ matrix.python-version }} - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install . - pip install pytest + - name: Install Poetry + uses: snok/install-poetry@v1 + + - name: Install dependencies with floris + run: poetry install --with floris - name: Run pytest - run: python -m pytest \ No newline at end of file + run: poetry run pytest \ No newline at end of file diff --git a/poetry.lock b/poetry.lock index a9b5b7b..f3c1626 100644 --- a/poetry.lock +++ b/poetry.lock @@ -6,8 +6,7 @@ version = "4.11.0" description = "High-level concurrency and networking framework on top of asyncio or Trio" optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "anyio-4.11.0-py3-none-any.whl", hash = "sha256:0287e96f4d26d4149305414d4e3bc32f0dcd0862365a4bddea19d7a1ec38c4fc"}, {file = "anyio-4.11.0.tar.gz", hash = "sha256:82a8d0b81e318cc5ce71a5f1f8b5c4e63619620b63141ef8c995fa0db95a57c4"}, @@ -28,8 +27,8 @@ version = "0.1.4" description = "Disable App Nap on macOS >= 10.9" optional = true python-versions = ">=3.6" -groups = ["main"] -markers = "extra == \"dev\" and platform_system == \"Darwin\"" +groups = ["floris"] +markers = "platform_system == \"Darwin\"" files = [ {file = "appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c"}, {file = "appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee"}, @@ -41,8 +40,7 @@ version = "25.1.0" description = "Argon2 for Python" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "argon2_cffi-25.1.0-py3-none-any.whl", hash = "sha256:fdc8b074db390fccb6eb4a3604ae7231f219aa669a2652e0f20e16ba513d5741"}, {file = "argon2_cffi-25.1.0.tar.gz", hash = "sha256:694ae5cc8a42f4c4e2bf2ca0e64e51e23a040c6a517a85074683d3959e1346c1"}, @@ -57,8 +55,7 @@ version = "25.1.0" description = "Low-level CFFI bindings for Argon2" optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "argon2_cffi_bindings-25.1.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:3d3f05610594151994ca9ccb3c771115bdb4daef161976a266f0dd8aa9996b8f"}, {file = "argon2_cffi_bindings-25.1.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:8b8efee945193e667a396cbc7b4fb7d357297d6234d30a489905d96caabde56b"}, @@ -100,8 +97,7 @@ version = "1.4.0" description = "Better dates & times for Python" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "arrow-1.4.0-py3-none-any.whl", hash = "sha256:749f0769958ebdc79c173ff0b0670d59051a535fa26e8eba02953dc19eb43205"}, {file = "arrow-1.4.0.tar.gz", hash = "sha256:ed0cc050e98001b8779e84d461b0098c4ac597e88704a655582b21d116e526d7"}, @@ -121,8 +117,7 @@ version = "3.0.0" description = "Annotate AST trees with source code positions" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2"}, {file = "asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7"}, @@ -138,8 +133,7 @@ version = "2.0.5" description = "Simple LRU cache for asyncio" optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "async_lru-2.0.5-py3-none-any.whl", hash = "sha256:ab95404d8d2605310d345932697371a5f40def0487c03d6d0ad9138de52c9943"}, {file = "async_lru-2.0.5.tar.gz", hash = "sha256:481d52ccdd27275f42c43a928b4a50c3bfb2d67af4e78b170e3e0bb39c66e5bb"}, @@ -154,7 +148,7 @@ version = "25.4.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["floris"] files = [ {file = "attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373"}, {file = "attrs-25.4.0.tar.gz", hash = "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11"}, @@ -166,8 +160,7 @@ version = "2.17.0" description = "Internationalization utilities" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2"}, {file = "babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d"}, @@ -182,8 +175,7 @@ version = "4.14.2" description = "Screen-scraping library" optional = true python-versions = ">=3.7.0" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "beautifulsoup4-4.14.2-py3-none-any.whl", hash = "sha256:5ef6fa3a8cbece8488d66985560f97ed091e22bbc4e9c2338508a9d5de6d4515"}, {file = "beautifulsoup4-4.14.2.tar.gz", hash = "sha256:2a98ab9f944a11acee9cc848508ec28d9228abfd522ef0fad6a02a72e0ded69e"}, @@ -206,8 +198,7 @@ version = "6.3.0" description = "An easy safelist-based HTML-sanitizing tool." optional = true python-versions = ">=3.10" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "bleach-6.3.0-py3-none-any.whl", hash = "sha256:fe10ec77c93ddf3d13a73b035abaac7a9f5e436513864ccdad516693213c65d6"}, {file = "bleach-6.3.0.tar.gz", hash = "sha256:6f3b91b1c0a02bb9a78b5a454c92506aa0fdf197e1d5e114d2e00c6f64306d22"}, @@ -226,8 +217,7 @@ version = "2025.10.5" description = "Python package for providing Mozilla's CA Bundle." optional = true python-versions = ">=3.7" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "certifi-2025.10.5-py3-none-any.whl", hash = "sha256:0f212c2744a9bb6de0c56639a6f68afe01ecd92d91f14ae897c4fe7bbeeef0de"}, {file = "certifi-2025.10.5.tar.gz", hash = "sha256:47c09d31ccf2acf0be3f701ea53595ee7e0b8fa08801c6624be771df09ae7b43"}, @@ -239,8 +229,7 @@ version = "2.0.0" description = "Foreign Function Interface for Python calling C code." optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44"}, {file = "cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49"}, @@ -337,8 +326,7 @@ version = "3.4.4" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = true python-versions = ">=3.7" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "charset_normalizer-3.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d"}, {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8"}, @@ -461,12 +449,12 @@ version = "0.4.6" description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -groups = ["main"] -markers = "platform_system == \"Windows\" or extra == \"dev\" and sys_platform == \"win32\"" +groups = ["main", "floris"] files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +markers = {main = "platform_system == \"Windows\"", floris = "sys_platform == \"win32\""} [[package]] name = "coloredlogs" @@ -474,7 +462,7 @@ version = "15.0.1" description = "Colored terminal output for Python's logging module" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -groups = ["main"] +groups = ["floris"] files = [ {file = "coloredlogs-15.0.1-py2.py3-none-any.whl", hash = "sha256:612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934"}, {file = "coloredlogs-15.0.1.tar.gz", hash = "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0"}, @@ -492,8 +480,7 @@ version = "0.2.3" description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "comm-0.2.3-py3-none-any.whl", hash = "sha256:c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417"}, {file = "comm-0.2.3.tar.gz", hash = "sha256:2dc8048c10962d55d7ad693be1e7045d891b7ce8d999c97963a5e3e99c055971"}, @@ -508,7 +495,7 @@ version = "1.3.0" description = "Python library for calculating contours of 2D quadrilateral grids" optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["floris"] markers = "python_version < \"3.11\"" files = [ {file = "contourpy-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:880ea32e5c774634f9fcd46504bf9f080a41ad855f4fef54f5380f5133d343c7"}, @@ -594,7 +581,7 @@ version = "1.3.3" description = "Python library for calculating contours of 2D quadrilateral grids" optional = false python-versions = ">=3.11" -groups = ["main"] +groups = ["floris"] markers = "python_version >= \"3.11\"" files = [ {file = "contourpy-1.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:709a48ef9a690e1343202916450bc48b9e51c049b089c7f79a267b46cffcdaa1"}, @@ -687,7 +674,7 @@ version = "0.12.1" description = "Composable style cycles" optional = false python-versions = ">=3.8" -groups = ["main"] +groups = ["floris"] files = [ {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, @@ -703,8 +690,7 @@ version = "1.8.17" description = "An implementation of the Debug Adapter Protocol for Python" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "debugpy-1.8.17-cp310-cp310-macosx_15_0_x86_64.whl", hash = "sha256:c41d2ce8bbaddcc0009cc73f65318eedfa3dbc88a8298081deb05389f1ab5542"}, {file = "debugpy-1.8.17-cp310-cp310-manylinux_2_34_x86_64.whl", hash = "sha256:1440fd514e1b815edd5861ca394786f90eb24960eb26d6f7200994333b1d79e3"}, @@ -744,8 +730,7 @@ version = "5.2.1" description = "Decorators for Humans" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a"}, {file = "decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360"}, @@ -757,8 +742,7 @@ version = "0.7.1" description = "XML bomb protection for Python stdlib modules" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, @@ -770,7 +754,7 @@ version = "0.4.1" description = "serialize all of Python" optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["floris"] files = [ {file = "dill-0.4.1-py3-none-any.whl", hash = "sha256:1e1ce33e978ae97fcfcff5638477032b801c46c7c65cf717f95fbc2248f79a9d"}, {file = "dill-0.4.1.tar.gz", hash = "sha256:423092df4182177d4d8ba8290c8a5b640c66ab35ec7da59ccfa00f6fa3eea5fa"}, @@ -786,8 +770,8 @@ version = "1.3.0" description = "Backport of PEP 654 (exception groups)" optional = true python-versions = ">=3.7" -groups = ["main"] -markers = "python_version < \"3.11\" and extra == \"dev\"" +groups = ["floris"] +markers = "python_version < \"3.11\"" files = [ {file = "exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10"}, {file = "exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88"}, @@ -805,8 +789,7 @@ version = "2.2.1" description = "Get the currently executing AST node of a frame, and other information" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "executing-2.2.1-py2.py3-none-any.whl", hash = "sha256:760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017"}, {file = "executing-2.2.1.tar.gz", hash = "sha256:3632cc370565f6648cc328b32435bd120a1e4ebb20c77e3fdde9a13cd1e533c4"}, @@ -821,8 +804,7 @@ version = "2.21.2" description = "Fastest Python implementation of JSON schema" optional = true python-versions = "*" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "fastjsonschema-2.21.2-py3-none-any.whl", hash = "sha256:1c797122d0a86c5cace2e54bf4e819c36223b552017172f32c5c024a6b77e463"}, {file = "fastjsonschema-2.21.2.tar.gz", hash = "sha256:b1eb43748041c880796cd077f1a07c3d94e93ae84bba5ed36800a33554ae05de"}, @@ -837,7 +819,7 @@ version = "4.6.6" description = "A controls-oriented engineering wake model." optional = false python-versions = ">=3.10, <3.15" -groups = ["main"] +groups = ["floris"] files = [] develop = false @@ -869,7 +851,7 @@ version = "4.60.1" description = "Tools to manipulate font files" optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["floris"] files = [ {file = "fonttools-4.60.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9a52f254ce051e196b8fe2af4634c2d2f02c981756c6464dc192f1b6050b4e28"}, {file = "fonttools-4.60.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c7420a2696a44650120cdd269a5d2e56a477e2bfa9d95e86229059beb1c19e15"}, @@ -965,8 +947,7 @@ version = "1.5.1" description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" optional = true python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, @@ -978,8 +959,7 @@ version = "0.16.0" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"}, {file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"}, @@ -991,8 +971,7 @@ version = "1.0.9" description = "A minimal low-level HTTP client." optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55"}, {file = "httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8"}, @@ -1014,8 +993,7 @@ version = "0.28.1" description = "The next generation HTTP client." optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"}, {file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"}, @@ -1040,7 +1018,7 @@ version = "10.0" description = "Human friendly output for text interfaces using Python" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -groups = ["main"] +groups = ["floris"] files = [ {file = "humanfriendly-10.0-py2.py3-none-any.whl", hash = "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477"}, {file = "humanfriendly-10.0.tar.gz", hash = "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc"}, @@ -1055,8 +1033,7 @@ version = "3.11" description = "Internationalized Domain Names in Applications (IDNA)" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea"}, {file = "idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902"}, @@ -1071,8 +1048,7 @@ version = "2.3.0" description = "brain-dead simple config-ini parsing" optional = true python-versions = ">=3.10" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12"}, {file = "iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730"}, @@ -1084,8 +1060,7 @@ version = "6.31.0" description = "IPython Kernel for Jupyter" optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "ipykernel-6.31.0-py3-none-any.whl", hash = "sha256:abe5386f6ced727a70e0eb0cf1da801fa7c5fa6ff82147747d5a0406cd8c94af"}, {file = "ipykernel-6.31.0.tar.gz", hash = "sha256:2372ce8bc1ff4f34e58cafed3a0feb2194b91fc7cad0fc72e79e47b45ee9e8f6"}, @@ -1119,8 +1094,7 @@ version = "8.37.0" description = "IPython: Productive Interactive Computing" optional = true python-versions = ">=3.10" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "ipython-8.37.0-py3-none-any.whl", hash = "sha256:ed87326596b878932dbcb171e3e698845434d8c61b8d8cd474bf663041a9dcf2"}, {file = "ipython-8.37.0.tar.gz", hash = "sha256:ca815841e1a41a1e6b73a0b08f3038af9b2252564d01fc405356d34033012216"}, @@ -1159,8 +1133,7 @@ version = "8.1.7" description = "Jupyter interactive widgets" optional = true python-versions = ">=3.7" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "ipywidgets-8.1.7-py3-none-any.whl", hash = "sha256:764f2602d25471c213919b8a1997df04bef869251db4ca8efba1b76b1bd9f7bb"}, {file = "ipywidgets-8.1.7.tar.gz", hash = "sha256:15f1ac050b9ccbefd45dccfbb2ef6bed0029d8278682d569d71b8dd96bee0376"}, @@ -1182,8 +1155,7 @@ version = "20.11.0" description = "Operations with ISO 8601 durations" optional = true python-versions = ">=3.7" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, @@ -1198,8 +1170,7 @@ version = "0.19.2" description = "An autocompletion tool for Python that can be used for text editors." optional = true python-versions = ">=3.6" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9"}, {file = "jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0"}, @@ -1219,8 +1190,7 @@ version = "3.1.6" description = "A very fast and expressive template engine." optional = true python-versions = ">=3.7" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"}, {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"}, @@ -1238,8 +1208,7 @@ version = "0.12.1" description = "A Python implementation of the JSON5 data format." optional = true python-versions = ">=3.8.0" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "json5-0.12.1-py3-none-any.whl", hash = "sha256:d9c9b3bc34a5f54d43c35e11ef7cb87d8bdd098c6ace87117a7b7e83e705c1d5"}, {file = "json5-0.12.1.tar.gz", hash = "sha256:b2743e77b3242f8d03c143dd975a6ec7c52e2f2afe76ed934e53503dd4ad4990"}, @@ -1254,8 +1223,7 @@ version = "3.0.0" description = "Identify specific nodes in a JSON document (RFC 6901)" optional = true python-versions = ">=3.7" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"}, {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"}, @@ -1267,8 +1235,7 @@ version = "4.25.1" description = "An implementation of JSON Schema validation for Python" optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "jsonschema-4.25.1-py3-none-any.whl", hash = "sha256:3fba0169e345c7175110351d456342c364814cfcf3b964ba4587f22915230a63"}, {file = "jsonschema-4.25.1.tar.gz", hash = "sha256:e4a9655ce0da0c0b67a085847e00a3a51449e1157f4f75e9fb5aa545e122eb85"}, @@ -1299,8 +1266,7 @@ version = "2025.9.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe"}, {file = "jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d"}, @@ -1315,8 +1281,7 @@ version = "1.1.1" description = "Jupyter metapackage. Install all the Jupyter components in one go." optional = true python-versions = "*" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "jupyter-1.1.1-py2.py3-none-any.whl", hash = "sha256:7a59533c22af65439b24bbe60373a4e95af8f16ac65a6c00820ad378e3f7cc83"}, {file = "jupyter-1.1.1.tar.gz", hash = "sha256:d55467bceabdea49d7e3624af7e33d59c37fff53ed3a350e1ac957bed731de7a"}, @@ -1336,8 +1301,7 @@ version = "8.6.3" description = "Jupyter protocol implementation and client libraries" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f"}, {file = "jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419"}, @@ -1360,8 +1324,7 @@ version = "6.6.3" description = "Jupyter terminal console" optional = true python-versions = ">=3.7" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "jupyter_console-6.6.3-py3-none-any.whl", hash = "sha256:309d33409fcc92ffdad25f0bcdf9a4a9daa61b6f341177570fdac03de5352485"}, {file = "jupyter_console-6.6.3.tar.gz", hash = "sha256:566a4bf31c87adbfadf22cdf846e3069b59a71ed5da71d6ba4d8aaad14a53539"}, @@ -1386,8 +1349,7 @@ version = "5.9.1" description = "Jupyter core package. A base package on which Jupyter projects rely." optional = true python-versions = ">=3.10" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "jupyter_core-5.9.1-py3-none-any.whl", hash = "sha256:ebf87fdc6073d142e114c72c9e29a9d7ca03fad818c5d300ce2adc1fb0743407"}, {file = "jupyter_core-5.9.1.tar.gz", hash = "sha256:4d09aaff303b9566c3ce657f580bd089ff5c91f5f89cf7d8846c3cdf465b5508"}, @@ -1407,8 +1369,7 @@ version = "0.12.0" description = "Jupyter Event System library" optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "jupyter_events-0.12.0-py3-none-any.whl", hash = "sha256:6464b2fa5ad10451c3d35fabc75eab39556ae1e2853ad0c0cc31b656731a97fb"}, {file = "jupyter_events-0.12.0.tar.gz", hash = "sha256:fc3fce98865f6784c9cd0a56a20644fc6098f21c8c33834a8d9fe383c17e554b"}, @@ -1435,8 +1396,7 @@ version = "2.3.0" description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "jupyter_lsp-2.3.0-py3-none-any.whl", hash = "sha256:e914a3cb2addf48b1c7710914771aaf1819d46b2e5a79b0f917b5478ec93f34f"}, {file = "jupyter_lsp-2.3.0.tar.gz", hash = "sha256:458aa59339dc868fb784d73364f17dbce8836e906cd75fd471a325cba02e0245"}, @@ -1451,8 +1411,7 @@ version = "2.17.0" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "jupyter_server-2.17.0-py3-none-any.whl", hash = "sha256:e8cb9c7db4251f51ed307e329b81b72ccf2056ff82d50524debde1ee1870e13f"}, {file = "jupyter_server-2.17.0.tar.gz", hash = "sha256:c38ea898566964c888b4772ae1ed58eca84592e88251d2cfc4d171f81f7e99d5"}, @@ -1489,8 +1448,7 @@ version = "0.5.3" description = "A Jupyter Server Extension Providing Terminals." optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "jupyter_server_terminals-0.5.3-py3-none-any.whl", hash = "sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa"}, {file = "jupyter_server_terminals-0.5.3.tar.gz", hash = "sha256:5ae0295167220e9ace0edcfdb212afd2b01ee8d179fe6f23c899590e9b8a5269"}, @@ -1510,8 +1468,7 @@ version = "4.4.10" description = "JupyterLab computational environment" optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "jupyterlab-4.4.10-py3-none-any.whl", hash = "sha256:65939ab4c8dcd0c42185c2d0d1a9d60b254dc8c46fc4fdb286b63c51e9358e07"}, {file = "jupyterlab-4.4.10.tar.gz", hash = "sha256:521c017508af4e1d6d9d8a9d90f47a11c61197ad63b2178342489de42540a615"}, @@ -1546,8 +1503,7 @@ version = "0.3.0" description = "Pygments theme using JupyterLab CSS variables" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780"}, {file = "jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d"}, @@ -1559,8 +1515,7 @@ version = "2.28.0" description = "A set of server components for JupyterLab and JupyterLab like applications." optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "jupyterlab_server-2.28.0-py3-none-any.whl", hash = "sha256:e4355b148fdcf34d312bbbc80f22467d6d20460e8b8736bf235577dd18506968"}, {file = "jupyterlab_server-2.28.0.tar.gz", hash = "sha256:35baa81898b15f93573e2deca50d11ac0ae407ebb688299d3a5213265033712c"}, @@ -1586,8 +1541,7 @@ version = "3.0.15" description = "Jupyter interactive widgets for JupyterLab" optional = true python-versions = ">=3.7" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "jupyterlab_widgets-3.0.15-py3-none-any.whl", hash = "sha256:d59023d7d7ef71400d51e6fee9a88867f6e65e10a4201605d2d7f3e8f012a31c"}, {file = "jupyterlab_widgets-3.0.15.tar.gz", hash = "sha256:2920888a0c2922351a9202817957a68c07d99673504d6cd37345299e971bb08b"}, @@ -1599,7 +1553,7 @@ version = "1.4.9" description = "A fast implementation of the Cassowary constraint solver" optional = false python-versions = ">=3.10" -groups = ["main"] +groups = ["floris"] files = [ {file = "kiwisolver-1.4.9-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b4b4d74bda2b8ebf4da5bd42af11d02d04428b2c32846e4c2c93219df8a7987b"}, {file = "kiwisolver-1.4.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fb3b8132019ea572f4611d770991000d7f58127560c4889729248eb5852a102f"}, @@ -1710,8 +1664,7 @@ version = "1.3.1" description = "a modern parsing library" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "lark-1.3.1-py3-none-any.whl", hash = "sha256:c629b661023a014c37da873b4ff58a817398d12635d3bbb2c5a03be7fe5d1e12"}, {file = "lark-1.3.1.tar.gz", hash = "sha256:b426a7a6d6d53189d318f2b6236ab5d6429eaf09259f1ca33eb716eed10d2905"}, @@ -1729,8 +1682,7 @@ version = "3.0.3" description = "Safely add untrusted strings to HTML/XML markup." optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559"}, {file = "markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419"}, @@ -1829,7 +1781,7 @@ version = "3.10.7" description = "Python plotting package" optional = false python-versions = ">=3.10" -groups = ["main"] +groups = ["floris"] files = [ {file = "matplotlib-3.10.7-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:7ac81eee3b7c266dd92cee1cd658407b16c57eed08c7421fa354ed68234de380"}, {file = "matplotlib-3.10.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:667ecd5d8d37813a845053d8f5bf110b534c3c9f30e69ebd25d4701385935a6d"}, @@ -1908,8 +1860,7 @@ version = "0.2.1" description = "Inline Matplotlib backend for Jupyter" optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "matplotlib_inline-0.2.1-py3-none-any.whl", hash = "sha256:d56ce5156ba6085e00a9d54fead6ed29a9c47e215cd1bba2e976ef39f5710a76"}, {file = "matplotlib_inline-0.2.1.tar.gz", hash = "sha256:e1ee949c340d771fc39e241ea75683deb94762c8fa5f2927ec57c83c4dffa9fe"}, @@ -1927,8 +1878,7 @@ version = "3.1.4" description = "A sane and fast Markdown parser with useful plugins and renderers" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "mistune-3.1.4-py3-none-any.whl", hash = "sha256:93691da911e5d9d2e23bc54472892aff676df27a75274962ff9edc210364266d"}, {file = "mistune-3.1.4.tar.gz", hash = "sha256:b5a7f801d389f724ec702840c11d8fc48f2b33519102fc7ee739e8177b672164"}, @@ -1965,7 +1915,7 @@ version = "0.70.19" description = "better multiprocessing and multithreading in Python" optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["floris"] files = [ {file = "multiprocess-0.70.19-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:02e5c35d7d6cd2bdc89c1858867f7bde4012837411023a4696c148c1bdd7c80e"}, {file = "multiprocess-0.70.19-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:79576c02d1207ec405b00cabf2c643c36070800cca433860e14539df7818b2aa"}, @@ -1994,8 +1944,7 @@ version = "1.18.2" description = "Optional static typing for Python" optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "mypy-1.18.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c1eab0cf6294dafe397c261a75f96dc2c31bffe3b944faa24db5def4e2b0f77c"}, {file = "mypy-1.18.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7a780ca61fc239e4865968ebc5240bb3bf610ef59ac398de9a7421b54e4a207e"}, @@ -2056,8 +2005,7 @@ version = "1.1.0" description = "Type system extensions for programs checked with the mypy type checker." optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505"}, {file = "mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558"}, @@ -2069,8 +2017,7 @@ version = "0.10.2" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." optional = true python-versions = ">=3.9.0" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "nbclient-0.10.2-py3-none-any.whl", hash = "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d"}, {file = "nbclient-0.10.2.tar.gz", hash = "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193"}, @@ -2093,8 +2040,7 @@ version = "7.16.6" description = "Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script. nbconvert can be used both as a Python library (`import nbconvert`) or as a command line tool (invoked as `jupyter nbconvert ...`)." optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "nbconvert-7.16.6-py3-none-any.whl", hash = "sha256:1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b"}, {file = "nbconvert-7.16.6.tar.gz", hash = "sha256:576a7e37c6480da7b8465eefa66c17844243816ce1ccc372633c6b71c3c0f582"}, @@ -2131,8 +2077,7 @@ version = "5.10.4" description = "The Jupyter Notebook format" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b"}, {file = "nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a"}, @@ -2154,8 +2099,7 @@ version = "1.6.0" description = "Patch asyncio to allow nested event loops" optional = true python-versions = ">=3.5" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c"}, {file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"}, @@ -2167,8 +2111,7 @@ version = "7.4.7" description = "Jupyter Notebook - A web-based notebook environment for interactive computing" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "notebook-7.4.7-py3-none-any.whl", hash = "sha256:362b7c95527f7dd3c4c84d410b782872fd9c734fb2524c11dd92758527b6eda6"}, {file = "notebook-7.4.7.tar.gz", hash = "sha256:3f0a04027dfcee8a876de48fba13ab77ec8c12f72f848a222ed7f5081b9e342a"}, @@ -2192,8 +2135,7 @@ version = "0.2.4" description = "A shim layer for notebook traits and config" optional = true python-versions = ">=3.7" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef"}, {file = "notebook_shim-0.2.4.tar.gz", hash = "sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb"}, @@ -2211,7 +2153,7 @@ version = "2.14.1" description = "Fast numerical expression evaluator for NumPy" optional = false python-versions = ">=3.10" -groups = ["main"] +groups = ["floris"] markers = "python_version < \"3.11\"" files = [ {file = "numexpr-2.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d0fab3fd06a04f6b86102552b26aa5d85e20ac7d8296c15764c726eeabae6cc8"}, @@ -2282,7 +2224,7 @@ version = "2.14.2" description = "Fast numerical expression evaluator for NumPy" optional = false python-versions = ">=3.11" -groups = ["main"] +groups = ["floris"] markers = "python_version >= \"3.11\"" files = [ {file = "numexpr-2.14.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2aa65ddc2243f19c6915f34ee0978b4a2df20f297230a793c4ee6d55f3472599"}, @@ -2342,7 +2284,7 @@ version = "2.2.6" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.10" -groups = ["main"] +groups = ["main", "floris"] markers = "python_version < \"3.11\"" files = [ {file = "numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb"}, @@ -2408,7 +2350,7 @@ version = "2.3.4" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.11" -groups = ["main"] +groups = ["main", "floris"] markers = "python_version >= \"3.11\"" files = [ {file = "numpy-2.3.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e78aecd2800b32e8347ce49316d3eaf04aed849cd5b38e0af39f829a4e59f5eb"}, @@ -2493,8 +2435,8 @@ version = "7.7.0" description = "A decorator to automatically detect mismatch when overriding a method." optional = true python-versions = ">=3.6" -groups = ["main"] -markers = "python_version <= \"3.11\" and extra == \"dev\"" +groups = ["floris"] +markers = "python_version <= \"3.11\"" files = [ {file = "overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49"}, {file = "overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a"}, @@ -2506,7 +2448,7 @@ version = "25.0" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" -groups = ["main"] +groups = ["floris"] files = [ {file = "packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484"}, {file = "packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"}, @@ -2518,7 +2460,7 @@ version = "2.3.3" description = "Powerful data structures for data analysis, time series, and statistics" optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["floris"] markers = "python_version < \"3.11\"" files = [ {file = "pandas-2.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:376c6446ae31770764215a6c937f72d917f214b43560603cd60da6408f183b6c"}, @@ -2615,7 +2557,7 @@ version = "3.0.5" description = "Powerful data structures for data analysis, time series, and statistics" optional = false python-versions = ">=3.11" -groups = ["main"] +groups = ["floris"] markers = "python_version >= \"3.11\"" files = [ {file = "pandas-3.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2946e77e4a53cd248cbde631a12f0e51c8324ce354c3eba4d20147c1ad6f4282"}, @@ -2702,8 +2644,7 @@ version = "1.5.1" description = "Utilities for writing pandoc filters in python" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc"}, {file = "pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e"}, @@ -2715,8 +2656,7 @@ version = "0.8.5" description = "A Python Parser" optional = true python-versions = ">=3.6" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "parso-0.8.5-py2.py3-none-any.whl", hash = "sha256:646204b5ee239c396d040b90f9e272e9a8017c630092bf59980beb62fd033887"}, {file = "parso-0.8.5.tar.gz", hash = "sha256:034d7354a9a018bdce352f48b2a8a450f05e9d6ee85db84764e9b6bd96dafe5a"}, @@ -2732,7 +2672,7 @@ version = "0.3.5" description = "parallel graph management and execution in heterogeneous computing" optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["floris"] files = [ {file = "pathos-0.3.5-py3-none-any.whl", hash = "sha256:c95b04103c40a16c08db69cd4b5c52624d55208beadf1348681edece809ec4f8"}, {file = "pathos-0.3.5.tar.gz", hash = "sha256:8fe041b8545c5d3880a038f866022bdebf935e5cf68f56ed3407cb7e65193a61"}, @@ -2750,8 +2690,7 @@ version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, @@ -2763,8 +2702,8 @@ version = "4.9.0" description = "Pexpect allows easy control of interactive console applications." optional = true python-versions = "*" -groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"emscripten\" and extra == \"dev\"" +groups = ["floris"] +markers = "sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"}, @@ -2779,7 +2718,7 @@ version = "12.0.0" description = "Python Imaging Library (fork)" optional = false python-versions = ">=3.10" -groups = ["main"] +groups = ["floris"] files = [ {file = "pillow-12.0.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:3adfb466bbc544b926d50fe8f4a4e6abd8c6bffd28a26177594e6e9b2b76572b"}, {file = "pillow-12.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1ac11e8ea4f611c3c0147424eae514028b5e9077dd99ab91e1bd7bc33ff145e1"}, @@ -2888,8 +2827,7 @@ version = "4.5.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = true python-versions = ">=3.10" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "platformdirs-4.5.0-py3-none-any.whl", hash = "sha256:e578a81bb873cbb89a41fcc904c7ef523cc18284b7e3b3ccf06aca1403b7ebd3"}, {file = "platformdirs-4.5.0.tar.gz", hash = "sha256:70ddccdd7c99fc5942e9fc25636a8b34d04c24b335100223152c2803e4063312"}, @@ -2906,8 +2844,7 @@ version = "1.6.0" description = "plugin and hook calling mechanisms for python" optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746"}, {file = "pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3"}, @@ -2960,7 +2897,7 @@ version = "0.3.7" description = "utilities for filesystem exploration and automated builds" optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["floris"] files = [ {file = "pox-0.3.7-py3-none-any.whl", hash = "sha256:82a495249d13371314c1a5b5626a115e067ef5215d49530bf5efa37fbc25b56a"}, {file = "pox-0.3.7.tar.gz", hash = "sha256:0652f6f2103fe6d4ba638beb6fa8d3e8a68fd44bcb63315c614118515bcc3afb"}, @@ -2972,7 +2909,7 @@ version = "1.7.8" description = "distributed and parallel Python" optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["floris"] files = [ {file = "ppft-1.7.8-py3-none-any.whl", hash = "sha256:d3e0e395215b14afc3dd5adfc032ccecfda2d4ed50dc7ded076cd1d215442843"}, {file = "ppft-1.7.8.tar.gz", hash = "sha256:5f696d4f397ae9b0af39b1faffb31957c51dfbc5a3815856472d4f4e872937ee"}, @@ -2987,8 +2924,7 @@ version = "0.23.1" description = "Python client for the Prometheus monitoring system." optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "prometheus_client-0.23.1-py3-none-any.whl", hash = "sha256:dd1913e6e76b59cfe44e7a4b83e01afc9873c1bdfd2ed8739f1e76aeca115f99"}, {file = "prometheus_client-0.23.1.tar.gz", hash = "sha256:6ae8f9081eaaaf153a2e959d2e6c4f4fb57b12ef76c8c7980202f1e57b48b2ce"}, @@ -3003,8 +2939,7 @@ version = "3.0.52" description = "Library for building powerful interactive command lines in Python" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "prompt_toolkit-3.0.52-py3-none-any.whl", hash = "sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955"}, {file = "prompt_toolkit-3.0.52.tar.gz", hash = "sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855"}, @@ -3019,8 +2954,7 @@ version = "7.1.2" description = "Cross-platform lib for process and system monitoring." optional = true python-versions = ">=3.6" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "psutil-7.1.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0cc5c6889b9871f231ed5455a9a02149e388fffcb30b607fb7a8896a6d95f22e"}, {file = "psutil-7.1.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8e9e77a977208d84aa363a4a12e0f72189d58bbf4e46b49aae29a2c6e93ef206"}, @@ -3053,8 +2987,8 @@ version = "0.7.0" description = "Run a subprocess in a pseudo terminal" optional = true python-versions = "*" -groups = ["main"] -markers = "extra == \"dev\" and (os_name != \"nt\" or sys_platform != \"win32\" and sys_platform != \"emscripten\")" +groups = ["floris"] +markers = "os_name != \"nt\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, @@ -3066,8 +3000,7 @@ version = "0.2.3" description = "Safely evaluate AST nodes without side effects" optional = true python-versions = "*" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0"}, {file = "pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42"}, @@ -3082,8 +3015,8 @@ version = "2.23" description = "C parser in Python" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"dev\" and implementation_name != \"PyPy\"" +groups = ["floris"] +markers = "implementation_name != \"PyPy\"" files = [ {file = "pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934"}, {file = "pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2"}, @@ -3095,8 +3028,7 @@ version = "2.19.2" description = "Pygments is a syntax highlighting package written in Python." optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b"}, {file = "pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887"}, @@ -3111,7 +3043,7 @@ version = "3.2.5" description = "pyparsing - Classes and methods to define and execute parsing grammars" optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["floris"] files = [ {file = "pyparsing-3.2.5-py3-none-any.whl", hash = "sha256:e38a4f02064cf41fe6593d328d0512495ad1f3d8a91c4f73fc401b3079a59a5e"}, {file = "pyparsing-3.2.5.tar.gz", hash = "sha256:2df8d5b7b2802ef88e8d016a2eb9c7aeaa923529cd251ed0fe4608275d4105b6"}, @@ -3126,7 +3058,7 @@ version = "3.5.6" description = "A python implementation of GNU readline." optional = false python-versions = ">=3.8" -groups = ["main"] +groups = ["floris"] markers = "sys_platform == \"win32\"" files = [ {file = "pyreadline3-3.5.6-py3-none-any.whl", hash = "sha256:8449b734232e42a5dcd74048e39b60db2839a4c38cf3ae2bf7707d58b5389c0d"}, @@ -3142,8 +3074,7 @@ version = "7.4.4" description = "pytest: simple powerful testing with Python" optional = true python-versions = ">=3.7" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, @@ -3166,7 +3097,7 @@ version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -groups = ["main"] +groups = ["floris"] files = [ {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, @@ -3181,8 +3112,7 @@ version = "4.0.0" description = "JSON Log Formatter for the Python Logging Package" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "python_json_logger-4.0.0-py3-none-any.whl", hash = "sha256:af09c9daf6a813aa4cc7180395f50f2a9e5fa056034c9953aec92e381c5ba1e2"}, {file = "python_json_logger-4.0.0.tar.gz", hash = "sha256:f58e68eb46e1faed27e0f574a55a0455eecd7b8a5b88b85a784519ba3cff047f"}, @@ -3197,7 +3127,7 @@ version = "2026.3.post1" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" -groups = ["main"] +groups = ["floris"] markers = "python_version < \"3.11\"" files = [ {file = "pytz-2026.3.post1-py2.py3-none-any.whl", hash = "sha256:dd95840dd199baea12d9cc096a1d452caa6596a1c1e4b5f3dbd1541855d5e815"}, @@ -3210,8 +3140,8 @@ version = "3.0.2" description = "Pseudo terminal support for Windows from Python." optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"dev\" and os_name == \"nt\"" +groups = ["floris"] +markers = "os_name == \"nt\"" files = [ {file = "pywinpty-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:65db57fd3387d71e8372b6a54269cbcd0f6dfa6d4616a29e0af749ec19f5c558"}, {file = "pywinpty-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:327790d70e4c841ebd9d0f295a780177149aeb405bca44c7115a3de5c2054b23"}, @@ -3230,7 +3160,7 @@ version = "6.0.3" description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.8" -groups = ["main"] +groups = ["main", "floris"] files = [ {file = "PyYAML-6.0.3-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:c2514fceb77bc5e7a2f7adfaa1feb2fb311607c9cb518dbc378688ec73d8292f"}, {file = "PyYAML-6.0.3-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c57bb8c96f6d1808c030b1687b9b5fb476abaa47f0db9c0101f5e9f394e97f4"}, @@ -3313,8 +3243,7 @@ version = "27.1.0" description = "Python bindings for 0MQ" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "pyzmq-27.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:508e23ec9bc44c0005c4946ea013d9317ae00ac67778bd47519fdf5a0e930ff4"}, {file = "pyzmq-27.1.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:507b6f430bdcf0ee48c0d30e734ea89ce5567fd7b8a0f0044a369c176aa44556"}, @@ -3419,8 +3348,7 @@ version = "0.37.0" description = "JSON Referencing + Python" optional = true python-versions = ">=3.10" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231"}, {file = "referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8"}, @@ -3437,8 +3365,7 @@ version = "2.32.5" description = "Python HTTP for Humans." optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6"}, {file = "requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf"}, @@ -3460,8 +3387,7 @@ version = "0.1.4" description = "A pure python RFC3339 validator" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, @@ -3476,8 +3402,7 @@ version = "0.1.1" description = "Pure python rfc3986 validator" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9"}, {file = "rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"}, @@ -3489,8 +3414,7 @@ version = "1.1.0" description = "Helper functions to syntactically validate strings according to RFC 3987." optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "rfc3987_syntax-1.1.0-py3-none-any.whl", hash = "sha256:6c3d97604e4c5ce9f714898e05401a0445a641cfa276432b0a648c80856f6a3f"}, {file = "rfc3987_syntax-1.1.0.tar.gz", hash = "sha256:717a62cbf33cffdd16dfa3a497d81ce48a660ea691b1ddd7be710c22f00b4a0d"}, @@ -3508,8 +3432,7 @@ version = "0.28.0" description = "Python bindings to Rust's persistent data structures (rpds)" optional = true python-versions = ">=3.10" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "rpds_py-0.28.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:7b6013db815417eeb56b2d9d7324e64fcd4fa289caeee6e7a78b2e11fc9b438a"}, {file = "rpds_py-0.28.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1a4c6b05c685c0c03f80dabaeb73e74218c49deea965ca63f76a752807397207"}, @@ -3634,8 +3557,7 @@ version = "0.1.15" description = "An extremely fast Python linter and code formatter, written in Rust." optional = true python-versions = ">=3.7" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "ruff-0.1.15-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:5fe8d54df166ecc24106db7dd6a68d44852d14eb0729ea4672bb4d96c320b7df"}, {file = "ruff-0.1.15-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6f0bfbb53c4b4de117ac4d6ddfd33aa5fc31beeaa21d23c45c6dd249faf9126f"}, @@ -3662,7 +3584,7 @@ version = "1.13.1" description = "Fundamental algorithms for scientific computing in Python" optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["main", "floris"] markers = "python_version < \"3.11\"" files = [ {file = "scipy-1.13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:20335853b85e9a49ff7572ab453794298bcf0354d8068c5f6775a0eabf350aca"}, @@ -3706,7 +3628,7 @@ version = "1.16.3" description = "Fundamental algorithms for scientific computing in Python" optional = false python-versions = ">=3.11" -groups = ["main"] +groups = ["main", "floris"] markers = "python_version >= \"3.11\"" files = [ {file = "scipy-1.16.3-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:40be6cf99e68b6c4321e9f8782e7d5ff8265af28ef2cd56e9c9b2638fa08ad97"}, @@ -3786,8 +3708,7 @@ version = "1.8.3" description = "Send file to trash natively under Mac OS X, Windows and Linux" optional = true python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "Send2Trash-1.8.3-py3-none-any.whl", hash = "sha256:0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9"}, {file = "Send2Trash-1.8.3.tar.gz", hash = "sha256:b18e7a3966d99871aefeb00cfbcfdced55ce4871194810fc71f4aa484b953abf"}, @@ -3804,8 +3725,7 @@ version = "80.9.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922"}, {file = "setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c"}, @@ -3826,7 +3746,7 @@ version = "2.1.2" description = "Manipulation and analysis of geometric objects" optional = false python-versions = ">=3.10" -groups = ["main"] +groups = ["floris"] files = [ {file = "shapely-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7ae48c236c0324b4e139bea88a306a04ca630f49be66741b340729d380d8f52f"}, {file = "shapely-2.1.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eba6710407f1daa8e7602c347dfc94adc02205ec27ed956346190d66579eb9ea"}, @@ -3900,7 +3820,7 @@ version = "1.17.0" description = "Python 2 and 3 compatibility utilities" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -groups = ["main"] +groups = ["floris"] files = [ {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, @@ -3912,8 +3832,7 @@ version = "1.3.1" description = "Sniff out which async library your code is running under" optional = true python-versions = ">=3.7" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, @@ -3925,8 +3844,7 @@ version = "2.8" description = "A modern CSS selector implementation for Beautiful Soup." optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "soupsieve-2.8-py3-none-any.whl", hash = "sha256:0cc76456a30e20f5d7f2e14a98a4ae2ee4e5abdc7c5ea0aafe795f344bc7984c"}, {file = "soupsieve-2.8.tar.gz", hash = "sha256:e2dd4a40a628cb5f28f6d4b0db8800b8f581b65bb380b97de22ba5ca8d72572f"}, @@ -3938,8 +3856,7 @@ version = "0.6.3" description = "Extract data from python stack frames and tracebacks for informative displays" optional = true python-versions = "*" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, @@ -3959,8 +3876,7 @@ version = "0.18.1" description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0"}, {file = "terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e"}, @@ -3982,8 +3898,7 @@ version = "1.4.0" description = "A tiny CSS parser" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289"}, {file = "tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7"}, @@ -4002,8 +3917,8 @@ version = "2.3.0" description = "A lil' TOML parser" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "python_version < \"3.11\" and extra == \"dev\"" +groups = ["floris"] +markers = "python_version < \"3.11\"" files = [ {file = "tomli-2.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:88bd15eb972f3664f5ed4b57c1634a97153b4bac4479dcb6a495f41921eb7f45"}, {file = "tomli-2.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:883b1c0d6398a6a9d29b508c331fa56adbcdff647f6ace4dfca0f50e90dfd0ba"}, @@ -4055,8 +3970,7 @@ version = "6.5.2" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "tornado-6.5.2-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:2436822940d37cde62771cff8774f4f00b3c8024fe482e16ca8387b8a2724db6"}, {file = "tornado-6.5.2-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:583a52c7aa94ee046854ba81d9ebb6c81ec0fd30386d96f7640c96dad45a03ef"}, @@ -4100,8 +4014,7 @@ version = "5.14.3" description = "Traitlets Python configuration system" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"}, {file = "traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7"}, @@ -4117,8 +4030,7 @@ version = "4.15.0" description = "Backported and Experimental Type Hints for Python 3.9+" optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548"}, {file = "typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"}, @@ -4130,8 +4042,7 @@ version = "2025.2" description = "Provider of IANA time zone data" optional = false python-versions = ">=2" -groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or extra == \"dev\" or python_version < \"3.11\"" +groups = ["floris"] files = [ {file = "tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8"}, {file = "tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9"}, @@ -4171,8 +4082,7 @@ version = "1.3.0" description = "RFC 6570 URI Template Processor" optional = true python-versions = ">=3.7" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, @@ -4187,8 +4097,7 @@ version = "2.5.0" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc"}, {file = "urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760"}, @@ -4206,8 +4115,7 @@ version = "0.2.14" description = "Measures the displayed width of unicode strings in a terminal" optional = true python-versions = ">=3.6" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "wcwidth-0.2.14-py2.py3-none-any.whl", hash = "sha256:a7bb560c8aee30f9957e5f9895805edd20602f2d7f720186dfd906e82b4982e1"}, {file = "wcwidth-0.2.14.tar.gz", hash = "sha256:4d478375d31bc5395a3c55c40ccdf3354688364cd61c4f6adacaa9215d0b3605"}, @@ -4219,8 +4127,7 @@ version = "24.11.1" description = "A library for working with the color formats defined by HTML and CSS." optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "webcolors-24.11.1-py3-none-any.whl", hash = "sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9"}, {file = "webcolors-24.11.1.tar.gz", hash = "sha256:ecb3d768f32202af770477b8b65f318fa4f566c22948673a977b00d589dd80f6"}, @@ -4232,8 +4139,7 @@ version = "0.5.1" description = "Character encoding aliases for legacy web content" optional = true python-versions = "*" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, @@ -4245,8 +4151,7 @@ version = "1.9.0" description = "WebSocket client for Python with low level API options" optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "websocket_client-1.9.0-py3-none-any.whl", hash = "sha256:af248a825037ef591efbf6ed20cc5faa03d3b47b9e5a2230a529eeee1c1fc3ef"}, {file = "websocket_client-1.9.0.tar.gz", hash = "sha256:9e813624b6eb619999a97dc7958469217c3176312b3a16a4bd1bc7e08a46ec98"}, @@ -4263,18 +4168,17 @@ version = "4.0.14" description = "Jupyter interactive widgets for Jupyter Notebook" optional = true python-versions = ">=3.7" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["floris"] files = [ {file = "widgetsnbextension-4.0.14-py3-none-any.whl", hash = "sha256:4875a9eaf72fbf5079dc372a51a9f268fc38d46f767cbf85c43a36da5cb9b575"}, {file = "widgetsnbextension-4.0.14.tar.gz", hash = "sha256:a3629b04e3edb893212df862038c7232f62973373869db5084aed739b437b5af"}, ] [extras] -dev = ["ipykernel", "ipython", "jupyter", "matplotlib", "mypy", "pytest", "ruff"] -examples = ["matplotlib"] +dev = [] +examples = [] [metadata] lock-version = "2.1" python-versions = ">3.10,<3.15" -content-hash = "6134680bc3125735b7661654808d576e9cb04da95a9fae736cb0511ba6efa6db" +content-hash = "f275cac88c9f5dc8cbc404f82c8614903789b00dfbdafb02511bcf383b65e5aa" From 1f032310180ee746a1055dff26634a60166a9fa2 Mon Sep 17 00:00:00 2001 From: misi9170 <39596329+misi9170@users.noreply.github.com> Date: Wed, 12 Aug 2026 11:54:48 -0600 Subject: [PATCH 40/52] Update .github/workflows/pytest.yml to point to main branch Co-authored-by: Skylar A Gering --- .github/workflows/pytest.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pytest.yml b/.github/workflows/pytest.yml index 886b932..d60d176 100644 --- a/.github/workflows/pytest.yml +++ b/.github/workflows/pytest.yml @@ -4,7 +4,7 @@ on: push: pull_request: branches: - - master + - main jobs: test: From a6bd74ea835aff07c4a69b4b11690b3638f278ae Mon Sep 17 00:00:00 2001 From: misi9170 <39596329+misi9170@users.noreply.github.com> Date: Wed, 12 Aug 2026 11:55:40 -0600 Subject: [PATCH 41/52] Apply suggestion from @skygering Co-authored-by: Skylar A Gering --- .github/workflows/pytest.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/pytest.yml b/.github/workflows/pytest.yml index d60d176..8f4f476 100644 --- a/.github/workflows/pytest.yml +++ b/.github/workflows/pytest.yml @@ -2,6 +2,8 @@ name: Pytest on: push: + branches: + - main pull_request: branches: - main From a7a497bffd039eb482aa778c3b0be4d8452836c4 Mon Sep 17 00:00:00 2001 From: misi9170 <39596329+misi9170@users.noreply.github.com> Date: Wed, 12 Aug 2026 12:17:24 -0600 Subject: [PATCH 42/52] Update .github/workflows/pytest.yml Co-authored-by: Skylar A Gering --- .github/workflows/pytest.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pytest.yml b/.github/workflows/pytest.yml index 8f4f476..24d5eb8 100644 --- a/.github/workflows/pytest.yml +++ b/.github/workflows/pytest.yml @@ -15,7 +15,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"] + python-version: ["3.10", "3.11", "3.12", "3.13"] steps: - name: Checkout code From 5b1968820224de87d5438fc14726b96a7b8d42ec Mon Sep 17 00:00:00 2001 From: Skylar A Gering Date: Wed, 12 Aug 2026 14:38:00 -0400 Subject: [PATCH 43/52] Update pyproject.toml --- pyproject.toml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 5b3ac26..d044168 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,7 +24,14 @@ mypy = { version = "^1.5.1", optional = true} pytest = { version = "^7.4.2", optional = true} ruff = { version = "^0.1.7", optional = true} ipykernel = { version = "^6.25.1", optional = true} -matplotlib = { version = "^3.9.2", optional = true} +[tool.poetry.group.dev.dependencies] +ipython = { version = "^8"} +jupyter = { version = "^1.0.0"} +mypy = { version = "^1.5.1"} +pytest = { version = "^7.4.2"} +ruff = { version = "^0.1.7"} +ipykernel = { version = "^6.25.1"} +matplotlib = { version = "^3.9.2"} [tool.poetry.extras] dev = ["ipython", "jupyter", "mypy", "pytest", "ruff", "ipykernel", "matplotlib"] From 754b052e889ac5aec5e284e5dc85bbfea65661df Mon Sep 17 00:00:00 2001 From: Skylar A Gering Date: Wed, 12 Aug 2026 14:41:33 -0400 Subject: [PATCH 44/52] Apply suggestion from @skygering --- .github/workflows/pytest.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pytest.yml b/.github/workflows/pytest.yml index 24d5eb8..d52a32a 100644 --- a/.github/workflows/pytest.yml +++ b/.github/workflows/pytest.yml @@ -15,7 +15,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.10", "3.11", "3.12", "3.13"] + python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] steps: - name: Checkout code From 4e26a0da404e75667cb50ebca9339e4bf5855b14 Mon Sep 17 00:00:00 2001 From: Skylar A Gering Date: Wed, 12 Aug 2026 14:42:52 -0400 Subject: [PATCH 45/52] Apply suggestion from @skygering --- pyproject.toml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index d044168..c0ff9ea 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,13 +17,6 @@ optional = true [tool.poetry.group.floris.dependencies] floris = { git = "https://github.com/NatLabRockies/floris.git", branch = "dev/v5-beta"} -# [tool.poetry.group.dev.dependencies] -ipython = { version = "^8", optional = true} -jupyter = { version = "^1.0.0", optional = true} -mypy = { version = "^1.5.1", optional = true} -pytest = { version = "^7.4.2", optional = true} -ruff = { version = "^0.1.7", optional = true} -ipykernel = { version = "^6.25.1", optional = true} [tool.poetry.group.dev.dependencies] ipython = { version = "^8"} jupyter = { version = "^1.0.0"} From d0e4140434930628ed764cc6758c8c56499f253b Mon Sep 17 00:00:00 2001 From: Skylar A Gering Date: Wed, 12 Aug 2026 14:43:24 -0400 Subject: [PATCH 46/52] Apply suggestion from @skygering --- mitwindfarm/Rotor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mitwindfarm/Rotor.py b/mitwindfarm/Rotor.py index 3d9a154..8b3c189 100644 --- a/mitwindfarm/Rotor.py +++ b/mitwindfarm/Rotor.py @@ -575,7 +575,7 @@ def compute_x0_with_TI(rotor_solution: RotorSolution, alpha=2.32, beta=0.1403): # Compute near wake length x0 and return x0 = ( (np.cos(yaw_eff) * (Us + u4)) / - ((2*beta) * np.abs(Us - u4) + 4 * alpha * rotor_solution.TI) + ((2*beta_s) * np.abs(Us - u4) + 4 * alpha * rotor_solution.TI) * np.sqrt(((1 - a) * np.cos(yaw_eff) * Us)/(Us + u4)) ) From 08e7693ecf2e913ff25aaa1d7b77f0297f969e5d Mon Sep 17 00:00:00 2001 From: Skylar A Gering Date: Wed, 12 Aug 2026 14:43:42 -0400 Subject: [PATCH 47/52] Apply suggestion from @skygering --- mitwindfarm/Rotor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mitwindfarm/Rotor.py b/mitwindfarm/Rotor.py index 8b3c189..0ac39c6 100644 --- a/mitwindfarm/Rotor.py +++ b/mitwindfarm/Rotor.py @@ -562,7 +562,7 @@ def residual( return e_an, e_u4, e_v4, e_x0, e_dp -def compute_x0_with_TI(rotor_solution: RotorSolution, alpha=2.32, beta=0.1403): +def compute_x0_with_TI(rotor_solution: RotorSolution, alpha=2.32, beta_s=0.1403): # Extract quantities from rotor solution for ease of use and documentation Us = rotor_solution.REWS From 4499f946a8ca34a4de91e29cd1c8ed43d4cb2a6d Mon Sep 17 00:00:00 2001 From: Skylar A Gering Date: Wed, 12 Aug 2026 14:44:03 -0400 Subject: [PATCH 48/52] Apply suggestion from @skygering --- mitwindfarm/Rotor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mitwindfarm/Rotor.py b/mitwindfarm/Rotor.py index 0ac39c6..39543fe 100644 --- a/mitwindfarm/Rotor.py +++ b/mitwindfarm/Rotor.py @@ -238,7 +238,7 @@ def __init__(self, rotor_grid=None, beta=0.1403, alpha=2.32, couple_x0=False): if couple_x0: self._model = UnifiedMomentumTI(beta=beta, alpha=alpha) else: - self._model = UnifiedMomentumTI_x0(beta=beta, alpha=alpha) + self._model = UnifiedMomentumTI_x0(beta_s=beta, alpha=alpha) def __call__( self, x: float, y: float, z: float, windfield: Windfield, Ctprime, yaw = 0, tilt = 0, From 540cbacafd1e4618c5c6361591f38be4c6e0a2bc Mon Sep 17 00:00:00 2001 From: Skylar A Gering Date: Wed, 12 Aug 2026 14:44:24 -0400 Subject: [PATCH 49/52] Apply suggestion from @skygering --- mitwindfarm/Rotor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mitwindfarm/Rotor.py b/mitwindfarm/Rotor.py index 39543fe..e2e376f 100644 --- a/mitwindfarm/Rotor.py +++ b/mitwindfarm/Rotor.py @@ -236,7 +236,7 @@ def __init__(self, rotor_grid=None, beta=0.1403, alpha=2.32, couple_x0=False): """ super().__init__(rotor_grid=rotor_grid) if couple_x0: - self._model = UnifiedMomentumTI(beta=beta, alpha=alpha) + self._model = UnifiedMomentumTI(beta_s=beta, alpha=alpha) else: self._model = UnifiedMomentumTI_x0(beta_s=beta, alpha=alpha) From 4c8812425edd30bdf588807535f90de05e769c61 Mon Sep 17 00:00:00 2001 From: Skylar A Gering Date: Wed, 12 Aug 2026 14:44:39 -0400 Subject: [PATCH 50/52] Apply suggestion from @skygering --- mitwindfarm/Rotor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mitwindfarm/Rotor.py b/mitwindfarm/Rotor.py index e2e376f..6b62bdb 100644 --- a/mitwindfarm/Rotor.py +++ b/mitwindfarm/Rotor.py @@ -183,7 +183,7 @@ def __init__(self, rotor_grid: RotorGrid = None, beta=0.1403): self.rotor_grid = Point() else: self.rotor_grid = rotor_grid - self._model = UnifiedMomentum(beta=beta) + self._model = UnifiedMomentum(beta_s=beta) def __call__(self, x: float, y: float, z: float, windfield: Windfield, Ctprime, yaw = 0, tilt = 0) -> RotorSolution: """ From 3e154b0403a66ec4293c547b04afe917841ef5ea Mon Sep 17 00:00:00 2001 From: misi9170 Date: Wed, 12 Aug 2026 13:00:49 -0600 Subject: [PATCH 51/52] Update lockfile --- poetry.lock | 451 ++++++++++++++++++++++++++-------------------------- 1 file changed, 226 insertions(+), 225 deletions(-) diff --git a/poetry.lock b/poetry.lock index f3c1626..c41d50f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -4,9 +4,9 @@ name = "anyio" version = "4.11.0" description = "High-level concurrency and networking framework on top of asyncio or Trio" -optional = true +optional = false python-versions = ">=3.9" -groups = ["floris"] +groups = ["dev"] files = [ {file = "anyio-4.11.0-py3-none-any.whl", hash = "sha256:0287e96f4d26d4149305414d4e3bc32f0dcd0862365a4bddea19d7a1ec38c4fc"}, {file = "anyio-4.11.0.tar.gz", hash = "sha256:82a8d0b81e318cc5ce71a5f1f8b5c4e63619620b63141ef8c995fa0db95a57c4"}, @@ -25,9 +25,9 @@ trio = ["trio (>=0.31.0)"] name = "appnope" version = "0.1.4" description = "Disable App Nap on macOS >= 10.9" -optional = true +optional = false python-versions = ">=3.6" -groups = ["floris"] +groups = ["dev"] markers = "platform_system == \"Darwin\"" files = [ {file = "appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c"}, @@ -38,9 +38,9 @@ files = [ name = "argon2-cffi" version = "25.1.0" description = "Argon2 for Python" -optional = true +optional = false python-versions = ">=3.8" -groups = ["floris"] +groups = ["dev"] files = [ {file = "argon2_cffi-25.1.0-py3-none-any.whl", hash = "sha256:fdc8b074db390fccb6eb4a3604ae7231f219aa669a2652e0f20e16ba513d5741"}, {file = "argon2_cffi-25.1.0.tar.gz", hash = "sha256:694ae5cc8a42f4c4e2bf2ca0e64e51e23a040c6a517a85074683d3959e1346c1"}, @@ -53,9 +53,9 @@ argon2-cffi-bindings = "*" name = "argon2-cffi-bindings" version = "25.1.0" description = "Low-level CFFI bindings for Argon2" -optional = true +optional = false python-versions = ">=3.9" -groups = ["floris"] +groups = ["dev"] files = [ {file = "argon2_cffi_bindings-25.1.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:3d3f05610594151994ca9ccb3c771115bdb4daef161976a266f0dd8aa9996b8f"}, {file = "argon2_cffi_bindings-25.1.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:8b8efee945193e667a396cbc7b4fb7d357297d6234d30a489905d96caabde56b"}, @@ -95,9 +95,9 @@ cffi = [ name = "arrow" version = "1.4.0" description = "Better dates & times for Python" -optional = true +optional = false python-versions = ">=3.8" -groups = ["floris"] +groups = ["dev"] files = [ {file = "arrow-1.4.0-py3-none-any.whl", hash = "sha256:749f0769958ebdc79c173ff0b0670d59051a535fa26e8eba02953dc19eb43205"}, {file = "arrow-1.4.0.tar.gz", hash = "sha256:ed0cc050e98001b8779e84d461b0098c4ac597e88704a655582b21d116e526d7"}, @@ -115,9 +115,9 @@ test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock name = "asttokens" version = "3.0.0" description = "Annotate AST trees with source code positions" -optional = true +optional = false python-versions = ">=3.8" -groups = ["floris"] +groups = ["dev"] files = [ {file = "asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2"}, {file = "asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7"}, @@ -131,9 +131,9 @@ test = ["astroid (>=2,<4)", "pytest", "pytest-cov", "pytest-xdist"] name = "async-lru" version = "2.0.5" description = "Simple LRU cache for asyncio" -optional = true +optional = false python-versions = ">=3.9" -groups = ["floris"] +groups = ["dev"] files = [ {file = "async_lru-2.0.5-py3-none-any.whl", hash = "sha256:ab95404d8d2605310d345932697371a5f40def0487c03d6d0ad9138de52c9943"}, {file = "async_lru-2.0.5.tar.gz", hash = "sha256:481d52ccdd27275f42c43a928b4a50c3bfb2d67af4e78b170e3e0bb39c66e5bb"}, @@ -148,7 +148,7 @@ version = "25.4.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.9" -groups = ["floris"] +groups = ["dev", "floris"] files = [ {file = "attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373"}, {file = "attrs-25.4.0.tar.gz", hash = "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11"}, @@ -158,9 +158,9 @@ files = [ name = "babel" version = "2.17.0" description = "Internationalization utilities" -optional = true +optional = false python-versions = ">=3.8" -groups = ["floris"] +groups = ["dev"] files = [ {file = "babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2"}, {file = "babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d"}, @@ -173,9 +173,9 @@ dev = ["backports.zoneinfo ; python_version < \"3.9\"", "freezegun (>=1.0,<2.0)" name = "beautifulsoup4" version = "4.14.2" description = "Screen-scraping library" -optional = true +optional = false python-versions = ">=3.7.0" -groups = ["floris"] +groups = ["dev"] files = [ {file = "beautifulsoup4-4.14.2-py3-none-any.whl", hash = "sha256:5ef6fa3a8cbece8488d66985560f97ed091e22bbc4e9c2338508a9d5de6d4515"}, {file = "beautifulsoup4-4.14.2.tar.gz", hash = "sha256:2a98ab9f944a11acee9cc848508ec28d9228abfd522ef0fad6a02a72e0ded69e"}, @@ -196,9 +196,9 @@ lxml = ["lxml"] name = "bleach" version = "6.3.0" description = "An easy safelist-based HTML-sanitizing tool." -optional = true +optional = false python-versions = ">=3.10" -groups = ["floris"] +groups = ["dev"] files = [ {file = "bleach-6.3.0-py3-none-any.whl", hash = "sha256:fe10ec77c93ddf3d13a73b035abaac7a9f5e436513864ccdad516693213c65d6"}, {file = "bleach-6.3.0.tar.gz", hash = "sha256:6f3b91b1c0a02bb9a78b5a454c92506aa0fdf197e1d5e114d2e00c6f64306d22"}, @@ -215,9 +215,9 @@ css = ["tinycss2 (>=1.1.0,<1.5)"] name = "certifi" version = "2025.10.5" description = "Python package for providing Mozilla's CA Bundle." -optional = true +optional = false python-versions = ">=3.7" -groups = ["floris"] +groups = ["dev"] files = [ {file = "certifi-2025.10.5-py3-none-any.whl", hash = "sha256:0f212c2744a9bb6de0c56639a6f68afe01ecd92d91f14ae897c4fe7bbeeef0de"}, {file = "certifi-2025.10.5.tar.gz", hash = "sha256:47c09d31ccf2acf0be3f701ea53595ee7e0b8fa08801c6624be771df09ae7b43"}, @@ -227,9 +227,9 @@ files = [ name = "cffi" version = "2.0.0" description = "Foreign Function Interface for Python calling C code." -optional = true +optional = false python-versions = ">=3.9" -groups = ["floris"] +groups = ["dev"] files = [ {file = "cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44"}, {file = "cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49"}, @@ -324,9 +324,9 @@ pycparser = {version = "*", markers = "implementation_name != \"PyPy\""} name = "charset-normalizer" version = "3.4.4" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -optional = true +optional = false python-versions = ">=3.7" -groups = ["floris"] +groups = ["dev"] files = [ {file = "charset_normalizer-3.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d"}, {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8"}, @@ -449,12 +449,12 @@ version = "0.4.6" description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -groups = ["main", "floris"] +groups = ["main", "dev"] files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] -markers = {main = "platform_system == \"Windows\"", floris = "sys_platform == \"win32\""} +markers = {main = "platform_system == \"Windows\"", dev = "sys_platform == \"win32\""} [[package]] name = "coloredlogs" @@ -478,9 +478,9 @@ cron = ["capturer (>=2.4)"] name = "comm" version = "0.2.3" description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." -optional = true +optional = false python-versions = ">=3.8" -groups = ["floris"] +groups = ["dev"] files = [ {file = "comm-0.2.3-py3-none-any.whl", hash = "sha256:c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417"}, {file = "comm-0.2.3.tar.gz", hash = "sha256:2dc8048c10962d55d7ad693be1e7045d891b7ce8d999c97963a5e3e99c055971"}, @@ -495,7 +495,7 @@ version = "1.3.0" description = "Python library for calculating contours of 2D quadrilateral grids" optional = false python-versions = ">=3.9" -groups = ["floris"] +groups = ["dev", "floris"] markers = "python_version < \"3.11\"" files = [ {file = "contourpy-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:880ea32e5c774634f9fcd46504bf9f080a41ad855f4fef54f5380f5133d343c7"}, @@ -581,7 +581,7 @@ version = "1.3.3" description = "Python library for calculating contours of 2D quadrilateral grids" optional = false python-versions = ">=3.11" -groups = ["floris"] +groups = ["dev", "floris"] markers = "python_version >= \"3.11\"" files = [ {file = "contourpy-1.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:709a48ef9a690e1343202916450bc48b9e51c049b089c7f79a267b46cffcdaa1"}, @@ -674,7 +674,7 @@ version = "0.12.1" description = "Composable style cycles" optional = false python-versions = ">=3.8" -groups = ["floris"] +groups = ["dev", "floris"] files = [ {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, @@ -688,9 +688,9 @@ tests = ["pytest", "pytest-cov", "pytest-xdist"] name = "debugpy" version = "1.8.17" description = "An implementation of the Debug Adapter Protocol for Python" -optional = true +optional = false python-versions = ">=3.8" -groups = ["floris"] +groups = ["dev"] files = [ {file = "debugpy-1.8.17-cp310-cp310-macosx_15_0_x86_64.whl", hash = "sha256:c41d2ce8bbaddcc0009cc73f65318eedfa3dbc88a8298081deb05389f1ab5542"}, {file = "debugpy-1.8.17-cp310-cp310-manylinux_2_34_x86_64.whl", hash = "sha256:1440fd514e1b815edd5861ca394786f90eb24960eb26d6f7200994333b1d79e3"}, @@ -728,9 +728,9 @@ files = [ name = "decorator" version = "5.2.1" description = "Decorators for Humans" -optional = true +optional = false python-versions = ">=3.8" -groups = ["floris"] +groups = ["dev"] files = [ {file = "decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a"}, {file = "decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360"}, @@ -740,9 +740,9 @@ files = [ name = "defusedxml" version = "0.7.1" description = "XML bomb protection for Python stdlib modules" -optional = true +optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -groups = ["floris"] +groups = ["dev"] files = [ {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, @@ -768,9 +768,9 @@ profile = ["gprof2dot (>=2022.7.29)"] name = "exceptiongroup" version = "1.3.0" description = "Backport of PEP 654 (exception groups)" -optional = true +optional = false python-versions = ">=3.7" -groups = ["floris"] +groups = ["dev"] markers = "python_version < \"3.11\"" files = [ {file = "exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10"}, @@ -787,9 +787,9 @@ test = ["pytest (>=6)"] name = "executing" version = "2.2.1" description = "Get the currently executing AST node of a frame, and other information" -optional = true +optional = false python-versions = ">=3.8" -groups = ["floris"] +groups = ["dev"] files = [ {file = "executing-2.2.1-py2.py3-none-any.whl", hash = "sha256:760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017"}, {file = "executing-2.2.1.tar.gz", hash = "sha256:3632cc370565f6648cc328b32435bd120a1e4ebb20c77e3fdde9a13cd1e533c4"}, @@ -802,9 +802,9 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth name = "fastjsonschema" version = "2.21.2" description = "Fastest Python implementation of JSON schema" -optional = true +optional = false python-versions = "*" -groups = ["floris"] +groups = ["dev"] files = [ {file = "fastjsonschema-2.21.2-py3-none-any.whl", hash = "sha256:1c797122d0a86c5cace2e54bf4e819c36223b552017172f32c5c024a6b77e463"}, {file = "fastjsonschema-2.21.2.tar.gz", hash = "sha256:b1eb43748041c880796cd077f1a07c3d94e93ae84bba5ed36800a33554ae05de"}, @@ -851,7 +851,7 @@ version = "4.60.1" description = "Tools to manipulate font files" optional = false python-versions = ">=3.9" -groups = ["floris"] +groups = ["dev", "floris"] files = [ {file = "fonttools-4.60.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9a52f254ce051e196b8fe2af4634c2d2f02c981756c6464dc192f1b6050b4e28"}, {file = "fonttools-4.60.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c7420a2696a44650120cdd269a5d2e56a477e2bfa9d95e86229059beb1c19e15"}, @@ -945,9 +945,9 @@ tqdm = ">=4.66.1,<5.0.0" name = "fqdn" version = "1.5.1" description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" -optional = true +optional = false python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" -groups = ["floris"] +groups = ["dev"] files = [ {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, @@ -957,9 +957,9 @@ files = [ name = "h11" version = "0.16.0" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -optional = true +optional = false python-versions = ">=3.8" -groups = ["floris"] +groups = ["dev"] files = [ {file = "h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"}, {file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"}, @@ -969,9 +969,9 @@ files = [ name = "httpcore" version = "1.0.9" description = "A minimal low-level HTTP client." -optional = true +optional = false python-versions = ">=3.8" -groups = ["floris"] +groups = ["dev"] files = [ {file = "httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55"}, {file = "httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8"}, @@ -991,9 +991,9 @@ trio = ["trio (>=0.22.0,<1.0)"] name = "httpx" version = "0.28.1" description = "The next generation HTTP client." -optional = true +optional = false python-versions = ">=3.8" -groups = ["floris"] +groups = ["dev"] files = [ {file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"}, {file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"}, @@ -1031,9 +1031,9 @@ pyreadline3 = {version = "*", markers = "sys_platform == \"win32\" and python_ve name = "idna" version = "3.11" description = "Internationalized Domain Names in Applications (IDNA)" -optional = true +optional = false python-versions = ">=3.8" -groups = ["floris"] +groups = ["dev"] files = [ {file = "idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea"}, {file = "idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902"}, @@ -1046,9 +1046,9 @@ all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2 name = "iniconfig" version = "2.3.0" description = "brain-dead simple config-ini parsing" -optional = true +optional = false python-versions = ">=3.10" -groups = ["floris"] +groups = ["dev"] files = [ {file = "iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12"}, {file = "iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730"}, @@ -1058,9 +1058,9 @@ files = [ name = "ipykernel" version = "6.31.0" description = "IPython Kernel for Jupyter" -optional = true +optional = false python-versions = ">=3.9" -groups = ["floris"] +groups = ["dev"] files = [ {file = "ipykernel-6.31.0-py3-none-any.whl", hash = "sha256:abe5386f6ced727a70e0eb0cf1da801fa7c5fa6ff82147747d5a0406cd8c94af"}, {file = "ipykernel-6.31.0.tar.gz", hash = "sha256:2372ce8bc1ff4f34e58cafed3a0feb2194b91fc7cad0fc72e79e47b45ee9e8f6"}, @@ -1092,9 +1092,9 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0,<9)", "pytest-async name = "ipython" version = "8.37.0" description = "IPython: Productive Interactive Computing" -optional = true +optional = false python-versions = ">=3.10" -groups = ["floris"] +groups = ["dev"] files = [ {file = "ipython-8.37.0-py3-none-any.whl", hash = "sha256:ed87326596b878932dbcb171e3e698845434d8c61b8d8cd474bf663041a9dcf2"}, {file = "ipython-8.37.0.tar.gz", hash = "sha256:ca815841e1a41a1e6b73a0b08f3038af9b2252564d01fc405356d34033012216"}, @@ -1131,9 +1131,9 @@ test-extra = ["curio", "ipython[test]", "jupyter_ai", "matplotlib (!=3.2.0)", "n name = "ipywidgets" version = "8.1.7" description = "Jupyter interactive widgets" -optional = true +optional = false python-versions = ">=3.7" -groups = ["floris"] +groups = ["dev"] files = [ {file = "ipywidgets-8.1.7-py3-none-any.whl", hash = "sha256:764f2602d25471c213919b8a1997df04bef869251db4ca8efba1b76b1bd9f7bb"}, {file = "ipywidgets-8.1.7.tar.gz", hash = "sha256:15f1ac050b9ccbefd45dccfbb2ef6bed0029d8278682d569d71b8dd96bee0376"}, @@ -1153,9 +1153,9 @@ test = ["ipykernel", "jsonschema", "pytest (>=3.6.0)", "pytest-cov", "pytz"] name = "isoduration" version = "20.11.0" description = "Operations with ISO 8601 durations" -optional = true +optional = false python-versions = ">=3.7" -groups = ["floris"] +groups = ["dev"] files = [ {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, @@ -1168,9 +1168,9 @@ arrow = ">=0.15.0" name = "jedi" version = "0.19.2" description = "An autocompletion tool for Python that can be used for text editors." -optional = true +optional = false python-versions = ">=3.6" -groups = ["floris"] +groups = ["dev"] files = [ {file = "jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9"}, {file = "jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0"}, @@ -1188,9 +1188,9 @@ testing = ["Django", "attrs", "colorama", "docopt", "pytest (<9.0.0)"] name = "jinja2" version = "3.1.6" description = "A very fast and expressive template engine." -optional = true +optional = false python-versions = ">=3.7" -groups = ["floris"] +groups = ["dev"] files = [ {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"}, {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"}, @@ -1206,9 +1206,9 @@ i18n = ["Babel (>=2.7)"] name = "json5" version = "0.12.1" description = "A Python implementation of the JSON5 data format." -optional = true +optional = false python-versions = ">=3.8.0" -groups = ["floris"] +groups = ["dev"] files = [ {file = "json5-0.12.1-py3-none-any.whl", hash = "sha256:d9c9b3bc34a5f54d43c35e11ef7cb87d8bdd098c6ace87117a7b7e83e705c1d5"}, {file = "json5-0.12.1.tar.gz", hash = "sha256:b2743e77b3242f8d03c143dd975a6ec7c52e2f2afe76ed934e53503dd4ad4990"}, @@ -1221,9 +1221,9 @@ dev = ["build (==1.2.2.post1)", "coverage (==7.5.4) ; python_version < \"3.9\"", name = "jsonpointer" version = "3.0.0" description = "Identify specific nodes in a JSON document (RFC 6901)" -optional = true +optional = false python-versions = ">=3.7" -groups = ["floris"] +groups = ["dev"] files = [ {file = "jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"}, {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"}, @@ -1233,9 +1233,9 @@ files = [ name = "jsonschema" version = "4.25.1" description = "An implementation of JSON Schema validation for Python" -optional = true +optional = false python-versions = ">=3.9" -groups = ["floris"] +groups = ["dev"] files = [ {file = "jsonschema-4.25.1-py3-none-any.whl", hash = "sha256:3fba0169e345c7175110351d456342c364814cfcf3b964ba4587f22915230a63"}, {file = "jsonschema-4.25.1.tar.gz", hash = "sha256:e4a9655ce0da0c0b67a085847e00a3a51449e1157f4f75e9fb5aa545e122eb85"}, @@ -1264,9 +1264,9 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- name = "jsonschema-specifications" version = "2025.9.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" -optional = true +optional = false python-versions = ">=3.9" -groups = ["floris"] +groups = ["dev"] files = [ {file = "jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe"}, {file = "jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d"}, @@ -1279,9 +1279,9 @@ referencing = ">=0.31.0" name = "jupyter" version = "1.1.1" description = "Jupyter metapackage. Install all the Jupyter components in one go." -optional = true +optional = false python-versions = "*" -groups = ["floris"] +groups = ["dev"] files = [ {file = "jupyter-1.1.1-py2.py3-none-any.whl", hash = "sha256:7a59533c22af65439b24bbe60373a4e95af8f16ac65a6c00820ad378e3f7cc83"}, {file = "jupyter-1.1.1.tar.gz", hash = "sha256:d55467bceabdea49d7e3624af7e33d59c37fff53ed3a350e1ac957bed731de7a"}, @@ -1299,9 +1299,9 @@ notebook = "*" name = "jupyter-client" version = "8.6.3" description = "Jupyter protocol implementation and client libraries" -optional = true +optional = false python-versions = ">=3.8" -groups = ["floris"] +groups = ["dev"] files = [ {file = "jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f"}, {file = "jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419"}, @@ -1322,9 +1322,9 @@ test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko ; sys_platform == \" name = "jupyter-console" version = "6.6.3" description = "Jupyter terminal console" -optional = true +optional = false python-versions = ">=3.7" -groups = ["floris"] +groups = ["dev"] files = [ {file = "jupyter_console-6.6.3-py3-none-any.whl", hash = "sha256:309d33409fcc92ffdad25f0bcdf9a4a9daa61b6f341177570fdac03de5352485"}, {file = "jupyter_console-6.6.3.tar.gz", hash = "sha256:566a4bf31c87adbfadf22cdf846e3069b59a71ed5da71d6ba4d8aaad14a53539"}, @@ -1347,9 +1347,9 @@ test = ["flaky", "pexpect", "pytest"] name = "jupyter-core" version = "5.9.1" description = "Jupyter core package. A base package on which Jupyter projects rely." -optional = true +optional = false python-versions = ">=3.10" -groups = ["floris"] +groups = ["dev"] files = [ {file = "jupyter_core-5.9.1-py3-none-any.whl", hash = "sha256:ebf87fdc6073d142e114c72c9e29a9d7ca03fad818c5d300ce2adc1fb0743407"}, {file = "jupyter_core-5.9.1.tar.gz", hash = "sha256:4d09aaff303b9566c3ce657f580bd089ff5c91f5f89cf7d8846c3cdf465b5508"}, @@ -1367,9 +1367,9 @@ test = ["ipykernel", "pre-commit", "pytest (<9)", "pytest-cov", "pytest-timeout" name = "jupyter-events" version = "0.12.0" description = "Jupyter Event System library" -optional = true +optional = false python-versions = ">=3.9" -groups = ["floris"] +groups = ["dev"] files = [ {file = "jupyter_events-0.12.0-py3-none-any.whl", hash = "sha256:6464b2fa5ad10451c3d35fabc75eab39556ae1e2853ad0c0cc31b656731a97fb"}, {file = "jupyter_events-0.12.0.tar.gz", hash = "sha256:fc3fce98865f6784c9cd0a56a20644fc6098f21c8c33834a8d9fe383c17e554b"}, @@ -1394,9 +1394,9 @@ test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "p name = "jupyter-lsp" version = "2.3.0" description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server" -optional = true +optional = false python-versions = ">=3.8" -groups = ["floris"] +groups = ["dev"] files = [ {file = "jupyter_lsp-2.3.0-py3-none-any.whl", hash = "sha256:e914a3cb2addf48b1c7710914771aaf1819d46b2e5a79b0f917b5478ec93f34f"}, {file = "jupyter_lsp-2.3.0.tar.gz", hash = "sha256:458aa59339dc868fb784d73364f17dbce8836e906cd75fd471a325cba02e0245"}, @@ -1409,9 +1409,9 @@ jupyter_server = ">=1.1.2" name = "jupyter-server" version = "2.17.0" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." -optional = true +optional = false python-versions = ">=3.9" -groups = ["floris"] +groups = ["dev"] files = [ {file = "jupyter_server-2.17.0-py3-none-any.whl", hash = "sha256:e8cb9c7db4251f51ed307e329b81b72ccf2056ff82d50524debde1ee1870e13f"}, {file = "jupyter_server-2.17.0.tar.gz", hash = "sha256:c38ea898566964c888b4772ae1ed58eca84592e88251d2cfc4d171f81f7e99d5"}, @@ -1446,9 +1446,9 @@ test = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0,<9)", "pytest-console name = "jupyter-server-terminals" version = "0.5.3" description = "A Jupyter Server Extension Providing Terminals." -optional = true +optional = false python-versions = ">=3.8" -groups = ["floris"] +groups = ["dev"] files = [ {file = "jupyter_server_terminals-0.5.3-py3-none-any.whl", hash = "sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa"}, {file = "jupyter_server_terminals-0.5.3.tar.gz", hash = "sha256:5ae0295167220e9ace0edcfdb212afd2b01ee8d179fe6f23c899590e9b8a5269"}, @@ -1466,9 +1466,9 @@ test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (> name = "jupyterlab" version = "4.4.10" description = "JupyterLab computational environment" -optional = true +optional = false python-versions = ">=3.9" -groups = ["floris"] +groups = ["dev"] files = [ {file = "jupyterlab-4.4.10-py3-none-any.whl", hash = "sha256:65939ab4c8dcd0c42185c2d0d1a9d60b254dc8c46fc4fdb286b63c51e9358e07"}, {file = "jupyterlab-4.4.10.tar.gz", hash = "sha256:521c017508af4e1d6d9d8a9d90f47a11c61197ad63b2178342489de42540a615"}, @@ -1501,9 +1501,9 @@ upgrade-extension = ["copier (>=9,<10)", "jinja2-time (<0.3)", "pydantic (<3.0)" name = "jupyterlab-pygments" version = "0.3.0" description = "Pygments theme using JupyterLab CSS variables" -optional = true +optional = false python-versions = ">=3.8" -groups = ["floris"] +groups = ["dev"] files = [ {file = "jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780"}, {file = "jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d"}, @@ -1513,9 +1513,9 @@ files = [ name = "jupyterlab-server" version = "2.28.0" description = "A set of server components for JupyterLab and JupyterLab like applications." -optional = true +optional = false python-versions = ">=3.8" -groups = ["floris"] +groups = ["dev"] files = [ {file = "jupyterlab_server-2.28.0-py3-none-any.whl", hash = "sha256:e4355b148fdcf34d312bbbc80f22467d6d20460e8b8736bf235577dd18506968"}, {file = "jupyterlab_server-2.28.0.tar.gz", hash = "sha256:35baa81898b15f93573e2deca50d11ac0ae407ebb688299d3a5213265033712c"}, @@ -1539,9 +1539,9 @@ test = ["hatch", "ipykernel", "openapi-core (>=0.18.0,<0.19.0)", "openapi-spec-v name = "jupyterlab-widgets" version = "3.0.15" description = "Jupyter interactive widgets for JupyterLab" -optional = true +optional = false python-versions = ">=3.7" -groups = ["floris"] +groups = ["dev"] files = [ {file = "jupyterlab_widgets-3.0.15-py3-none-any.whl", hash = "sha256:d59023d7d7ef71400d51e6fee9a88867f6e65e10a4201605d2d7f3e8f012a31c"}, {file = "jupyterlab_widgets-3.0.15.tar.gz", hash = "sha256:2920888a0c2922351a9202817957a68c07d99673504d6cd37345299e971bb08b"}, @@ -1553,7 +1553,7 @@ version = "1.4.9" description = "A fast implementation of the Cassowary constraint solver" optional = false python-versions = ">=3.10" -groups = ["floris"] +groups = ["dev", "floris"] files = [ {file = "kiwisolver-1.4.9-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b4b4d74bda2b8ebf4da5bd42af11d02d04428b2c32846e4c2c93219df8a7987b"}, {file = "kiwisolver-1.4.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fb3b8132019ea572f4611d770991000d7f58127560c4889729248eb5852a102f"}, @@ -1662,9 +1662,9 @@ files = [ name = "lark" version = "1.3.1" description = "a modern parsing library" -optional = true +optional = false python-versions = ">=3.8" -groups = ["floris"] +groups = ["dev"] files = [ {file = "lark-1.3.1-py3-none-any.whl", hash = "sha256:c629b661023a014c37da873b4ff58a817398d12635d3bbb2c5a03be7fe5d1e12"}, {file = "lark-1.3.1.tar.gz", hash = "sha256:b426a7a6d6d53189d318f2b6236ab5d6429eaf09259f1ca33eb716eed10d2905"}, @@ -1680,9 +1680,9 @@ regex = ["regex"] name = "markupsafe" version = "3.0.3" description = "Safely add untrusted strings to HTML/XML markup." -optional = true +optional = false python-versions = ">=3.9" -groups = ["floris"] +groups = ["dev"] files = [ {file = "markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559"}, {file = "markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419"}, @@ -1781,7 +1781,7 @@ version = "3.10.7" description = "Python plotting package" optional = false python-versions = ">=3.10" -groups = ["floris"] +groups = ["dev", "floris"] files = [ {file = "matplotlib-3.10.7-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:7ac81eee3b7c266dd92cee1cd658407b16c57eed08c7421fa354ed68234de380"}, {file = "matplotlib-3.10.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:667ecd5d8d37813a845053d8f5bf110b534c3c9f30e69ebd25d4701385935a6d"}, @@ -1858,9 +1858,9 @@ dev = ["meson-python (>=0.13.1,<0.17.0)", "pybind11 (>=2.13.2,!=2.13.3)", "setup name = "matplotlib-inline" version = "0.2.1" description = "Inline Matplotlib backend for Jupyter" -optional = true +optional = false python-versions = ">=3.9" -groups = ["floris"] +groups = ["dev"] files = [ {file = "matplotlib_inline-0.2.1-py3-none-any.whl", hash = "sha256:d56ce5156ba6085e00a9d54fead6ed29a9c47e215cd1bba2e976ef39f5710a76"}, {file = "matplotlib_inline-0.2.1.tar.gz", hash = "sha256:e1ee949c340d771fc39e241ea75683deb94762c8fa5f2927ec57c83c4dffa9fe"}, @@ -1876,9 +1876,9 @@ test = ["flake8", "nbdime", "nbval", "notebook", "pytest"] name = "mistune" version = "3.1.4" description = "A sane and fast Markdown parser with useful plugins and renderers" -optional = true +optional = false python-versions = ">=3.8" -groups = ["floris"] +groups = ["dev"] files = [ {file = "mistune-3.1.4-py3-none-any.whl", hash = "sha256:93691da911e5d9d2e23bc54472892aff676df27a75274962ff9edc210364266d"}, {file = "mistune-3.1.4.tar.gz", hash = "sha256:b5a7f801d389f724ec702840c11d8fc48f2b33519102fc7ee739e8177b672164"}, @@ -1942,9 +1942,9 @@ dill = ">=0.4.1" name = "mypy" version = "1.18.2" description = "Optional static typing for Python" -optional = true +optional = false python-versions = ">=3.9" -groups = ["floris"] +groups = ["dev"] files = [ {file = "mypy-1.18.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c1eab0cf6294dafe397c261a75f96dc2c31bffe3b944faa24db5def4e2b0f77c"}, {file = "mypy-1.18.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7a780ca61fc239e4865968ebc5240bb3bf610ef59ac398de9a7421b54e4a207e"}, @@ -2003,9 +2003,9 @@ reports = ["lxml"] name = "mypy-extensions" version = "1.1.0" description = "Type system extensions for programs checked with the mypy type checker." -optional = true +optional = false python-versions = ">=3.8" -groups = ["floris"] +groups = ["dev"] files = [ {file = "mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505"}, {file = "mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558"}, @@ -2015,9 +2015,9 @@ files = [ name = "nbclient" version = "0.10.2" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." -optional = true +optional = false python-versions = ">=3.9.0" -groups = ["floris"] +groups = ["dev"] files = [ {file = "nbclient-0.10.2-py3-none-any.whl", hash = "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d"}, {file = "nbclient-0.10.2.tar.gz", hash = "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193"}, @@ -2038,9 +2038,9 @@ test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>= name = "nbconvert" version = "7.16.6" description = "Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script. nbconvert can be used both as a Python library (`import nbconvert`) or as a command line tool (invoked as `jupyter nbconvert ...`)." -optional = true +optional = false python-versions = ">=3.8" -groups = ["floris"] +groups = ["dev"] files = [ {file = "nbconvert-7.16.6-py3-none-any.whl", hash = "sha256:1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b"}, {file = "nbconvert-7.16.6.tar.gz", hash = "sha256:576a7e37c6480da7b8465eefa66c17844243816ce1ccc372633c6b71c3c0f582"}, @@ -2075,9 +2075,9 @@ webpdf = ["playwright"] name = "nbformat" version = "5.10.4" description = "The Jupyter Notebook format" -optional = true +optional = false python-versions = ">=3.8" -groups = ["floris"] +groups = ["dev"] files = [ {file = "nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b"}, {file = "nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a"}, @@ -2097,9 +2097,9 @@ test = ["pep440", "pre-commit", "pytest", "testpath"] name = "nest-asyncio" version = "1.6.0" description = "Patch asyncio to allow nested event loops" -optional = true +optional = false python-versions = ">=3.5" -groups = ["floris"] +groups = ["dev"] files = [ {file = "nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c"}, {file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"}, @@ -2109,9 +2109,9 @@ files = [ name = "notebook" version = "7.4.7" description = "Jupyter Notebook - A web-based notebook environment for interactive computing" -optional = true +optional = false python-versions = ">=3.8" -groups = ["floris"] +groups = ["dev"] files = [ {file = "notebook-7.4.7-py3-none-any.whl", hash = "sha256:362b7c95527f7dd3c4c84d410b782872fd9c734fb2524c11dd92758527b6eda6"}, {file = "notebook-7.4.7.tar.gz", hash = "sha256:3f0a04027dfcee8a876de48fba13ab77ec8c12f72f848a222ed7f5081b9e342a"}, @@ -2133,9 +2133,9 @@ test = ["importlib-resources (>=5.0) ; python_version < \"3.10\"", "ipykernel", name = "notebook-shim" version = "0.2.4" description = "A shim layer for notebook traits and config" -optional = true +optional = false python-versions = ">=3.7" -groups = ["floris"] +groups = ["dev"] files = [ {file = "notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef"}, {file = "notebook_shim-0.2.4.tar.gz", hash = "sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb"}, @@ -2284,7 +2284,7 @@ version = "2.2.6" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.10" -groups = ["main", "floris"] +groups = ["main", "dev", "floris"] markers = "python_version < \"3.11\"" files = [ {file = "numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb"}, @@ -2350,7 +2350,7 @@ version = "2.3.4" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.11" -groups = ["main", "floris"] +groups = ["main", "dev", "floris"] markers = "python_version >= \"3.11\"" files = [ {file = "numpy-2.3.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e78aecd2800b32e8347ce49316d3eaf04aed849cd5b38e0af39f829a4e59f5eb"}, @@ -2433,9 +2433,9 @@ files = [ name = "overrides" version = "7.7.0" description = "A decorator to automatically detect mismatch when overriding a method." -optional = true +optional = false python-versions = ">=3.6" -groups = ["floris"] +groups = ["dev"] markers = "python_version <= \"3.11\"" files = [ {file = "overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49"}, @@ -2448,7 +2448,7 @@ version = "25.0" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" -groups = ["floris"] +groups = ["dev", "floris"] files = [ {file = "packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484"}, {file = "packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"}, @@ -2642,9 +2642,9 @@ xml = ["lxml (>=5.3.0)"] name = "pandocfilters" version = "1.5.1" description = "Utilities for writing pandoc filters in python" -optional = true +optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -groups = ["floris"] +groups = ["dev"] files = [ {file = "pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc"}, {file = "pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e"}, @@ -2654,9 +2654,9 @@ files = [ name = "parso" version = "0.8.5" description = "A Python Parser" -optional = true +optional = false python-versions = ">=3.6" -groups = ["floris"] +groups = ["dev"] files = [ {file = "parso-0.8.5-py2.py3-none-any.whl", hash = "sha256:646204b5ee239c396d040b90f9e272e9a8017c630092bf59980beb62fd033887"}, {file = "parso-0.8.5.tar.gz", hash = "sha256:034d7354a9a018bdce352f48b2a8a450f05e9d6ee85db84764e9b6bd96dafe5a"}, @@ -2688,9 +2688,9 @@ ppft = ">=1.7.8" name = "pathspec" version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." -optional = true +optional = false python-versions = ">=3.8" -groups = ["floris"] +groups = ["dev"] files = [ {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, @@ -2700,9 +2700,9 @@ files = [ name = "pexpect" version = "4.9.0" description = "Pexpect allows easy control of interactive console applications." -optional = true +optional = false python-versions = "*" -groups = ["floris"] +groups = ["dev"] markers = "sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, @@ -2718,7 +2718,7 @@ version = "12.0.0" description = "Python Imaging Library (fork)" optional = false python-versions = ">=3.10" -groups = ["floris"] +groups = ["dev", "floris"] files = [ {file = "pillow-12.0.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:3adfb466bbc544b926d50fe8f4a4e6abd8c6bffd28a26177594e6e9b2b76572b"}, {file = "pillow-12.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1ac11e8ea4f611c3c0147424eae514028b5e9077dd99ab91e1bd7bc33ff145e1"}, @@ -2825,9 +2825,9 @@ xmp = ["defusedxml"] name = "platformdirs" version = "4.5.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." -optional = true +optional = false python-versions = ">=3.10" -groups = ["floris"] +groups = ["dev"] files = [ {file = "platformdirs-4.5.0-py3-none-any.whl", hash = "sha256:e578a81bb873cbb89a41fcc904c7ef523cc18284b7e3b3ccf06aca1403b7ebd3"}, {file = "platformdirs-4.5.0.tar.gz", hash = "sha256:70ddccdd7c99fc5942e9fc25636a8b34d04c24b335100223152c2803e4063312"}, @@ -2842,9 +2842,9 @@ type = ["mypy (>=1.18.2)"] name = "pluggy" version = "1.6.0" description = "plugin and hook calling mechanisms for python" -optional = true +optional = false python-versions = ">=3.9" -groups = ["floris"] +groups = ["dev"] files = [ {file = "pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746"}, {file = "pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3"}, @@ -2922,9 +2922,9 @@ dill = ["dill (>=0.4.1)"] name = "prometheus-client" version = "0.23.1" description = "Python client for the Prometheus monitoring system." -optional = true +optional = false python-versions = ">=3.9" -groups = ["floris"] +groups = ["dev"] files = [ {file = "prometheus_client-0.23.1-py3-none-any.whl", hash = "sha256:dd1913e6e76b59cfe44e7a4b83e01afc9873c1bdfd2ed8739f1e76aeca115f99"}, {file = "prometheus_client-0.23.1.tar.gz", hash = "sha256:6ae8f9081eaaaf153a2e959d2e6c4f4fb57b12ef76c8c7980202f1e57b48b2ce"}, @@ -2937,9 +2937,9 @@ twisted = ["twisted"] name = "prompt-toolkit" version = "3.0.52" description = "Library for building powerful interactive command lines in Python" -optional = true +optional = false python-versions = ">=3.8" -groups = ["floris"] +groups = ["dev"] files = [ {file = "prompt_toolkit-3.0.52-py3-none-any.whl", hash = "sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955"}, {file = "prompt_toolkit-3.0.52.tar.gz", hash = "sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855"}, @@ -2952,9 +2952,9 @@ wcwidth = "*" name = "psutil" version = "7.1.2" description = "Cross-platform lib for process and system monitoring." -optional = true +optional = false python-versions = ">=3.6" -groups = ["floris"] +groups = ["dev"] files = [ {file = "psutil-7.1.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0cc5c6889b9871f231ed5455a9a02149e388fffcb30b607fb7a8896a6d95f22e"}, {file = "psutil-7.1.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8e9e77a977208d84aa363a4a12e0f72189d58bbf4e46b49aae29a2c6e93ef206"}, @@ -2985,9 +2985,9 @@ test = ["pytest", "pytest-instafail", "pytest-subtests", "pytest-xdist", "pywin3 name = "ptyprocess" version = "0.7.0" description = "Run a subprocess in a pseudo terminal" -optional = true +optional = false python-versions = "*" -groups = ["floris"] +groups = ["dev"] markers = "os_name != \"nt\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, @@ -2998,9 +2998,9 @@ files = [ name = "pure-eval" version = "0.2.3" description = "Safely evaluate AST nodes without side effects" -optional = true +optional = false python-versions = "*" -groups = ["floris"] +groups = ["dev"] files = [ {file = "pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0"}, {file = "pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42"}, @@ -3013,9 +3013,9 @@ tests = ["pytest"] name = "pycparser" version = "2.23" description = "C parser in Python" -optional = true +optional = false python-versions = ">=3.8" -groups = ["floris"] +groups = ["dev"] markers = "implementation_name != \"PyPy\"" files = [ {file = "pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934"}, @@ -3026,9 +3026,9 @@ files = [ name = "pygments" version = "2.19.2" description = "Pygments is a syntax highlighting package written in Python." -optional = true +optional = false python-versions = ">=3.8" -groups = ["floris"] +groups = ["dev"] files = [ {file = "pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b"}, {file = "pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887"}, @@ -3043,7 +3043,7 @@ version = "3.2.5" description = "pyparsing - Classes and methods to define and execute parsing grammars" optional = false python-versions = ">=3.9" -groups = ["floris"] +groups = ["dev", "floris"] files = [ {file = "pyparsing-3.2.5-py3-none-any.whl", hash = "sha256:e38a4f02064cf41fe6593d328d0512495ad1f3d8a91c4f73fc401b3079a59a5e"}, {file = "pyparsing-3.2.5.tar.gz", hash = "sha256:2df8d5b7b2802ef88e8d016a2eb9c7aeaa923529cd251ed0fe4608275d4105b6"}, @@ -3072,9 +3072,9 @@ dev = ["build", "flake8", "mypy", "pytest", "twine"] name = "pytest" version = "7.4.4" description = "pytest: simple powerful testing with Python" -optional = true +optional = false python-versions = ">=3.7" -groups = ["floris"] +groups = ["dev"] files = [ {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, @@ -3097,7 +3097,7 @@ version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -groups = ["floris"] +groups = ["dev", "floris"] files = [ {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, @@ -3110,9 +3110,9 @@ six = ">=1.5" name = "python-json-logger" version = "4.0.0" description = "JSON Log Formatter for the Python Logging Package" -optional = true +optional = false python-versions = ">=3.8" -groups = ["floris"] +groups = ["dev"] files = [ {file = "python_json_logger-4.0.0-py3-none-any.whl", hash = "sha256:af09c9daf6a813aa4cc7180395f50f2a9e5fa056034c9953aec92e381c5ba1e2"}, {file = "python_json_logger-4.0.0.tar.gz", hash = "sha256:f58e68eb46e1faed27e0f574a55a0455eecd7b8a5b88b85a784519ba3cff047f"}, @@ -3138,9 +3138,9 @@ files = [ name = "pywinpty" version = "3.0.2" description = "Pseudo terminal support for Windows from Python." -optional = true +optional = false python-versions = ">=3.9" -groups = ["floris"] +groups = ["dev"] markers = "os_name == \"nt\"" files = [ {file = "pywinpty-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:65db57fd3387d71e8372b6a54269cbcd0f6dfa6d4616a29e0af749ec19f5c558"}, @@ -3160,7 +3160,7 @@ version = "6.0.3" description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.8" -groups = ["main", "floris"] +groups = ["main", "dev", "floris"] files = [ {file = "PyYAML-6.0.3-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:c2514fceb77bc5e7a2f7adfaa1feb2fb311607c9cb518dbc378688ec73d8292f"}, {file = "PyYAML-6.0.3-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c57bb8c96f6d1808c030b1687b9b5fb476abaa47f0db9c0101f5e9f394e97f4"}, @@ -3241,9 +3241,9 @@ files = [ name = "pyzmq" version = "27.1.0" description = "Python bindings for 0MQ" -optional = true +optional = false python-versions = ">=3.8" -groups = ["floris"] +groups = ["dev"] files = [ {file = "pyzmq-27.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:508e23ec9bc44c0005c4946ea013d9317ae00ac67778bd47519fdf5a0e930ff4"}, {file = "pyzmq-27.1.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:507b6f430bdcf0ee48c0d30e734ea89ce5567fd7b8a0f0044a369c176aa44556"}, @@ -3346,9 +3346,9 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""} name = "referencing" version = "0.37.0" description = "JSON Referencing + Python" -optional = true +optional = false python-versions = ">=3.10" -groups = ["floris"] +groups = ["dev"] files = [ {file = "referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231"}, {file = "referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8"}, @@ -3363,9 +3363,9 @@ typing-extensions = {version = ">=4.4.0", markers = "python_version < \"3.13\""} name = "requests" version = "2.32.5" description = "Python HTTP for Humans." -optional = true +optional = false python-versions = ">=3.9" -groups = ["floris"] +groups = ["dev"] files = [ {file = "requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6"}, {file = "requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf"}, @@ -3385,9 +3385,9 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "rfc3339-validator" version = "0.1.4" description = "A pure python RFC3339 validator" -optional = true +optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -groups = ["floris"] +groups = ["dev"] files = [ {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, @@ -3400,9 +3400,9 @@ six = "*" name = "rfc3986-validator" version = "0.1.1" description = "Pure python rfc3986 validator" -optional = true +optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -groups = ["floris"] +groups = ["dev"] files = [ {file = "rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9"}, {file = "rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"}, @@ -3412,9 +3412,9 @@ files = [ name = "rfc3987-syntax" version = "1.1.0" description = "Helper functions to syntactically validate strings according to RFC 3987." -optional = true +optional = false python-versions = ">=3.9" -groups = ["floris"] +groups = ["dev"] files = [ {file = "rfc3987_syntax-1.1.0-py3-none-any.whl", hash = "sha256:6c3d97604e4c5ce9f714898e05401a0445a641cfa276432b0a648c80856f6a3f"}, {file = "rfc3987_syntax-1.1.0.tar.gz", hash = "sha256:717a62cbf33cffdd16dfa3a497d81ce48a660ea691b1ddd7be710c22f00b4a0d"}, @@ -3430,9 +3430,9 @@ testing = ["pytest (>=8.3.5)"] name = "rpds-py" version = "0.28.0" description = "Python bindings to Rust's persistent data structures (rpds)" -optional = true +optional = false python-versions = ">=3.10" -groups = ["floris"] +groups = ["dev"] files = [ {file = "rpds_py-0.28.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:7b6013db815417eeb56b2d9d7324e64fcd4fa289caeee6e7a78b2e11fc9b438a"}, {file = "rpds_py-0.28.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1a4c6b05c685c0c03f80dabaeb73e74218c49deea965ca63f76a752807397207"}, @@ -3555,9 +3555,9 @@ files = [ name = "ruff" version = "0.1.15" description = "An extremely fast Python linter and code formatter, written in Rust." -optional = true +optional = false python-versions = ">=3.7" -groups = ["floris"] +groups = ["dev"] files = [ {file = "ruff-0.1.15-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:5fe8d54df166ecc24106db7dd6a68d44852d14eb0729ea4672bb4d96c320b7df"}, {file = "ruff-0.1.15-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6f0bfbb53c4b4de117ac4d6ddfd33aa5fc31beeaa21d23c45c6dd249faf9126f"}, @@ -3706,9 +3706,9 @@ test = ["Cython", "array-api-strict (>=2.3.1)", "asv", "gmpy2", "hypothesis (>=6 name = "send2trash" version = "1.8.3" description = "Send file to trash natively under Mac OS X, Windows and Linux" -optional = true +optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" -groups = ["floris"] +groups = ["dev"] files = [ {file = "Send2Trash-1.8.3-py3-none-any.whl", hash = "sha256:0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9"}, {file = "Send2Trash-1.8.3.tar.gz", hash = "sha256:b18e7a3966d99871aefeb00cfbcfdced55ce4871194810fc71f4aa484b953abf"}, @@ -3723,9 +3723,9 @@ win32 = ["pywin32 ; sys_platform == \"win32\""] name = "setuptools" version = "80.9.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" -optional = true +optional = false python-versions = ">=3.9" -groups = ["floris"] +groups = ["dev"] files = [ {file = "setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922"}, {file = "setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c"}, @@ -3820,7 +3820,7 @@ version = "1.17.0" description = "Python 2 and 3 compatibility utilities" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -groups = ["floris"] +groups = ["dev", "floris"] files = [ {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, @@ -3830,9 +3830,9 @@ files = [ name = "sniffio" version = "1.3.1" description = "Sniff out which async library your code is running under" -optional = true +optional = false python-versions = ">=3.7" -groups = ["floris"] +groups = ["dev"] files = [ {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, @@ -3842,9 +3842,9 @@ files = [ name = "soupsieve" version = "2.8" description = "A modern CSS selector implementation for Beautiful Soup." -optional = true +optional = false python-versions = ">=3.9" -groups = ["floris"] +groups = ["dev"] files = [ {file = "soupsieve-2.8-py3-none-any.whl", hash = "sha256:0cc76456a30e20f5d7f2e14a98a4ae2ee4e5abdc7c5ea0aafe795f344bc7984c"}, {file = "soupsieve-2.8.tar.gz", hash = "sha256:e2dd4a40a628cb5f28f6d4b0db8800b8f581b65bb380b97de22ba5ca8d72572f"}, @@ -3854,9 +3854,9 @@ files = [ name = "stack-data" version = "0.6.3" description = "Extract data from python stack frames and tracebacks for informative displays" -optional = true +optional = false python-versions = "*" -groups = ["floris"] +groups = ["dev"] files = [ {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, @@ -3874,9 +3874,9 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] name = "terminado" version = "0.18.1" description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." -optional = true +optional = false python-versions = ">=3.8" -groups = ["floris"] +groups = ["dev"] files = [ {file = "terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0"}, {file = "terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e"}, @@ -3896,9 +3896,9 @@ typing = ["mypy (>=1.6,<2.0)", "traitlets (>=5.11.1)"] name = "tinycss2" version = "1.4.0" description = "A tiny CSS parser" -optional = true +optional = false python-versions = ">=3.8" -groups = ["floris"] +groups = ["dev"] files = [ {file = "tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289"}, {file = "tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7"}, @@ -3915,9 +3915,9 @@ test = ["pytest", "ruff"] name = "tomli" version = "2.3.0" description = "A lil' TOML parser" -optional = true +optional = false python-versions = ">=3.8" -groups = ["floris"] +groups = ["dev"] markers = "python_version < \"3.11\"" files = [ {file = "tomli-2.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:88bd15eb972f3664f5ed4b57c1634a97153b4bac4479dcb6a495f41921eb7f45"}, @@ -3968,9 +3968,9 @@ files = [ name = "tornado" version = "6.5.2" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." -optional = true +optional = false python-versions = ">=3.9" -groups = ["floris"] +groups = ["dev"] files = [ {file = "tornado-6.5.2-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:2436822940d37cde62771cff8774f4f00b3c8024fe482e16ca8387b8a2724db6"}, {file = "tornado-6.5.2-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:583a52c7aa94ee046854ba81d9ebb6c81ec0fd30386d96f7640c96dad45a03ef"}, @@ -4012,9 +4012,9 @@ telegram = ["requests"] name = "traitlets" version = "5.14.3" description = "Traitlets Python configuration system" -optional = true +optional = false python-versions = ">=3.8" -groups = ["floris"] +groups = ["dev"] files = [ {file = "traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"}, {file = "traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7"}, @@ -4028,9 +4028,9 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0, name = "typing-extensions" version = "4.15.0" description = "Backported and Experimental Type Hints for Python 3.9+" -optional = true +optional = false python-versions = ">=3.9" -groups = ["floris"] +groups = ["dev"] files = [ {file = "typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548"}, {file = "typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"}, @@ -4042,11 +4042,12 @@ version = "2025.2" description = "Provider of IANA time zone data" optional = false python-versions = ">=2" -groups = ["floris"] +groups = ["dev", "floris"] files = [ {file = "tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8"}, {file = "tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9"}, ] +markers = {floris = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or python_version < \"3.11\""} [[package]] name = "unified-momentum-model" @@ -4080,9 +4081,9 @@ resolved_reference = "1d515e60d3403a0a6160acbbc67430d70adea125" name = "uri-template" version = "1.3.0" description = "RFC 6570 URI Template Processor" -optional = true +optional = false python-versions = ">=3.7" -groups = ["floris"] +groups = ["dev"] files = [ {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, @@ -4095,9 +4096,9 @@ dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake name = "urllib3" version = "2.5.0" description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = true +optional = false python-versions = ">=3.9" -groups = ["floris"] +groups = ["dev"] files = [ {file = "urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc"}, {file = "urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760"}, @@ -4113,9 +4114,9 @@ zstd = ["zstandard (>=0.18.0)"] name = "wcwidth" version = "0.2.14" description = "Measures the displayed width of unicode strings in a terminal" -optional = true +optional = false python-versions = ">=3.6" -groups = ["floris"] +groups = ["dev"] files = [ {file = "wcwidth-0.2.14-py2.py3-none-any.whl", hash = "sha256:a7bb560c8aee30f9957e5f9895805edd20602f2d7f720186dfd906e82b4982e1"}, {file = "wcwidth-0.2.14.tar.gz", hash = "sha256:4d478375d31bc5395a3c55c40ccdf3354688364cd61c4f6adacaa9215d0b3605"}, @@ -4125,9 +4126,9 @@ files = [ name = "webcolors" version = "24.11.1" description = "A library for working with the color formats defined by HTML and CSS." -optional = true +optional = false python-versions = ">=3.9" -groups = ["floris"] +groups = ["dev"] files = [ {file = "webcolors-24.11.1-py3-none-any.whl", hash = "sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9"}, {file = "webcolors-24.11.1.tar.gz", hash = "sha256:ecb3d768f32202af770477b8b65f318fa4f566c22948673a977b00d589dd80f6"}, @@ -4137,9 +4138,9 @@ files = [ name = "webencodings" version = "0.5.1" description = "Character encoding aliases for legacy web content" -optional = true +optional = false python-versions = "*" -groups = ["floris"] +groups = ["dev"] files = [ {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, @@ -4149,9 +4150,9 @@ files = [ name = "websocket-client" version = "1.9.0" description = "WebSocket client for Python with low level API options" -optional = true +optional = false python-versions = ">=3.9" -groups = ["floris"] +groups = ["dev"] files = [ {file = "websocket_client-1.9.0-py3-none-any.whl", hash = "sha256:af248a825037ef591efbf6ed20cc5faa03d3b47b9e5a2230a529eeee1c1fc3ef"}, {file = "websocket_client-1.9.0.tar.gz", hash = "sha256:9e813624b6eb619999a97dc7958469217c3176312b3a16a4bd1bc7e08a46ec98"}, @@ -4166,9 +4167,9 @@ test = ["pytest", "websockets"] name = "widgetsnbextension" version = "4.0.14" description = "Jupyter interactive widgets for Jupyter Notebook" -optional = true +optional = false python-versions = ">=3.7" -groups = ["floris"] +groups = ["dev"] files = [ {file = "widgetsnbextension-4.0.14-py3-none-any.whl", hash = "sha256:4875a9eaf72fbf5079dc372a51a9f268fc38d46f767cbf85c43a36da5cb9b575"}, {file = "widgetsnbextension-4.0.14.tar.gz", hash = "sha256:a3629b04e3edb893212df862038c7232f62973373869db5084aed739b437b5af"}, @@ -4181,4 +4182,4 @@ examples = [] [metadata] lock-version = "2.1" python-versions = ">3.10,<3.15" -content-hash = "f275cac88c9f5dc8cbc404f82c8614903789b00dfbdafb02511bcf383b65e5aa" +content-hash = "4eb57afcd9605c2d905fef8bd1ab8f14c2610cbda8027c23687e4e33e4ba3df4" From f8ed217f143dbd1dd37d8c2c75480d42d37457ea Mon Sep 17 00:00:00 2001 From: misi9170 Date: Mon, 17 Aug 2026 08:58:06 -0600 Subject: [PATCH 52/52] Poetry update --- poetry.lock | 3240 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 1909 insertions(+), 1331 deletions(-) diff --git a/poetry.lock b/poetry.lock index c41d50f..23815b6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2,24 +2,23 @@ [[package]] name = "anyio" -version = "4.11.0" +version = "4.14.2" description = "High-level concurrency and networking framework on top of asyncio or Trio" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "anyio-4.11.0-py3-none-any.whl", hash = "sha256:0287e96f4d26d4149305414d4e3bc32f0dcd0862365a4bddea19d7a1ec38c4fc"}, - {file = "anyio-4.11.0.tar.gz", hash = "sha256:82a8d0b81e318cc5ce71a5f1f8b5c4e63619620b63141ef8c995fa0db95a57c4"}, + {file = "anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494"}, + {file = "anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f"}, ] [package.dependencies] exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} idna = ">=2.8" -sniffio = ">=1.1" typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""} [package.extras] -trio = ["trio (>=0.31.0)"] +trio = ["trio (>=0.32.0)"] [[package]] name = "appnope" @@ -113,30 +112,30 @@ test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock [[package]] name = "asttokens" -version = "3.0.0" +version = "3.0.2" description = "Annotate AST trees with source code positions" optional = false python-versions = ">=3.8" groups = ["dev"] files = [ - {file = "asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2"}, - {file = "asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7"}, + {file = "asttokens-3.0.2-py3-none-any.whl", hash = "sha256:9da13157f5b28becde0bd374fc677dcd3c290614264eff096f167c469cd9f933"}, + {file = "asttokens-3.0.2.tar.gz", hash = "sha256:3ecdbd8f2cc195f53ccada3a613538bb5f9ef6f6869129f13e03c30a677b8fe2"}, ] [package.extras] -astroid = ["astroid (>=2,<4)"] -test = ["astroid (>=2,<4)", "pytest", "pytest-cov", "pytest-xdist"] +astroid = ["astroid (>=2,<5)"] +test = ["astroid (>=2,<5)", "pytest (<9.0)", "pytest-cov", "pytest-xdist"] [[package]] name = "async-lru" -version = "2.0.5" +version = "2.3.0" description = "Simple LRU cache for asyncio" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "async_lru-2.0.5-py3-none-any.whl", hash = "sha256:ab95404d8d2605310d345932697371a5f40def0487c03d6d0ad9138de52c9943"}, - {file = "async_lru-2.0.5.tar.gz", hash = "sha256:481d52ccdd27275f42c43a928b4a50c3bfb2d67af4e78b170e3e0bb39c66e5bb"}, + {file = "async_lru-2.3.0-py3-none-any.whl", hash = "sha256:eea27b01841909316f2cc739807acea1c623df2be8c5cfad7583286397bb8315"}, + {file = "async_lru-2.3.0.tar.gz", hash = "sha256:89bdb258a0140d7313cf8f4031d816a042202faa61d0ab310a0a538baa1c24b6"}, ] [package.dependencies] @@ -144,26 +143,26 @@ typing_extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} [[package]] name = "attrs" -version = "25.4.0" +version = "26.1.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.9" groups = ["dev", "floris"] files = [ - {file = "attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373"}, - {file = "attrs-25.4.0.tar.gz", hash = "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11"}, + {file = "attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309"}, + {file = "attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32"}, ] [[package]] name = "babel" -version = "2.17.0" +version = "2.18.0" description = "Internationalization utilities" optional = false python-versions = ">=3.8" groups = ["dev"] files = [ - {file = "babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2"}, - {file = "babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d"}, + {file = "babel-2.18.0-py3-none-any.whl", hash = "sha256:e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35"}, + {file = "babel-2.18.0.tar.gz", hash = "sha256:b80b99a14bd085fcacfa15c9165f651fbb3406e66cc603abf11c5750937c992d"}, ] [package.extras] @@ -171,18 +170,18 @@ dev = ["backports.zoneinfo ; python_version < \"3.9\"", "freezegun (>=1.0,<2.0)" [[package]] name = "beautifulsoup4" -version = "4.14.2" +version = "4.15.0" description = "Screen-scraping library" optional = false python-versions = ">=3.7.0" groups = ["dev"] files = [ - {file = "beautifulsoup4-4.14.2-py3-none-any.whl", hash = "sha256:5ef6fa3a8cbece8488d66985560f97ed091e22bbc4e9c2338508a9d5de6d4515"}, - {file = "beautifulsoup4-4.14.2.tar.gz", hash = "sha256:2a98ab9f944a11acee9cc848508ec28d9228abfd522ef0fad6a02a72e0ded69e"}, + {file = "beautifulsoup4-4.15.0-py3-none-any.whl", hash = "sha256:d6f88de62e1d4e38ecb1077eb9724cd0eff29d2a08ca16a401e9b9e93f117cf9"}, + {file = "beautifulsoup4-4.15.0.tar.gz", hash = "sha256:288e3ca7d54b06f2ac191970bc275c1939cb46d450b255bf6718b04aa37ab4f7"}, ] [package.dependencies] -soupsieve = ">1.2" +soupsieve = ">=1.6.1" typing-extensions = ">=4.0.0" [package.extras] @@ -194,127 +193,143 @@ lxml = ["lxml"] [[package]] name = "bleach" -version = "6.3.0" +version = "6.4.0" description = "An easy safelist-based HTML-sanitizing tool." optional = false python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "bleach-6.3.0-py3-none-any.whl", hash = "sha256:fe10ec77c93ddf3d13a73b035abaac7a9f5e436513864ccdad516693213c65d6"}, - {file = "bleach-6.3.0.tar.gz", hash = "sha256:6f3b91b1c0a02bb9a78b5a454c92506aa0fdf197e1d5e114d2e00c6f64306d22"}, + {file = "bleach-6.4.0-py3-none-any.whl", hash = "sha256:4b6b6a54fff2e69a3dde9d21cc6301220bee3c3cb792187d11403fd795031081"}, + {file = "bleach-6.4.0.tar.gz", hash = "sha256:4202482733d85cedd04e59fcb2f89f4e4c7c385a78d3c3c23c30446843a37452"}, ] [package.dependencies] -tinycss2 = {version = ">=1.1.0,<1.5", optional = true, markers = "extra == \"css\""} +tinycss2 = {version = ">=1.1.0", optional = true, markers = "extra == \"css\""} webencodings = "*" [package.extras] -css = ["tinycss2 (>=1.1.0,<1.5)"] +css = ["tinycss2 (>=1.1.0)"] [[package]] name = "certifi" -version = "2025.10.5" +version = "2026.7.22" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.7" groups = ["dev"] files = [ - {file = "certifi-2025.10.5-py3-none-any.whl", hash = "sha256:0f212c2744a9bb6de0c56639a6f68afe01ecd92d91f14ae897c4fe7bbeeef0de"}, - {file = "certifi-2025.10.5.tar.gz", hash = "sha256:47c09d31ccf2acf0be3f701ea53595ee7e0b8fa08801c6624be771df09ae7b43"}, + {file = "certifi-2026.7.22-py3-none-any.whl", hash = "sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775"}, + {file = "certifi-2026.7.22.tar.gz", hash = "sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55"}, ] [[package]] name = "cffi" -version = "2.0.0" +version = "2.1.1" description = "Foreign Function Interface for Python calling C code." optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44"}, - {file = "cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49"}, - {file = "cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c"}, - {file = "cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb"}, - {file = "cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0"}, - {file = "cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4"}, - {file = "cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453"}, - {file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495"}, - {file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5"}, - {file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb"}, - {file = "cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a"}, - {file = "cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739"}, - {file = "cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe"}, - {file = "cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c"}, - {file = "cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92"}, - {file = "cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93"}, - {file = "cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5"}, - {file = "cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664"}, - {file = "cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26"}, - {file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9"}, - {file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414"}, - {file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743"}, - {file = "cffi-2.0.0-cp311-cp311-win32.whl", hash = "sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5"}, - {file = "cffi-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5"}, - {file = "cffi-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d"}, - {file = "cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d"}, - {file = "cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c"}, - {file = "cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe"}, - {file = "cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062"}, - {file = "cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e"}, - {file = "cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037"}, - {file = "cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba"}, - {file = "cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94"}, - {file = "cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187"}, - {file = "cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18"}, - {file = "cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5"}, - {file = "cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6"}, - {file = "cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb"}, - {file = "cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca"}, - {file = "cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b"}, - {file = "cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b"}, - {file = "cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2"}, - {file = "cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3"}, - {file = "cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26"}, - {file = "cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c"}, - {file = "cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b"}, - {file = "cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27"}, - {file = "cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75"}, - {file = "cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91"}, - {file = "cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5"}, - {file = "cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13"}, - {file = "cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b"}, - {file = "cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c"}, - {file = "cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef"}, - {file = "cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775"}, - {file = "cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205"}, - {file = "cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1"}, - {file = "cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f"}, - {file = "cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25"}, - {file = "cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad"}, - {file = "cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9"}, - {file = "cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d"}, - {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c"}, - {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8"}, - {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc"}, - {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592"}, - {file = "cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512"}, - {file = "cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4"}, - {file = "cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e"}, - {file = "cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6"}, - {file = "cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9"}, - {file = "cffi-2.0.0-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf"}, - {file = "cffi-2.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:de8dad4425a6ca6e4e5e297b27b5c824ecc7581910bf9aee86cb6835e6812aa7"}, - {file = "cffi-2.0.0-cp39-cp39-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:4647afc2f90d1ddd33441e5b0e85b16b12ddec4fca55f0d9671fef036ecca27c"}, - {file = "cffi-2.0.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3f4d46d8b35698056ec29bca21546e1551a205058ae1a181d871e278b0b28165"}, - {file = "cffi-2.0.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:e6e73b9e02893c764e7e8d5bb5ce277f1a009cd5243f8228f75f842bf937c534"}, - {file = "cffi-2.0.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:cb527a79772e5ef98fb1d700678fe031e353e765d1ca2d409c92263c6d43e09f"}, - {file = "cffi-2.0.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:61d028e90346df14fedc3d1e5441df818d095f3b87d286825dfcbd6459b7ef63"}, - {file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0f6084a0ea23d05d20c3edcda20c3d006f9b6f3fefeac38f59262e10cef47ee2"}, - {file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1cd13c99ce269b3ed80b417dcd591415d3372bcac067009b6e0f59c7d4015e65"}, - {file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:89472c9762729b5ae1ad974b777416bfda4ac5642423fa93bd57a09204712322"}, - {file = "cffi-2.0.0-cp39-cp39-win32.whl", hash = "sha256:2081580ebb843f759b9f617314a24ed5738c51d2aee65d31e02f6f7a2b97707a"}, - {file = "cffi-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9"}, - {file = "cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529"}, + {file = "cffi-2.1.1-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:baed1e86cc735622097354b9d1281406caf42ff42a886d29faa8e8d1630333be"}, + {file = "cffi-2.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ca82be1a1d406ecfe1d25dc16cb33488e5a16bf4438c9fb590484ea29d92478b"}, + {file = "cffi-2.1.1-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:42e2f76b9455f5a9a844f770bf3e200ed3da0e15f5df3db9c31fe80b04b3d004"}, + {file = "cffi-2.1.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5a59cc1c4442bc3d5c703bf720b51138d0bfc173618807c9ee2490a7541dd3d9"}, + {file = "cffi-2.1.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:9f8d177621de5cb38ee3e731eda45d421db093ec0739f46a5594babda7987a98"}, + {file = "cffi-2.1.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:75f80557d1389eddbd0de2681f6a390a0c5338c31ddaa821381c203fc3fd50d9"}, + {file = "cffi-2.1.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:194cffa889098ced9976c3fc6340305e43f6303657d298da55366907c05c22d6"}, + {file = "cffi-2.1.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5bb4e7ea95dcd6a014a6fef62e62467d67d8e582326443f3d68e71d6320a9fcf"}, + {file = "cffi-2.1.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3d22a20b1fb1632cc72c22f95f7b0d2961c3e1c235f245ba4c606c4771035659"}, + {file = "cffi-2.1.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1dea0e4d7d4f11f619fe8c1d76caf49e24405b4b5743c0e3be16a500ecd930c9"}, + {file = "cffi-2.1.1-cp310-cp310-win32.whl", hash = "sha256:7ce713ace7c0e4520535b42b77eaa742c16dab813978064913e5a3cf82973b41"}, + {file = "cffi-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:a48d62ab9d6f4f98c983223a547af44be6ca3691074c31cecced6facd3ba2dc1"}, + {file = "cffi-2.1.1-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:c8d2c9fd1f2d16f780d15127abb050d13d1a76c03a4bd87d7e4980e45e511e12"}, + {file = "cffi-2.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:398aff33cee2767e3e781d2554c54bd0dff386bb437581e0d8011fde1a942ec1"}, + {file = "cffi-2.1.1-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:154852545011f779917b11c78db2358d095da62a9a172b78ad0a583ee5adc0d0"}, + {file = "cffi-2.1.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3311ed60d36f83378794e1009ac6258bafbf81f7888b4caa7b35a521e3f95813"}, + {file = "cffi-2.1.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6e192623c49c94421616a5778fba35cf0d5a8d000650c1967ef4448ee5cdd990"}, + {file = "cffi-2.1.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a6e721d4b0e45d5b65e87534470e67b18dcd092c83f68fba09f152b9cbc061af"}, + {file = "cffi-2.1.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:34e261f78cb6ceaaa36f42f2613f4380d94d9c759a9c73c769ee6e0247364632"}, + {file = "cffi-2.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7225e4514edb64eb6740324353e0da0711954fd8d7da4576755b1c6e09b697cd"}, + {file = "cffi-2.1.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:df913725b79db7bcf03448f36b7bf8815363417d5b58deecf9305e3e30f0f21a"}, + {file = "cffi-2.1.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f5cfbc5fe74540d335175b656c725d74d90e3730c626d92575eea35029d9afaa"}, + {file = "cffi-2.1.1-cp311-cp311-win32.whl", hash = "sha256:f8ec5e643a9a937f64e1999eb9f75d072263751912dc5cd06d3c85f8f44be7c3"}, + {file = "cffi-2.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:42f6930c31dc7f50732c9ae793c2786c7b6b044195967bbdde40bb9be81c4cc0"}, + {file = "cffi-2.1.1-cp311-cp311-win_arm64.whl", hash = "sha256:c7659f22557c5a0bc4855cd635f55edec690cc008a40768527762cb9fb263455"}, + {file = "cffi-2.1.1-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:c8c69575568085ba0b1b10c0249d779a214aea6f6522e949a0fc9fb0fcb449d0"}, + {file = "cffi-2.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f81b3b8f3d4e343550fa4baa0e479bba9f2d29ce9c2e9b51d1ce1718d7442fcf"}, + {file = "cffi-2.1.1-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:811bd1e21d32de12efca32393a0ab3f5133b54fce9bd44b8bd77ab07da14bf6a"}, + {file = "cffi-2.1.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:68e62fe11f30d5ca8289242866f0a5291402d8529ca2178ab8afc5c9694ae890"}, + {file = "cffi-2.1.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:4a7c934f7360e8cd64fe9efadcbd10c7c6364f531e432b9a4bf5ccbc9e0e8b50"}, + {file = "cffi-2.1.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:3143d81e29e1e20a9ce10901ec369012947876596f75a222235965f2b7ae832e"}, + {file = "cffi-2.1.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c1453022f490d2459a11819d83ad1d586e9ff65a12ac3e705ffebd46d3685dcf"}, + {file = "cffi-2.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:208f941bb9d18e768138677f0a6d2ce01f590df56043dda1df1535ac57c88517"}, + {file = "cffi-2.1.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:210019b6c7cf07f081b4c54635c8cf744377001350e29cc0f81c4377b4797735"}, + {file = "cffi-2.1.1-cp312-cp312-win32.whl", hash = "sha256:046bfc24911b37851ee1b51aab8bffe713d89c68c6a057b09484ce9fd5f69b4e"}, + {file = "cffi-2.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:f53e442b08449d42821fa4a4fba000095af9f62742a500f978a9f557ec44339a"}, + {file = "cffi-2.1.1-cp312-cp312-win_arm64.whl", hash = "sha256:7bde5e4cc5c10140859842b9d383af292b22639a4dffb725314baf45968cef80"}, + {file = "cffi-2.1.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:b5bdfd1c873d4e093aabc0ca84c4ca6dbc4f752afb5c86f146d9742580c9da2e"}, + {file = "cffi-2.1.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:31348097ff5bbe827ccc41795d4dd099d9f0625e7def00ee653c137a490c2a6c"}, + {file = "cffi-2.1.1-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:9d2055050ea716bd38b7f7f1579c275386646b4894c155a3e2f3cd62ed41b7c6"}, + {file = "cffi-2.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:19ee6127ee34de7d83ce3d371ebc5ed91addbdcc39f9ab15ce4eb35a4e534971"}, + {file = "cffi-2.1.1-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:6a8dddef476fab96d066d578fc88526767b836ab5ab21754e1d5bf3879c31c7c"}, + {file = "cffi-2.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f16c709686a78c727bbbf059f92b0bf41c6fc60deec706d2dc19f529175a6125"}, + {file = "cffi-2.1.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:fcd22650c908d7b7da162bbfaab594a1227a15d1643a98c68b122ac642fa2264"}, + {file = "cffi-2.1.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:aa9511c62d14da7aacc9b4bf51f3f697a621e83b2d6919008243c3aad168eea3"}, + {file = "cffi-2.1.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a931079504ecc49efed7744c476a5c343a92fabf66dec2db95edb1b2fdc770e2"}, + {file = "cffi-2.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a2d7755bef5a12ed488f4ef1f1b69ee9191d7396083b755a5d2295f6edb4768b"}, + {file = "cffi-2.1.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e0bcb7e0f677f543555d2adff3bf19c05f66cdb4796e5ff602442ab2fe3c4ef7"}, + {file = "cffi-2.1.1-cp313-cp313-win32.whl", hash = "sha256:334644fbac4eff73d985a17a91226df55d0f394160c4cfb880e084c8f7161cac"}, + {file = "cffi-2.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:1aa5645c30469b09530c4ebca77ebf8f17618293c58f8549cb1a543a50236e7d"}, + {file = "cffi-2.1.1-cp313-cp313-win_arm64.whl", hash = "sha256:63bbfd5ded17c4840ac07cd8f1c21ba9d9708141f840b324f422f41b207e3973"}, + {file = "cffi-2.1.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:7dbb61fe3a7699468030f71bbe5f8a0e326a151daa91beb11a6fc1f980c55e1c"}, + {file = "cffi-2.1.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:f24fb43132a4c6b4cb4eb029492919b2db645be6808d738f244fd146c03c32cb"}, + {file = "cffi-2.1.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:d28630f5854ab07ab1fd4aba756de52326c82e6be15d414b12793f1975048b54"}, + {file = "cffi-2.1.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:661c298b4821edebead0c91edd2b00374d67ad7c5a1f7a91d4442633b79d6a72"}, + {file = "cffi-2.1.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:58acb8ab8e295e6c5ea12f888cbb13cf21511ef2a3303a23f4325c29d17fe5c1"}, + {file = "cffi-2.1.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:456a61fa52d579ebf9df2e9552ead5129855dbaff6c1e5a9b1bc408809bdc062"}, + {file = "cffi-2.1.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a4f00aa42f75d6e4595e8866e748cc1705adc0cddfeb2ca86d0d03993d63ba03"}, + {file = "cffi-2.1.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b0431303acaea1089ad4b3e9ce4e6518193def1118d4073ca848635ee4ea2e96"}, + {file = "cffi-2.1.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:64faea20f4e2613363a1a9b9c7dd73058f3ecd00133a511e72ad7c511658f527"}, + {file = "cffi-2.1.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5c58fe613dc5e5336357eff555824a314d8e43282600435c8d1cb6a7a2fedd13"}, + {file = "cffi-2.1.1-cp314-cp314-win32.whl", hash = "sha256:1a18a57b58cfb21fc28d72e876acf10eaed67a1ed96226f92af4df681d571c4c"}, + {file = "cffi-2.1.1-cp314-cp314-win_amd64.whl", hash = "sha256:3222ba5d678f80a030e6afbcc33dc1ae5cb45facabb61cee2c7016b8432fde48"}, + {file = "cffi-2.1.1-cp314-cp314-win_arm64.whl", hash = "sha256:ab36d55f9ed2d067327667c2fea18dda018eb628dd6347aa01dda6cf1f5d3836"}, + {file = "cffi-2.1.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7750c6449dff7864bb9bb27ddfb0267756189201a3afc911d82b3caacd70dfc3"}, + {file = "cffi-2.1.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0beceaabe56af686895136a2de78db54ecd8e4046b236b8fd6d6cb61389e9bf2"}, + {file = "cffi-2.1.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:49cbc70e6542d4ccccb936558d1064a8012541e78f821f955cff24e357776c94"}, + {file = "cffi-2.1.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:e2d65b31f36619cda3999b78b2aa9632e76b78448e7a56fc4240824200e7c4fc"}, + {file = "cffi-2.1.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:28907ab9bfb6aa13184cfc17c6b8e1023c5ab6fd7076d8c20a35e59fe04f8f29"}, + {file = "cffi-2.1.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:51b31d1c98274844cfd7838ce00bfc27c7423a4dc00fc0772fc3331c2cc90676"}, + {file = "cffi-2.1.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5e7cecbaadb83884793e05828cee59b210b24583b9c7425d0ba6a754fe22eb4e"}, + {file = "cffi-2.1.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:25792eac27877609e7bb06d42ff88278a6624fff2ba9bbb523c09616b117e80f"}, + {file = "cffi-2.1.1-cp314-cp314t-win32.whl", hash = "sha256:8ef53b2de9bcb9197d31854256575d59dbac0cba72ac627bb291ef5eceb74be4"}, + {file = "cffi-2.1.1-cp314-cp314t-win_amd64.whl", hash = "sha256:616f097f2fe415bc92a247f02e11f634e1f9e9a83d327e3c915c15089c87869e"}, + {file = "cffi-2.1.1-cp314-cp314t-win_arm64.whl", hash = "sha256:ad2c86c495b899d862ea0f4b42891b8713a3bd45dd4105c7fd51c2a72f39f3a5"}, + {file = "cffi-2.1.1-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:dddad92b554513a31f272570678ba307fb9f618f05e3d4a5eacafff9eae03e1d"}, + {file = "cffi-2.1.1-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:da0e573f9f97159390c89d9f1a9e41908b66d408cc5b58d08cf3847d844c531b"}, + {file = "cffi-2.1.1-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:fb92203a88b3d3053034db775110081c49d28be6551923805e039924093761e4"}, + {file = "cffi-2.1.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:2ae64be792b8966f2c69538199728b290e34726562896df1e5dc8ffd8d8188e8"}, + {file = "cffi-2.1.1-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:507a24c282e0f42f8ed737cf048572cbf580468da5555764a8331735e9c736b6"}, + {file = "cffi-2.1.1-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:246fa40ce8645a614ff682e0b70f37134e460eaf93a775e0cbe3cca585a67a80"}, + {file = "cffi-2.1.1-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:471cee653ae88de62096552e6d24ccb4a5adb8c8c9f10b5054d0122c15bf2779"}, + {file = "cffi-2.1.1-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aeae0e330c9f6acd681f647d46cefd30c29f93e3392882e792e82080c9691399"}, + {file = "cffi-2.1.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:42a494cee34437f05546455144f2b5d9ac09b1face62bcfce597d2e521066688"}, + {file = "cffi-2.1.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:cc572dace3f60ef98d7b12ff411d20f5362feb31a0439eab0085bbfd349982d7"}, + {file = "cffi-2.1.1-cp315-cp315-win32.whl", hash = "sha256:4f42141fc14250de6dde5ee7ea4432be017252d91f19c5ad043c084cea629cac"}, + {file = "cffi-2.1.1-cp315-cp315-win_amd64.whl", hash = "sha256:e6e8cff14d6fb0be70a09c0bdc58096f501952d04624ebf867e0e56da2df8960"}, + {file = "cffi-2.1.1-cp315-cp315-win_arm64.whl", hash = "sha256:27350daa11d4f10c540e6e89dada4c54feb7256ad03e9a4dc075ebad7ba360d1"}, + {file = "cffi-2.1.1-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:c26608d2222fb1e94487e4a387d85f13eb55d5ed725cb25a0c589ac4ee60e7bc"}, + {file = "cffi-2.1.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:4be96343e422f2dfcd12ab5c9f5aebe03f82f737c6bffeca6830b3875cb44aab"}, + {file = "cffi-2.1.1-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:937c0052c05a31ca1daf18de3158eed4dbfcb9cc107adbea227728d647be701e"}, + {file = "cffi-2.1.1-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:df423d40ee8654634421812bc3b196da3f9bd7d32929da813f8394c4348a5358"}, + {file = "cffi-2.1.1-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a730a083190634c65cca36ba5f489531576ebd79bcd5c8e172130f6453127231"}, + {file = "cffi-2.1.1-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:363e05fa78e15116c3c32c210ee36884fd6b9afa6d440e47112c3bd511d64cb6"}, + {file = "cffi-2.1.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:770de9db11e84213beec501cfcaa013b019820ca881e03344dea5844f7876d94"}, + {file = "cffi-2.1.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:7da0c5eff80f0197f3b3d1232ec5a682a9325f4ae9016a78f5f5ca35f9ced1f5"}, + {file = "cffi-2.1.1-cp315-cp315t-win32.whl", hash = "sha256:06c72bb76605a4b0cd0aad6930b69d4baf7dd5d806cfc409b824191099700e66"}, + {file = "cffi-2.1.1-cp315-cp315t-win_amd64.whl", hash = "sha256:d9c275eaacd24aa73f94ffd6de08fc3f932424d8b6c376f4bed7cde376fe7bc3"}, + {file = "cffi-2.1.1-cp315-cp315t-win_arm64.whl", hash = "sha256:d18e5ac0f2f03f4f518d3e23db0f0cad7faa1da8620e9c09461d443bbf6e6692"}, + {file = "cffi-2.1.1.tar.gz", hash = "sha256:dd31f52ea1086513bb9df30f8fcee9b8918323ae067a3d5b78bc826a000712be"}, ] [package.dependencies] @@ -322,125 +337,184 @@ pycparser = {version = "*", markers = "implementation_name != \"PyPy\""} [[package]] name = "charset-normalizer" -version = "3.4.4" +version = "3.5.1" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7" groups = ["dev"] files = [ - {file = "charset_normalizer-3.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f820802628d2694cb7e56db99213f930856014862f3fd943d290ea8438d07ca8"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:798d75d81754988d2565bff1b97ba5a44411867c0cf32b77a7e8f8d84796b10d"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d1bb833febdff5c8927f922386db610b49db6e0d4f4ee29601d71e7c2694313"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9cd98cdc06614a2f768d2b7286d66805f94c48cde050acdbbb7db2600ab3197e"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:077fbb858e903c73f6c9db43374fd213b0b6a778106bc7032446a8e8b5b38b93"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:244bfb999c71b35de57821b8ea746b24e863398194a4014e4c76adc2bbdfeff0"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:64b55f9dce520635f018f907ff1b0df1fdc31f2795a922fb49dd14fbcdf48c84"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:faa3a41b2b66b6e50f84ae4a68c64fcd0c44355741c6374813a800cd6695db9e"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6515f3182dbe4ea06ced2d9e8666d97b46ef4c75e326b79bb624110f122551db"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cc00f04ed596e9dc0da42ed17ac5e596c6ccba999ba6bd92b0e0aef2f170f2d6"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-win32.whl", hash = "sha256:f34be2938726fc13801220747472850852fe6b1ea75869a048d6f896838c896f"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:a61900df84c667873b292c3de315a786dd8dac506704dea57bc957bd31e22c7d"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-win_arm64.whl", hash = "sha256:cead0978fc57397645f12578bfd2d5ea9138ea0fac82b2f63f7f7c6877986a69"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-win32.whl", hash = "sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-win_arm64.whl", hash = "sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-win32.whl", hash = "sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-win32.whl", hash = "sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-win32.whl", hash = "sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ce8a0633f41a967713a59c4139d29110c07e826d131a316b50ce11b1d79b4f84"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eaabd426fe94daf8fd157c32e571c85cb12e66692f15516a83a03264b08d06c3"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c4ef880e27901b6cc782f1b95f82da9313c0eb95c3af699103088fa0ac3ce9ac"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2aaba3b0819274cc41757a1da876f810a3e4d7b6eb25699253a4effef9e8e4af"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:778d2e08eda00f4256d7f672ca9fef386071c9202f5e4607920b86d7803387f2"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f155a433c2ec037d4e8df17d18922c3a0d9b3232a396690f17175d2946f0218d"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a8bf8d0f749c5757af2142fe7903a9df1d2e8aa3841559b2bad34b08d0e2bcf3"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:194f08cbb32dc406d6e1aea671a68be0823673db2832b38405deba2fb0d88f63"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:6aee717dcfead04c6eb1ce3bd29ac1e22663cdea57f943c87d1eab9a025438d7"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:cd4b7ca9984e5e7985c12bc60a6f173f3c958eae74f3ef6624bb6b26e2abbae4"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_riscv64.whl", hash = "sha256:b7cf1017d601aa35e6bb650b6ad28652c9cd78ee6caff19f3c28d03e1c80acbf"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:e912091979546adf63357d7e2ccff9b44f026c075aeaf25a52d0e95ad2281074"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:5cb4d72eea50c8868f5288b7f7f33ed276118325c1dfd3957089f6b519e1382a"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-win32.whl", hash = "sha256:837c2ce8c5a65a2035be9b3569c684358dfbf109fd3b6969630a87535495ceaa"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:44c2a8734b333e0578090c4cd6b16f275e07aa6614ca8715e6c038e865e70576"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a9768c477b9d7bd54bc0c86dbaebdec6f03306675526c9927c0e8a04e8f94af9"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1bee1e43c28aa63cb16e5c14e582580546b08e535299b8b6158a7c9c768a1f3d"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:fd44c878ea55ba351104cb93cc85e74916eb8fa440ca7903e57575e97394f608"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0f04b14ffe5fdc8c4933862d8306109a2c51e0704acfa35d51598eb45a1e89fc"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:cd09d08005f958f370f539f186d10aec3377d55b9eeb0d796025d4886119d76e"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4fe7859a4e3e8457458e2ff592f15ccb02f3da787fcd31e0183879c3ad4692a1"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fa09f53c465e532f4d3db095e0c55b615f010ad81803d383195b6b5ca6cbf5f3"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7fa17817dc5625de8a027cb8b26d9fefa3ea28c8253929b8d6649e705d2835b6"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:5947809c8a2417be3267efc979c47d76a079758166f7d43ef5ae8e9f92751f88"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:4902828217069c3c5c71094537a8e623f5d097858ac6ca8252f7b4d10b7560f1"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:7c308f7e26e4363d79df40ca5b2be1c6ba9f02bdbccfed5abddb7859a6ce72cf"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:2c9d3c380143a1fedbff95a312aa798578371eb29da42106a29019368a475318"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:cb01158d8b88ee68f15949894ccc6712278243d95f344770fa7593fa2d94410c"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-win32.whl", hash = "sha256:2677acec1a2f8ef614c6888b5b4ae4060cc184174a938ed4e8ef690e15d3e505"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:f8e160feb2aed042cd657a72acc0b481212ed28b1b9a95c0cee1621b524e1966"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-win_arm64.whl", hash = "sha256:b5d84d37db046c5ca74ee7bb47dd6cbc13f80665fdde3e8040bdd3fb015ecb50"}, - {file = "charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f"}, - {file = "charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a"}, + {file = "charset_normalizer-3.5.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1ee1e296209fdce05b81b663250eefa02213a2da7b41bf26f7829b8ba3545aa"}, + {file = "charset_normalizer-3.5.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e9fbdce1e47394b09bc9f26ab117dfc8d6491977a11d86f592bb42c779db2fda"}, + {file = "charset_normalizer-3.5.1-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:00668ebb0609751758682eb0b5857e7c35b9f00e84dfdef062e103244ec94d45"}, + {file = "charset_normalizer-3.5.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ba2f37ee79e6338845261a3c5b1784e5d1acdff2c0785b284f1b633033d136ab"}, + {file = "charset_normalizer-3.5.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ce854f5f478050ade5a238731c4ca985a7d3b3cb53ff600a9b5c3b689b5f0a7a"}, + {file = "charset_normalizer-3.5.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:96eefc178f8636b9c760c5829345307fd81cfae9ab1e80997dbddeb0f54ee9a3"}, + {file = "charset_normalizer-3.5.1-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:366ec70f5547c640d3ce1985722490f23faf4eb5216a7eeba78277490e78dacb"}, + {file = "charset_normalizer-3.5.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:950f23cb393f85543777b0433f082cddd25b51ab398eac7971146495679efe5f"}, + {file = "charset_normalizer-3.5.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:c1dcc36dcb96abc02236e182d17e0f71430152a6c2c7447421da2d2dc144edea"}, + {file = "charset_normalizer-3.5.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:07ffd07412fc5d5e84cd8952acf9ff7e4ed7a708e69d1bada19d8ba91711353f"}, + {file = "charset_normalizer-3.5.1-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:f5542f9b941279d82d41eb0aa9f98eba36fe4df5c7086c651df7944935b37182"}, + {file = "charset_normalizer-3.5.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:a545775cfe815855ea32d7c27731d79da358ef2055b4a25830231b1622dd18aa"}, + {file = "charset_normalizer-3.5.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:494b70049a4d69aec6e8137c13af4cf8db8c9f9820a1392ac293b0dd2987a818"}, + {file = "charset_normalizer-3.5.1-cp310-cp310-win32.whl", hash = "sha256:94fbf1c0c6cc0d3d5e50f9a9313a8cdca90dd696d34b381cd1704f8c9e939f20"}, + {file = "charset_normalizer-3.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:be47f99644b208bff7766314013f9acf57b056b04191d570d68ad14022cf5b1d"}, + {file = "charset_normalizer-3.5.1-cp310-cp310-win_arm64.whl", hash = "sha256:a6d095662e73e74f0a49988e0593373e243e3a52e27bfeea0a859e88acf4a0f5"}, + {file = "charset_normalizer-3.5.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:eda059b6bc8bc0812d626fd91a7ce01bf583df0a61296eff390fd94141a34e30"}, + {file = "charset_normalizer-3.5.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aa2bb0b37202dca27175591f761108b5d34096ade1191ffe4808bdf6b1571488"}, + {file = "charset_normalizer-3.5.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0b2b1b3fa5670c127b246df1d0c059defd41f689a868a3b9d79df9b1cac42d22"}, + {file = "charset_normalizer-3.5.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6e5e4d73d588ca5ed09df1b7dcd1b203d1df3c542e3f50d126c947d432b10731"}, + {file = "charset_normalizer-3.5.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b54e7e13267d49ffbfe68e25b3cbd774dab38fa37238f71265e91b36146eb21c"}, + {file = "charset_normalizer-3.5.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7b742bf31c88566b4bb6335a7f393bb322e580b6bb98df7bd0c25e6e3519ce8"}, + {file = "charset_normalizer-3.5.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6ba32c4d2abf1d2fe7cf27d280f4cca5664233b0f885549c7761719eb977f486"}, + {file = "charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0722590aabf9dc6a6c0343d523c05458fa2b5047dbe6302fd526bb570600753f"}, + {file = "charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:aa1099b956fb795e686d073568f6dc002a0bb89765ea6d5b055dd7d9bf1b116c"}, + {file = "charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:bd6c173f04743d483881bffa1478d5a4624475b8cd1d2194956a75548e191c18"}, + {file = "charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:f298e218441525d3794428b4c8b8fb8662c6d3ea79925d4807ee6b9a96a3bca5"}, + {file = "charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:6e2912d4babbc65196ac13c2f53468dc57fb8b9c25ef913e8c59ddf7c6dc0e1b"}, + {file = "charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3d27167433c0d5f18dc850f07d0b3816221984fecdc405d6c157a6f0b8f8e9e6"}, + {file = "charset_normalizer-3.5.1-cp311-cp311-win32.whl", hash = "sha256:ac00177c4831ffa650f8609e4bdddd5fe09c03b1c0c47acece7e6ea20421598b"}, + {file = "charset_normalizer-3.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:f9b1e28d0e8dbfa858abdba91d6b547beaf2df1a59bec6da6faae7b96a4991a9"}, + {file = "charset_normalizer-3.5.1-cp311-cp311-win_arm64.whl", hash = "sha256:ae31a1a1db2ee6cc2942fccaf695c934bc7f3db9f2133a3fef1f367cf1a4ab10"}, + {file = "charset_normalizer-3.5.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:5b6d1386bf0096d26d3a863dc0a487a5b4eb9aa93cf5ba69683d29dde6b9d60f"}, + {file = "charset_normalizer-3.5.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4582c27e8c889d64811987b5967fbd3ae0c823fe1fd933b543d55ac20bb475fa"}, + {file = "charset_normalizer-3.5.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:1d1c7a53a6c2103925cdd6d7229f8c567379f211c869793df679f2e9f738c369"}, + {file = "charset_normalizer-3.5.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e6621fb2a4988d6e53eedc455e5903e2679f3967b8acb3d639f1b63c14a2e893"}, + {file = "charset_normalizer-3.5.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7c0c10730342b0c9b35dd1d619beb8214e520bd96a1f870f452680b238aab3e0"}, + {file = "charset_normalizer-3.5.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b9af956078716df40d985fb0dfeb2c2120c5ca92ba4ff4b388acfd01cdc14d08"}, + {file = "charset_normalizer-3.5.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f9f8405c2c758532c74fed975dbee57be1f31a6e865c031870c79a6ed3212ada"}, + {file = "charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:96fef3e886d6a9874b14f27fc193fbdc69d5d8035783d86aa4e1cea594e695f9"}, + {file = "charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5d8531a6569d025f68e2321e7638fb7978f23db58e5f69f56913837aae03816e"}, + {file = "charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:aae2ee51122d3ae968a3837d97dc24a0aeebb0dea23694422cd172bd30017cd6"}, + {file = "charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:7235dc28fc6dd9d832ac7c7bce95367dedb85929f17368a0c2bee1e080b9acbf"}, + {file = "charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4abdc5f9ad448c1ecbfae2974b820535d6bc6e7eef63babbab3d81cf46968c71"}, + {file = "charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ba501e667c17d8411f98e67a022d9604ef179aff0e459b7e292c796837c13573"}, + {file = "charset_normalizer-3.5.1-cp312-cp312-win32.whl", hash = "sha256:cfa1c0cc3a8f9f53f1243a5a99ac36fd003880199383b37672e86ddda9cb07e2"}, + {file = "charset_normalizer-3.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:3617ac3cfd8b9888f145ad89dd6e692285834b0201c6074a5eeaad3fd4d668c2"}, + {file = "charset_normalizer-3.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:88e85ab89cb822c1e635f51d6d32e488f94e002e70e2f492bdb8b945543f345a"}, + {file = "charset_normalizer-3.5.1-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:4f298bdadb8f0b9e5672877f647d1be9373ef5320c9e2f049795e26cad28b6a9"}, + {file = "charset_normalizer-3.5.1-cp313-cp313-android_24_x86_64.whl", hash = "sha256:88ca277405c2d3b71c4e1c2ee0e7966e807bcba86a69d11e19ba199d18ae4491"}, + {file = "charset_normalizer-3.5.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:9362dd90aa7dab48c0054a21187791ccf05473f7dba5d92b8033ae62164675e7"}, + {file = "charset_normalizer-3.5.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:977cdbd483a9cff38179bea4fd754289a6f2195c7abd414aba85410b3e66cc5e"}, + {file = "charset_normalizer-3.5.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e90251c0c7bdd54a100a0dce3c07b7e637278c93af29dbf78ebb89a58c4bac7d"}, + {file = "charset_normalizer-3.5.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94d78ecec2605a8d0398b0f365d5f12a63248438516f5dac536a5eff7337df4a"}, + {file = "charset_normalizer-3.5.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d59b75732e9b6f27388e10c14b0259cc5f2e48c78627d185e6a177b58ad3cffe"}, + {file = "charset_normalizer-3.5.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0d929fc574b4d6fd9e7c0f5c2ede8716a41911923aa7fa5fce38e0818aa4a1ac"}, + {file = "charset_normalizer-3.5.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:394fea06235c8543390050ed5f529187074b029fb027213f6c46ac11ab5d950e"}, + {file = "charset_normalizer-3.5.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:62b55f6722735a6c472f88361cde6640608773d9443cebdbb51abf436a1fcdd3"}, + {file = "charset_normalizer-3.5.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fa48b1b63d639f9483e0633e092f5851e2348c352f1f9bb6c8182f87884ef876"}, + {file = "charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c71fb0d56c920c269cd3e2e3fe7c610e3f1fdb21a6ce60efa6430ff63676cea6"}, + {file = "charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:485a0d363cafefcd2538a73c7c838daa2035f09b2c9f9b5e3133f80c6aeb84c2"}, + {file = "charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5c0ea61a470e070686aa30892fed79e297d2c8d0ab46b8bcdf027d38c51da591"}, + {file = "charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:90b7481fb62fbe172c558bc6fd1c4c98d82004a54a7551f20e11ac9bf0b8708c"}, + {file = "charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:35fe081843b35aad20ffeccec3eeffbe637b15d14f3fb22cc1b59cd8ec17e93c"}, + {file = "charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fd0350afdc3aabd5576f60ea109228bd5538139713c7b094c5cd27c73a98bc6f"}, + {file = "charset_normalizer-3.5.1-cp313-cp313-pyemscripten_2025_0_wasm32.whl", hash = "sha256:9d9a0dc7cbe9bec24c3f767c9122c41fe5a1bc43f47cd099d00d393e09769de4"}, + {file = "charset_normalizer-3.5.1-cp313-cp313-win32.whl", hash = "sha256:d63600d620ad0064c3a748b950ac5ea38a80190e5498532efefa4b7b3f1da1f3"}, + {file = "charset_normalizer-3.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:aea996a6aba25260827c9ea511d1addfde2da9eb686ac961838509086188b7e6"}, + {file = "charset_normalizer-3.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:fd0a274c0e5f9a21565cd9d3dd749b61f96b7aa1e20a93aa1ba4029518f2e5c0"}, + {file = "charset_normalizer-3.5.1-cp314-cp314-android_24_arm64_v8a.whl", hash = "sha256:774d157f112367ff4abd29019f38f023c24e00e56edc7829c20e358a5a913ad8"}, + {file = "charset_normalizer-3.5.1-cp314-cp314-android_24_x86_64.whl", hash = "sha256:26422d45fd13551cf564c58932f7d72b4f58b93b0fcf18c35ba6be12b46bb102"}, + {file = "charset_normalizer-3.5.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:09a7bba9f739468c8e78c36a75c33768e53cb1959fc638f510454c14683f00d5"}, + {file = "charset_normalizer-3.5.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:4c9548dc78002099910abaebc0a72ac58b7d30931869e0351c09b507dff4ece3"}, + {file = "charset_normalizer-3.5.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c428c6c31eb5f4277d7f8eccaf767fbd548ddd5ce3c8b4f4cbbfab3d96b5904c"}, + {file = "charset_normalizer-3.5.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2f06b7eae9dbe77fe1d644ca244dad508de8d302870a43f3c559b521270938a0"}, + {file = "charset_normalizer-3.5.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6b7430cf5728e68f6c462254009a6ef4086e1bea43cf2f57aa9c55fb4f50ff96"}, + {file = "charset_normalizer-3.5.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ab743e9bc90c1f73552ec33e10e3331315acd2c397b36065b591b0181de533cc"}, + {file = "charset_normalizer-3.5.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f6f7deae3feb4edfa2efaf7c574fe88cbf055038a6abdb40188e4fff66d5699f"}, + {file = "charset_normalizer-3.5.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:15f024313246a4ed976c60f440bb8d257815513a681d212ff74fd46f7d715a90"}, + {file = "charset_normalizer-3.5.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:823f82903d189af463d7df250ef1f7f696f3cee08cc8d91deb565e8d425f6506"}, + {file = "charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:01e93745f7f219b703b60ba7afead36cfc4242782be5af484673fc500df12da5"}, + {file = "charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:329fc3ccb63ad22d867d84c2adea759a64079a37ba4a343433b02c7a2816871e"}, + {file = "charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:bb57753e36e4855b8ca375069482250a6246372331a3e4f3407eaebb007443f5"}, + {file = "charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:fce8cbd4997efeb450bd298b54f755dcdff18d496f7a5ddbb4867c6d7c88fdc3"}, + {file = "charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:6c9cdde8becb25a7fde49924511aa2644d6f8081cc8df8e9452724303348d8e3"}, + {file = "charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:9ac4444d8d4fd4c4bd08bf451ed3167aa9e7ec6cdb41b648794f1d1103652e36"}, + {file = "charset_normalizer-3.5.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:f03ac127268b43ef4fe9e6ab6794a6794b49485a0cc0c1db79876d2f33f75bc7"}, + {file = "charset_normalizer-3.5.1-cp314-cp314-win32.whl", hash = "sha256:1f5883d77fd409a261abb5dc8ccbe335720d798b1de4abb3b1d47ccbbc76b53b"}, + {file = "charset_normalizer-3.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:c658c50ac0c98cd755a2dd50b7977d3bca7df401dcc47fbdfa87db53ef7d4e8b"}, + {file = "charset_normalizer-3.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:4bea7f8ebe90bbd7f0e4a2de42ca6924ba23e3e76418c408ff82f1d46fabd687"}, + {file = "charset_normalizer-3.5.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:fbc597639158fd7c14d55e808718848319540f51b0e6746e3eefa59723a4a348"}, + {file = "charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e71c909f353863b2b89c83de2ebed71ea6d0df8a6ef65a128193c5e650766bef"}, + {file = "charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7ac76cf9afd34929d76eb7fcb63be476a4853d8a96f0dcf2d0db68a0cbdf9885"}, + {file = "charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a3a370082ce34d0612f421e15fe011c53bb1feff21a26d06ad4fb244dab5a375"}, + {file = "charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:256dd4d85d9e4dc595e2bc983c980e73f62ddeb3165c58b4c3dfe78c5c8548c1"}, + {file = "charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:58d4aa13a59c969dbfdf9e6a9560e242cbfd9e8a8f50c2747714df1a423adf65"}, + {file = "charset_normalizer-3.5.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0c6dfb5ca6723eeed15aa8e564a014d69fcb8812f94eef11fe3631e0508199f5"}, + {file = "charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c010f5581d9c612804cc59fcf7b524b707fbcb72828551237ab545bb5c7034af"}, + {file = "charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:52ec005752a56ae79547a05c0139ca2501a0c866390b6115008456b9f0e7cde1"}, + {file = "charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:2bced4061f000f7187254a02ad3433ae17eaf991747ceea2f478422590a5bba9"}, + {file = "charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:9eea3ab2597a5e65fe65296e2d6a84570845a6b55532d90333d740d48bbc850a"}, + {file = "charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:496846868fea80e479324862fa877f02411f2fd0f83b79ccee2607aa68b2a032"}, + {file = "charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:85d5855daafc240cc045c026d7a15fd198a09b0fc8ff6f5ecbb5297b509cb11e"}, + {file = "charset_normalizer-3.5.1-cp314-cp314t-win32.whl", hash = "sha256:58d3e12c88e0950bca850ae1f7c256055c097639c2edb9eb123af9807d8b15e4"}, + {file = "charset_normalizer-3.5.1-cp314-cp314t-win_amd64.whl", hash = "sha256:acaf604462bf330b0d07e7a07c1d6e4adac79e5fb13e9c5140590542cafacc00"}, + {file = "charset_normalizer-3.5.1-cp314-cp314t-win_arm64.whl", hash = "sha256:fdb8a068947befafba9952162645dc2fecaeb400e64584829ed5e9b2fbe21a7f"}, + {file = "charset_normalizer-3.5.1-cp315-cp315-macosx_10_15_universal2.whl", hash = "sha256:9085f87b0e38a2b92b8923059b4e8789fe40d9279712d15dcc670048d77079af"}, + {file = "charset_normalizer-3.5.1-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2679de311c7946dde5d3b6f44941844133ff5c7cb86099c0061ab1e8901c20a8"}, + {file = "charset_normalizer-3.5.1-cp315-cp315-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:baf3775a2635e5a11fbd5e4e64ee69c7e86875d224a5c72aca4c141064589a90"}, + {file = "charset_normalizer-3.5.1-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8ac8c94b6539074e0f40899301273ac8402b9b3e01c7b7ba269ff30340aaaf20"}, + {file = "charset_normalizer-3.5.1-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8fe532b3c966d1fb794e0698e4589d0444017ae77fc0b31edea13c0e35bcc449"}, + {file = "charset_normalizer-3.5.1-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5c84bec0ab5ae0c64bfe73a7d2adcb5ce73b467523fc27fd6a28ab2aa6cbe35a"}, + {file = "charset_normalizer-3.5.1-cp315-cp315-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:854066be00447fa8de2ccbbe893e2ffc4b123ef16d897af794c1e18bd4a714b0"}, + {file = "charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:21b82d8082f6f5e7f456ef0bd16323d08de1266efbfeb476e64b2a91d1471a4e"}, + {file = "charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_armv7l.whl", hash = "sha256:838648accb3a7fd9803fd45c87bce8509648eb0c11bc34e216141300977244f2"}, + {file = "charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_ppc64le.whl", hash = "sha256:195ce897c6153c0700078142cf8efe3e6454ca4cf4357499e4078dfd83396626"}, + {file = "charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_riscv64.whl", hash = "sha256:978eab16f55b4ab2c2a745be9a0a840bf8f09a7f227d9c76eb30214d078865a5"}, + {file = "charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_s390x.whl", hash = "sha256:cc0329df4caaceb950d2f580b5ac716a377f7059624a0bafaeaf8a218c6ed774"}, + {file = "charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:687c9ca3035544b113bea2055e180af96fb63c0c476e22a9180f51925186e7b7"}, + {file = "charset_normalizer-3.5.1-cp315-cp315-win32.whl", hash = "sha256:706bfd38730a5ac7a365793269a00f4e988178cec121391f4248d84ad8c972e9"}, + {file = "charset_normalizer-3.5.1-cp315-cp315-win_amd64.whl", hash = "sha256:92caef967d287a407085d61176fce4012b1dd62daed4eb6d5ceb26d3d2538712"}, + {file = "charset_normalizer-3.5.1-cp315-cp315-win_arm64.whl", hash = "sha256:5fc45d653ea8c9a20479167e11d4a0f8cb2fa3470737ab6f9c827532313187b7"}, + {file = "charset_normalizer-3.5.1-cp315-cp315t-macosx_10_15_universal2.whl", hash = "sha256:59171c6e45bf07d0d5cab3b0bf81d945035530f6873398b3b531c31184d46663"}, + {file = "charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9dbdd9205662134957cf0c324f639bdc5031c0ca056e2369e238db75187c0f11"}, + {file = "charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e4b018dc5a0eee4676e38fe84a47a427816c590b93b55d9025274ec4d6ffc2dc"}, + {file = "charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ced3fdd71aaa83ce593746c2edb42b7a59cb4c19c8b5c407781c72e493aae55a"}, + {file = "charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:19a3dd5aa73cef1c99687c4fc57db016a9c17104ae1185da88ba566a5d3bebe4"}, + {file = "charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cc5d36d96478aa9c60654bd932525bf32964c62a7281eafdf16d85003a8d6004"}, + {file = "charset_normalizer-3.5.1-cp315-cp315t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:04368edf83514385ffc3e1cfd4546e595f4f1272dd23ba437a93a9cc3741d47b"}, + {file = "charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:9b5db6052055d34d41230fb78d7c439c23dc536a9896f6cb039e8dd92cfc1263"}, + {file = "charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_armv7l.whl", hash = "sha256:252d099029bcbea642f2a06c4ed5046bdf8b5a8150b64afa5e027e88b106e5ee"}, + {file = "charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_ppc64le.whl", hash = "sha256:6199d5606e2bbf2b096cf64d03f8b6790c91081d5ac866b8e7bb6422738cc60c"}, + {file = "charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:77efcff2b23071c349402ac1066667a3d011f62398d81408c9b88ad991747c9e"}, + {file = "charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_s390x.whl", hash = "sha256:a5cbd90ecf0fc62e64726917ad083b73001f0563657a87ec3c0b504e277dc90d"}, + {file = "charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:4d26f14f041e83dd8edfd61f4cd4fa7285d31798b5bf1f28e70c367ba6c41d61"}, + {file = "charset_normalizer-3.5.1-cp315-cp315t-win32.whl", hash = "sha256:ac13b004224fb341e1e25a1ed5e19d32f57cdb2a403e01f003b46f051a550f6f"}, + {file = "charset_normalizer-3.5.1-cp315-cp315t-win_amd64.whl", hash = "sha256:35aea775dc2bd5f54cd84a1cd2696cc3207c479cb9cf0bd346f0d343e4300ddb"}, + {file = "charset_normalizer-3.5.1-cp315-cp315t-win_arm64.whl", hash = "sha256:fb78f6e7fcd8ad785d28cd577168bc1aaee827b25bb8755638f694794ea98f0a"}, + {file = "charset_normalizer-3.5.1-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:41876ee62a3dddf48ff1121ad8f0798032aa03f2fd35f21f34a4cab14f18d8d2"}, + {file = "charset_normalizer-3.5.1-cp37-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a6dac12ff6b846103483683f60c5f8fee205121adc58ffd87e90a90a3af69e99"}, + {file = "charset_normalizer-3.5.1-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cee5dd7c6fb5dd52a0fe2a740f9bc6e3593f5f8b1788bde49de02086f30182b2"}, + {file = "charset_normalizer-3.5.1-cp37-abi3-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:343fb4f2821043bd87095f7b08a1a181febc8e36ac64212143bbfd0a0e1bc235"}, + {file = "charset_normalizer-3.5.1-cp37-abi3-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ae4a097991662cd4fff0ddc74e0fe7874f82e00042fa0ea00855645ed0c79598"}, + {file = "charset_normalizer-3.5.1-cp37-abi3-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4b599739b93b2cbeded49645ae3c8d1405c29ddfbceac1545c87a3f9580a9e96"}, + {file = "charset_normalizer-3.5.1-cp37-abi3-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b39b69b347e5e47a3b5b8cfc005c68c1ba347474e3960236c4944a8ecd174962"}, + {file = "charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:a2028475ba855475b8b4d3cfeb4994269c967aea8b9892dfba907f4263a863a3"}, + {file = "charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:36047af20e17097c3bb9476c2b7655f2f7aa51322c0ba58c07695bedf755a950"}, + {file = "charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_ppc64le.whl", hash = "sha256:4c4fb141a727957c93edfe5c32a26ceb6b5f6461d67146e2d39f51e16170bea8"}, + {file = "charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_riscv64.whl", hash = "sha256:2f293479cce755c75f1697e87c409b7ae4c555c7dfecb6e988ad13abba943031"}, + {file = "charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_s390x.whl", hash = "sha256:3588e376b3ea2eea84976f67273d679f229e24c66dce7b82ae45aef04ff6e072"}, + {file = "charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e199fb99720074809a7720f1c0b4d919eea8b87e88713e0f8f602f7bef543d9d"}, + {file = "charset_normalizer-3.5.1-cp37-abi3-win32.whl", hash = "sha256:dd732602a7009217f658d5863d12d79d373a4de0eebc111094bcdd3bb8e0a6cc"}, + {file = "charset_normalizer-3.5.1-cp37-abi3-win_amd64.whl", hash = "sha256:70055ff39b97c99e7ae40ea3e393fb62aa2e44dbd9b29f8d14f42fb0025c3959"}, + {file = "charset_normalizer-3.5.1-cp37-abi3-win_arm64.whl", hash = "sha256:87e4f41d375c0b9be2fb5251aee4b8a689169e134535aed81bf085c3b647451e"}, + {file = "charset_normalizer-3.5.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:85de3134b5379856e323ba37c19c9256d39425f7b76a63af52b09fb4664c2e8f"}, + {file = "charset_normalizer-3.5.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3e5e1224c0a6a90e05843e07adfec669edebec17801c67072f51e59561d63c0b"}, + {file = "charset_normalizer-3.5.1-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5e2d0e146dcb57034f8b97dc58d2d512cb90aba253960ce449f695fec6a82c6f"}, + {file = "charset_normalizer-3.5.1-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e06efa066f7dbadbc84ebc126a97c452a6451dfcf589d89d788484949e1cf795"}, + {file = "charset_normalizer-3.5.1-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:994e883d17c559cdfd38c84003c8b27d25424a1077272a17e7cd27bfe0bf57b2"}, + {file = "charset_normalizer-3.5.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:789b8982559ae28dad2356519f841655756cdcd96616410590ae0b17454ee64f"}, + {file = "charset_normalizer-3.5.1-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a951ad59cad9145664a730d3036b40b844e74d2d3683da40111463cd3a83845d"}, + {file = "charset_normalizer-3.5.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:55261ac0d2941c42f196dd576f543d87a8ee03cd6f5e30dfb4d807b2e3b9121a"}, + {file = "charset_normalizer-3.5.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:5ca0555312ae2fe82715cada7fac375530c2f3349e1eaa1bcb33d0283ac79a18"}, + {file = "charset_normalizer-3.5.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:2e9cf9253119d8e5d111f05d71626786fd3d6193817316eab1ca088cdb8593cf"}, + {file = "charset_normalizer-3.5.1-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:433c5a81eade63b47e522303bad236f59dba55ea6951746f5558355eeed8c75d"}, + {file = "charset_normalizer-3.5.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:13e3afe97712e8887cd516e960c63f0b93122971e5b5e4b2622fe7701771e838"}, + {file = "charset_normalizer-3.5.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb12fb2ba69ffa05f8695f61c69e591dc4b4a12ac3757ac8af8adb259bf56d17"}, + {file = "charset_normalizer-3.5.1-cp39-cp39-win32.whl", hash = "sha256:56490c595a28b1bb27dfc583e816152a9767721ef58b2c03b13f954d2f707420"}, + {file = "charset_normalizer-3.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:012a22b88a77ca2e59b98ac5889b0deb604147666032f45e6d6e217634d2550d"}, + {file = "charset_normalizer-3.5.1-cp39-cp39-win_arm64.whl", hash = "sha256:29880d17a8eb0b5cfdfd8944b468322928059aa35f1f5fa8ff22b149ec0b42f8"}, + {file = "charset_normalizer-3.5.1-py3-none-any.whl", hash = "sha256:6df0ec430f9a831772c23ca5a224cba36517a58a84bb32c32bb59a9fa67c47f6"}, + {file = "charset_normalizer-3.5.1.tar.gz", hash = "sha256:6117b84ea48435e5356dc737f5121485c30920ba43375fa7b434fd753df0eac3"}, ] [[package]] @@ -491,78 +565,70 @@ test = ["pytest"] [[package]] name = "contourpy" -version = "1.3.0" +version = "1.3.2" description = "Python library for calculating contours of 2D quadrilateral grids" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["dev", "floris"] markers = "python_version < \"3.11\"" files = [ - {file = "contourpy-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:880ea32e5c774634f9fcd46504bf9f080a41ad855f4fef54f5380f5133d343c7"}, - {file = "contourpy-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:76c905ef940a4474a6289c71d53122a4f77766eef23c03cd57016ce19d0f7b42"}, - {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92f8557cbb07415a4d6fa191f20fd9d2d9eb9c0b61d1b2f52a8926e43c6e9af7"}, - {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:36f965570cff02b874773c49bfe85562b47030805d7d8360748f3eca570f4cab"}, - {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cacd81e2d4b6f89c9f8a5b69b86490152ff39afc58a95af002a398273e5ce589"}, - {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69375194457ad0fad3a839b9e29aa0b0ed53bb54db1bfb6c3ae43d111c31ce41"}, - {file = "contourpy-1.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a52040312b1a858b5e31ef28c2e865376a386c60c0e248370bbea2d3f3b760d"}, - {file = "contourpy-1.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3faeb2998e4fcb256542e8a926d08da08977f7f5e62cf733f3c211c2a5586223"}, - {file = "contourpy-1.3.0-cp310-cp310-win32.whl", hash = "sha256:36e0cff201bcb17a0a8ecc7f454fe078437fa6bda730e695a92f2d9932bd507f"}, - {file = "contourpy-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:87ddffef1dbe5e669b5c2440b643d3fdd8622a348fe1983fad7a0f0ccb1cd67b"}, - {file = "contourpy-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0fa4c02abe6c446ba70d96ece336e621efa4aecae43eaa9b030ae5fb92b309ad"}, - {file = "contourpy-1.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:834e0cfe17ba12f79963861e0f908556b2cedd52e1f75e6578801febcc6a9f49"}, - {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbc4c3217eee163fa3984fd1567632b48d6dfd29216da3ded3d7b844a8014a66"}, - {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4865cd1d419e0c7a7bf6de1777b185eebdc51470800a9f42b9e9decf17762081"}, - {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:303c252947ab4b14c08afeb52375b26781ccd6a5ccd81abcdfc1fafd14cf93c1"}, - {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637f674226be46f6ba372fd29d9523dd977a291f66ab2a74fbeb5530bb3f445d"}, - {file = "contourpy-1.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:76a896b2f195b57db25d6b44e7e03f221d32fe318d03ede41f8b4d9ba1bff53c"}, - {file = "contourpy-1.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e1fd23e9d01591bab45546c089ae89d926917a66dceb3abcf01f6105d927e2cb"}, - {file = "contourpy-1.3.0-cp311-cp311-win32.whl", hash = "sha256:d402880b84df3bec6eab53cd0cf802cae6a2ef9537e70cf75e91618a3801c20c"}, - {file = "contourpy-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:6cb6cc968059db9c62cb35fbf70248f40994dfcd7aa10444bbf8b3faeb7c2d67"}, - {file = "contourpy-1.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:570ef7cf892f0afbe5b2ee410c507ce12e15a5fa91017a0009f79f7d93a1268f"}, - {file = "contourpy-1.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:da84c537cb8b97d153e9fb208c221c45605f73147bd4cadd23bdae915042aad6"}, - {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0be4d8425bfa755e0fd76ee1e019636ccc7c29f77a7c86b4328a9eb6a26d0639"}, - {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c0da700bf58f6e0b65312d0a5e695179a71d0163957fa381bb3c1f72972537c"}, - {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb8b141bb00fa977d9122636b16aa67d37fd40a3d8b52dd837e536d64b9a4d06"}, - {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3634b5385c6716c258d0419c46d05c8aa7dc8cb70326c9a4fb66b69ad2b52e09"}, - {file = "contourpy-1.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0dce35502151b6bd35027ac39ba6e5a44be13a68f55735c3612c568cac3805fd"}, - {file = "contourpy-1.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:aea348f053c645100612b333adc5983d87be69acdc6d77d3169c090d3b01dc35"}, - {file = "contourpy-1.3.0-cp312-cp312-win32.whl", hash = "sha256:90f73a5116ad1ba7174341ef3ea5c3150ddf20b024b98fb0c3b29034752c8aeb"}, - {file = "contourpy-1.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:b11b39aea6be6764f84360fce6c82211a9db32a7c7de8fa6dd5397cf1d079c3b"}, - {file = "contourpy-1.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3e1c7fa44aaae40a2247e2e8e0627f4bea3dd257014764aa644f319a5f8600e3"}, - {file = "contourpy-1.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:364174c2a76057feef647c802652f00953b575723062560498dc7930fc9b1cb7"}, - {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32b238b3b3b649e09ce9aaf51f0c261d38644bdfa35cbaf7b263457850957a84"}, - {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d51fca85f9f7ad0b65b4b9fe800406d0d77017d7270d31ec3fb1cc07358fdea0"}, - {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:732896af21716b29ab3e988d4ce14bc5133733b85956316fb0c56355f398099b"}, - {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d73f659398a0904e125280836ae6f88ba9b178b2fed6884f3b1f95b989d2c8da"}, - {file = "contourpy-1.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c6c7c2408b7048082932cf4e641fa3b8ca848259212f51c8c59c45aa7ac18f14"}, - {file = "contourpy-1.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f317576606de89da6b7e0861cf6061f6146ead3528acabff9236458a6ba467f8"}, - {file = "contourpy-1.3.0-cp313-cp313-win32.whl", hash = "sha256:31cd3a85dbdf1fc002280c65caa7e2b5f65e4a973fcdf70dd2fdcb9868069294"}, - {file = "contourpy-1.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:4553c421929ec95fb07b3aaca0fae668b2eb5a5203d1217ca7c34c063c53d087"}, - {file = "contourpy-1.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:345af746d7766821d05d72cb8f3845dfd08dd137101a2cb9b24de277d716def8"}, - {file = "contourpy-1.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3bb3808858a9dc68f6f03d319acd5f1b8a337e6cdda197f02f4b8ff67ad2057b"}, - {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:420d39daa61aab1221567b42eecb01112908b2cab7f1b4106a52caaec8d36973"}, - {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d63ee447261e963af02642ffcb864e5a2ee4cbfd78080657a9880b8b1868e18"}, - {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:167d6c890815e1dac9536dca00828b445d5d0df4d6a8c6adb4a7ec3166812fa8"}, - {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:710a26b3dc80c0e4febf04555de66f5fd17e9cf7170a7b08000601a10570bda6"}, - {file = "contourpy-1.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:75ee7cb1a14c617f34a51d11fa7524173e56551646828353c4af859c56b766e2"}, - {file = "contourpy-1.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:33c92cdae89ec5135d036e7218e69b0bb2851206077251f04a6c4e0e21f03927"}, - {file = "contourpy-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a11077e395f67ffc2c44ec2418cfebed032cd6da3022a94fc227b6faf8e2acb8"}, - {file = "contourpy-1.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e8134301d7e204c88ed7ab50028ba06c683000040ede1d617298611f9dc6240c"}, - {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e12968fdfd5bb45ffdf6192a590bd8ddd3ba9e58360b29683c6bb71a7b41edca"}, - {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fd2a0fc506eccaaa7595b7e1418951f213cf8255be2600f1ea1b61e46a60c55f"}, - {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4cfb5c62ce023dfc410d6059c936dcf96442ba40814aefbfa575425a3a7f19dc"}, - {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68a32389b06b82c2fdd68276148d7b9275b5f5cf13e5417e4252f6d1a34f72a2"}, - {file = "contourpy-1.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:94e848a6b83da10898cbf1311a815f770acc9b6a3f2d646f330d57eb4e87592e"}, - {file = "contourpy-1.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d78ab28a03c854a873787a0a42254a0ccb3cb133c672f645c9f9c8f3ae9d0800"}, - {file = "contourpy-1.3.0-cp39-cp39-win32.whl", hash = "sha256:81cb5ed4952aae6014bc9d0421dec7c5835c9c8c31cdf51910b708f548cf58e5"}, - {file = "contourpy-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:14e262f67bd7e6eb6880bc564dcda30b15e351a594657e55b7eec94b6ef72843"}, - {file = "contourpy-1.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fe41b41505a5a33aeaed2a613dccaeaa74e0e3ead6dd6fd3a118fb471644fd6c"}, - {file = "contourpy-1.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eca7e17a65f72a5133bdbec9ecf22401c62bcf4821361ef7811faee695799779"}, - {file = "contourpy-1.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ec4dc6bf570f5b22ed0d7efba0dfa9c5b9e0431aeea7581aa217542d9e809a4"}, - {file = "contourpy-1.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:00ccd0dbaad6d804ab259820fa7cb0b8036bda0686ef844d24125d8287178ce0"}, - {file = "contourpy-1.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ca947601224119117f7c19c9cdf6b3ab54c5726ef1d906aa4a69dfb6dd58102"}, - {file = "contourpy-1.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c6ec93afeb848a0845a18989da3beca3eec2c0f852322efe21af1931147d12cb"}, - {file = "contourpy-1.3.0.tar.gz", hash = "sha256:7ffa0db17717a8ffb127efd0c95a4362d996b892c2904db72428d5b52e1938a4"}, + {file = "contourpy-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ba38e3f9f330af820c4b27ceb4b9c7feee5fe0493ea53a8720f4792667465934"}, + {file = "contourpy-1.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dc41ba0714aa2968d1f8674ec97504a8f7e334f48eeacebcaa6256213acb0989"}, + {file = "contourpy-1.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9be002b31c558d1ddf1b9b415b162c603405414bacd6932d031c5b5a8b757f0d"}, + {file = "contourpy-1.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8d2e74acbcba3bfdb6d9d8384cdc4f9260cae86ed9beee8bd5f54fee49a430b9"}, + {file = "contourpy-1.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e259bced5549ac64410162adc973c5e2fb77f04df4a439d00b478e57a0e65512"}, + {file = "contourpy-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad687a04bc802cbe8b9c399c07162a3c35e227e2daccf1668eb1f278cb698631"}, + {file = "contourpy-1.3.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cdd22595308f53ef2f891040ab2b93d79192513ffccbd7fe19be7aa773a5e09f"}, + {file = "contourpy-1.3.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b4f54d6a2defe9f257327b0f243612dd051cc43825587520b1bf74a31e2f6ef2"}, + {file = "contourpy-1.3.2-cp310-cp310-win32.whl", hash = "sha256:f939a054192ddc596e031e50bb13b657ce318cf13d264f095ce9db7dc6ae81c0"}, + {file = "contourpy-1.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:c440093bbc8fc21c637c03bafcbef95ccd963bc6e0514ad887932c18ca2a759a"}, + {file = "contourpy-1.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6a37a2fb93d4df3fc4c0e363ea4d16f83195fc09c891bc8ce072b9d084853445"}, + {file = "contourpy-1.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b7cd50c38f500bbcc9b6a46643a40e0913673f869315d8e70de0438817cb7773"}, + {file = "contourpy-1.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6658ccc7251a4433eebd89ed2672c2ed96fba367fd25ca9512aa92a4b46c4f1"}, + {file = "contourpy-1.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:70771a461aaeb335df14deb6c97439973d253ae70660ca085eec25241137ef43"}, + {file = "contourpy-1.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65a887a6e8c4cd0897507d814b14c54a8c2e2aa4ac9f7686292f9769fcf9a6ab"}, + {file = "contourpy-1.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3859783aefa2b8355697f16642695a5b9792e7a46ab86da1118a4a23a51a33d7"}, + {file = "contourpy-1.3.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:eab0f6db315fa4d70f1d8ab514e527f0366ec021ff853d7ed6a2d33605cf4b83"}, + {file = "contourpy-1.3.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d91a3ccc7fea94ca0acab82ceb77f396d50a1f67412efe4c526f5d20264e6ecd"}, + {file = "contourpy-1.3.2-cp311-cp311-win32.whl", hash = "sha256:1c48188778d4d2f3d48e4643fb15d8608b1d01e4b4d6b0548d9b336c28fc9b6f"}, + {file = "contourpy-1.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:5ebac872ba09cb8f2131c46b8739a7ff71de28a24c869bcad554477eb089a878"}, + {file = "contourpy-1.3.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4caf2bcd2969402bf77edc4cb6034c7dd7c0803213b3523f111eb7460a51b8d2"}, + {file = "contourpy-1.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:82199cb78276249796419fe36b7386bd8d2cc3f28b3bc19fe2454fe2e26c4c15"}, + {file = "contourpy-1.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:106fab697af11456fcba3e352ad50effe493a90f893fca6c2ca5c033820cea92"}, + {file = "contourpy-1.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d14f12932a8d620e307f715857107b1d1845cc44fdb5da2bc8e850f5ceba9f87"}, + {file = "contourpy-1.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:532fd26e715560721bb0d5fc7610fce279b3699b018600ab999d1be895b09415"}, + {file = "contourpy-1.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26b383144cf2d2c29f01a1e8170f50dacf0eac02d64139dcd709a8ac4eb3cfe"}, + {file = "contourpy-1.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c49f73e61f1f774650a55d221803b101d966ca0c5a2d6d5e4320ec3997489441"}, + {file = "contourpy-1.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3d80b2c0300583228ac98d0a927a1ba6a2ba6b8a742463c564f1d419ee5b211e"}, + {file = "contourpy-1.3.2-cp312-cp312-win32.whl", hash = "sha256:90df94c89a91b7362e1142cbee7568f86514412ab8a2c0d0fca72d7e91b62912"}, + {file = "contourpy-1.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:8c942a01d9163e2e5cfb05cb66110121b8d07ad438a17f9e766317bcb62abf73"}, + {file = "contourpy-1.3.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:de39db2604ae755316cb5967728f4bea92685884b1e767b7c24e983ef5f771cb"}, + {file = "contourpy-1.3.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3f9e896f447c5c8618f1edb2bafa9a4030f22a575ec418ad70611450720b5b08"}, + {file = "contourpy-1.3.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71e2bd4a1c4188f5c2b8d274da78faab884b59df20df63c34f74aa1813c4427c"}, + {file = "contourpy-1.3.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de425af81b6cea33101ae95ece1f696af39446db9682a0b56daaa48cfc29f38f"}, + {file = "contourpy-1.3.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:977e98a0e0480d3fe292246417239d2d45435904afd6d7332d8455981c408b85"}, + {file = "contourpy-1.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:434f0adf84911c924519d2b08fc10491dd282b20bdd3fa8f60fd816ea0b48841"}, + {file = "contourpy-1.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c66c4906cdbc50e9cba65978823e6e00b45682eb09adbb78c9775b74eb222422"}, + {file = "contourpy-1.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8b7fc0cd78ba2f4695fd0a6ad81a19e7e3ab825c31b577f384aa9d7817dc3bef"}, + {file = "contourpy-1.3.2-cp313-cp313-win32.whl", hash = "sha256:15ce6ab60957ca74cff444fe66d9045c1fd3e92c8936894ebd1f3eef2fff075f"}, + {file = "contourpy-1.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:e1578f7eafce927b168752ed7e22646dad6cd9bca673c60bff55889fa236ebf9"}, + {file = "contourpy-1.3.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0475b1f6604896bc7c53bb070e355e9321e1bc0d381735421a2d2068ec56531f"}, + {file = "contourpy-1.3.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c85bb486e9be652314bb5b9e2e3b0d1b2e643d5eec4992c0fbe8ac71775da739"}, + {file = "contourpy-1.3.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:745b57db7758f3ffc05a10254edd3182a2a83402a89c00957a8e8a22f5582823"}, + {file = "contourpy-1.3.2-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:970e9173dbd7eba9b4e01aab19215a48ee5dd3f43cef736eebde064a171f89a5"}, + {file = "contourpy-1.3.2-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6c4639a9c22230276b7bffb6a850dfc8258a2521305e1faefe804d006b2e532"}, + {file = "contourpy-1.3.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc829960f34ba36aad4302e78eabf3ef16a3a100863f0d4eeddf30e8a485a03b"}, + {file = "contourpy-1.3.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d32530b534e986374fc19eaa77fcb87e8a99e5431499949b828312bdcd20ac52"}, + {file = "contourpy-1.3.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e298e7e70cf4eb179cc1077be1c725b5fd131ebc81181bf0c03525c8abc297fd"}, + {file = "contourpy-1.3.2-cp313-cp313t-win32.whl", hash = "sha256:d0e589ae0d55204991450bb5c23f571c64fe43adaa53f93fc902a84c96f52fe1"}, + {file = "contourpy-1.3.2-cp313-cp313t-win_amd64.whl", hash = "sha256:78e9253c3de756b3f6a5174d024c4835acd59eb3f8e2ca13e775dbffe1558f69"}, + {file = "contourpy-1.3.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fd93cc7f3139b6dd7aab2f26a90dde0aa9fc264dbf70f6740d498a70b860b82c"}, + {file = "contourpy-1.3.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:107ba8a6a7eec58bb475329e6d3b95deba9440667c4d62b9b6063942b61d7f16"}, + {file = "contourpy-1.3.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ded1706ed0c1049224531b81128efbd5084598f18d8a2d9efae833edbd2b40ad"}, + {file = "contourpy-1.3.2-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5f5964cdad279256c084b69c3f412b7801e15356b16efa9d78aa974041903da0"}, + {file = "contourpy-1.3.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49b65a95d642d4efa8f64ba12558fcb83407e58a2dfba9d796d77b63ccfcaff5"}, + {file = "contourpy-1.3.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:8c5acb8dddb0752bf252e01a3035b21443158910ac16a3b0d20e7fed7d534ce5"}, + {file = "contourpy-1.3.2.tar.gz", hash = "sha256:b6945942715a034c671b7fc54f9588126b0b8bf23db2696e3ca8328f3ff0ab54"}, ] [package.dependencies] @@ -571,7 +637,7 @@ numpy = ">=1.23" [package.extras] bokeh = ["bokeh", "selenium"] docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] -mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.11.1)", "types-Pillow"] +mypy = ["bokeh", "contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.15.0)", "types-Pillow"] test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] test-no-images = ["pytest", "pytest-cov", "pytest-rerunfailures", "pytest-xdist", "wurlitzer"] @@ -686,54 +752,54 @@ tests = ["pytest", "pytest-cov", "pytest-xdist"] [[package]] name = "debugpy" -version = "1.8.17" +version = "1.8.21" description = "An implementation of the Debug Adapter Protocol for Python" optional = false python-versions = ">=3.8" groups = ["dev"] files = [ - {file = "debugpy-1.8.17-cp310-cp310-macosx_15_0_x86_64.whl", hash = "sha256:c41d2ce8bbaddcc0009cc73f65318eedfa3dbc88a8298081deb05389f1ab5542"}, - {file = "debugpy-1.8.17-cp310-cp310-manylinux_2_34_x86_64.whl", hash = "sha256:1440fd514e1b815edd5861ca394786f90eb24960eb26d6f7200994333b1d79e3"}, - {file = "debugpy-1.8.17-cp310-cp310-win32.whl", hash = "sha256:3a32c0af575749083d7492dc79f6ab69f21b2d2ad4cd977a958a07d5865316e4"}, - {file = "debugpy-1.8.17-cp310-cp310-win_amd64.whl", hash = "sha256:a3aad0537cf4d9c1996434be68c6c9a6d233ac6f76c2a482c7803295b4e4f99a"}, - {file = "debugpy-1.8.17-cp311-cp311-macosx_15_0_universal2.whl", hash = "sha256:d3fce3f0e3de262a3b67e69916d001f3e767661c6e1ee42553009d445d1cd840"}, - {file = "debugpy-1.8.17-cp311-cp311-manylinux_2_34_x86_64.whl", hash = "sha256:c6bdf134457ae0cac6fb68205776be635d31174eeac9541e1d0c062165c6461f"}, - {file = "debugpy-1.8.17-cp311-cp311-win32.whl", hash = "sha256:e79a195f9e059edfe5d8bf6f3749b2599452d3e9380484cd261f6b7cd2c7c4da"}, - {file = "debugpy-1.8.17-cp311-cp311-win_amd64.whl", hash = "sha256:b532282ad4eca958b1b2d7dbcb2b7218e02cb934165859b918e3b6ba7772d3f4"}, - {file = "debugpy-1.8.17-cp312-cp312-macosx_15_0_universal2.whl", hash = "sha256:f14467edef672195c6f6b8e27ce5005313cb5d03c9239059bc7182b60c176e2d"}, - {file = "debugpy-1.8.17-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:24693179ef9dfa20dca8605905a42b392be56d410c333af82f1c5dff807a64cc"}, - {file = "debugpy-1.8.17-cp312-cp312-win32.whl", hash = "sha256:6a4e9dacf2cbb60d2514ff7b04b4534b0139facbf2abdffe0639ddb6088e59cf"}, - {file = "debugpy-1.8.17-cp312-cp312-win_amd64.whl", hash = "sha256:e8f8f61c518952fb15f74a302e068b48d9c4691768ade433e4adeea961993464"}, - {file = "debugpy-1.8.17-cp313-cp313-macosx_15_0_universal2.whl", hash = "sha256:857c1dd5d70042502aef1c6d1c2801211f3ea7e56f75e9c335f434afb403e464"}, - {file = "debugpy-1.8.17-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:3bea3b0b12f3946e098cce9b43c3c46e317b567f79570c3f43f0b96d00788088"}, - {file = "debugpy-1.8.17-cp313-cp313-win32.whl", hash = "sha256:e34ee844c2f17b18556b5bbe59e1e2ff4e86a00282d2a46edab73fd7f18f4a83"}, - {file = "debugpy-1.8.17-cp313-cp313-win_amd64.whl", hash = "sha256:6c5cd6f009ad4fca8e33e5238210dc1e5f42db07d4b6ab21ac7ffa904a196420"}, - {file = "debugpy-1.8.17-cp314-cp314-macosx_15_0_universal2.whl", hash = "sha256:045290c010bcd2d82bc97aa2daf6837443cd52f6328592698809b4549babcee1"}, - {file = "debugpy-1.8.17-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:b69b6bd9dba6a03632534cdf67c760625760a215ae289f7489a452af1031fe1f"}, - {file = "debugpy-1.8.17-cp314-cp314-win32.whl", hash = "sha256:5c59b74aa5630f3a5194467100c3b3d1c77898f9ab27e3f7dc5d40fc2f122670"}, - {file = "debugpy-1.8.17-cp314-cp314-win_amd64.whl", hash = "sha256:893cba7bb0f55161de4365584b025f7064e1f88913551bcd23be3260b231429c"}, - {file = "debugpy-1.8.17-cp38-cp38-macosx_15_0_x86_64.whl", hash = "sha256:8deb4e31cd575c9f9370042876e078ca118117c1b5e1f22c32befcfbb6955f0c"}, - {file = "debugpy-1.8.17-cp38-cp38-manylinux_2_34_x86_64.whl", hash = "sha256:b75868b675949a96ab51abc114c7163f40ff0d8f7d6d5fd63f8932fd38e9c6d7"}, - {file = "debugpy-1.8.17-cp38-cp38-win32.whl", hash = "sha256:17e456da14848d618662354e1dccfd5e5fb75deec3d1d48dc0aa0baacda55860"}, - {file = "debugpy-1.8.17-cp38-cp38-win_amd64.whl", hash = "sha256:e851beb536a427b5df8aa7d0c7835b29a13812f41e46292ff80b2ef77327355a"}, - {file = "debugpy-1.8.17-cp39-cp39-macosx_15_0_x86_64.whl", hash = "sha256:f2ac8055a0c4a09b30b931100996ba49ef334c6947e7ae365cdd870416d7513e"}, - {file = "debugpy-1.8.17-cp39-cp39-manylinux_2_34_x86_64.whl", hash = "sha256:eaa85bce251feca8e4c87ce3b954aba84b8c645b90f0e6a515c00394a9f5c0e7"}, - {file = "debugpy-1.8.17-cp39-cp39-win32.whl", hash = "sha256:b13eea5587e44f27f6c48588b5ad56dcb74a4f3a5f89250443c94587f3eb2ea1"}, - {file = "debugpy-1.8.17-cp39-cp39-win_amd64.whl", hash = "sha256:bb1bbf92317e1f35afcf3ef0450219efb3afe00be79d8664b250ac0933b9015f"}, - {file = "debugpy-1.8.17-py2.py3-none-any.whl", hash = "sha256:60c7dca6571efe660ccb7a9508d73ca14b8796c4ed484c2002abba714226cfef"}, - {file = "debugpy-1.8.17.tar.gz", hash = "sha256:fd723b47a8c08892b1a16b2c6239a8b96637c62a59b94bb5dab4bac592a58a8e"}, + {file = "debugpy-1.8.21-cp310-cp310-macosx_15_0_x86_64.whl", hash = "sha256:8eeab7b5462f683452c57c0126aaa5ec4e974ddb705f39ba87dff8818c8e08f9"}, + {file = "debugpy-1.8.21-cp310-cp310-manylinux_2_34_x86_64.whl", hash = "sha256:0fddfdc130ac6d8bfc0415b0409822fa901c8f310e5c945ac5653a0352532344"}, + {file = "debugpy-1.8.21-cp310-cp310-win32.whl", hash = "sha256:72b5d676c4cbfac3bac5bb01c138a4656e843f93f03ce2a5f4e394ad49fbee73"}, + {file = "debugpy-1.8.21-cp310-cp310-win_amd64.whl", hash = "sha256:a7fe47fd23da57b9e0bec3f4a8ee65a2dc55782455ed7f2141d75ab5d2eaeef5"}, + {file = "debugpy-1.8.21-cp311-cp311-macosx_15_0_universal2.whl", hash = "sha256:da456226c7b4c69e35dbe35dcee6623d912000a77816db7856a41af1c72a0264"}, + {file = "debugpy-1.8.21-cp311-cp311-manylinux_2_34_x86_64.whl", hash = "sha256:f68b891688e61bdc08b8d364d919ff0051e0b94657b39dcd027bc3173edb7cdc"}, + {file = "debugpy-1.8.21-cp311-cp311-win32.whl", hash = "sha256:f843a8b08c2edeaf9b1582eed4f25441af21a297c22ff16bf76a662557aa9c9e"}, + {file = "debugpy-1.8.21-cp311-cp311-win_amd64.whl", hash = "sha256:84c564d8cc701d41843b29a92814c1f1bef6798724ca9d675c284ad9f6a547d7"}, + {file = "debugpy-1.8.21-cp312-cp312-macosx_15_0_universal2.whl", hash = "sha256:9f96713896f39c3dff0ee841f47320c3f2983d33c341e009361bb0ebc79adc4e"}, + {file = "debugpy-1.8.21-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:c193d474f0a211191f2b4449d2d06157c689013035bd952f3b617e0ef422b176"}, + {file = "debugpy-1.8.21-cp312-cp312-win32.whl", hash = "sha256:4743373c1cac7f9e74a1b9915bf1dbe0e900eca657ffb170ae07ac8363205ae9"}, + {file = "debugpy-1.8.21-cp312-cp312-win_amd64.whl", hash = "sha256:bd7ba9dd3daa7c2f942c6ca8d4695a16bf9ac16b63615261c7982bc74f7ed20c"}, + {file = "debugpy-1.8.21-cp313-cp313-macosx_15_0_universal2.whl", hash = "sha256:13678151fc401e2d68c9880b91e28714f797d40422994572b24560ef80910a88"}, + {file = "debugpy-1.8.21-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:ecbd158386c31ffe71d46f72d44d56e66331ab9b16cad649156d514368f23ab2"}, + {file = "debugpy-1.8.21-cp313-cp313-win32.whl", hash = "sha256:2c2ae706dec41d99a9ca1f7ebc987a83e65578363be6f6b3ac9067504917fae1"}, + {file = "debugpy-1.8.21-cp313-cp313-win_amd64.whl", hash = "sha256:aa648733047443eb1d07682c4ef287d36a54507b643ffdf38b09a3ef002c72a0"}, + {file = "debugpy-1.8.21-cp314-cp314-macosx_15_0_universal2.whl", hash = "sha256:9bb2a685287a2ac9b181cde89edcec64845cb51de7faaa75badb9a698bc24782"}, + {file = "debugpy-1.8.21-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:3d6922439bf33fd38a3e2c447869ebc7b97da5cd3d329ff1ef9bc06c4903437e"}, + {file = "debugpy-1.8.21-cp314-cp314-win32.whl", hash = "sha256:15d4963bd5ffa48f0da0947fd06757fa7621945048a14ad7705431566d3c0e7c"}, + {file = "debugpy-1.8.21-cp314-cp314-win_amd64.whl", hash = "sha256:fe0744a12353406de0ae8ccff0d0a4a666f00801a3db8fd04e7a5f761cd520e8"}, + {file = "debugpy-1.8.21-cp38-cp38-macosx_15_0_x86_64.whl", hash = "sha256:0042da0ecd0a8b50dc4a54395ecd870d258d73fa18776f50c91fdcabdcad2675"}, + {file = "debugpy-1.8.21-cp38-cp38-manylinux_2_34_x86_64.whl", hash = "sha256:ffd932c6796afadab6993ec96745918a8cb2444dbd392074f769db5ea40ab440"}, + {file = "debugpy-1.8.21-cp38-cp38-win32.whl", hash = "sha256:4e7c2d784d78ad4b71a5f8cd7b59c167719ec8a7a0211dbb3eb1bfeda78bc4e2"}, + {file = "debugpy-1.8.21-cp38-cp38-win_amd64.whl", hash = "sha256:aa9d941d6dfe3d0407e4b3ca0b9ec466030e260fbf1174094f68785680f66db6"}, + {file = "debugpy-1.8.21-cp39-cp39-macosx_15_0_x86_64.whl", hash = "sha256:9f5171176a0084b95d2ebe55a4d1f7b2a75b74c5dbec577ebd3a85c740551c36"}, + {file = "debugpy-1.8.21-cp39-cp39-manylinux_2_34_x86_64.whl", hash = "sha256:f15c10084f9861b5e8414a48f18f8e4aadf51a98a59e72c16aa28281ca994672"}, + {file = "debugpy-1.8.21-cp39-cp39-win32.whl", hash = "sha256:4e70cc8b5079f885cb43910924ee0aab73b8b6b2a14eff23afdd9895d86e79eb"}, + {file = "debugpy-1.8.21-cp39-cp39-win_amd64.whl", hash = "sha256:e935f9dc0501be523c8a8e1853c39432e1354e9ece717ae5998fd2371c4542c3"}, + {file = "debugpy-1.8.21-py2.py3-none-any.whl", hash = "sha256:b1e37d333663c8851516a47364ef473da127f9caebe4417e6df6f5825a7e9a92"}, + {file = "debugpy-1.8.21.tar.gz", hash = "sha256:a3c53278e84c94e11bd87c53970ec391d1a67396c8b22609fcac576520e611a6"}, ] [[package]] name = "decorator" -version = "5.2.1" +version = "5.3.1" description = "Decorators for Humans" optional = false python-versions = ">=3.8" groups = ["dev"] files = [ - {file = "decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a"}, - {file = "decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360"}, + {file = "decorator-5.3.1-py3-none-any.whl", hash = "sha256:f47fe6fdbd2edd623ecfe36875d37aba411624e2670dd395dddae1358689bb3c"}, + {file = "decorator-5.3.1.tar.gz", hash = "sha256:4cbcdd55a6efadb9dbea26b858f4fb3264567b52d69ca0d25b721b553f60ea82"}, ] [[package]] @@ -766,15 +832,15 @@ profile = ["gprof2dot (>=2022.7.29)"] [[package]] name = "exceptiongroup" -version = "1.3.0" +version = "1.3.1" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" groups = ["dev"] markers = "python_version < \"3.11\"" files = [ - {file = "exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10"}, - {file = "exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88"}, + {file = "exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598"}, + {file = "exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219"}, ] [package.dependencies] @@ -800,14 +866,14 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth [[package]] name = "fastjsonschema" -version = "2.21.2" +version = "2.22.2" description = "Fastest Python implementation of JSON schema" optional = false -python-versions = "*" +python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "fastjsonschema-2.21.2-py3-none-any.whl", hash = "sha256:1c797122d0a86c5cace2e54bf4e819c36223b552017172f32c5c024a6b77e463"}, - {file = "fastjsonschema-2.21.2.tar.gz", hash = "sha256:b1eb43748041c880796cd077f1a07c3d94e93ae84bba5ed36800a33554ae05de"}, + {file = "fastjsonschema-2.22.2-py3-none-any.whl", hash = "sha256:0fb3915616adac85ccfdd737d26be1089845d2019819505b42d39888458f74d4"}, + {file = "fastjsonschema-2.22.2.tar.gz", hash = "sha256:72064e12356a7d6ef02165be2946b9abadbdf238536e07eb587e3dbaa33099cf"}, ] [package.extras] @@ -847,83 +913,75 @@ resolved_reference = "1f417ea73e27149fb5f67dec74c35e03e317f459" [[package]] name = "fonttools" -version = "4.60.1" +version = "4.63.0" description = "Tools to manipulate font files" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["dev", "floris"] files = [ - {file = "fonttools-4.60.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9a52f254ce051e196b8fe2af4634c2d2f02c981756c6464dc192f1b6050b4e28"}, - {file = "fonttools-4.60.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c7420a2696a44650120cdd269a5d2e56a477e2bfa9d95e86229059beb1c19e15"}, - {file = "fonttools-4.60.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee0c0b3b35b34f782afc673d503167157094a16f442ace7c6c5e0ca80b08f50c"}, - {file = "fonttools-4.60.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:282dafa55f9659e8999110bd8ed422ebe1c8aecd0dc396550b038e6c9a08b8ea"}, - {file = "fonttools-4.60.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4ba4bd646e86de16160f0fb72e31c3b9b7d0721c3e5b26b9fa2fc931dfdb2652"}, - {file = "fonttools-4.60.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0b0835ed15dd5b40d726bb61c846a688f5b4ce2208ec68779bc81860adb5851a"}, - {file = "fonttools-4.60.1-cp310-cp310-win32.whl", hash = "sha256:1525796c3ffe27bb6268ed2a1bb0dcf214d561dfaf04728abf01489eb5339dce"}, - {file = "fonttools-4.60.1-cp310-cp310-win_amd64.whl", hash = "sha256:268ecda8ca6cb5c4f044b1fb9b3b376e8cd1b361cef275082429dc4174907038"}, - {file = "fonttools-4.60.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7b4c32e232a71f63a5d00259ca3d88345ce2a43295bb049d21061f338124246f"}, - {file = "fonttools-4.60.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3630e86c484263eaac71d117085d509cbcf7b18f677906824e4bace598fb70d2"}, - {file = "fonttools-4.60.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5c1015318e4fec75dd4943ad5f6a206d9727adf97410d58b7e32ab644a807914"}, - {file = "fonttools-4.60.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e6c58beb17380f7c2ea181ea11e7db8c0ceb474c9dd45f48e71e2cb577d146a1"}, - {file = "fonttools-4.60.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ec3681a0cb34c255d76dd9d865a55f260164adb9fa02628415cdc2d43ee2c05d"}, - {file = "fonttools-4.60.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f4b5c37a5f40e4d733d3bbaaef082149bee5a5ea3156a785ff64d949bd1353fa"}, - {file = "fonttools-4.60.1-cp311-cp311-win32.whl", hash = "sha256:398447f3d8c0c786cbf1209711e79080a40761eb44b27cdafffb48f52bcec258"}, - {file = "fonttools-4.60.1-cp311-cp311-win_amd64.whl", hash = "sha256:d066ea419f719ed87bc2c99a4a4bfd77c2e5949cb724588b9dd58f3fd90b92bf"}, - {file = "fonttools-4.60.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:7b0c6d57ab00dae9529f3faf187f2254ea0aa1e04215cf2f1a8ec277c96661bc"}, - {file = "fonttools-4.60.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:839565cbf14645952d933853e8ade66a463684ed6ed6c9345d0faf1f0e868877"}, - {file = "fonttools-4.60.1-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8177ec9676ea6e1793c8a084a90b65a9f778771998eb919d05db6d4b1c0b114c"}, - {file = "fonttools-4.60.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:996a4d1834524adbb423385d5a629b868ef9d774670856c63c9a0408a3063401"}, - {file = "fonttools-4.60.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a46b2f450bc79e06ef3b6394f0c68660529ed51692606ad7f953fc2e448bc903"}, - {file = "fonttools-4.60.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6ec722ee589e89a89f5b7574f5c45604030aa6ae24cb2c751e2707193b466fed"}, - {file = "fonttools-4.60.1-cp312-cp312-win32.whl", hash = "sha256:b2cf105cee600d2de04ca3cfa1f74f1127f8455b71dbad02b9da6ec266e116d6"}, - {file = "fonttools-4.60.1-cp312-cp312-win_amd64.whl", hash = "sha256:992775c9fbe2cf794786fa0ffca7f09f564ba3499b8fe9f2f80bd7197db60383"}, - {file = "fonttools-4.60.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6f68576bb4bbf6060c7ab047b1574a1ebe5c50a17de62830079967b211059ebb"}, - {file = "fonttools-4.60.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:eedacb5c5d22b7097482fa834bda0dafa3d914a4e829ec83cdea2a01f8c813c4"}, - {file = "fonttools-4.60.1-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b33a7884fabd72bdf5f910d0cf46be50dce86a0362a65cfc746a4168c67eb96c"}, - {file = "fonttools-4.60.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2409d5fb7b55fd70f715e6d34e7a6e4f7511b8ad29a49d6df225ee76da76dd77"}, - {file = "fonttools-4.60.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c8651e0d4b3bdeda6602b85fdc2abbefc1b41e573ecb37b6779c4ca50753a199"}, - {file = "fonttools-4.60.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:145daa14bf24824b677b9357c5e44fd8895c2a8f53596e1b9ea3496081dc692c"}, - {file = "fonttools-4.60.1-cp313-cp313-win32.whl", hash = "sha256:2299df884c11162617a66b7c316957d74a18e3758c0274762d2cc87df7bc0272"}, - {file = "fonttools-4.60.1-cp313-cp313-win_amd64.whl", hash = "sha256:a3db56f153bd4c5c2b619ab02c5db5192e222150ce5a1bc10f16164714bc39ac"}, - {file = "fonttools-4.60.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:a884aef09d45ba1206712c7dbda5829562d3fea7726935d3289d343232ecb0d3"}, - {file = "fonttools-4.60.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8a44788d9d91df72d1a5eac49b31aeb887a5f4aab761b4cffc4196c74907ea85"}, - {file = "fonttools-4.60.1-cp314-cp314-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e852d9dda9f93ad3651ae1e3bb770eac544ec93c3807888798eccddf84596537"}, - {file = "fonttools-4.60.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:154cb6ee417e417bf5f7c42fe25858c9140c26f647c7347c06f0cc2d47eff003"}, - {file = "fonttools-4.60.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:5664fd1a9ea7f244487ac8f10340c4e37664675e8667d6fee420766e0fb3cf08"}, - {file = "fonttools-4.60.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:583b7f8e3c49486e4d489ad1deacfb8d5be54a8ef34d6df824f6a171f8511d99"}, - {file = "fonttools-4.60.1-cp314-cp314-win32.whl", hash = "sha256:66929e2ea2810c6533a5184f938502cfdaea4bc3efb7130d8cc02e1c1b4108d6"}, - {file = "fonttools-4.60.1-cp314-cp314-win_amd64.whl", hash = "sha256:f3d5be054c461d6a2268831f04091dc82753176f6ea06dc6047a5e168265a987"}, - {file = "fonttools-4.60.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:b6379e7546ba4ae4b18f8ae2b9bc5960936007a1c0e30b342f662577e8bc3299"}, - {file = "fonttools-4.60.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9d0ced62b59e0430b3690dbc5373df1c2aa7585e9a8ce38eff87f0fd993c5b01"}, - {file = "fonttools-4.60.1-cp314-cp314t-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:875cb7764708b3132637f6c5fb385b16eeba0f7ac9fa45a69d35e09b47045801"}, - {file = "fonttools-4.60.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a184b2ea57b13680ab6d5fbde99ccef152c95c06746cb7718c583abd8f945ccc"}, - {file = "fonttools-4.60.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:026290e4ec76583881763fac284aca67365e0be9f13a7fb137257096114cb3bc"}, - {file = "fonttools-4.60.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f0e8817c7d1a0c2eedebf57ef9a9896f3ea23324769a9a2061a80fe8852705ed"}, - {file = "fonttools-4.60.1-cp314-cp314t-win32.whl", hash = "sha256:1410155d0e764a4615774e5c2c6fc516259fe3eca5882f034eb9bfdbee056259"}, - {file = "fonttools-4.60.1-cp314-cp314t-win_amd64.whl", hash = "sha256:022beaea4b73a70295b688f817ddc24ed3e3418b5036ffcd5658141184ef0d0c"}, - {file = "fonttools-4.60.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:122e1a8ada290423c493491d002f622b1992b1ab0b488c68e31c413390dc7eb2"}, - {file = "fonttools-4.60.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a140761c4ff63d0cb9256ac752f230460ee225ccef4ad8f68affc723c88e2036"}, - {file = "fonttools-4.60.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0eae96373e4b7c9e45d099d7a523444e3554360927225c1cdae221a58a45b856"}, - {file = "fonttools-4.60.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:596ecaca36367027d525b3b426d8a8208169d09edcf8c7506aceb3a38bfb55c7"}, - {file = "fonttools-4.60.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2ee06fc57512144d8b0445194c2da9f190f61ad51e230f14836286470c99f854"}, - {file = "fonttools-4.60.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b42d86938e8dda1cd9a1a87a6d82f1818eaf933348429653559a458d027446da"}, - {file = "fonttools-4.60.1-cp39-cp39-win32.whl", hash = "sha256:8b4eb332f9501cb1cd3d4d099374a1e1306783ff95489a1026bde9eb02ccc34a"}, - {file = "fonttools-4.60.1-cp39-cp39-win_amd64.whl", hash = "sha256:7473a8ed9ed09aeaa191301244a5a9dbe46fe0bf54f9d6cd21d83044c3321217"}, - {file = "fonttools-4.60.1-py3-none-any.whl", hash = "sha256:906306ac7afe2156fcf0042173d6ebbb05416af70f6b370967b47f8f00103bbb"}, - {file = "fonttools-4.60.1.tar.gz", hash = "sha256:ef00af0439ebfee806b25f24c8f92109157ff3fac5731dc7867957812e87b8d9"}, + {file = "fonttools-4.63.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e3297a6a4059b4acc3a1e9a8b04741f240a80044eef08ebd32e8b5bcdddce75b"}, + {file = "fonttools-4.63.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b1cd75a03ad8cb5bc40c90bfde68c0c47de423aa19e5c0f362b43520645eea94"}, + {file = "fonttools-4.63.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c0425b277a59cff3d80ca42162a8de360f318438a2ac83570842a678d826d579"}, + {file = "fonttools-4.63.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d7e5c9973aa04c95650c96e5f5ad865fbf42d62079163ecfab1e01cbc2504c22"}, + {file = "fonttools-4.63.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cb014d58140a38135f16064c74c652ed57aa0b75cbf8bb59cac821f7edb5334e"}, + {file = "fonttools-4.63.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:032038247a96c1690f9f31e377c389383c902531b085aa4e4dabd6f57f870e69"}, + {file = "fonttools-4.63.0-cp310-cp310-win32.whl", hash = "sha256:a8b33a82979e0a6a34ff435cc81317be1f95ec1ebb7a3a2d1c8a6a54f02ae44e"}, + {file = "fonttools-4.63.0-cp310-cp310-win_amd64.whl", hash = "sha256:0c18358a155d75034911c5ee397a5b44cd19dd325dbb8b35fb60bf421d6a72ac"}, + {file = "fonttools-4.63.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2b8ae05d9eacf6081414d759c0a352769ac28ce31280d6bb8e77b03f9e3c449f"}, + {file = "fonttools-4.63.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:79cdc9f567aec74a72918fd060283911406750cbc9fd28c1316023deb6ce31a9"}, + {file = "fonttools-4.63.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2c14b4fd138c4bafcca294765c547914e1aa431ae1ca94ab99d8db08c958bd3b"}, + {file = "fonttools-4.63.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d76ac49f929aecaf82d83250b8347e099d7aecba0f4726c1d9b6df3b8bb5fe18"}, + {file = "fonttools-4.63.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dcf076a4474fe0d7367e5bbf5b052c7284fa1feca729c04176ce513521afd8a0"}, + {file = "fonttools-4.63.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7dd683fef0663e9f0f45cf541d788d24caa3ec9db50796b588e1757d8b3bc007"}, + {file = "fonttools-4.63.0-cp311-cp311-win32.whl", hash = "sha256:afefc1ed0a59785a7fb06ea7e1678e849c193e1e387db783579bc7b3056fcfcb"}, + {file = "fonttools-4.63.0-cp311-cp311-win_amd64.whl", hash = "sha256:063e08bd17bd5a90127a14123de0d6a952dbc847695fd98b63c043d58057f90c"}, + {file = "fonttools-4.63.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:37dd23e621e3b0aef1baa70a303b80aaf38449632cfc8fd2a55fb285bbccfc02"}, + {file = "fonttools-4.63.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a9faff9e0c1f76f9fd55899d2ce785832efebab37eb8ae13995853aef178bef0"}, + {file = "fonttools-4.63.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ef3048ef05dbb552b89817713d9cac912e00d0fde4a3105c00d29e52e10c89af"}, + {file = "fonttools-4.63.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:58dc6bb86a78d782f00f9190ca02c119cf5bbe2807536e361e18d42019f877d8"}, + {file = "fonttools-4.63.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ee08ebfa58f6e1aeff5697ab9582105bb620008c1caafb681e4c557e7483027b"}, + {file = "fonttools-4.63.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:27fdc65af8da6f88b9c6121c47a464cbe359fcfff7ff6fc2d37a1f395d755b78"}, + {file = "fonttools-4.63.0-cp312-cp312-win32.whl", hash = "sha256:af2fd1664d00a397d75f806985ddb36282091c2131a73a6485c23b4a34722263"}, + {file = "fonttools-4.63.0-cp312-cp312-win_amd64.whl", hash = "sha256:59ac449f8cca9b4ffa08d2e7bbadad87ce710d69d1eda5c3c1ce579baa987272"}, + {file = "fonttools-4.63.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:cd7e9857e5e63738b9d9fd707bc1f59c8b09e5177726d23664db393c59bb08bd"}, + {file = "fonttools-4.63.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c2a2a42198b696a6f48fad91709afb55176e66a5e566131219dba372fb7f8c59"}, + {file = "fonttools-4.63.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1e874792a8212b44583ea02189d9e693906b2f78b261f372f95d6c563210ac1d"}, + {file = "fonttools-4.63.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:22135da48a348785c5e2d5d2d9d6bec5ed44adacbaeb9db12d9493bf6c6bfa68"}, + {file = "fonttools-4.63.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ccf41f2efdf56994d22d73bef4ced1052161958169428d06ba9724ea9e9a64be"}, + {file = "fonttools-4.63.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9ced0bd02ac751dd6319b0da88aaef24414e3b0dbc32bb4f24944821a3741a27"}, + {file = "fonttools-4.63.0-cp313-cp313-win32.whl", hash = "sha256:85be818f5506e8a7753153def2c9550178f0ecae6a47b5e0e8dbb23f7cc90380"}, + {file = "fonttools-4.63.0-cp313-cp313-win_amd64.whl", hash = "sha256:ba04cb5891d4c0c21b6da95eda8d7b090021508a294fff33464fc7d241e0856b"}, + {file = "fonttools-4.63.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:fd1e3094f42d806d3d7c79162fc59e5910fcbe3a7360c385b8da969bc4493745"}, + {file = "fonttools-4.63.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:6e528da43bc3791085f8cb6141b1d13e459226790240340fcbb4625649238b03"}, + {file = "fonttools-4.63.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b2248c5decb223562f7902ff6325077a073f608ee8e33e88ad88db734eb9f49"}, + {file = "fonttools-4.63.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:308f957cdeaf8abe4e5f2f124902ef405448af92c90f80e302a3b771c2e6116b"}, + {file = "fonttools-4.63.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:bf00f21eb5fb721dbaf73d1e9da6d02a1af7768f2ebcf9798be98beab8ba90f6"}, + {file = "fonttools-4.63.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c1aaa4b9c75798400ac043ce04d74e7830376c85095a5a6ed7cba2f17a266bf4"}, + {file = "fonttools-4.63.0-cp314-cp314-win32.whl", hash = "sha256:22693918177bd9ceabec4736d338045f357769416fc6b0b2508eefef75b08616"}, + {file = "fonttools-4.63.0-cp314-cp314-win_amd64.whl", hash = "sha256:7d782fac32985914c351556f68ac0855391572bcd87de50e05970d3cd4c96fc5"}, + {file = "fonttools-4.63.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:6db5140a60a5d731d21ec076745b40a310607731b0a565b50776393188649001"}, + {file = "fonttools-4.63.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7d76edbff9014094dbf03bd2d074709dfa6ec7aba13d838c937a2b33d2d6a86e"}, + {file = "fonttools-4.63.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0eac00b9118c3c2f87d272e45341871c5b3066baa3c86897fa634a7c3fb59096"}, + {file = "fonttools-4.63.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:51394295f1a51de8b5f30bdb1e1b9a4231536c7064ef5c6e211eec19fa36036f"}, + {file = "fonttools-4.63.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9e12f105d2b6342c559c298afb674006bb2893afc7102dcf8a1b55b0486b4e40"}, + {file = "fonttools-4.63.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:796f27556dbe094c4824f75ca85267e4df776c79036c8441469a4df37038c196"}, + {file = "fonttools-4.63.0-cp314-cp314t-win32.whl", hash = "sha256:948428a275741f0b64b113c955425a953314f4b9ab9997f73a72c83e68e569c8"}, + {file = "fonttools-4.63.0-cp314-cp314t-win_amd64.whl", hash = "sha256:6d4741eb179121cab9eea4cb2393d24492373a260d7945006358c08cfbf45419"}, + {file = "fonttools-4.63.0-py3-none-any.whl", hash = "sha256:445af2eab030a16b9171ea8bdda7ebf7d96bda2df88ee182a464252f6e05e20d"}, + {file = "fonttools-4.63.0.tar.gz", hash = "sha256:caeb583deeb5168e694b65cda8b4ee62abedfa66cf88488734466f2366b9c4e0"}, ] [package.extras] -all = ["brotli (>=1.0.1) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\"", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres ; platform_python_implementation == \"PyPy\"", "pycairo", "scipy ; platform_python_implementation != \"PyPy\"", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0) ; python_version <= \"3.12\"", "xattr ; sys_platform == \"darwin\"", "zopfli (>=0.1.4)"] +all = ["brotli (>=1.0.1) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\"", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres ; platform_python_implementation == \"PyPy\"", "pycairo", "scipy ; platform_python_implementation != \"PyPy\"", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.45.0)", "unicodedata2 (>=17.0.0) ; python_version <= \"3.14\"", "xattr ; sys_platform == \"darwin\"", "zopfli (>=0.1.4)"] graphite = ["lz4 (>=1.7.4.2)"] interpolatable = ["munkres ; platform_python_implementation == \"PyPy\"", "pycairo", "scipy ; platform_python_implementation != \"PyPy\""] lxml = ["lxml (>=4.0)"] pathops = ["skia-pathops (>=0.5.0)"] plot = ["matplotlib"] -repacker = ["uharfbuzz (>=0.23.0)"] +repacker = ["uharfbuzz (>=0.45.0)"] symfont = ["sympy"] type1 = ["xattr ; sys_platform == \"darwin\""] -unicode = ["unicodedata2 (>=15.1.0) ; python_version <= \"3.12\""] +unicode = ["unicodedata2 (>=17.0.0) ; python_version <= \"3.14\""] woff = ["brotli (>=1.0.1) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\"", "zopfli (>=0.1.4)"] [[package]] @@ -1029,18 +1087,18 @@ pyreadline3 = {version = "*", markers = "sys_platform == \"win32\" and python_ve [[package]] name = "idna" -version = "3.11" +version = "3.18" description = "Internationalized Domain Names in Applications (IDNA)" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea"}, - {file = "idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902"}, + {file = "idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2"}, + {file = "idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848"}, ] [package.extras] -all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] +all = ["mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] [[package]] name = "iniconfig" @@ -1090,14 +1148,14 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0,<9)", "pytest-async [[package]] name = "ipython" -version = "8.37.0" +version = "8.39.0" description = "IPython: Productive Interactive Computing" optional = false python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "ipython-8.37.0-py3-none-any.whl", hash = "sha256:ed87326596b878932dbcb171e3e698845434d8c61b8d8cd474bf663041a9dcf2"}, - {file = "ipython-8.37.0.tar.gz", hash = "sha256:ca815841e1a41a1e6b73a0b08f3038af9b2252564d01fc405356d34033012216"}, + {file = "ipython-8.39.0-py3-none-any.whl", hash = "sha256:bb3c51c4fa8148ab1dea07a79584d1c854e234ea44aa1283bcb37bc75054651f"}, + {file = "ipython-8.39.0.tar.gz", hash = "sha256:4110ae96012c379b8b6db898a07e186c40a2a1ef5d57a7fa83166047d9da7624"}, ] [package.dependencies] @@ -1129,14 +1187,14 @@ test-extra = ["curio", "ipython[test]", "jupyter_ai", "matplotlib (!=3.2.0)", "n [[package]] name = "ipywidgets" -version = "8.1.7" +version = "8.1.8" description = "Jupyter interactive widgets" optional = false python-versions = ">=3.7" groups = ["dev"] files = [ - {file = "ipywidgets-8.1.7-py3-none-any.whl", hash = "sha256:764f2602d25471c213919b8a1997df04bef869251db4ca8efba1b76b1bd9f7bb"}, - {file = "ipywidgets-8.1.7.tar.gz", hash = "sha256:15f1ac050b9ccbefd45dccfbb2ef6bed0029d8278682d569d71b8dd96bee0376"}, + {file = "ipywidgets-8.1.8-py3-none-any.whl", hash = "sha256:ecaca67aed704a338f88f67b1181b58f821ab5dc89c1f0f5ef99db43c1c2921e"}, + {file = "ipywidgets-8.1.8.tar.gz", hash = "sha256:61f969306b95f85fba6b6986b7fe45d73124d1d9e3023a8068710d47a22ea668"}, ] [package.dependencies] @@ -1166,23 +1224,22 @@ arrow = ">=0.15.0" [[package]] name = "jedi" -version = "0.19.2" +version = "0.20.0" description = "An autocompletion tool for Python that can be used for text editors." optional = false -python-versions = ">=3.6" +python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9"}, - {file = "jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0"}, + {file = "jedi-0.20.0-py2.py3-none-any.whl", hash = "sha256:7bdd9c2634f56713299976f4cbd59cb3fa92165cc5e05ea811fb253480728b67"}, + {file = "jedi-0.20.0.tar.gz", hash = "sha256:c3f4ccbd276696f4b19c54618d4fb18f9fc24b0aef02acf704b23f487daa1011"}, ] [package.dependencies] -parso = ">=0.8.4,<0.9.0" +parso = ">=0.8.6,<0.9.0" [package.extras] -docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] -qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] -testing = ["Django", "attrs", "colorama", "docopt", "pytest (<9.0.0)"] +dev = ["Django", "attrs", "colorama", "docopt", "flake8 (==7.1.2)", "pytest (<9.0.0)", "types-setuptools (==80.9.0.20250529)", "typing-extensions", "zuban (==0.7.0)"] +docs = ["Jinja2 (==3.1.6)", "MarkupSafe (==3.0.3)", "Pygments (==2.20.0)", "Sphinx (==9.1.0)", "alabaster (==1.0.0)", "babel (==2.18.0)", "certifi (==2026.4.22)", "charset-normalizer (==3.4.7)", "docutils (==0.22.4)", "idna (==3.13)", "imagesize (==2.0.0)", "iniconfig (==2.3.0)", "packaging (==26.2)", "pluggy (==1.6.0)", "pytest (==9.0.3)", "requests (==2.33.1)", "roman-numerals (==4.1.0)", "snowballstemmer (==3.0.1)", "sphinx-rtd-theme (==3.1.0)", "sphinxcontrib-applehelp (==2.0.0)", "sphinxcontrib-devhelp (==2.0.0)", "sphinxcontrib-htmlhelp (==2.1.0)", "sphinxcontrib-jquery (==4.1)", "sphinxcontrib-jsmath (==1.0.1)", "sphinxcontrib-qthelp (==2.0.0)", "sphinxcontrib-serializinghtml (==2.0.0)", "urllib3 (==2.6.3)"] [[package]] name = "jinja2" @@ -1204,41 +1261,38 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "json5" -version = "0.12.1" +version = "0.15.0" description = "A Python implementation of the JSON5 data format." optional = false python-versions = ">=3.8.0" groups = ["dev"] files = [ - {file = "json5-0.12.1-py3-none-any.whl", hash = "sha256:d9c9b3bc34a5f54d43c35e11ef7cb87d8bdd098c6ace87117a7b7e83e705c1d5"}, - {file = "json5-0.12.1.tar.gz", hash = "sha256:b2743e77b3242f8d03c143dd975a6ec7c52e2f2afe76ed934e53503dd4ad4990"}, + {file = "json5-0.15.0-py3-none-any.whl", hash = "sha256:56636a30c0e8a4665fe2179c0212f32eae3796dea89ea6f649b9436ecdb39618"}, + {file = "json5-0.15.0.tar.gz", hash = "sha256:7424d1f1eb1d56da6e3d70643f53619862b4ce81440bdb8ecfd6f875e5ba4a71"}, ] -[package.extras] -dev = ["build (==1.2.2.post1)", "coverage (==7.5.4) ; python_version < \"3.9\"", "coverage (==7.8.0) ; python_version >= \"3.9\"", "mypy (==1.14.1) ; python_version < \"3.9\"", "mypy (==1.15.0) ; python_version >= \"3.9\"", "pip (==25.0.1)", "pylint (==3.2.7) ; python_version < \"3.9\"", "pylint (==3.3.6) ; python_version >= \"3.9\"", "ruff (==0.11.2)", "twine (==6.1.0)", "uv (==0.6.11)"] - [[package]] name = "jsonpointer" -version = "3.0.0" -description = "Identify specific nodes in a JSON document (RFC 6901)" +version = "3.1.1" +description = "Identify specific nodes in a JSON document (RFC 6901) " optional = false -python-versions = ">=3.7" +python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"}, - {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"}, + {file = "jsonpointer-3.1.1-py3-none-any.whl", hash = "sha256:8ff8b95779d071ba472cf5bc913028df06031797532f08a7d5b602d8b2a488ca"}, + {file = "jsonpointer-3.1.1.tar.gz", hash = "sha256:0b801c7db33a904024f6004d526dcc53bbb8a4a0f4e32bfd10beadf60adf1900"}, ] [[package]] name = "jsonschema" -version = "4.25.1" +version = "4.26.0" description = "An implementation of JSON Schema validation for Python" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "jsonschema-4.25.1-py3-none-any.whl", hash = "sha256:3fba0169e345c7175110351d456342c364814cfcf3b964ba4587f22915230a63"}, - {file = "jsonschema-4.25.1.tar.gz", hash = "sha256:e4a9655ce0da0c0b67a085847e00a3a51449e1157f4f75e9fb5aa545e122eb85"}, + {file = "jsonschema-4.26.0-py3-none-any.whl", hash = "sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce"}, + {file = "jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326"}, ] [package.dependencies] @@ -1252,7 +1306,7 @@ referencing = ">=0.28.4" rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} rfc3986-validator = {version = ">0.1.0", optional = true, markers = "extra == \"format-nongpl\""} rfc3987-syntax = {version = ">=1.1.0", optional = true, markers = "extra == \"format-nongpl\""} -rpds-py = ">=0.7.1" +rpds-py = ">=0.25.0" uri-template = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} webcolors = {version = ">=24.6.0", optional = true, markers = "extra == \"format-nongpl\""} @@ -1295,28 +1349,51 @@ jupyterlab = "*" nbconvert = "*" notebook = "*" +[[package]] +name = "jupyter-builder" +version = "1.2.2" +description = "JupyterLab build tools" +optional = false +python-versions = ">=3.10" +groups = ["dev"] +files = [ + {file = "jupyter_builder-1.2.2-py3-none-any.whl", hash = "sha256:6ebcd4c49daf5df6a18068a74a48010406700ed90a76c189fac43eaf85c60c63"}, + {file = "jupyter_builder-1.2.2.tar.gz", hash = "sha256:b6cea88f58e44b2c5eba96f28d2e0d16fd453d3ca6dc9c4492ff8a1f2e97f601"}, +] + +[package.dependencies] +jupyter-core = "*" +tomli = {version = "*", markers = "python_version < \"3.11\""} +traitlets = "*" + +[package.extras] +dev = ["build", "hatch", "mypy", "pre-commit", "ruff (==0.16.0)"] +test = ["copier (>=9.3,<10)", "coverage[toml] (>=7.10.6)", "deptry", "jinja2-time", "pytest (>=7.0)", "pytest-check-links (>=0.7)", "pytest-cov (>=7)"] + [[package]] name = "jupyter-client" -version = "8.6.3" +version = "8.9.1" description = "Jupyter protocol implementation and client libraries" optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f"}, - {file = "jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419"}, + {file = "jupyter_client-8.9.1-py3-none-any.whl", hash = "sha256:0b7a295bc46e8751e9adae84781f726c851c1d911bd793edc4a3bde942e3da81"}, + {file = "jupyter_client-8.9.1.tar.gz", hash = "sha256:a58f730dd9e728ba16ba1d62ebccf7ffe1ebbdbce4e95cfae941b7321ae1f4fa"}, ] [package.dependencies] -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +jupyter-core = ">=5.1" python-dateutil = ">=2.8.2" -pyzmq = ">=23.0" -tornado = ">=6.2" +pyzmq = ">=25.0" +tornado = ">=6.4.1" traitlets = ">=5.3" +typing-extensions = ">=4.13.0" [package.extras] docs = ["ipykernel", "myst-parser", "pydata-sphinx-theme", "sphinx (>=4)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] -test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko ; sys_platform == \"win32\"", "pre-commit", "pytest (<8.2.0)", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"] +orjson = ["orjson"] +test = ["anyio", "coverage", "ipykernel (>=6.14)", "msgpack", "mypy ; platform_python_implementation != \"PyPy\"", "paramiko ; sys_platform == \"win32\"", "pre-commit", "pytest", "pytest-cov", "pytest-jupyter[client] (>=0.6.2)", "pytest-timeout"] [[package]] name = "jupyter-console" @@ -1365,14 +1442,14 @@ test = ["ipykernel", "pre-commit", "pytest (<9)", "pytest-cov", "pytest-timeout" [[package]] name = "jupyter-events" -version = "0.12.0" +version = "0.12.1" description = "Jupyter Event System library" optional = false python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "jupyter_events-0.12.0-py3-none-any.whl", hash = "sha256:6464b2fa5ad10451c3d35fabc75eab39556ae1e2853ad0c0cc31b656731a97fb"}, - {file = "jupyter_events-0.12.0.tar.gz", hash = "sha256:fc3fce98865f6784c9cd0a56a20644fc6098f21c8c33834a8d9fe383c17e554b"}, + {file = "jupyter_events-0.12.1-py3-none-any.whl", hash = "sha256:c366585253f537a627da52fa7ca7410c5b5301fe893f511e7b077c2d93ec8bcf"}, + {file = "jupyter_events-0.12.1.tar.gz", hash = "sha256:faff25f77218335752f35f23c5fe6e4a392a7bd99a5939ccb9b8fbf594636cf3"}, ] [package.dependencies] @@ -1392,14 +1469,14 @@ test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "p [[package]] name = "jupyter-lsp" -version = "2.3.0" +version = "2.3.1" description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server" optional = false python-versions = ">=3.8" groups = ["dev"] files = [ - {file = "jupyter_lsp-2.3.0-py3-none-any.whl", hash = "sha256:e914a3cb2addf48b1c7710914771aaf1819d46b2e5a79b0f917b5478ec93f34f"}, - {file = "jupyter_lsp-2.3.0.tar.gz", hash = "sha256:458aa59339dc868fb784d73364f17dbce8836e906cd75fd471a325cba02e0245"}, + {file = "jupyter_lsp-2.3.1-py3-none-any.whl", hash = "sha256:71b954d834e85ff3096400554f2eefaf7fe37053036f9a782b0f7c5e42dadb81"}, + {file = "jupyter_lsp-2.3.1.tar.gz", hash = "sha256:fdf8a4aa7d85813976d6e29e95e6a2c8f752701f926f2715305249a3829805a6"}, ] [package.dependencies] @@ -1407,14 +1484,14 @@ jupyter_server = ">=1.1.2" [[package]] name = "jupyter-server" -version = "2.17.0" +version = "2.20.0" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "jupyter_server-2.17.0-py3-none-any.whl", hash = "sha256:e8cb9c7db4251f51ed307e329b81b72ccf2056ff82d50524debde1ee1870e13f"}, - {file = "jupyter_server-2.17.0.tar.gz", hash = "sha256:c38ea898566964c888b4772ae1ed58eca84592e88251d2cfc4d171f81f7e99d5"}, + {file = "jupyter_server-2.20.0-py3-none-any.whl", hash = "sha256:c3b67c93c471e947c18b5026f04f21614218adb706df8f48227d3ee8e0a7cdcc"}, + {file = "jupyter_server-2.20.0.tar.gz", hash = "sha256:b5778ba337d8015a3dc2b80803ecdd5ac18d3797fddf61a50ea5fb472b4ebe14"}, ] [package.dependencies] @@ -1430,7 +1507,7 @@ nbformat = ">=5.3.0" overrides = {version = ">=5.0", markers = "python_version < \"3.12\""} packaging = ">=22.0" prometheus-client = ">=0.9" -pywinpty = {version = ">=2.0.1", markers = "os_name == \"nt\""} +pywinpty = {version = ">=2.0.1,<3.0.4 || >3.0.4", markers = "os_name == \"nt\""} pyzmq = ">=24" send2trash = ">=1.8.2" terminado = ">=0.8.3" @@ -1439,19 +1516,19 @@ traitlets = ">=5.6.0" websocket-client = ">=1.7" [package.extras] -docs = ["ipykernel", "jinja2", "jupyter-client", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-openapi (>=0.8.0)", "sphinxcontrib-spelling", "sphinxemoji", "tornado", "typing-extensions"] -test = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0,<9)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.7)", "pytest-timeout", "requests"] +docs = ["ipykernel", "jinja2", "jupyter-client", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinx (<9.0)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-openapi (>=0.8.0)", "sphinxcontrib-spelling", "sphinxemoji", "tornado", "typing-extensions"] +test = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0,<10)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.7)", "pytest-timeout", "requests"] [[package]] name = "jupyter-server-terminals" -version = "0.5.3" +version = "0.5.4" description = "A Jupyter Server Extension Providing Terminals." optional = false python-versions = ">=3.8" groups = ["dev"] files = [ - {file = "jupyter_server_terminals-0.5.3-py3-none-any.whl", hash = "sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa"}, - {file = "jupyter_server_terminals-0.5.3.tar.gz", hash = "sha256:5ae0295167220e9ace0edcfdb212afd2b01ee8d179fe6f23c899590e9b8a5269"}, + {file = "jupyter_server_terminals-0.5.4-py3-none-any.whl", hash = "sha256:55be353fc74a80bc7f3b20e6be50a55a61cd525626f578dcb66a5708e2007d14"}, + {file = "jupyter_server_terminals-0.5.4.tar.gz", hash = "sha256:bbda128ed41d0be9020349f9f1f2a4ab9952a73ed5f5ac9f1419794761fb87f5"}, ] [package.dependencies] @@ -1464,14 +1541,14 @@ test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (> [[package]] name = "jupyterlab" -version = "4.4.10" +version = "4.6.3" description = "JupyterLab computational environment" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "jupyterlab-4.4.10-py3-none-any.whl", hash = "sha256:65939ab4c8dcd0c42185c2d0d1a9d60b254dc8c46fc4fdb286b63c51e9358e07"}, - {file = "jupyterlab-4.4.10.tar.gz", hash = "sha256:521c017508af4e1d6d9d8a9d90f47a11c61197ad63b2178342489de42540a615"}, + {file = "jupyterlab-4.6.3-py3-none-any.whl", hash = "sha256:0a1ebc6567186f1eabd99536e94df7ed9e96d1e7c5ddf3e4406ae16e88abacb7"}, + {file = "jupyterlab-4.6.3.tar.gz", hash = "sha256:2e3db6e3a12495ebd188276e985bf5ac502fbde3d1e8628819920210008de498"}, ] [package.dependencies] @@ -1479,22 +1556,22 @@ async-lru = ">=1.0.0" httpx = ">=0.25.0,<1" ipykernel = ">=6.5.0,<6.30.0 || >6.30.0" jinja2 = ">=3.0.3" +jupyter-builder = ">=1.0.2" jupyter-core = "*" jupyter-lsp = ">=2.0.0" -jupyter-server = ">=2.4.0,<3" -jupyterlab-server = ">=2.27.1,<3" +jupyter-server = ">=2.19.0,<3" +jupyterlab-server = ">=2.28.0,<3" notebook-shim = ">=0.2" -packaging = "*" -setuptools = ">=41.1.0" +packaging = ">=23.2" tomli = {version = ">=1.2.2", markers = "python_version < \"3.11\""} tornado = ">=6.2.0" traitlets = "*" +typing-extensions = {version = ">=4.4.0", markers = "python_version < \"3.12\""} [package.extras] -dev = ["build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.11.4)"] -docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-jupyter", "sphinx (>=1.8,<8.2.0)", "sphinx-copybutton"] -docs-screenshots = ["altair (==5.5.0)", "ipython (==8.16.1)", "ipywidgets (==8.1.5)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.3.post1)", "matplotlib (==3.10.0)", "nbconvert (>=7.0.0)", "pandas (==2.2.3)", "scipy (==1.15.1)", "vega-datasets (==0.9.0)"] -test = ["coverage", "pytest (>=7.0)", "pytest-check-links (>=0.7)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "pytest-timeout", "pytest-tornasync", "requests", "requests-cache", "virtualenv"] +dev = ["build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.15.15)", "shellcheck-py"] +docs-screenshots = ["altair (==6.0.0)", "ipykernel (<7.0)", "ipython (==8.16.1)", "ipywidgets (==8.1.5)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.3.post1)", "matplotlib (==3.10.0)", "nbconvert (>=7.0.0)", "pandas (==2.2.3)", "scipy (==1.15.1)"] +test = ["coverage", "pytest (>=7.0)", "pytest-check-links (>=0.7)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "pytest-timeout", "pytest-tornasync", "pytest-xdist", "requests", "requests-cache", "virtualenv"] upgrade-extension = ["copier (>=9,<10)", "jinja2-time (<0.3)", "pydantic (<3.0)", "pyyaml-include (<3.0)", "tomli-w (<2.0)"] [[package]] @@ -1537,125 +1614,141 @@ test = ["hatch", "ipykernel", "openapi-core (>=0.18.0,<0.19.0)", "openapi-spec-v [[package]] name = "jupyterlab-widgets" -version = "3.0.15" +version = "3.0.16" description = "Jupyter interactive widgets for JupyterLab" optional = false python-versions = ">=3.7" groups = ["dev"] files = [ - {file = "jupyterlab_widgets-3.0.15-py3-none-any.whl", hash = "sha256:d59023d7d7ef71400d51e6fee9a88867f6e65e10a4201605d2d7f3e8f012a31c"}, - {file = "jupyterlab_widgets-3.0.15.tar.gz", hash = "sha256:2920888a0c2922351a9202817957a68c07d99673504d6cd37345299e971bb08b"}, + {file = "jupyterlab_widgets-3.0.16-py3-none-any.whl", hash = "sha256:45fa36d9c6422cf2559198e4db481aa243c7a32d9926b500781c830c80f7ecf8"}, + {file = "jupyterlab_widgets-3.0.16.tar.gz", hash = "sha256:423da05071d55cf27a9e602216d35a3a65a3e41cdf9c5d3b643b814ce38c19e0"}, ] [[package]] name = "kiwisolver" -version = "1.4.9" +version = "1.5.0" description = "A fast implementation of the Cassowary constraint solver" optional = false python-versions = ">=3.10" groups = ["dev", "floris"] files = [ - {file = "kiwisolver-1.4.9-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b4b4d74bda2b8ebf4da5bd42af11d02d04428b2c32846e4c2c93219df8a7987b"}, - {file = "kiwisolver-1.4.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fb3b8132019ea572f4611d770991000d7f58127560c4889729248eb5852a102f"}, - {file = "kiwisolver-1.4.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:84fd60810829c27ae375114cd379da1fa65e6918e1da405f356a775d49a62bcf"}, - {file = "kiwisolver-1.4.9-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b78efa4c6e804ecdf727e580dbb9cba85624d2e1c6b5cb059c66290063bd99a9"}, - {file = "kiwisolver-1.4.9-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4efec7bcf21671db6a3294ff301d2fc861c31faa3c8740d1a94689234d1b415"}, - {file = "kiwisolver-1.4.9-cp310-cp310-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:90f47e70293fc3688b71271100a1a5453aa9944a81d27ff779c108372cf5567b"}, - {file = "kiwisolver-1.4.9-cp310-cp310-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8fdca1def57a2e88ef339de1737a1449d6dbf5fab184c54a1fca01d541317154"}, - {file = "kiwisolver-1.4.9-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:9cf554f21be770f5111a1690d42313e140355e687e05cf82cb23d0a721a64a48"}, - {file = "kiwisolver-1.4.9-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fc1795ac5cd0510207482c3d1d3ed781143383b8cfd36f5c645f3897ce066220"}, - {file = "kiwisolver-1.4.9-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:ccd09f20ccdbbd341b21a67ab50a119b64a403b09288c27481575105283c1586"}, - {file = "kiwisolver-1.4.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:540c7c72324d864406a009d72f5d6856f49693db95d1fbb46cf86febef873634"}, - {file = "kiwisolver-1.4.9-cp310-cp310-win_amd64.whl", hash = "sha256:ede8c6d533bc6601a47ad4046080d36b8fc99f81e6f1c17b0ac3c2dc91ac7611"}, - {file = "kiwisolver-1.4.9-cp310-cp310-win_arm64.whl", hash = "sha256:7b4da0d01ac866a57dd61ac258c5607b4cd677f63abaec7b148354d2b2cdd536"}, - {file = "kiwisolver-1.4.9-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:eb14a5da6dc7642b0f3a18f13654847cd8b7a2550e2645a5bda677862b03ba16"}, - {file = "kiwisolver-1.4.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:39a219e1c81ae3b103643d2aedb90f1ef22650deb266ff12a19e7773f3e5f089"}, - {file = "kiwisolver-1.4.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2405a7d98604b87f3fc28b1716783534b1b4b8510d8142adca34ee0bc3c87543"}, - {file = "kiwisolver-1.4.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:dc1ae486f9abcef254b5618dfb4113dd49f94c68e3e027d03cf0143f3f772b61"}, - {file = "kiwisolver-1.4.9-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a1f570ce4d62d718dce3f179ee78dac3b545ac16c0c04bb363b7607a949c0d1"}, - {file = "kiwisolver-1.4.9-cp311-cp311-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cb27e7b78d716c591e88e0a09a2139c6577865d7f2e152488c2cc6257f460872"}, - {file = "kiwisolver-1.4.9-cp311-cp311-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:15163165efc2f627eb9687ea5f3a28137217d217ac4024893d753f46bce9de26"}, - {file = "kiwisolver-1.4.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bdee92c56a71d2b24c33a7d4c2856bd6419d017e08caa7802d2963870e315028"}, - {file = "kiwisolver-1.4.9-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:412f287c55a6f54b0650bd9b6dce5aceddb95864a1a90c87af16979d37c89771"}, - {file = "kiwisolver-1.4.9-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:2c93f00dcba2eea70af2be5f11a830a742fe6b579a1d4e00f47760ef13be247a"}, - {file = "kiwisolver-1.4.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f117e1a089d9411663a3207ba874f31be9ac8eaa5b533787024dc07aeb74f464"}, - {file = "kiwisolver-1.4.9-cp311-cp311-win_amd64.whl", hash = "sha256:be6a04e6c79819c9a8c2373317d19a96048e5a3f90bec587787e86a1153883c2"}, - {file = "kiwisolver-1.4.9-cp311-cp311-win_arm64.whl", hash = "sha256:0ae37737256ba2de764ddc12aed4956460277f00c4996d51a197e72f62f5eec7"}, - {file = "kiwisolver-1.4.9-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:ac5a486ac389dddcc5bef4f365b6ae3ffff2c433324fb38dd35e3fab7c957999"}, - {file = "kiwisolver-1.4.9-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f2ba92255faa7309d06fe44c3a4a97efe1c8d640c2a79a5ef728b685762a6fd2"}, - {file = "kiwisolver-1.4.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a2899935e724dd1074cb568ce7ac0dce28b2cd6ab539c8e001a8578eb106d14"}, - {file = "kiwisolver-1.4.9-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f6008a4919fdbc0b0097089f67a1eb55d950ed7e90ce2cc3e640abadd2757a04"}, - {file = "kiwisolver-1.4.9-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:67bb8b474b4181770f926f7b7d2f8c0248cbcb78b660fdd41a47054b28d2a752"}, - {file = "kiwisolver-1.4.9-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2327a4a30d3ee07d2fbe2e7933e8a37c591663b96ce42a00bc67461a87d7df77"}, - {file = "kiwisolver-1.4.9-cp312-cp312-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7a08b491ec91b1d5053ac177afe5290adacf1f0f6307d771ccac5de30592d198"}, - {file = "kiwisolver-1.4.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d8fc5c867c22b828001b6a38d2eaeb88160bf5783c6cb4a5e440efc981ce286d"}, - {file = "kiwisolver-1.4.9-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:3b3115b2581ea35bb6d1f24a4c90af37e5d9b49dcff267eeed14c3893c5b86ab"}, - {file = "kiwisolver-1.4.9-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:858e4c22fb075920b96a291928cb7dea5644e94c0ee4fcd5af7e865655e4ccf2"}, - {file = "kiwisolver-1.4.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ed0fecd28cc62c54b262e3736f8bb2512d8dcfdc2bcf08be5f47f96bf405b145"}, - {file = "kiwisolver-1.4.9-cp312-cp312-win_amd64.whl", hash = "sha256:f68208a520c3d86ea51acf688a3e3002615a7f0238002cccc17affecc86a8a54"}, - {file = "kiwisolver-1.4.9-cp312-cp312-win_arm64.whl", hash = "sha256:2c1a4f57df73965f3f14df20b80ee29e6a7930a57d2d9e8491a25f676e197c60"}, - {file = "kiwisolver-1.4.9-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a5d0432ccf1c7ab14f9949eec60c5d1f924f17c037e9f8b33352fa05799359b8"}, - {file = "kiwisolver-1.4.9-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efb3a45b35622bb6c16dbfab491a8f5a391fe0e9d45ef32f4df85658232ca0e2"}, - {file = "kiwisolver-1.4.9-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1a12cf6398e8a0a001a059747a1cbf24705e18fe413bc22de7b3d15c67cffe3f"}, - {file = "kiwisolver-1.4.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b67e6efbf68e077dd71d1a6b37e43e1a99d0bff1a3d51867d45ee8908b931098"}, - {file = "kiwisolver-1.4.9-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5656aa670507437af0207645273ccdfee4f14bacd7f7c67a4306d0dcaeaf6eed"}, - {file = "kiwisolver-1.4.9-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:bfc08add558155345129c7803b3671cf195e6a56e7a12f3dde7c57d9b417f525"}, - {file = "kiwisolver-1.4.9-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:40092754720b174e6ccf9e845d0d8c7d8e12c3d71e7fc35f55f3813e96376f78"}, - {file = "kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:497d05f29a1300d14e02e6441cf0f5ee81c1ff5a304b0d9fb77423974684e08b"}, - {file = "kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:bdd1a81a1860476eb41ac4bc1e07b3f07259e6d55bbf739b79c8aaedcf512799"}, - {file = "kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:e6b93f13371d341afee3be9f7c5964e3fe61d5fa30f6a30eb49856935dfe4fc3"}, - {file = "kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d75aa530ccfaa593da12834b86a0724f58bff12706659baa9227c2ccaa06264c"}, - {file = "kiwisolver-1.4.9-cp313-cp313-win_amd64.whl", hash = "sha256:dd0a578400839256df88c16abddf9ba14813ec5f21362e1fe65022e00c883d4d"}, - {file = "kiwisolver-1.4.9-cp313-cp313-win_arm64.whl", hash = "sha256:d4188e73af84ca82468f09cadc5ac4db578109e52acb4518d8154698d3a87ca2"}, - {file = "kiwisolver-1.4.9-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:5a0f2724dfd4e3b3ac5a82436a8e6fd16baa7d507117e4279b660fe8ca38a3a1"}, - {file = "kiwisolver-1.4.9-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:1b11d6a633e4ed84fc0ddafd4ebfd8ea49b3f25082c04ad12b8315c11d504dc1"}, - {file = "kiwisolver-1.4.9-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61874cdb0a36016354853593cffc38e56fc9ca5aa97d2c05d3dcf6922cd55a11"}, - {file = "kiwisolver-1.4.9-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:60c439763a969a6af93b4881db0eed8fadf93ee98e18cbc35bc8da868d0c4f0c"}, - {file = "kiwisolver-1.4.9-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92a2f997387a1b79a75e7803aa7ded2cfbe2823852ccf1ba3bcf613b62ae3197"}, - {file = "kiwisolver-1.4.9-cp313-cp313t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a31d512c812daea6d8b3be3b2bfcbeb091dbb09177706569bcfc6240dcf8b41c"}, - {file = "kiwisolver-1.4.9-cp313-cp313t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:52a15b0f35dad39862d376df10c5230155243a2c1a436e39eb55623ccbd68185"}, - {file = "kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a30fd6fdef1430fd9e1ba7b3398b5ee4e2887783917a687d86ba69985fb08748"}, - {file = "kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:cc9617b46837c6468197b5945e196ee9ca43057bb7d9d1ae688101e4e1dddf64"}, - {file = "kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:0ab74e19f6a2b027ea4f845a78827969af45ce790e6cb3e1ebab71bdf9f215ff"}, - {file = "kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dba5ee5d3981160c28d5490f0d1b7ed730c22470ff7f6cc26cfcfaacb9896a07"}, - {file = "kiwisolver-1.4.9-cp313-cp313t-win_arm64.whl", hash = "sha256:0749fd8f4218ad2e851e11cc4dc05c7cbc0cbc4267bdfdb31782e65aace4ee9c"}, - {file = "kiwisolver-1.4.9-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:9928fe1eb816d11ae170885a74d074f57af3a0d65777ca47e9aeb854a1fba386"}, - {file = "kiwisolver-1.4.9-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:d0005b053977e7b43388ddec89fa567f43d4f6d5c2c0affe57de5ebf290dc552"}, - {file = "kiwisolver-1.4.9-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2635d352d67458b66fd0667c14cb1d4145e9560d503219034a18a87e971ce4f3"}, - {file = "kiwisolver-1.4.9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:767c23ad1c58c9e827b649a9ab7809fd5fd9db266a9cf02b0e926ddc2c680d58"}, - {file = "kiwisolver-1.4.9-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72d0eb9fba308b8311685c2268cf7d0a0639a6cd027d8128659f72bdd8a024b4"}, - {file = "kiwisolver-1.4.9-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f68e4f3eeca8fb22cc3d731f9715a13b652795ef657a13df1ad0c7dc0e9731df"}, - {file = "kiwisolver-1.4.9-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d84cd4061ae292d8ac367b2c3fa3aad11cb8625a95d135fe93f286f914f3f5a6"}, - {file = "kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a60ea74330b91bd22a29638940d115df9dc00af5035a9a2a6ad9399ffb4ceca5"}, - {file = "kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:ce6a3a4e106cf35c2d9c4fa17c05ce0b180db622736845d4315519397a77beaf"}, - {file = "kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:77937e5e2a38a7b48eef0585114fe7930346993a88060d0bf886086d2aa49ef5"}, - {file = "kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:24c175051354f4a28c5d6a31c93906dc653e2bf234e8a4bbfb964892078898ce"}, - {file = "kiwisolver-1.4.9-cp314-cp314-win_amd64.whl", hash = "sha256:0763515d4df10edf6d06a3c19734e2566368980d21ebec439f33f9eb936c07b7"}, - {file = "kiwisolver-1.4.9-cp314-cp314-win_arm64.whl", hash = "sha256:0e4e2bf29574a6a7b7f6cb5fa69293b9f96c928949ac4a53ba3f525dffb87f9c"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:d976bbb382b202f71c67f77b0ac11244021cfa3f7dfd9e562eefcea2df711548"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2489e4e5d7ef9a1c300a5e0196e43d9c739f066ef23270607d45aba368b91f2d"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:e2ea9f7ab7fbf18fffb1b5434ce7c69a07582f7acc7717720f1d69f3e806f90c"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b34e51affded8faee0dfdb705416153819d8ea9250bbbf7ea1b249bdeb5f1122"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8aacd3d4b33b772542b2e01beb50187536967b514b00003bdda7589722d2a64"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7cf974dd4e35fa315563ac99d6287a1024e4dc2077b8a7d7cd3d2fb65d283134"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:85bd218b5ecfbee8c8a82e121802dcb519a86044c9c3b2e4aef02fa05c6da370"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:0856e241c2d3df4efef7c04a1e46b1936b6120c9bcf36dd216e3acd84bc4fb21"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:9af39d6551f97d31a4deebeac6f45b156f9755ddc59c07b402c148f5dbb6482a"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:bb4ae2b57fc1d8cbd1cf7b1d9913803681ffa903e7488012be5b76dedf49297f"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:aedff62918805fb62d43a4aa2ecd4482c380dc76cd31bd7c8878588a61bd0369"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-win_amd64.whl", hash = "sha256:1fa333e8b2ce4d9660f2cda9c0e1b6bafcfb2457a9d259faa82289e73ec24891"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-win_arm64.whl", hash = "sha256:4a48a2ce79d65d363597ef7b567ce3d14d68783d2b2263d98db3d9477805ba32"}, - {file = "kiwisolver-1.4.9-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:4d1d9e582ad4d63062d34077a9a1e9f3c34088a2ec5135b1f7190c07cf366527"}, - {file = "kiwisolver-1.4.9-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:deed0c7258ceb4c44ad5ec7d9918f9f14fd05b2be86378d86cf50e63d1e7b771"}, - {file = "kiwisolver-1.4.9-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0a590506f303f512dff6b7f75fd2fd18e16943efee932008fe7140e5fa91d80e"}, - {file = "kiwisolver-1.4.9-pp310-pypy310_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e09c2279a4d01f099f52d5c4b3d9e208e91edcbd1a175c9662a8b16e000fece9"}, - {file = "kiwisolver-1.4.9-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c9e7cdf45d594ee04d5be1b24dd9d49f3d1590959b2271fb30b5ca2b262c00fb"}, - {file = "kiwisolver-1.4.9-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:720e05574713db64c356e86732c0f3c5252818d05f9df320f0ad8380641acea5"}, - {file = "kiwisolver-1.4.9-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:17680d737d5335b552994a2008fab4c851bcd7de33094a82067ef3a576ff02fa"}, - {file = "kiwisolver-1.4.9-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:85b5352f94e490c028926ea567fc569c52ec79ce131dadb968d3853e809518c2"}, - {file = "kiwisolver-1.4.9-pp311-pypy311_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:464415881e4801295659462c49461a24fb107c140de781d55518c4b80cb6790f"}, - {file = "kiwisolver-1.4.9-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:fb940820c63a9590d31d88b815e7a3aa5915cad3ce735ab45f0c730b39547de1"}, - {file = "kiwisolver-1.4.9.tar.gz", hash = "sha256:c3b22c26c6fd6811b0ae8363b95ca8ce4ea3c202d3d0975b2914310ceb1bcc4d"}, + {file = "kiwisolver-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:32cc0a5365239a6ea0c6ed461e8838d053b57e397443c0ca894dcc8e388d4374"}, + {file = "kiwisolver-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cc0b66c1eec9021353a4b4483afb12dfd50e3669ffbb9152d6842eb34c7e29fd"}, + {file = "kiwisolver-1.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:86e0287879f75621ae85197b0877ed2f8b7aa57b511c7331dce2eb6f4de7d476"}, + {file = "kiwisolver-1.5.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:62f59da443c4f4849f73a51a193b1d9d258dcad0c41bc4d1b8fb2bcc04bfeb22"}, + {file = "kiwisolver-1.5.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9190426b7aa26c5229501fa297b8d0653cfd3f5a36f7990c264e157cbf886b3b"}, + {file = "kiwisolver-1.5.0-cp310-cp310-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c8277104ded0a51e699c8c3aff63ce2c56d4ed5519a5f73e0fd7057f959a2b9e"}, + {file = "kiwisolver-1.5.0-cp310-cp310-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8f9baf6f0a6e7571c45c8863010b45e837c3ee1c2c77fcd6ef423be91b21fedb"}, + {file = "kiwisolver-1.5.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cff8e5383db4989311f99e814feeb90c4723eb4edca425b9d5d9c3fefcdd9537"}, + {file = "kiwisolver-1.5.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ebae99ed6764f2b5771c522477b311be313e8841d2e0376db2b10922daebbba4"}, + {file = "kiwisolver-1.5.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:d5cd5189fc2b6a538b75ae45433140c4823463918f7b1617c31e68b085c0022c"}, + {file = "kiwisolver-1.5.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f42c23db5d1521218a3276bb08666dcb662896a0be7347cba864eca45ff64ede"}, + {file = "kiwisolver-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:94eff26096eb5395136634622515b234ecb6c9979824c1f5004c6e3c3c85ccd2"}, + {file = "kiwisolver-1.5.0-cp310-cp310-win_arm64.whl", hash = "sha256:dd952e03bfbb096cfe2dd35cd9e00f269969b67536cb4370994afc20ff2d0875"}, + {file = "kiwisolver-1.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9eed0f7edbb274413b6ee781cca50541c8c0facd3d6fd289779e494340a2b85c"}, + {file = "kiwisolver-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c4923e404d6bcd91b6779c009542e5647fef32e4a5d75e115e3bbac6f2335eb"}, + {file = "kiwisolver-1.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0df54df7e686afa55e6f21fb86195224a6d9beb71d637e8d7920c95cf0f89aac"}, + {file = "kiwisolver-1.5.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2517e24d7315eb51c10664cdb865195df38ab74456c677df67bb47f12d088a27"}, + {file = "kiwisolver-1.5.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff710414307fefa903e0d9bdf300972f892c23477829f49504e59834f4195398"}, + {file = "kiwisolver-1.5.0-cp311-cp311-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6176c1811d9d5a04fa391c490cc44f451e240697a16977f11c6f722efb9041db"}, + {file = "kiwisolver-1.5.0-cp311-cp311-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:50847dca5d197fcbd389c805aa1a1cf32f25d2e7273dc47ab181a517666b68cc"}, + {file = "kiwisolver-1.5.0-cp311-cp311-manylinux_2_39_riscv64.whl", hash = "sha256:01808c6d15f4c3e8559595d6d1fe6411c68e4a3822b4b9972b44473b24f4e679"}, + {file = "kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:f1f9f4121ec58628c96baa3de1a55a4e3a333c5102c8e94b64e23bf7b2083309"}, + {file = "kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:b7d335370ae48a780c6e6a6bbfa97342f563744c39c35562f3f367665f5c1de2"}, + {file = "kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:800ee55980c18545af444d93fdd60c56b580db5cc54867d8cbf8a1dc0829938c"}, + {file = "kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:c438f6ca858697c9ab67eb28246c92508af972e114cac34e57a6d4ba17a3ac08"}, + {file = "kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8c63c91f95173f9c2a67c7c526b2cea976828a0e7fced9cdcead2802dc10f8a4"}, + {file = "kiwisolver-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:beb7f344487cdcb9e1efe4b7a29681b74d34c08f0043a327a74da852a6749e7b"}, + {file = "kiwisolver-1.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:ad4ae4ffd1ee9cd11357b4c66b612da9888f4f4daf2f36995eda64bd45370cac"}, + {file = "kiwisolver-1.5.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:4e9750bc21b886308024f8a54ccb9a2cc38ac9fa813bf4348434e3d54f337ff9"}, + {file = "kiwisolver-1.5.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:72ec46b7eba5b395e0a7b63025490d3214c11013f4aacb4f5e8d6c3041829588"}, + {file = "kiwisolver-1.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ed3a984b31da7481b103f68776f7128a89ef26ed40f4dc41a2223cda7fb24819"}, + {file = "kiwisolver-1.5.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bb5136fb5352d3f422df33f0c879a1b0c204004324150cc3b5e3c4f310c9049f"}, + {file = "kiwisolver-1.5.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b2af221f268f5af85e776a73d62b0845fc8baf8ef0abfae79d29c77d0e776aaf"}, + {file = "kiwisolver-1.5.0-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b0f172dc8ffaccb8522d7c5d899de00133f2f1ca7b0a49b7da98e901de87bf2d"}, + {file = "kiwisolver-1.5.0-cp312-cp312-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6ab8ba9152203feec73758dad83af9a0bbe05001eb4639e547207c40cfb52083"}, + {file = "kiwisolver-1.5.0-cp312-cp312-manylinux_2_39_riscv64.whl", hash = "sha256:cdee07c4d7f6d72008d3f73b9bf027f4e11550224c7c50d8df1ae4a37c1402a6"}, + {file = "kiwisolver-1.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7c60d3c9b06fb23bd9c6139281ccbdc384297579ae037f08ae90c69f6845c0b1"}, + {file = "kiwisolver-1.5.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:e315e5ec90d88e140f57696ff85b484ff68bb311e36f2c414aa4286293e6dee0"}, + {file = "kiwisolver-1.5.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:1465387ac63576c3e125e5337a6892b9e99e0627d52317f3ca79e6930d889d15"}, + {file = "kiwisolver-1.5.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:530a3fd64c87cffa844d4b6b9768774763d9caa299e9b75d8eca6a4423b31314"}, + {file = "kiwisolver-1.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1d9daea4ea6b9be74fe2f01f7fbade8d6ffab263e781274cffca0dba9be9eec9"}, + {file = "kiwisolver-1.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:f18c2d9782259a6dc132fdc7a63c168cbc74b35284b6d75c673958982a378384"}, + {file = "kiwisolver-1.5.0-cp312-cp312-win_arm64.whl", hash = "sha256:f7c7553b13f69c1b29a5bde08ddc6d9d0c8bfb84f9ed01c30db25944aeb852a7"}, + {file = "kiwisolver-1.5.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:fd40bb9cd0891c4c3cb1ddf83f8bbfa15731a248fdc8162669405451e2724b09"}, + {file = "kiwisolver-1.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c0e1403fd7c26d77c1f03e096dc58a5c726503fa0db0456678b8668f76f521e3"}, + {file = "kiwisolver-1.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:dda366d548e89a90d88a86c692377d18d8bd64b39c1fb2b92cb31370e2896bbd"}, + {file = "kiwisolver-1.5.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:332b4f0145c30b5f5ad9374881133e5aa64320428a57c2c2b61e9d891a51c2f3"}, + {file = "kiwisolver-1.5.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0c50b89ffd3e1a911c69a1dd3de7173c0cd10b130f56222e57898683841e4f96"}, + {file = "kiwisolver-1.5.0-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4db576bb8c3ef9365f8b40fe0f671644de6736ae2c27a2c62d7d8a1b4329f099"}, + {file = "kiwisolver-1.5.0-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0b85aad90cea8ac6797a53b5d5f2e967334fa4d1149f031c4537569972596cb8"}, + {file = "kiwisolver-1.5.0-cp313-cp313-manylinux_2_39_riscv64.whl", hash = "sha256:d36ca54cb4c6c4686f7cbb7b817f66f5911c12ddb519450bbe86707155028f87"}, + {file = "kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:38f4a703656f493b0ad185211ccfca7f0386120f022066b018eb5296d8613e23"}, + {file = "kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3ac2360e93cb41be81121755c6462cff3beaa9967188c866e5fce5cf13170859"}, + {file = "kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c95cab08d1965db3d84a121f1c7ce7479bdd4072c9b3dafd8fecce48a2e6b902"}, + {file = "kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:fc20894c3d21194d8041a28b65622d5b86db786da6e3cfe73f0c762951a61167"}, + {file = "kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7a32f72973f0f950c1920475d5c5ea3d971b81b6f0ec53b8d0a956cc965f22e0"}, + {file = "kiwisolver-1.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:0bf3acf1419fa93064a4c2189ac0b58e3be7872bf6ee6177b0d4c63dc4cea276"}, + {file = "kiwisolver-1.5.0-cp313-cp313-win_arm64.whl", hash = "sha256:fa8eb9ecdb7efb0b226acec134e0d709e87a909fa4971a54c0c4f6e88635484c"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:db485b3847d182b908b483b2ed133c66d88d49cacf98fd278fadafe11b4478d1"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:be12f931839a3bdfe28b584db0e640a65a8bcbc24560ae3fdb025a449b3d754e"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:16b85d37c2cbb3253226d26e64663f755d88a03439a9c47df6246b35defbdfb7"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4432b835675f0ea7414aab3d37d119f7226d24869b7a829caeab49ebda407b0c"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b0feb50971481a2cc44d94e88bdb02cdd497618252ae226b8eb1201b957e368"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:56fa888f10d0f367155e76ce849fa1166fc9730d13bd2d65a2aa13b6f5424489"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:940dda65d5e764406b9fb92761cbf462e4e63f712ab60ed98f70552e496f3bf1"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-manylinux_2_39_riscv64.whl", hash = "sha256:89fc958c702ee9a745e4700378f5d23fddbc46ff89e8fdbf5395c24d5c1452a3"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9027d773c4ff81487181a925945743413f6069634d0b122d0b37684ccf4f1e18"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:5b233ea3e165e43e35dba1d2b8ecc21cf070b45b65ae17dd2747d2713d942021"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:ce9bf03dad3b46408c08649c6fbd6ca28a9fce0eb32fdfffa6775a13103b5310"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:fc4d3f1fb9ca0ae9f97b095963bc6326f1dbfd3779d6679a1e016b9baaa153d3"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f443b4825c50a51ee68585522ab4a1d1257fac65896f282b4c6763337ac9f5d2"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-win_arm64.whl", hash = "sha256:893ff3a711d1b515ba9da14ee090519bad4610ed1962fbe298a434e8c5f8db53"}, + {file = "kiwisolver-1.5.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:8df31fe574b8b3993cc61764f40941111b25c2d9fea13d3ce24a49907cd2d615"}, + {file = "kiwisolver-1.5.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:1d49a49ac4cbfb7c1375301cd1ec90169dfeae55ff84710d782260ce77a75a02"}, + {file = "kiwisolver-1.5.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0cbe94b69b819209a62cb27bdfa5dc2a8977d8de2f89dfd97ba4f53ed3af754e"}, + {file = "kiwisolver-1.5.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:80aa065ffd378ff784822a6d7c3212f2d5f5e9c3589614b5c228b311fd3063ac"}, + {file = "kiwisolver-1.5.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e7f886f47ab881692f278ae901039a234e4025a68e6dfab514263a0b1c4ae05"}, + {file = "kiwisolver-1.5.0-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5060731cc3ed12ca3a8b57acd4aeca5bbc2f49216dd0bec1650a1acd89486bcd"}, + {file = "kiwisolver-1.5.0-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7a4aa69609f40fce3cbc3f87b2061f042eee32f94b8f11db707b66a26461591a"}, + {file = "kiwisolver-1.5.0-cp314-cp314-manylinux_2_39_riscv64.whl", hash = "sha256:d168fda2dbff7b9b5f38e693182d792a938c31db4dac3a80a4888de603c99554"}, + {file = "kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:413b820229730d358efd838ecbab79902fe97094565fdc80ddb6b0a18c18a581"}, + {file = "kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:5124d1ea754509b09e53738ec185584cc609aae4a3b510aaf4ed6aa047ef9303"}, + {file = "kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e4415a8db000bf49a6dd1c478bf70062eaacff0f462b92b0ba68791a905861f9"}, + {file = "kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d618fd27420381a4f6044faa71f46d8bfd911bd077c555f7138ed88729bfbe79"}, + {file = "kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5092eb5b1172947f57d6ea7d89b2f29650414e4293c47707eb499ec07a0ac796"}, + {file = "kiwisolver-1.5.0-cp314-cp314-win_amd64.whl", hash = "sha256:d76e2d8c75051d58177e762164d2e9ab92886534e3a12e795f103524f221dd8e"}, + {file = "kiwisolver-1.5.0-cp314-cp314-win_arm64.whl", hash = "sha256:fa6248cd194edff41d7ea9425ced8ca3a6f838bfb295f6f1d6e6bb694a8518df"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:d1ffeb80b5676463d7a7d56acbe8e37a20ce725570e09549fe738e02ca6b7e1e"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:bc4d8e252f532ab46a1de9349e2d27b91fce46736a9eedaa37beaca66f574ed4"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6783e069732715ad0c3ce96dbf21dbc2235ab0593f2baf6338101f70371f4028"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e7c4c09a490dc4d4a7f8cbee56c606a320f9dc28cf92a7157a39d1ce7676a657"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2a075bd7bd19c70cf67c8badfa36cf7c5d8de3c9ddb8420c51e10d9c50e94920"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:bdd3e53429ff02aa319ba59dfe4ceeec345bf46cf180ec2cf6fd5b942e7975e9"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3cdcb35dc9d807259c981a85531048ede628eabcffb3239adf3d17463518992d"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-manylinux_2_39_riscv64.whl", hash = "sha256:70d593af6a6ca332d1df73d519fddb5148edb15cd90d5f0155e3746a6d4fcc65"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:377815a8616074cabbf3f53354e1d040c35815a134e01d7614b7692e4bf8acfa"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0255a027391d52944eae1dbb5d4cc5903f57092f3674e8e544cdd2622826b3f0"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:012b1eb16e28718fa782b5e61dc6f2da1f0792ca73bd05d54de6cb9561665fc9"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:0e3aafb33aed7479377e5e9a82e9d4bf87063741fc99fc7ae48b0f16e32bdd6f"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e7a116ae737f0000343218c4edf5bd45893bfeaff0993c0b215d7124c9f77646"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-win_amd64.whl", hash = "sha256:1dd9b0b119a350976a6d781e7278ec7aca0b201e1a9e2d23d9804afecb6ca681"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-win_arm64.whl", hash = "sha256:58f812017cd2985c21fbffb4864d59174d4903dd66fa23815e74bbc7a0e2dd57"}, + {file = "kiwisolver-1.5.0-graalpy312-graalpy250_312_native-macosx_10_13_x86_64.whl", hash = "sha256:5ae8e62c147495b01a0f4765c878e9bfdf843412446a247e28df59936e99e797"}, + {file = "kiwisolver-1.5.0-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:f6764a4ccab3078db14a632420930f6186058750df066b8ea2a7106df91d3203"}, + {file = "kiwisolver-1.5.0-graalpy312-graalpy250_312_native-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c31c13da98624f957b0fb1b5bae5383b2333c2c3f6793d9825dd5ce79b525cb7"}, + {file = "kiwisolver-1.5.0-graalpy312-graalpy250_312_native-win_amd64.whl", hash = "sha256:1f1489f769582498610e015a8ef2d36f28f505ab3096d0e16b4858a9ec214f57"}, + {file = "kiwisolver-1.5.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:295d9ffe712caa9f8a3081de8d32fc60191b4b51c76f02f951fd8407253528f4"}, + {file = "kiwisolver-1.5.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:51e8c4084897de9f05898c2c2a39af6318044ae969d46ff7a34ed3f96274adca"}, + {file = "kiwisolver-1.5.0-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b83af57bdddef03c01a9138034c6ff03181a3028d9a1003b301eb1a55e161a3f"}, + {file = "kiwisolver-1.5.0-pp310-pypy310_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf4679a3d71012a7c2bf360e5cd878fbd5e4fcac0896b56393dec239d81529ed"}, + {file = "kiwisolver-1.5.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:41024ed50e44ab1a60d3fe0a9d15a4ccc9f5f2b1d814ff283c8d01134d5b81bc"}, + {file = "kiwisolver-1.5.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ec4c85dc4b687c7f7f15f553ff26a98bfe8c58f5f7f0ac8905f0ba4c7be60232"}, + {file = "kiwisolver-1.5.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:12e91c215a96e39f57989c8912ae761286ac5a9584d04030ceb3368a357f017a"}, + {file = "kiwisolver-1.5.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:be4a51a55833dc29ab5d7503e7bcb3b3af3402d266018137127450005cdfe737"}, + {file = "kiwisolver-1.5.0-pp311-pypy311_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:daae526907e262de627d8f70058a0f64acc9e2641c164c99c8f594b34a799a16"}, + {file = "kiwisolver-1.5.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:59cd8683f575d96df5bb48f6add94afc055012c29e28124fcae2b63661b9efb1"}, + {file = "kiwisolver-1.5.0.tar.gz", hash = "sha256:d4193f3d9dc3f6f79aaed0e5637f45d98850ebf01f7ca20e69457f3e8946b66a"}, ] [[package]] @@ -1676,6 +1769,154 @@ interegular = ["interegular (>=0.3.1,<0.4.0)"] nearley = ["js2py"] regex = ["regex"] +[[package]] +name = "librt" +version = "0.15.0" +description = "Mypyc runtime library" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +markers = "platform_python_implementation != \"PyPy\"" +files = [ + {file = "librt-0.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e1a49adf16a7c9d9646816c2946135527197b6fcf4347c7b8b761cf1bfbf4489"}, + {file = "librt-0.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:81a398f45b45a59200e13cd5ad1ae1d3f44334de98b148331afe2cdfee701c52"}, + {file = "librt-0.15.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4eafbaff06b9563f8b1c850621ce51605de05208e09d4d71ce490bc972b7b9e8"}, + {file = "librt-0.15.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:b0411b4066db926b80258c60dcb0e6db4c9cee312eab45b7e8866b17ddf9ada1"}, + {file = "librt-0.15.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:febb1ce6cac545a54e6b769982824e955a700fdd9fbf3a08a3d82c990968b57d"}, + {file = "librt-0.15.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b230acc1c3bfe2d6f2627ba2b95dc92e58aa494600e9722d0e6ccbc931e59702"}, + {file = "librt-0.15.0-cp310-cp310-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6da110e5f314c19ab8478464d02ae18808ae73d522c15260fa4918acdcd64da9"}, + {file = "librt-0.15.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:eab9208b00ca55bf75983ec99f7bf13acc746a36102e98953addaad7f7ea1e1b"}, + {file = "librt-0.15.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:6c013cd3a1721e69e14380ada97eaa4b7b0cdf1c6b96fa765d4ea47c875088db"}, + {file = "librt-0.15.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:567b1c430f8bd560e689421468278ac5941bab4a05303b5d95b6ae10db03f451"}, + {file = "librt-0.15.0-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:29c4cab9df457b19672c39be7f384ebb2bc925c4e2684b8780c222b43eb36389"}, + {file = "librt-0.15.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bccbd8e5b0bffb7106cf18eb1baa3d7194b1cebb3b4b1cdbd4bdb19382a6ee6c"}, + {file = "librt-0.15.0-cp310-cp310-win32.whl", hash = "sha256:8ae493ed5f659a7761c43d42f183db514536073ded9bcf671d2d1df47e29a07e"}, + {file = "librt-0.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:bc25fb356d0c7810bb49ff3df908ad1fda6995d660ab099ded69244ed7ab6053"}, + {file = "librt-0.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:823b92cf3c18ecd08afc70c42473888b41b6e8ef5046f3b82c05c154a2fa3d22"}, + {file = "librt-0.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c70bc1b602cf59917e8f0c7a2cbc8bcc6fbc14d5486136b00707a79619121d63"}, + {file = "librt-0.15.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:814ff83a25b5fce8b9c80c4dd803153fb5c5599fc74db9e022466938368957ef"}, + {file = "librt-0.15.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:57f5eeb6ad4c180de583b1038e61fe5fbd9796bb69a8a1c1a0c7ddbec4c8c60f"}, + {file = "librt-0.15.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:82909c8f7eb9952656b65d3147afde4cf8e6d5a991eebc86418b5e65843b0ab8"}, + {file = "librt-0.15.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f779070399f991400fc451719e0ea388eb7de313388bada2c127a35de05f798a"}, + {file = "librt-0.15.0-cp311-cp311-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bac89069bc496ebdf4f79ebb57bbd10d0b214c8454225deb672d91002bd17e18"}, + {file = "librt-0.15.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e0d00c708fb2f5822b152429b1ac80a58dbbbc3f6c232c4d13a3f7fcf2ea5b4c"}, + {file = "librt-0.15.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6c6624fe268625869485553dd7cc1daf30d22558215bb2a4ff16f67a9801a31a"}, + {file = "librt-0.15.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f56b397858a23dacf35ede366ed2212fdc03a6a57a1ad36468ad6e9dc5fac091"}, + {file = "librt-0.15.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:4388184646efe2054911c5b00a1077d6d1ee86a95b7e8ba96dc7850a809f3f40"}, + {file = "librt-0.15.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:97335f59082f9fe2ce6c2a9cc6433a0114bbb6cd4d5c09dd76c95c68b9f9a8b0"}, + {file = "librt-0.15.0-cp311-cp311-win32.whl", hash = "sha256:83380ffde38062a2e9bb55d83e74474f6614665528b98a6928720fc006dfffbb"}, + {file = "librt-0.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:f75720477ee05d509a310e856cacc8d909adc182f7b91193c207bcc26d7ee6db"}, + {file = "librt-0.15.0-cp311-cp311-win_arm64.whl", hash = "sha256:256237037a3ab001ae8d9803b2d43562a4c3aa38739843694349e4d5ebb0fd56"}, + {file = "librt-0.15.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e87bc679f86a99aa3b26e3c78eeb821a247c9a28eae48eaafcc32c3bf4c3bb9e"}, + {file = "librt-0.15.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:71599e011ac880e8e45d46047d714871894c7d4ab6f25626f8d4f89da21f368d"}, + {file = "librt-0.15.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c802434092b769b1d613ed2e13fac15fbfce1934a74bd10283b03c0fae231cd1"}, + {file = "librt-0.15.0-cp312-cp312-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:5500eeae393a184d14e1f35645962c27129d20c81afa4069e6ef826ebc2b3aaa"}, + {file = "librt-0.15.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6ecfc32dfb46fb7b565bcd6abf9412acf978775a998273d22888a6d7953730dd"}, + {file = "librt-0.15.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:89cc46cfd15022e35084355478c9ac809d90b1152222706ac9a7655ec21df6fa"}, + {file = "librt-0.15.0-cp312-cp312-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d5f51401d102c885b9ca509e62c79b1dbff286e1b9b047fde6f763780789356d"}, + {file = "librt-0.15.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cc30523e3f1a23fb7511cc659834a0d01a1042bb9de359bc1c131cc4ec6c9656"}, + {file = "librt-0.15.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:59fe030d8ae4a57e3fb7756bf35a858de74e04066fc8555c53d0af979132af81"}, + {file = "librt-0.15.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5a6526a2a956bbb1e4ae3568c82e650fc99119c66bb011ea60715744955a2b4d"}, + {file = "librt-0.15.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:85ea21ec6730194d67156b0e0b5430ccb1d61f8b8b907e39b37f9812b74a13f0"}, + {file = "librt-0.15.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1e47b8ba865d7ede071a91a7163073bbaeb72541f1ef8a07d512c45c7b5007f2"}, + {file = "librt-0.15.0-cp312-cp312-win32.whl", hash = "sha256:a5207ec414d1c4a2a7231b2086970dc036f94293cdf338190984958a013a42f1"}, + {file = "librt-0.15.0-cp312-cp312-win_amd64.whl", hash = "sha256:73b30cfa976659b3917c8f6153bdb0591c6a9ec6583599fd24a689b690622022"}, + {file = "librt-0.15.0-cp312-cp312-win_arm64.whl", hash = "sha256:a54cf9e0ef47b96af580849db5471142200568ce1e02cbf416addab551369570"}, + {file = "librt-0.15.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:db13ca398005abcbe538deda87b686d9bd08b7001cf40c4c06b444960ae10a26"}, + {file = "librt-0.15.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:aa1f1995789dca3698bc550aaceb09a51bd5df0a057ff84ff15296cd1975b801"}, + {file = "librt-0.15.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:55456ea87d8df21808446d03817be2f65e20391c1c615d9187440dff28cd08dc"}, + {file = "librt-0.15.0-cp313-cp313-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:5a86a5a08c2235316bdb359d5dbb6ce0abfca7fac06363103e2c5af571d92f95"}, + {file = "librt-0.15.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e56b6a368529bed262da40ce13f8fef590db0479819cca84f16a1f01ac356d0b"}, + {file = "librt-0.15.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:234d8d394721fa0d786af15ebf1f3fb7f3ed82fd1cd0cde45c2f247b5d4281d2"}, + {file = "librt-0.15.0-cp313-cp313-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d8363d7accb0286ac3a0e633f396e93800dafb8150494505daf9515bbda591f3"}, + {file = "librt-0.15.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0f0ee3644d951f31055ad07d77d92520e84505dd7a432cc4cd501dd70ee06785"}, + {file = "librt-0.15.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2cfd1a81a648806e6a7717be4cc4d1bb392fa229752bf8444ba365e381e984d6"}, + {file = "librt-0.15.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:a6cd22c9da0d866558e46a041f1cc0c2bbb26b61b137b2347fa834c332e1d101"}, + {file = "librt-0.15.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:6d5225ef8801e4ea5e482fa9b5dfb891dd9ef6f6d870f1f25d449ca2c70ac218"}, + {file = "librt-0.15.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d28a05796b99f749bf8794f17ba9ba1612d0076b802e9cfc62c554634e9ce3b"}, + {file = "librt-0.15.0-cp313-cp313-pyemscripten_2025_0_wasm32.whl", hash = "sha256:2067ff438048cead9d223ca5675bae2a25e520a7c3e6c1498bf9c6892d22caab"}, + {file = "librt-0.15.0-cp313-cp313-win32.whl", hash = "sha256:1cd3b721f24c206398b9e26da3c3a9c011e6e89d06f318ba8ebefc30f1003890"}, + {file = "librt-0.15.0-cp313-cp313-win_amd64.whl", hash = "sha256:f395a4a9a03ac062dbe9a9f82e0c720502e590a38feee6a757bc82e9c63afbd8"}, + {file = "librt-0.15.0-cp313-cp313-win_arm64.whl", hash = "sha256:0a15cb554761247d84a3ec0cbdf4078d70725384f0e4662c0fa3b26266eb60ad"}, + {file = "librt-0.15.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:f5de7feedc56337a088eb15cd9fafa9938367362221d8cc62c642b7f94821993"}, + {file = "librt-0.15.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:6c0eb900c0e91f4aebe680845242e614f1864edfd44106380d0752ac29522bf8"}, + {file = "librt-0.15.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e8c9a650a188e38bac005048cbe6342e81407782944d01934540ab75e417df21"}, + {file = "librt-0.15.0-cp314-cp314-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:92bfed8deec93df30286b9fe9e3b1dd17329cc076a192b4ee5ec223841d54953"}, + {file = "librt-0.15.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ec4b19788f835711a2072f9dbe6b03b3bf32ed1f0fb30cf399bdd59d9f0c33fa"}, + {file = "librt-0.15.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d4c7bacb70930f3d0a56f4ecf1be474a1f0d941b01dd73b756f3c256d42cb879"}, + {file = "librt-0.15.0-cp314-cp314-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3e79f05e4a08b4d880342673312bbc895b56df7765605796f15902eb5367d3ae"}, + {file = "librt-0.15.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a417149c0cba4d50b61e992e5a15e69eaf96746609b461cc4ed168aeef6b79dd"}, + {file = "librt-0.15.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:da7a94d6a3411f579d72aa3e3bc5fbca7ed4549f3dbd7e5de3aa567333374285"}, + {file = "librt-0.15.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:856f743ae607f2c1380eccb566c0038a9fb3eabf0fc2be2704d76d9f73557239"}, + {file = "librt-0.15.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:779a6e7c894737e5983e7790a9c78c4000c30e23c9aada08081bdbea53b0fa60"}, + {file = "librt-0.15.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:96bb17dbe8bab3c0954fbebfc69ed395599de75b6bbc35e3270a878e15d4dd65"}, + {file = "librt-0.15.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:7220697efaa6e5348fc3d18ee7f8563d4bfecd9872b37ffb915bfc1d08840622"}, + {file = "librt-0.15.0-cp314-cp314-win32.whl", hash = "sha256:f54598964d357b1c5ab77cf5d92f21e598fe0e23cdbe9618480807f81b4eba15"}, + {file = "librt-0.15.0-cp314-cp314-win_amd64.whl", hash = "sha256:3ff5893a2c23d886aa9ce786de5ac6ddc74aeeaf90743682b74d920e117d2e28"}, + {file = "librt-0.15.0-cp314-cp314-win_arm64.whl", hash = "sha256:3722a099730704c9a3d70c879fc0f51daec25fe5f1555672d97bc595abeafb95"}, + {file = "librt-0.15.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:38c0c7d4b6fc06c3324b3f9162c8391bfc4fd9dde53afe1033ce7edb48d5a714"}, + {file = "librt-0.15.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:8b2fdd7ead3c995c37940a790690660d0ca006c302db26cc51933f6766866fc3"}, + {file = "librt-0.15.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2fde98cf1fc4bac144ce23c2c4c017b924ba714509ea9334977b0b27050c837d"}, + {file = "librt-0.15.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:e3b461183c5fa7681b48560f91515f53a953122fb30c71e07abc67d7ddf58c38"}, + {file = "librt-0.15.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4bbcc257e3babea20a91715c361b24554ec4e8f51aa578568afc230799fe1a19"}, + {file = "librt-0.15.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b845b8d48088fad0cadc84be4b8fda63203be7e9237b71015b3925443c1f35ab"}, + {file = "librt-0.15.0-cp314-cp314t-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b30e600e8f337b9bd7f39b86d9fdfedc73cc46e3d0f745931a23a234220bb7e2"}, + {file = "librt-0.15.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:64b0c8c35aa4c4ed79896359f3e0b285cbe4e610042106500da4811c322cc108"}, + {file = "librt-0.15.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:0da0d94cb802f32a0524653e7201f2cef72d5f700a5407678f5290483d4fcd08"}, + {file = "librt-0.15.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:4a6369168d371207339b1e50d4532b06a7121586141f82599505a3f315751d47"}, + {file = "librt-0.15.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:c434e072557ade9cbc642d052c89d031efe47d5c9614523619d0d74a02378e81"}, + {file = "librt-0.15.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c7eec6a42018bc1d45763b1c162d3d2bf7c3b9a1b0ed30d3e91dcba390efefcc"}, + {file = "librt-0.15.0-cp314-cp314t-win32.whl", hash = "sha256:6912fa5e635d74529ac7cdb1bdf6ca3af4453da8d1edbe0110ee1cb4ad407ebf"}, + {file = "librt-0.15.0-cp314-cp314t-win_amd64.whl", hash = "sha256:8e11699ed745931c395acd3621b07062e0f840efa6935aad87a64ed0995f0915"}, + {file = "librt-0.15.0-cp314-cp314t-win_arm64.whl", hash = "sha256:5d2a91724463bfed4f573cd7a9fdc856d2e230d0c0e5a61416a93481dccd8605"}, + {file = "librt-0.15.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:8443e38dcfcfdbcf5add5118c623efd788d65ac2e25756d6251a54a06a4d0aca"}, + {file = "librt-0.15.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:6d15a29033c57490cfe2069097c6fc4049e4e65ffbb749be7dc453b7c4c68965"}, + {file = "librt-0.15.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d2c05c729b589e734c09578bf5964be48a911765484840d017bbc84f49d4c4ad"}, + {file = "librt-0.15.0-cp315-cp315-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:fa60887537e1d0cd2d9982269d33a709bf54b195cd2b9364fc0a758022af5bd9"}, + {file = "librt-0.15.0-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d8bc24219b24c0af375718942ab75e3544b2763085f40f965be4326734ae8328"}, + {file = "librt-0.15.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:86a21a7bd3fe3a419512ef424cc1c020f6771d0b29cfddff36d1635a855e63f0"}, + {file = "librt-0.15.0-cp315-cp315-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:dbab647e88d90b3167b91efe7091e248653688ed4337e4f90907a722c7361bb9"}, + {file = "librt-0.15.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:d8edcf6f550e918dca779c069b9e156385c60b406f99fc7641f32c52f7193659"}, + {file = "librt-0.15.0-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:8b62076030baa2d8b1501a46bf0e19c27a489aa90671c55665bff7887f7660b0"}, + {file = "librt-0.15.0-cp315-cp315-musllinux_1_2_ppc64le.whl", hash = "sha256:d00d20d1818e82a07a0ee0aa89a98b17ed7916b92441090b683719cb20a59b6d"}, + {file = "librt-0.15.0-cp315-cp315-musllinux_1_2_riscv64.whl", hash = "sha256:4e6ee93fc3cf848dcbf0cce2eca73d8e7dcd0cc2b6df3a529d57750b30a4c55c"}, + {file = "librt-0.15.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:32896a0af72508ea979e0acb4e4c04cbeeae04938167950d535c83c45597167d"}, + {file = "librt-0.15.0-cp315-cp315-pyemscripten_2026_5_wasm32.whl", hash = "sha256:ec3ba415afaf951f6951b1dd16d3c8e4f540065fc382d7e70b823a79567ca374"}, + {file = "librt-0.15.0-cp315-cp315-win32.whl", hash = "sha256:d2813ba2503764f0450680c533d13df7cff9b49df1411062eded5f67db4195b9"}, + {file = "librt-0.15.0-cp315-cp315-win_amd64.whl", hash = "sha256:b87d67e33afaf265262f2a66db578284b88ee2e6fcd224579cb5c15518677ad8"}, + {file = "librt-0.15.0-cp315-cp315-win_arm64.whl", hash = "sha256:713bd7df21170b982e729e46870f31d6b437bd1a9b4648cffb529bd3c2ec5c4b"}, + {file = "librt-0.15.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:3de789c82752730f94782a5ee518baf9c05edf85733aeaf73bb6e518755cdf54"}, + {file = "librt-0.15.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:e0b5deec9a8664eb722c797241970fd4aa1894d25fda36a1ddac0f7407606bd6"}, + {file = "librt-0.15.0-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5563302a8359bc2295bb7084d1a8ed1519df96afb30eb2aa4e0bff7b54228988"}, + {file = "librt-0.15.0-cp315-cp315t-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:22d6263b9d39d7bbb286fa791945646e3218f1be2d693e36fb630f1d0e59cd13"}, + {file = "librt-0.15.0-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:39ffd14646190c454f0d86e0d256b33f00a87a26ab410e619773b841d0e41416"}, + {file = "librt-0.15.0-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c47318cd3a61401452de11282242937e3e057c4fd3dbaf601e269d0928a06c0a"}, + {file = "librt-0.15.0-cp315-cp315t-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a56a1d4f859a82ca5b99fc4b82c9b027b15e3c455c5cd99e7d0719f27bb20b6c"}, + {file = "librt-0.15.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:077471b3182db4e17c36ae91555f36a4d2c00080b267f749bcad34a478a9a302"}, + {file = "librt-0.15.0-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:411ca4d1b905b860ceba7570dd6717a71dedaddcc4b0f77ece710aa41ee11f8d"}, + {file = "librt-0.15.0-cp315-cp315t-musllinux_1_2_ppc64le.whl", hash = "sha256:1256589e0b0adb31751d685a68bce29d73407ddf4ef05d4188f49d5dcf9566d9"}, + {file = "librt-0.15.0-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:f42b74a53e5f26a0ba0007411a7455b66c67ce4022a39cc1f56fc4efd65bcbab"}, + {file = "librt-0.15.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:291bf73caf78b9e88d6fae9bfd693207ff7d832e2fdbe2cf8e746bc13f5f892b"}, + {file = "librt-0.15.0-cp315-cp315t-win32.whl", hash = "sha256:c16d15ee371643ab48dc8248a3e680ebbeca573a13af2c3dd0c985b142d77162"}, + {file = "librt-0.15.0-cp315-cp315t-win_amd64.whl", hash = "sha256:dbd605739f228912dc49027cb764456b9757750bdc2b6b7773164db7096c6fd1"}, + {file = "librt-0.15.0-cp315-cp315t-win_arm64.whl", hash = "sha256:84d244b00604d17df3fc7736c327892d6bba66181254aa4087be807b6c342bdc"}, + {file = "librt-0.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0e2d0c0acf5b0ada7d045912b7cf787c21315c95b38b1fa939ef72d45d366b3d"}, + {file = "librt-0.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f9ca190fe9edc0eb08eec558a509a16d28d91c35667b8f043cba40ed5e77a959"}, + {file = "librt-0.15.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:80811e1c42386ea95c6fb30571d3250ad43d7863f883f787f70517f441150e59"}, + {file = "librt-0.15.0-cp39-cp39-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:88c2a17815c266e6d8180204ff62cb739ab869ada4a746d4c505331526ac58f1"}, + {file = "librt-0.15.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a5fa8f1f916988d0bf1afea005bda37f56ac41a18016e813ccf0097a8d460ca4"}, + {file = "librt-0.15.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:355e3a4c725225a14262004fc1872a552b9d3634b4f791a0dfc80804aafbfd55"}, + {file = "librt-0.15.0-cp39-cp39-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fc1ed11c4ad0b91af24def2050f2840ea4567828e3dd058fbe608d982f6e5465"}, + {file = "librt-0.15.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1f4ef2e71db33df4309167ed7f1520c4fae5e611226e159fa9cf33f93e6ddb3d"}, + {file = "librt-0.15.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1a1a8cd430c7dd0c083f455cb1b328d7fc682b05c31b940906f7845bdff80881"}, + {file = "librt-0.15.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:04d5387b908676c0b8d5d2f5fb58373b4ea382d81f7a6f0fab8ea2a462bb4738"}, + {file = "librt-0.15.0-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:1172c6ad2a88b646e7fe3b480e3fac4ab4418b3443fd8a4061fdd531e0622fc7"}, + {file = "librt-0.15.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:52e8db01f603f5da0ca30987479acff98769382efc8e142fa3962395dcf3ffdb"}, + {file = "librt-0.15.0-cp39-cp39-win32.whl", hash = "sha256:e4c911f15a1652ca94ae9f1abd92e74cbb1b3597d2d92fdd556202f94e8cd455"}, + {file = "librt-0.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:68242379c9b65a582b6e97318a1e9fbd6d445e58954f2d437991c4804ab11578"}, + {file = "librt-0.15.0.tar.gz", hash = "sha256:4e66cbe84437497d951b799d3e1551291b6fb3d643820a7014b3655d57a59162"}, +] + [[package]] name = "markupsafe" version = "3.0.3" @@ -1777,67 +2018,68 @@ files = [ [[package]] name = "matplotlib" -version = "3.10.7" +version = "3.10.9" description = "Python plotting package" optional = false python-versions = ">=3.10" groups = ["dev", "floris"] +markers = "python_version < \"3.11\"" files = [ - {file = "matplotlib-3.10.7-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:7ac81eee3b7c266dd92cee1cd658407b16c57eed08c7421fa354ed68234de380"}, - {file = "matplotlib-3.10.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:667ecd5d8d37813a845053d8f5bf110b534c3c9f30e69ebd25d4701385935a6d"}, - {file = "matplotlib-3.10.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cc1c51b846aca49a5a8b44fbba6a92d583a35c64590ad9e1e950dc88940a4297"}, - {file = "matplotlib-3.10.7-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a11c2e9e72e7de09b7b72e62f3df23317c888299c875e2b778abf1eda8c0a42"}, - {file = "matplotlib-3.10.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f19410b486fdd139885ace124e57f938c1e6a3210ea13dd29cab58f5d4bc12c7"}, - {file = "matplotlib-3.10.7-cp310-cp310-win_amd64.whl", hash = "sha256:b498e9e4022f93de2d5a37615200ca01297ceebbb56fe4c833f46862a490f9e3"}, - {file = "matplotlib-3.10.7-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:53b492410a6cd66c7a471de6c924f6ede976e963c0f3097a3b7abfadddc67d0a"}, - {file = "matplotlib-3.10.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d9749313deb729f08207718d29c86246beb2ea3fdba753595b55901dee5d2fd6"}, - {file = "matplotlib-3.10.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2222c7ba2cbde7fe63032769f6eb7e83ab3227f47d997a8453377709b7fe3a5a"}, - {file = "matplotlib-3.10.7-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e91f61a064c92c307c5a9dc8c05dc9f8a68f0a3be199d9a002a0622e13f874a1"}, - {file = "matplotlib-3.10.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6f1851eab59ca082c95df5a500106bad73672645625e04538b3ad0f69471ffcc"}, - {file = "matplotlib-3.10.7-cp311-cp311-win_amd64.whl", hash = "sha256:6516ce375109c60ceec579e699524e9d504cd7578506f01150f7a6bc174a775e"}, - {file = "matplotlib-3.10.7-cp311-cp311-win_arm64.whl", hash = "sha256:b172db79759f5f9bc13ef1c3ef8b9ee7b37b0247f987fbbbdaa15e4f87fd46a9"}, - {file = "matplotlib-3.10.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7a0edb7209e21840e8361e91ea84ea676658aa93edd5f8762793dec77a4a6748"}, - {file = "matplotlib-3.10.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c380371d3c23e0eadf8ebff114445b9f970aff2010198d498d4ab4c3b41eea4f"}, - {file = "matplotlib-3.10.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d5f256d49fea31f40f166a5e3131235a5d2f4b7f44520b1cf0baf1ce568ccff0"}, - {file = "matplotlib-3.10.7-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:11ae579ac83cdf3fb72573bb89f70e0534de05266728740d478f0f818983c695"}, - {file = "matplotlib-3.10.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4c14b6acd16cddc3569a2d515cfdd81c7a68ac5639b76548cfc1a9e48b20eb65"}, - {file = "matplotlib-3.10.7-cp312-cp312-win_amd64.whl", hash = "sha256:0d8c32b7ea6fb80b1aeff5a2ceb3fb9778e2759e899d9beff75584714afcc5ee"}, - {file = "matplotlib-3.10.7-cp312-cp312-win_arm64.whl", hash = "sha256:5f3f6d315dcc176ba7ca6e74c7768fb7e4cf566c49cb143f6bc257b62e634ed8"}, - {file = "matplotlib-3.10.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1d9d3713a237970569156cfb4de7533b7c4eacdd61789726f444f96a0d28f57f"}, - {file = "matplotlib-3.10.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:37a1fea41153dd6ee061d21ab69c9cf2cf543160b1b85d89cd3d2e2a7902ca4c"}, - {file = "matplotlib-3.10.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b3c4ea4948d93c9c29dc01c0c23eef66f2101bf75158c291b88de6525c55c3d1"}, - {file = "matplotlib-3.10.7-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22df30ffaa89f6643206cf13877191c63a50e8f800b038bc39bee9d2d4957632"}, - {file = "matplotlib-3.10.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b69676845a0a66f9da30e87f48be36734d6748024b525ec4710be40194282c84"}, - {file = "matplotlib-3.10.7-cp313-cp313-win_amd64.whl", hash = "sha256:744991e0cc863dd669c8dc9136ca4e6e0082be2070b9d793cbd64bec872a6815"}, - {file = "matplotlib-3.10.7-cp313-cp313-win_arm64.whl", hash = "sha256:fba2974df0bf8ce3c995fa84b79cde38326e0f7b5409e7a3a481c1141340bcf7"}, - {file = "matplotlib-3.10.7-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:932c55d1fa7af4423422cb6a492a31cbcbdbe68fd1a9a3f545aa5e7a143b5355"}, - {file = "matplotlib-3.10.7-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5e38c2d581d62ee729a6e144c47a71b3f42fb4187508dbbf4fe71d5612c3433b"}, - {file = "matplotlib-3.10.7-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:786656bb13c237bbcebcd402f65f44dd61ead60ee3deb045af429d889c8dbc67"}, - {file = "matplotlib-3.10.7-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:09d7945a70ea43bf9248f4b6582734c2fe726723204a76eca233f24cffc7ef67"}, - {file = "matplotlib-3.10.7-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d0b181e9fa8daf1d9f2d4c547527b167cb8838fc587deabca7b5c01f97199e84"}, - {file = "matplotlib-3.10.7-cp313-cp313t-win_amd64.whl", hash = "sha256:31963603041634ce1a96053047b40961f7a29eb8f9a62e80cc2c0427aa1d22a2"}, - {file = "matplotlib-3.10.7-cp313-cp313t-win_arm64.whl", hash = "sha256:aebed7b50aa6ac698c90f60f854b47e48cd2252b30510e7a1feddaf5a3f72cbf"}, - {file = "matplotlib-3.10.7-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:d883460c43e8c6b173fef244a2341f7f7c0e9725c7fe68306e8e44ed9c8fb100"}, - {file = "matplotlib-3.10.7-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:07124afcf7a6504eafcb8ce94091c5898bbdd351519a1beb5c45f7a38c67e77f"}, - {file = "matplotlib-3.10.7-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c17398b709a6cce3d9fdb1595c33e356d91c098cd9486cb2cc21ea2ea418e715"}, - {file = "matplotlib-3.10.7-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7146d64f561498764561e9cd0ed64fcf582e570fc519e6f521e2d0cfd43365e1"}, - {file = "matplotlib-3.10.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:90ad854c0a435da3104c01e2c6f0028d7e719b690998a2333d7218db80950722"}, - {file = "matplotlib-3.10.7-cp314-cp314-win_amd64.whl", hash = "sha256:4645fc5d9d20ffa3a39361fcdbcec731382763b623b72627806bf251b6388866"}, - {file = "matplotlib-3.10.7-cp314-cp314-win_arm64.whl", hash = "sha256:9257be2f2a03415f9105c486d304a321168e61ad450f6153d77c69504ad764bb"}, - {file = "matplotlib-3.10.7-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1e4bbad66c177a8fdfa53972e5ef8be72a5f27e6a607cec0d8579abd0f3102b1"}, - {file = "matplotlib-3.10.7-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:d8eb7194b084b12feb19142262165832fc6ee879b945491d1c3d4660748020c4"}, - {file = "matplotlib-3.10.7-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4d41379b05528091f00e1728004f9a8d7191260f3862178b88e8fd770206318"}, - {file = "matplotlib-3.10.7-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4a74f79fafb2e177f240579bc83f0b60f82cc47d2f1d260f422a0627207008ca"}, - {file = "matplotlib-3.10.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:702590829c30aada1e8cef0568ddbffa77ca747b4d6e36c6d173f66e301f89cc"}, - {file = "matplotlib-3.10.7-cp314-cp314t-win_amd64.whl", hash = "sha256:f79d5de970fc90cd5591f60053aecfce1fcd736e0303d9f0bf86be649fa68fb8"}, - {file = "matplotlib-3.10.7-cp314-cp314t-win_arm64.whl", hash = "sha256:cb783436e47fcf82064baca52ce748af71725d0352e1d31564cbe9c95df92b9c"}, - {file = "matplotlib-3.10.7-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5c09cf8f2793f81368f49f118b6f9f937456362bee282eac575cca7f84cda537"}, - {file = "matplotlib-3.10.7-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:de66744b2bb88d5cd27e80dfc2ec9f0517d0a46d204ff98fe9e5f2864eb67657"}, - {file = "matplotlib-3.10.7-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:53cc80662dd197ece414dd5b66e07370201515a3eaf52e7c518c68c16814773b"}, - {file = "matplotlib-3.10.7-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:15112bcbaef211bd663fa935ec33313b948e214454d949b723998a43357b17b0"}, - {file = "matplotlib-3.10.7-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d2a959c640cdeecdd2ec3136e8ea0441da59bcaf58d67e9c590740addba2cb68"}, - {file = "matplotlib-3.10.7-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3886e47f64611046bc1db523a09dd0a0a6bed6081e6f90e13806dd1d1d1b5e91"}, - {file = "matplotlib-3.10.7.tar.gz", hash = "sha256:a06ba7e2a2ef9131c79c49e63dad355d2d878413a0376c1727c8b9335ff731c7"}, + {file = "matplotlib-3.10.9-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:77210dce9cb8153dffc967efaae990543392563d5a376d4dd8539bebcb0ed217"}, + {file = "matplotlib-3.10.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1e7698ac9868428e84d2c967424803b2472ff7167d9d6590d4204ed775343c3b"}, + {file = "matplotlib-3.10.9-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1aa972116abb4c9d201bf245620b433726cb6856f3bef6a78f776a00f5c92d37"}, + {file = "matplotlib-3.10.9-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ae2f11957b27ce53497dd4d7b235c4d4f1faf383dfb39d0c5beb833bff883294"}, + {file = "matplotlib-3.10.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b049278ddce116aaa1c1377ebf58adea909132dfce0281cf7e3a1ea9fc2e2c65"}, + {file = "matplotlib-3.10.9-cp310-cp310-win_amd64.whl", hash = "sha256:82834c3c292d24d3a8aae77cd2d20019de69d692a34a970e4fdb8d33e2ea3dda"}, + {file = "matplotlib-3.10.9-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:68cfdcede415f7c8f5577b03303dd94526cdb6d11036cecdc205e08733b2d2bb"}, + {file = "matplotlib-3.10.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfca0129678bd56379db26c52b5d77ed7de314c047492fbdc763aa7501710cfb"}, + {file = "matplotlib-3.10.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8e436d155fa8a3399dc62683f8f5d0e2e50d25d0144a73edd73f82eec8f4abfb"}, + {file = "matplotlib-3.10.9-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:56fc0bd271b00025c6edfdc7c2dcd247372c8e1544971d62e1dc7c17367e8bf9"}, + {file = "matplotlib-3.10.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a5a6104ed666402ba5106d7f36e0e0cdca4e8d7fa4d39708ca88019e2835a2eb"}, + {file = "matplotlib-3.10.9-cp311-cp311-win_amd64.whl", hash = "sha256:d730e984eddf56974c3e72b6129c7ca462ac38dc624338f4b0b23eb23ecba00f"}, + {file = "matplotlib-3.10.9-cp311-cp311-win_arm64.whl", hash = "sha256:51bf0ddbdc598e060d46c16b5590708f81a1624cefbaaf62f6a81bf9285b8c80"}, + {file = "matplotlib-3.10.9-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f0c3c28d9fbcc1fe7a03be236d73430cf6409c41fb2383a7ac52fe932b072cb1"}, + {file = "matplotlib-3.10.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:41cb28c2bd769aa3e98322c6ab09854cbcc52ab69d2759d681bba3e327b2b320"}, + {file = "matplotlib-3.10.9-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ae20801130378b82d647ff5047c07316295b68dc054ca6b3c13519d0ea624285"}, + {file = "matplotlib-3.10.9-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6c63ebcd8b4b169eb2f5c200552ae6b8be8999a005b6b507ed76fb8d7d674fe2"}, + {file = "matplotlib-3.10.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d75d11c949914165976c621b2324f9ef162af7ebf4b057ddf95dd1dba7e5edcf"}, + {file = "matplotlib-3.10.9-cp312-cp312-win_amd64.whl", hash = "sha256:d091f9d758b34aaaaa6331d13574bf01891d903b3dec59bfff458ef7551de5d6"}, + {file = "matplotlib-3.10.9-cp312-cp312-win_arm64.whl", hash = "sha256:10cc5ce06d10231c36f40e875f3c7e8050362a4ee8f0ee5d29a6b3277d57bb42"}, + {file = "matplotlib-3.10.9-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b580440f1ff81a0e34122051a3dfabb7e4b7f9e380629929bde0eff9af72165f"}, + {file = "matplotlib-3.10.9-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b1b745c489cd1a77a0dc1120a05dc87af9798faebc913601feb8c73d89bf2d1e"}, + {file = "matplotlib-3.10.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8f3bcac1ca5ed000a6f4337d47ba67dfddf37ed6a46c15fd7f014997f7bf865f"}, + {file = "matplotlib-3.10.9-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7a8d66a55def891c33147ba3ba9bfcabf0b526a43764c818acbb4525e5ed0838"}, + {file = "matplotlib-3.10.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d843374407c4017a6403b59c6c81606773d136f3259d5b6da3131bc814542cc2"}, + {file = "matplotlib-3.10.9-cp313-cp313-win_amd64.whl", hash = "sha256:f4399f64b3e94cd500195490972ae1ee81170df1636fa15364d157d5bdd7b921"}, + {file = "matplotlib-3.10.9-cp313-cp313-win_arm64.whl", hash = "sha256:ba7b3b8ef09eab7df0e86e9ae086faa433efbfbdb46afcb3aa16aabf779469a8"}, + {file = "matplotlib-3.10.9-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:09218df8a93712bd6ea133e83a153c755448cf7868316c531cffcc43f69d1cc9"}, + {file = "matplotlib-3.10.9-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:82368699727bfb7b0182e1aa13082e3c08e092fa1a25d3e1fd92405bff96f6d4"}, + {file = "matplotlib-3.10.9-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3225f4e1edcb8c86c884ddf79ebe20ecd0a67d30188f279897554ccd8fded4dc"}, + {file = "matplotlib-3.10.9-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:de2445a0c6690d21b7eb6ce071cebad6d40a2e9bdf10d039074a96ba19797b99"}, + {file = "matplotlib-3.10.9-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:b2b9516251cb89ff618d757daec0e2ed1bf21248013844a853d87ef85ab3081d"}, + {file = "matplotlib-3.10.9-cp313-cp313t-win_amd64.whl", hash = "sha256:e9fae004b941b23ff2edcf1567a857ed77bafc8086ffa258190462328434faf8"}, + {file = "matplotlib-3.10.9-cp313-cp313t-win_arm64.whl", hash = "sha256:6b63d9c7c769b88ab81e10dc86e4e0607cf56817b9f9e6cf24b2a5f1693b8e38"}, + {file = "matplotlib-3.10.9-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:172db52c9e683f5d12eaf57f0f54834190e12581fe1cc2a19595a8f5acb4e77d"}, + {file = "matplotlib-3.10.9-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:97e35e8d39ccc85859095e01a53847432ba9a53ddf7986f7a54a11b73d0e143f"}, + {file = "matplotlib-3.10.9-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aba1615dabe83188e19d4f75a253c6a08423e04c1425e64039f800050a69de6b"}, + {file = "matplotlib-3.10.9-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:34cf8167e023ad956c15f36302911d5406bd99a9862c1a8499ea6f7c0e015dc2"}, + {file = "matplotlib-3.10.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:59476c6d29d612b8e9bb6ce8c5b631be6ba8f9e3a2421f22a02b192c7dd28716"}, + {file = "matplotlib-3.10.9-cp314-cp314-win_amd64.whl", hash = "sha256:336b9acc64d309063126edcdaca00db9373af3c476bb94388fe9c5a53ad13e6f"}, + {file = "matplotlib-3.10.9-cp314-cp314-win_arm64.whl", hash = "sha256:2dc9477819ffd78ad12a20df1d9d6a6bd4fec6aaa9072681465fddca052f1456"}, + {file = "matplotlib-3.10.9-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:da4e09638420548f31c354032a6250e473c68e5a4e96899b4844cf39ddea23fe"}, + {file = "matplotlib-3.10.9-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:345f6f68ecc8da0ca56fad2ea08fde1a115eda530079eca185d50a7bc3e146c6"}, + {file = "matplotlib-3.10.9-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4edcfbd8565339aa62f1cd4012f7180926fdbe71850f7b0d3c379c175cd6b66c"}, + {file = "matplotlib-3.10.9-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6be157fe17fc37cb95ac1d7374cf717ce9259616edec911a78d9d26dae8522d4"}, + {file = "matplotlib-3.10.9-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:4e42042d54db34fda4e95a7bd3e5789c2a995d2dad3eb8850232ee534092fbbf"}, + {file = "matplotlib-3.10.9-cp314-cp314t-win_amd64.whl", hash = "sha256:c27df8b3848f32a83d1767566595e43cfaa4460380974da06f4279a7ec143c39"}, + {file = "matplotlib-3.10.9-cp314-cp314t-win_arm64.whl", hash = "sha256:a49f1eadc84ca85fd72fa4e89e70e61bf86452df6f971af04b12c60761a0772c"}, + {file = "matplotlib-3.10.9-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1872fb212a05b729e649754a72d5da61d03e0554d76e80303b6f83d1d2c0552b"}, + {file = "matplotlib-3.10.9-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:985f2238880e2e69093f588f5fe2e46771747febf0649f3cf7f7b7480875317f"}, + {file = "matplotlib-3.10.9-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6640f75af2c6148293caa0a2b39dd806a492dd66c8a8b04035813e33d0fd2585"}, + {file = "matplotlib-3.10.9-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:42fb814efabe95c06c1994d8ab5a8385f43a249e23badd3ba931d4308e5bca20"}, + {file = "matplotlib-3.10.9-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:f76e640a5268850bfda54b5131b1b1941cc685e42c5fa98ed9f2d64038308cba"}, + {file = "matplotlib-3.10.9-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3fc0364dfbe1d07f6d15c5ebd0c5bf89e126916e5a8667dd4a7a6e84c36653d4"}, + {file = "matplotlib-3.10.9.tar.gz", hash = "sha256:fd66508e8c6877d98e586654b608a0456db8d7e8a546eb1e2600efd957302358"}, ] [package.dependencies] @@ -1852,36 +2094,104 @@ pyparsing = ">=3" python-dateutil = ">=2.7" [package.extras] -dev = ["meson-python (>=0.13.1,<0.17.0)", "pybind11 (>=2.13.2,!=2.13.3)", "setuptools (>=64)", "setuptools_scm (>=7)"] +dev = ["meson-python (>=0.13.1,<0.17.0)", "pybind11 (>=2.13.2,!=2.13.3)", "setuptools (>=64)", "setuptools_scm (>=7,<10)"] + +[[package]] +name = "matplotlib" +version = "3.11.1" +description = "Python plotting package" +optional = false +python-versions = ">=3.11" +groups = ["dev", "floris"] +markers = "python_version >= \"3.11\"" +files = [ + {file = "matplotlib-3.11.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:b7cf158e7add54a8d51ac9b5a84abd6d4e13ed4951b4f25f1c5139f41c2addb2"}, + {file = "matplotlib-3.11.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d2ace7273b9a5061a3b420918a16fae1f2dc5dfee1abcc13aba71b5d94b1820c"}, + {file = "matplotlib-3.11.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aee55e9041211bf84302ab55ec3965df18dd90ae19f8b58332a7feaf208bfe83"}, + {file = "matplotlib-3.11.1-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96f4bdeea33a8d15a071dbfe6d119451b1d719c733ac666d65357082901a9099"}, + {file = "matplotlib-3.11.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b4c78ceb2f11bcac7389d305cda17aeb1f4586a857854ab5780bd3dd8dbfc407"}, + {file = "matplotlib-3.11.1-cp311-cp311-win_amd64.whl", hash = "sha256:7f33a781e12b1e53b278deb2f5373c2e55ec4f10727be3440c0cfb5cda9f944f"}, + {file = "matplotlib-3.11.1-cp311-cp311-win_arm64.whl", hash = "sha256:67e4c3cd578c65ebd81bdc09a1b6592ceafee6dfafe116dc85dfcb647b5bbb18"}, + {file = "matplotlib-3.11.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e15ef41507f3d525f46154ac9e3ae785dacde9f20e593a25de8986267892ef74"}, + {file = "matplotlib-3.11.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:21a67b961a6d597bca54fae826cd20695ba4a6e4d05424a08da6e13e3176fd6b"}, + {file = "matplotlib-3.11.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ba8f811b8ddfac493734d6af0b2dff96919d0c28ca0d641858dab4262777c6ea"}, + {file = "matplotlib-3.11.1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c52f7ad20ef476806ed212380b1d54d20310c8b86bdc2c9a68b51f0024a44472"}, + {file = "matplotlib-3.11.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8b14eb22961fe865efb0e4ff167e333e428908b00115a8d800ccb65ee108e481"}, + {file = "matplotlib-3.11.1-cp312-cp312-win_amd64.whl", hash = "sha256:88a2a27dd9691ae448dfae4b26f59036be90c3c28757edd3553a29559d00859f"}, + {file = "matplotlib-3.11.1-cp312-cp312-win_arm64.whl", hash = "sha256:480194afceca4df2f137c2721227d3cba67121fbf4397b69cee7f83714b0a58a"}, + {file = "matplotlib-3.11.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6771b0cd7838c6a857a7209814158c0ad09bfef878db3033dd82d70ad101f191"}, + {file = "matplotlib-3.11.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2abdee5ffa2fe11b2d19f7a5c63b785fb7c28cc46c7bc1814156341d9d1a33e1"}, + {file = "matplotlib-3.11.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b0a19dcf73406d3746d25a5ed42d713604c9a3e024d129b102852b0d941cb9f3"}, + {file = "matplotlib-3.11.1-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7389b77ed2ab0552f46d9a90b81b7b8e6dfcdc42adc36c37a0865799843e0e3e"}, + {file = "matplotlib-3.11.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c90be0b73568da4f662afac580956a76e308437e641b4a45aa08925eeb67d95f"}, + {file = "matplotlib-3.11.1-cp313-cp313-win_amd64.whl", hash = "sha256:68408341f2312836fbbdf6b3c78047f65b2d8752f5fd221c3e72d348f5b34f8b"}, + {file = "matplotlib-3.11.1-cp313-cp313-win_arm64.whl", hash = "sha256:0c1f44890d435c1b4ef52f701ad5828cb450ea97bcc83918fda6be74965d6cd2"}, + {file = "matplotlib-3.11.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:5e510088c27a89d53580a752f959146893563e63c330e161d159b0fee652af6f"}, + {file = "matplotlib-3.11.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:1524e2bdd48a93557aa47ddcfe9c225dfdd57d5a01a5c49128c20f0632980ee1"}, + {file = "matplotlib-3.11.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:11664c551345553db92e61cae6cf1376f138f8c47cafdf13b64b18f3e3e9e464"}, + {file = "matplotlib-3.11.1-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5e1f8922ba31959cf6a9dfb51be64b7f7bc582801a3957dc0c2f3afcd3537adf"}, + {file = "matplotlib-3.11.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:83235693abde86e5e0129998f80ee39fc7f58e6d56a88fafb28a9278833e9d5f"}, + {file = "matplotlib-3.11.1-cp313-cp313t-win_amd64.whl", hash = "sha256:9a076f4fc5cdc43fdf510f5981418d25c2db4973418d9f22d8bb3dc8045ada78"}, + {file = "matplotlib-3.11.1-cp313-cp313t-win_arm64.whl", hash = "sha256:216fbb93a74add02ddb4cb38ef5348f59ac00b3e84567eaf16598772d40e150a"}, + {file = "matplotlib-3.11.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:30c492d4ba9448595b6fd8708c6725963f8148e25c0d8842948da5b05f0ee8d3"}, + {file = "matplotlib-3.11.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ac104be2768ffdd8655db9e71b768cbb45f2b9aa7b450cf1595e8f65d3822319"}, + {file = "matplotlib-3.11.1-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6be943cb68bc6660ead58c55b3aa6366cba2ef7feb06460fbcce32360376f19f"}, + {file = "matplotlib-3.11.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5af0dcda57d471440a7b5b623e70e0a61003518443d9098f211a96ecfbbc25be"}, + {file = "matplotlib-3.11.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:3d3fd84082b1afbd9398466c81309e20045be20d48fe0fb18c43504d164cbbb2"}, + {file = "matplotlib-3.11.1-cp314-cp314-win_amd64.whl", hash = "sha256:9601a1e90be21e4884c53b4f3dc3ee0544654946f9975258d691f1c2e2f119c6"}, + {file = "matplotlib-3.11.1-cp314-cp314-win_arm64.whl", hash = "sha256:ae30c6109848ac0f9fa36c5d6270938487614c47ba31860bd5361266dabc5685"}, + {file = "matplotlib-3.11.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:dadfe80797174e2984aae3be0b77594a3c72d2c0a40fbd4a0de48d2728caf3ae"}, + {file = "matplotlib-3.11.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:89b193b255f4f6f7948dbcee3691f4f341ab05d9a8874a67b45ddb4182922eda"}, + {file = "matplotlib-3.11.1-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:191163532cdefcb1571ca38a6d7e6474baccde64495783e6ba47aa07ec4b9bbb"}, + {file = "matplotlib-3.11.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9fdf1c818ab05d0e74002091ddaf414478a3a449ec9d51c8976d45be7e3a01e2"}, + {file = "matplotlib-3.11.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b937b9dba5f5f6c1e31c47abe2186c865c0914fd18f2ce0dfc39c9adcef5951d"}, + {file = "matplotlib-3.11.1-cp314-cp314t-win_amd64.whl", hash = "sha256:f2912f647f3fbe1ccf085f91e213936f9101bead81a5e670565b1f1b3712f4fb"}, + {file = "matplotlib-3.11.1-cp314-cp314t-win_arm64.whl", hash = "sha256:54d47b8ae8b579633a3902ca5b4ad6c1e132a5626d64447b2e22a66394e79987"}, + {file = "matplotlib-3.11.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:427258425f9a3fc4ed79a91f9e9b9aaf5a82cb6571e85dc14063cc6fbb993741"}, + {file = "matplotlib-3.11.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:1ac697e591c11b6ad04679a73c2d2f9980fe9d9f0311fb414a2e329706343dfb"}, + {file = "matplotlib-3.11.1-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e4b9ac2f1f607ecda2af90a5232beee2af7582fce1cc30c4b6a1b012dc21ee99"}, + {file = "matplotlib-3.11.1.tar.gz", hash = "sha256:69647db5746941c793d6e445a4cd349323ffb87d9cc958c2ad84a659b4832d30"}, +] + +[package.dependencies] +contourpy = ">=1.0.1" +cycler = ">=0.10" +fonttools = ">=4.28.2" +kiwisolver = ">=1.3.1" +numpy = ">=1.25" +packaging = ">=20.0" +pillow = ">=9" +pyparsing = ">=3" +python-dateutil = ">=2.7" [[package]] name = "matplotlib-inline" -version = "0.2.1" +version = "0.2.2" description = "Inline Matplotlib backend for Jupyter" optional = false python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "matplotlib_inline-0.2.1-py3-none-any.whl", hash = "sha256:d56ce5156ba6085e00a9d54fead6ed29a9c47e215cd1bba2e976ef39f5710a76"}, - {file = "matplotlib_inline-0.2.1.tar.gz", hash = "sha256:e1ee949c340d771fc39e241ea75683deb94762c8fa5f2927ec57c83c4dffa9fe"}, + {file = "matplotlib_inline-0.2.2-py3-none-any.whl", hash = "sha256:3c821cf1c209f59fb2d2d64abbf5b23b67bcb2210d663f9918dd851c6da1fcf6"}, + {file = "matplotlib_inline-0.2.2.tar.gz", hash = "sha256:72f3fe8fce36b70d4a5b612f899090cd0401deddc4ea90e1572b9f4bfb058c79"}, ] [package.dependencies] traitlets = "*" [package.extras] -test = ["flake8", "nbdime", "nbval", "notebook", "pytest"] +test = ["flake8", "matplotlib", "nbdime", "nbval", "notebook", "pytest"] [[package]] name = "mistune" -version = "3.1.4" +version = "3.3.4" description = "A sane and fast Markdown parser with useful plugins and renderers" optional = false python-versions = ">=3.8" groups = ["dev"] files = [ - {file = "mistune-3.1.4-py3-none-any.whl", hash = "sha256:93691da911e5d9d2e23bc54472892aff676df27a75274962ff9edc210364266d"}, - {file = "mistune-3.1.4.tar.gz", hash = "sha256:b5a7f801d389f724ec702840c11d8fc48f2b33519102fc7ee739e8177b672164"}, + {file = "mistune-3.3.4-py3-none-any.whl", hash = "sha256:ee015381e955e370962968befe1d729ab60fafb6a715ac6751763fbce38c8d4a"}, + {file = "mistune-3.3.4.tar.gz", hash = "sha256:58b5c96d6fcb61190dfe5fae498d2b2065f99cf61e9649418fd54cf1ada86dfe"}, ] [package.dependencies] @@ -1889,7 +2199,7 @@ typing-extensions = {version = "*", markers = "python_version < \"3.11\""} [[package]] name = "mitrotor" -version = "0.2.2" +version = "0.2.3" description = "" optional = false python-versions = ">3.10, <3.15" @@ -1907,7 +2217,7 @@ unified-momentum-model = {git = "https://github.com/Howland-Lab/Unified-Momentum type = "git" url = "https://github.com/Howland-Lab/MITRotor.git" reference = "HEAD" -resolved_reference = "132bff810beb8ad75789b61bf5e45db93533d73c" +resolved_reference = "b4db8c9a05331e8e811f364b1835f59713c78ce2" [[package]] name = "multiprocess" @@ -1940,63 +2250,71 @@ dill = ">=0.4.1" [[package]] name = "mypy" -version = "1.18.2" +version = "1.20.2" description = "Optional static typing for Python" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "mypy-1.18.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c1eab0cf6294dafe397c261a75f96dc2c31bffe3b944faa24db5def4e2b0f77c"}, - {file = "mypy-1.18.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7a780ca61fc239e4865968ebc5240bb3bf610ef59ac398de9a7421b54e4a207e"}, - {file = "mypy-1.18.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:448acd386266989ef11662ce3c8011fd2a7b632e0ec7d61a98edd8e27472225b"}, - {file = "mypy-1.18.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f9e171c465ad3901dc652643ee4bffa8e9fef4d7d0eece23b428908c77a76a66"}, - {file = "mypy-1.18.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:592ec214750bc00741af1f80cbf96b5013d81486b7bb24cb052382c19e40b428"}, - {file = "mypy-1.18.2-cp310-cp310-win_amd64.whl", hash = "sha256:7fb95f97199ea11769ebe3638c29b550b5221e997c63b14ef93d2e971606ebed"}, - {file = "mypy-1.18.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:807d9315ab9d464125aa9fcf6d84fde6e1dc67da0b6f80e7405506b8ac72bc7f"}, - {file = "mypy-1.18.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:776bb00de1778caf4db739c6e83919c1d85a448f71979b6a0edd774ea8399341"}, - {file = "mypy-1.18.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1379451880512ffce14505493bd9fe469e0697543717298242574882cf8cdb8d"}, - {file = "mypy-1.18.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1331eb7fd110d60c24999893320967594ff84c38ac6d19e0a76c5fd809a84c86"}, - {file = "mypy-1.18.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3ca30b50a51e7ba93b00422e486cbb124f1c56a535e20eff7b2d6ab72b3b2e37"}, - {file = "mypy-1.18.2-cp311-cp311-win_amd64.whl", hash = "sha256:664dc726e67fa54e14536f6e1224bcfce1d9e5ac02426d2326e2bb4e081d1ce8"}, - {file = "mypy-1.18.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:33eca32dd124b29400c31d7cf784e795b050ace0e1f91b8dc035672725617e34"}, - {file = "mypy-1.18.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a3c47adf30d65e89b2dcd2fa32f3aeb5e94ca970d2c15fcb25e297871c8e4764"}, - {file = "mypy-1.18.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d6c838e831a062f5f29d11c9057c6009f60cb294fea33a98422688181fe2893"}, - {file = "mypy-1.18.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01199871b6110a2ce984bde85acd481232d17413868c9807e95c1b0739a58914"}, - {file = "mypy-1.18.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a2afc0fa0b0e91b4599ddfe0f91e2c26c2b5a5ab263737e998d6817874c5f7c8"}, - {file = "mypy-1.18.2-cp312-cp312-win_amd64.whl", hash = "sha256:d8068d0afe682c7c4897c0f7ce84ea77f6de953262b12d07038f4d296d547074"}, - {file = "mypy-1.18.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:07b8b0f580ca6d289e69209ec9d3911b4a26e5abfde32228a288eb79df129fcc"}, - {file = "mypy-1.18.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ed4482847168439651d3feee5833ccedbf6657e964572706a2adb1f7fa4dfe2e"}, - {file = "mypy-1.18.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c3ad2afadd1e9fea5cf99a45a822346971ede8685cc581ed9cd4d42eaf940986"}, - {file = "mypy-1.18.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a431a6f1ef14cf8c144c6b14793a23ec4eae3db28277c358136e79d7d062f62d"}, - {file = "mypy-1.18.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7ab28cc197f1dd77a67e1c6f35cd1f8e8b73ed2217e4fc005f9e6a504e46e7ba"}, - {file = "mypy-1.18.2-cp313-cp313-win_amd64.whl", hash = "sha256:0e2785a84b34a72ba55fb5daf079a1003a34c05b22238da94fcae2bbe46f3544"}, - {file = "mypy-1.18.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:62f0e1e988ad41c2a110edde6c398383a889d95b36b3e60bcf155f5164c4fdce"}, - {file = "mypy-1.18.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:8795a039bab805ff0c1dfdb8cd3344642c2b99b8e439d057aba30850b8d3423d"}, - {file = "mypy-1.18.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6ca1e64b24a700ab5ce10133f7ccd956a04715463d30498e64ea8715236f9c9c"}, - {file = "mypy-1.18.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d924eef3795cc89fecf6bedc6ed32b33ac13e8321344f6ddbf8ee89f706c05cb"}, - {file = "mypy-1.18.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:20c02215a080e3a2be3aa50506c67242df1c151eaba0dcbc1e4e557922a26075"}, - {file = "mypy-1.18.2-cp314-cp314-win_amd64.whl", hash = "sha256:749b5f83198f1ca64345603118a6f01a4e99ad4bf9d103ddc5a3200cc4614adf"}, - {file = "mypy-1.18.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:25a9c8fb67b00599f839cf472713f54249a62efd53a54b565eb61956a7e3296b"}, - {file = "mypy-1.18.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c2b9c7e284ee20e7598d6f42e13ca40b4928e6957ed6813d1ab6348aa3f47133"}, - {file = "mypy-1.18.2-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d6985ed057513e344e43a26cc1cd815c7a94602fb6a3130a34798625bc2f07b6"}, - {file = "mypy-1.18.2-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22f27105f1525ec024b5c630c0b9f36d5c1cc4d447d61fe51ff4bd60633f47ac"}, - {file = "mypy-1.18.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:030c52d0ea8144e721e49b1f68391e39553d7451f0c3f8a7565b59e19fcb608b"}, - {file = "mypy-1.18.2-cp39-cp39-win_amd64.whl", hash = "sha256:aa5e07ac1a60a253445797e42b8b2963c9675563a94f11291ab40718b016a7a0"}, - {file = "mypy-1.18.2-py3-none-any.whl", hash = "sha256:22a1748707dd62b58d2ae53562ffc4d7f8bcc727e8ac7cbc69c053ddc874d47e"}, - {file = "mypy-1.18.2.tar.gz", hash = "sha256:06a398102a5f203d7477b2923dda3634c36727fa5c237d8f859ef90c42a9924b"}, + {file = "mypy-1.20.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cf5a4db6dca263010e2c7bff081c89383c72d187ba2cf4c44759aac970e2f0c4"}, + {file = "mypy-1.20.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7b0e817b518bff7facd7f85ea05b643ad8bdcce684cf29784987b0a7c8e1f997"}, + {file = "mypy-1.20.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97d7b9a485b40f8ca425460e89bf1da2814625b2da627c0dcc6aa46c92631d14"}, + {file = "mypy-1.20.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1e1c12f6d2db3d78b909b5f77513c11eb7f2dd2782b96a3ab6dffc7d44575c99"}, + {file = "mypy-1.20.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:89dce27e142d25ffbc154c1819383b69f2e9234dc4ed4766f42e0e8cb264ab5c"}, + {file = "mypy-1.20.2-cp310-cp310-win_amd64.whl", hash = "sha256:f376e37f9bf2a946872fc5fd1199c99310748e3c26c7a26683f13f8bdb756cbd"}, + {file = "mypy-1.20.2-cp310-cp310-win_arm64.whl", hash = "sha256:6e2b469efd811707bc530fd1effef0f5d6eebcb7fe376affae69025da4b979a2"}, + {file = "mypy-1.20.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4077797a273e56e8843d001e9dfe4ba10e33323d6ade647ff260e5cd97d9758c"}, + {file = "mypy-1.20.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cdecf62abcc4292500d7858aeae87a1f8f1150f4c4dd08fb0b336ee79b2a6df3"}, + {file = "mypy-1.20.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c566c3a88b6ece59b3d70f65bedef17304f48eb52ff040a6a18214e1917b3254"}, + {file = "mypy-1.20.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0deb80d062b2479f2c87ae568f89845afc71d11bc41b04179e58165fd9f31e98"}, + {file = "mypy-1.20.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bba9ad231e92a3e424b3e56b65aa17704993425bba97e302c832f9466bb85bac"}, + {file = "mypy-1.20.2-cp311-cp311-win_amd64.whl", hash = "sha256:baf593f2765fa3a6b1ef95807dbaa3d25b594f6a52adcc506a6b9cb115e1be67"}, + {file = "mypy-1.20.2-cp311-cp311-win_arm64.whl", hash = "sha256:20175a1c0f49863946ec20b7f63255768058ac4f07d2b9ded6a6b46cfb5a9100"}, + {file = "mypy-1.20.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4dbfcf869f6b0517f70cf0030ba6ea1d6645e132337a7d5204a18d8d5636c02b"}, + {file = "mypy-1.20.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4b6481b228d072315b053210b01ac320e1be243dc17f9e5887ef167f23f5fae4"}, + {file = "mypy-1.20.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:34397cdced6b90b836e38182076049fdb41424322e0b0728c946b0939ebdf9f6"}, + {file = "mypy-1.20.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a5da6976f20cae27059ea8d0c86e7cef3de720e04c4bb9ee18e3690fdb792066"}, + {file = "mypy-1.20.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:56908d7e08318d39f85b1f0c6cfd47b0cac1a130da677630dac0de3e0623e102"}, + {file = "mypy-1.20.2-cp312-cp312-win_amd64.whl", hash = "sha256:d52ad8d78522da1d308789df651ee5379088e77c76cb1994858d40a426b343b9"}, + {file = "mypy-1.20.2-cp312-cp312-win_arm64.whl", hash = "sha256:785b08db19c9f214dc37d65f7c165d19a30fcecb48abfa30f31b01b5acaabb58"}, + {file = "mypy-1.20.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:edfbfca868cdd6bd8d974a60f8a3682f5565d3f5c99b327640cedd24c4264026"}, + {file = "mypy-1.20.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e2877a02380adfcdbc69071a0f74d6e9dbbf593c0dc9d174e1f223ffd5281943"}, + {file = "mypy-1.20.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7488448de6007cd5177c6cea0517ac33b4c0f5ee9b5e9f2be51ce75511a85517"}, + {file = "mypy-1.20.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bb9c2fa06887e21d6a3a868762acb82aec34e2c6fd0174064f27c93ede68ad15"}, + {file = "mypy-1.20.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9d56a78b646f2e3daa865bc70cd5ec5a46c50045801ca8ff17a0c43abc97e3ee"}, + {file = "mypy-1.20.2-cp313-cp313-win_amd64.whl", hash = "sha256:2a4102b03bb7481d9a91a6da8d174740c9c8c4401024684b9ca3b7cc5e49852f"}, + {file = "mypy-1.20.2-cp313-cp313-win_arm64.whl", hash = "sha256:a95a9248b0c6fd933a442c03c3b113c3b61320086b88e2c444676d3fd1ca3330"}, + {file = "mypy-1.20.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:419413398fe250aae057fd2fe50166b61077083c9b82754c341cf4fd73038f30"}, + {file = "mypy-1.20.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e73c07f23009962885c197ccb9b41356a30cc0e5a1d0c2ea8fd8fb1362d7f924"}, + {file = "mypy-1.20.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0c64e5973df366b747646fc98da921f9d6eba9716d57d1db94a83c026a08e0fb"}, + {file = "mypy-1.20.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a65aa591af023864fd08a97da9974e919452cfe19cb146c8a5dc692626445dc"}, + {file = "mypy-1.20.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:4fef51b01e638974a6e69885687e9bd40c8d1e09a6cd291cca0619625cf1f558"}, + {file = "mypy-1.20.2-cp314-cp314-win_amd64.whl", hash = "sha256:913485a03f1bcf5d279409a9d2b9ed565c151f61c09f29991e5faa14033da4c8"}, + {file = "mypy-1.20.2-cp314-cp314-win_arm64.whl", hash = "sha256:c3bae4f855d965b5453784300c12ffc63a548304ac7f99e55d4dc7c898673aa3"}, + {file = "mypy-1.20.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:2de3dcea53babc1c3237a19002bc3d228ce1833278f093b8d619e06e7cc79609"}, + {file = "mypy-1.20.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:52b176444e2e5054dfcbcb8c75b0b719865c96247b37407184bbfca5c353f2c2"}, + {file = "mypy-1.20.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:688c3312e5dadb573a2c69c82af3a298d43ecf9e6d264e0f95df960b5f6ac19c"}, + {file = "mypy-1.20.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:29752dbbf8cc53f89f6ac096d363314333045c257c9c75cbd189ca2de0455744"}, + {file = "mypy-1.20.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:803203d2b6ea644982c644895c2f78b28d0e208bba7b27d9b921e0ec5eb207c6"}, + {file = "mypy-1.20.2-cp314-cp314t-win_amd64.whl", hash = "sha256:9bcb8aa397ff0093c824182fd76a935a9ba7ad097fcbef80ae89bf6c1731d8ec"}, + {file = "mypy-1.20.2-cp314-cp314t-win_arm64.whl", hash = "sha256:e061b58443f1736f8a37c48978d7ab581636d6ab03e3d4f99e3fa90463bb9382"}, + {file = "mypy-1.20.2-py3-none-any.whl", hash = "sha256:a94c5a76ab46c5e6257c7972b6c8cff0574201ca7dc05647e33e795d78680563"}, + {file = "mypy-1.20.2.tar.gz", hash = "sha256:e8222c26daaafd9e8626dec58ae36029f82585890589576f769a650dd20fd665"}, ] [package.dependencies] +librt = {version = ">=0.8.0", markers = "platform_python_implementation != \"PyPy\""} mypy_extensions = ">=1.0.0" -pathspec = ">=0.9.0" +pathspec = ">=1.0.0" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing_extensions = ">=4.6.0" +typing_extensions = {version = ">=4.6.0", markers = "python_version < \"3.15\""} [package.extras] dmypy = ["psutil (>=4.0)"] faster-cache = ["orjson"] install-types = ["pip"] mypyc = ["setuptools (>=50)"] +native-parser = ["ast-serialize (>=0.1.1,<1.0.0)"] reports = ["lxml"] [[package]] @@ -2013,37 +2331,37 @@ files = [ [[package]] name = "nbclient" -version = "0.10.2" +version = "0.11.0" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." optional = false -python-versions = ">=3.9.0" +python-versions = ">=3.10.0" groups = ["dev"] files = [ - {file = "nbclient-0.10.2-py3-none-any.whl", hash = "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d"}, - {file = "nbclient-0.10.2.tar.gz", hash = "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193"}, + {file = "nbclient-0.11.0-py3-none-any.whl", hash = "sha256:ef7fa0d59d6e1d41103933d8a445a18d5de860ca6b613b87b8574accdb3c2895"}, + {file = "nbclient-0.11.0.tar.gz", hash = "sha256:04a134a5b087f2c5887f228aca155db50169b8cd9334dee6942c8e927e56081a"}, ] [package.dependencies] -jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" -nbformat = ">=5.1" -traitlets = ">=5.4" +jupyter-client = ">=7.0.0" +jupyter-core = ">=5.4.0" +nbformat = ">=5.2.0" +traitlets = ">=5.13" [package.extras] dev = ["pre-commit"] -docs = ["autodoc-traits", "flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "mock", "moto", "myst-parser", "nbconvert (>=7.1.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling", "testpath", "xmltodict"] -test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.1.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] +docs = ["autodoc-traits", "flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "mock", "moto", "myst-parser", "nbconvert (>=7.1.0)", "pytest (>=9.0.1,<10)", "pytest-asyncio (>=1.3.0)", "pytest-cov (>=4.0)", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling", "testpath", "xmltodict"] +test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.1.0)", "pytest (>=9.0.1,<10)", "pytest-asyncio (>=1.3.0)", "pytest-cov (>=4.0)", "testpath", "xmltodict"] [[package]] name = "nbconvert" -version = "7.16.6" -description = "Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script. nbconvert can be used both as a Python library (`import nbconvert`) or as a command line tool (invoked as `jupyter nbconvert ...`)." +version = "7.17.1" +description = "Convert Jupyter Notebooks (.ipynb files) to other formats." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "nbconvert-7.16.6-py3-none-any.whl", hash = "sha256:1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b"}, - {file = "nbconvert-7.16.6.tar.gz", hash = "sha256:576a7e37c6480da7b8465eefa66c17844243816ce1ccc372633c6b71c3c0f582"}, + {file = "nbconvert-7.17.1-py3-none-any.whl", hash = "sha256:aa85c087b435e7bf1ffd03319f658e285f2b89eccab33bc1ba7025495ab3e7c8"}, + {file = "nbconvert-7.17.1.tar.gz", hash = "sha256:34d0d0a7e73ce3cbab6c5aae8f4f468797280b01fd8bd2ca746da8569eddd7d2"}, ] [package.dependencies] @@ -2063,8 +2381,8 @@ pygments = ">=2.4.1" traitlets = ">=5.1" [package.extras] -all = ["flaky", "ipykernel", "ipython", "ipywidgets (>=7.5)", "myst-parser", "nbsphinx (>=0.2.12)", "playwright", "pydata-sphinx-theme", "pyqtwebengine (>=5.15)", "pytest (>=7)", "sphinx (==5.0.2)", "sphinxcontrib-spelling", "tornado (>=6.1)"] -docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (==5.0.2)", "sphinxcontrib-spelling"] +all = ["flaky", "intersphinx-registry", "ipykernel", "ipython", "ipywidgets (>=7.5)", "myst-parser", "nbsphinx (>=0.2.12)", "playwright", "pydata-sphinx-theme", "pyqtwebengine (>=5.15)", "pytest (>=7)", "sphinx (>=5.0.2)", "sphinxcontrib-spelling", "tornado (>=6.1)"] +docs = ["intersphinx-registry", "ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (>=5.0.2)", "sphinxcontrib-spelling"] qtpdf = ["pyqtwebengine (>=5.15)"] qtpng = ["pyqtwebengine (>=5.15)"] serve = ["tornado (>=6.1)"] @@ -2073,14 +2391,14 @@ webpdf = ["playwright"] [[package]] name = "nbformat" -version = "5.10.4" +version = "5.11.1" description = "The Jupyter Notebook format" optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b"}, - {file = "nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a"}, + {file = "nbformat-5.11.1-py3-none-any.whl", hash = "sha256:cc6698fa75f4fab8755ead786317815f13a6fee3b53311c0abb1a8b51d52f7ec"}, + {file = "nbformat-5.11.1.tar.gz", hash = "sha256:32d4521c68c6e7d5b29c76defaeed9f42ea733142b9b19f88277ce10390b9c4d"}, ] [package.dependencies] @@ -2090,8 +2408,8 @@ jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" traitlets = ">=5.1" [package.extras] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] -test = ["pep440", "pre-commit", "pytest", "testpath"] +docs = ["intersphinx-registry", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["packaging", "pre-commit", "pytest", "testpath"] [[package]] name = "nest-asyncio" @@ -2107,27 +2425,28 @@ files = [ [[package]] name = "notebook" -version = "7.4.7" +version = "7.6.2" description = "Jupyter Notebook - A web-based notebook environment for interactive computing" optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "notebook-7.4.7-py3-none-any.whl", hash = "sha256:362b7c95527f7dd3c4c84d410b782872fd9c734fb2524c11dd92758527b6eda6"}, - {file = "notebook-7.4.7.tar.gz", hash = "sha256:3f0a04027dfcee8a876de48fba13ab77ec8c12f72f848a222ed7f5081b9e342a"}, + {file = "notebook-7.6.2-py3-none-any.whl", hash = "sha256:5fe9e09c335cb4b7de21627b860f77210e70e54b1fb1276ad942a4a7e1d858d3"}, + {file = "notebook-7.6.2.tar.gz", hash = "sha256:cc02b5f0bb972160cccfe44ad8a1a202036206ba3439469c514f03aefa9ae807"}, ] [package.dependencies] -jupyter-server = ">=2.4.0,<3" -jupyterlab = ">=4.4.9,<4.5" -jupyterlab-server = ">=2.27.1,<3" +jupyter-builder = ">=1.0.2,<2" +jupyter-server = ">=2.19.0,<3" +jupyterlab = ">=4.6.3,<4.7" +jupyterlab-server = ">=2.28.0,<3" notebook-shim = ">=0.2,<0.3" tornado = ">=6.2.0" [package.extras] dev = ["hatch", "pre-commit"] docs = ["myst-parser", "nbsphinx", "pydata-sphinx-theme", "sphinx (>=1.3.6)", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] -test = ["importlib-resources (>=5.0) ; python_version < \"3.10\"", "ipykernel", "jupyter-server[test] (>=2.4.0,<3)", "jupyterlab-server[test] (>=2.27.1,<3)", "nbval", "pytest (>=7.0)", "pytest-console-scripts", "pytest-timeout", "pytest-tornasync", "requests"] +test = ["ipykernel", "jupyter-server[test] (>=2.19.0,<3)", "jupyterlab-server[test] (>=2.28.0,<3)", "nbval", "pytest (>=7.0)", "pytest-console-scripts", "pytest-timeout", "pytest-tornasync", "requests"] [[package]] name = "notebook-shim" @@ -2346,87 +2665,162 @@ files = [ [[package]] name = "numpy" -version = "2.3.4" +version = "2.4.6" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.11" groups = ["main", "dev", "floris"] -markers = "python_version >= \"3.11\"" -files = [ - {file = "numpy-2.3.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e78aecd2800b32e8347ce49316d3eaf04aed849cd5b38e0af39f829a4e59f5eb"}, - {file = "numpy-2.3.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7fd09cc5d65bda1e79432859c40978010622112e9194e581e3415a3eccc7f43f"}, - {file = "numpy-2.3.4-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:1b219560ae2c1de48ead517d085bc2d05b9433f8e49d0955c82e8cd37bd7bf36"}, - {file = "numpy-2.3.4-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:bafa7d87d4c99752d07815ed7a2c0964f8ab311eb8168f41b910bd01d15b6032"}, - {file = "numpy-2.3.4-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:36dc13af226aeab72b7abad501d370d606326a0029b9f435eacb3b8c94b8a8b7"}, - {file = "numpy-2.3.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a7b2f9a18b5ff9824a6af80de4f37f4ec3c2aab05ef08f51c77a093f5b89adda"}, - {file = "numpy-2.3.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9984bd645a8db6ca15d850ff996856d8762c51a2239225288f08f9050ca240a0"}, - {file = "numpy-2.3.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:64c5825affc76942973a70acf438a8ab618dbd692b84cd5ec40a0a0509edc09a"}, - {file = "numpy-2.3.4-cp311-cp311-win32.whl", hash = "sha256:ed759bf7a70342f7817d88376eb7142fab9fef8320d6019ef87fae05a99874e1"}, - {file = "numpy-2.3.4-cp311-cp311-win_amd64.whl", hash = "sha256:faba246fb30ea2a526c2e9645f61612341de1a83fb1e0c5edf4ddda5a9c10996"}, - {file = "numpy-2.3.4-cp311-cp311-win_arm64.whl", hash = "sha256:4c01835e718bcebe80394fd0ac66c07cbb90147ebbdad3dcecd3f25de2ae7e2c"}, - {file = "numpy-2.3.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ef1b5a3e808bc40827b5fa2c8196151a4c5abe110e1726949d7abddfe5c7ae11"}, - {file = "numpy-2.3.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c2f91f496a87235c6aaf6d3f3d89b17dba64996abadccb289f48456cff931ca9"}, - {file = "numpy-2.3.4-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:f77e5b3d3da652b474cc80a14084927a5e86a5eccf54ca8ca5cbd697bf7f2667"}, - {file = "numpy-2.3.4-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:8ab1c5f5ee40d6e01cbe96de5863e39b215a4d24e7d007cad56c7184fdf4aeef"}, - {file = "numpy-2.3.4-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:77b84453f3adcb994ddbd0d1c5d11db2d6bda1a2b7fd5ac5bd4649d6f5dc682e"}, - {file = "numpy-2.3.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4121c5beb58a7f9e6dfdee612cb24f4df5cd4db6e8261d7f4d7450a997a65d6a"}, - {file = "numpy-2.3.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:65611ecbb00ac9846efe04db15cbe6186f562f6bb7e5e05f077e53a599225d16"}, - {file = "numpy-2.3.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dabc42f9c6577bcc13001b8810d300fe814b4cfbe8a92c873f269484594f9786"}, - {file = "numpy-2.3.4-cp312-cp312-win32.whl", hash = "sha256:a49d797192a8d950ca59ee2d0337a4d804f713bb5c3c50e8db26d49666e351dc"}, - {file = "numpy-2.3.4-cp312-cp312-win_amd64.whl", hash = "sha256:985f1e46358f06c2a09921e8921e2c98168ed4ae12ccd6e5e87a4f1857923f32"}, - {file = "numpy-2.3.4-cp312-cp312-win_arm64.whl", hash = "sha256:4635239814149e06e2cb9db3dd584b2fa64316c96f10656983b8026a82e6e4db"}, - {file = "numpy-2.3.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c090d4860032b857d94144d1a9976b8e36709e40386db289aaf6672de2a81966"}, - {file = "numpy-2.3.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a13fc473b6db0be619e45f11f9e81260f7302f8d180c49a22b6e6120022596b3"}, - {file = "numpy-2.3.4-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:3634093d0b428e6c32c3a69b78e554f0cd20ee420dcad5a9f3b2a63762ce4197"}, - {file = "numpy-2.3.4-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:043885b4f7e6e232d7df4f51ffdef8c36320ee9d5f227b380ea636722c7ed12e"}, - {file = "numpy-2.3.4-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4ee6a571d1e4f0ea6d5f22d6e5fbd6ed1dc2b18542848e1e7301bd190500c9d7"}, - {file = "numpy-2.3.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fc8a63918b04b8571789688b2780ab2b4a33ab44bfe8ccea36d3eba51228c953"}, - {file = "numpy-2.3.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:40cc556d5abbc54aabe2b1ae287042d7bdb80c08edede19f0c0afb36ae586f37"}, - {file = "numpy-2.3.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ecb63014bb7f4ce653f8be7f1df8cbc6093a5a2811211770f6606cc92b5a78fd"}, - {file = "numpy-2.3.4-cp313-cp313-win32.whl", hash = "sha256:e8370eb6925bb8c1c4264fec52b0384b44f675f191df91cbe0140ec9f0955646"}, - {file = "numpy-2.3.4-cp313-cp313-win_amd64.whl", hash = "sha256:56209416e81a7893036eea03abcb91c130643eb14233b2515c90dcac963fe99d"}, - {file = "numpy-2.3.4-cp313-cp313-win_arm64.whl", hash = "sha256:a700a4031bc0fd6936e78a752eefb79092cecad2599ea9c8039c548bc097f9bc"}, - {file = "numpy-2.3.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:86966db35c4040fdca64f0816a1c1dd8dbd027d90fca5a57e00e1ca4cd41b879"}, - {file = "numpy-2.3.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:838f045478638b26c375ee96ea89464d38428c69170360b23a1a50fa4baa3562"}, - {file = "numpy-2.3.4-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:d7315ed1dab0286adca467377c8381cd748f3dc92235f22a7dfc42745644a96a"}, - {file = "numpy-2.3.4-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:84f01a4d18b2cc4ade1814a08e5f3c907b079c847051d720fad15ce37aa930b6"}, - {file = "numpy-2.3.4-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:817e719a868f0dacde4abdfc5c1910b301877970195db9ab6a5e2c4bd5b121f7"}, - {file = "numpy-2.3.4-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:85e071da78d92a214212cacea81c6da557cab307f2c34b5f85b628e94803f9c0"}, - {file = "numpy-2.3.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2ec646892819370cf3558f518797f16597b4e4669894a2ba712caccc9da53f1f"}, - {file = "numpy-2.3.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:035796aaaddfe2f9664b9a9372f089cfc88bd795a67bd1bfe15e6e770934cf64"}, - {file = "numpy-2.3.4-cp313-cp313t-win32.whl", hash = "sha256:fea80f4f4cf83b54c3a051f2f727870ee51e22f0248d3114b8e755d160b38cfb"}, - {file = "numpy-2.3.4-cp313-cp313t-win_amd64.whl", hash = "sha256:15eea9f306b98e0be91eb344a94c0e630689ef302e10c2ce5f7e11905c704f9c"}, - {file = "numpy-2.3.4-cp313-cp313t-win_arm64.whl", hash = "sha256:b6c231c9c2fadbae4011ca5e7e83e12dc4a5072f1a1d85a0a7b3ed754d145a40"}, - {file = "numpy-2.3.4-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:81c3e6d8c97295a7360d367f9f8553973651b76907988bb6066376bc2252f24e"}, - {file = "numpy-2.3.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:7c26b0b2bf58009ed1f38a641f3db4be8d960a417ca96d14e5b06df1506d41ff"}, - {file = "numpy-2.3.4-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:62b2198c438058a20b6704351b35a1d7db881812d8512d67a69c9de1f18ca05f"}, - {file = "numpy-2.3.4-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:9d729d60f8d53a7361707f4b68a9663c968882dd4f09e0d58c044c8bf5faee7b"}, - {file = "numpy-2.3.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bd0c630cf256b0a7fd9d0a11c9413b42fef5101219ce6ed5a09624f5a65392c7"}, - {file = "numpy-2.3.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d5e081bc082825f8b139f9e9fe42942cb4054524598aaeb177ff476cc76d09d2"}, - {file = "numpy-2.3.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:15fb27364ed84114438fff8aaf998c9e19adbeba08c0b75409f8c452a8692c52"}, - {file = "numpy-2.3.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:85d9fb2d8cd998c84d13a79a09cc0c1091648e848e4e6249b0ccd7f6b487fa26"}, - {file = "numpy-2.3.4-cp314-cp314-win32.whl", hash = "sha256:e73d63fd04e3a9d6bc187f5455d81abfad05660b212c8804bf3b407e984cd2bc"}, - {file = "numpy-2.3.4-cp314-cp314-win_amd64.whl", hash = "sha256:3da3491cee49cf16157e70f607c03a217ea6647b1cea4819c4f48e53d49139b9"}, - {file = "numpy-2.3.4-cp314-cp314-win_arm64.whl", hash = "sha256:6d9cd732068e8288dbe2717177320723ccec4fb064123f0caf9bbd90ab5be868"}, - {file = "numpy-2.3.4-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:22758999b256b595cf0b1d102b133bb61866ba5ceecf15f759623b64c020c9ec"}, - {file = "numpy-2.3.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:9cb177bc55b010b19798dc5497d540dea67fd13a8d9e882b2dae71de0cf09eb3"}, - {file = "numpy-2.3.4-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:0f2bcc76f1e05e5ab58893407c63d90b2029908fa41f9f1cc51eecce936c3365"}, - {file = "numpy-2.3.4-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:8dc20bde86802df2ed8397a08d793da0ad7a5fd4ea3ac85d757bf5dd4ad7c252"}, - {file = "numpy-2.3.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5e199c087e2aa71c8f9ce1cb7a8e10677dc12457e7cc1be4798632da37c3e86e"}, - {file = "numpy-2.3.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:85597b2d25ddf655495e2363fe044b0ae999b75bc4d630dc0d886484b03a5eb0"}, - {file = "numpy-2.3.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:04a69abe45b49c5955923cf2c407843d1c85013b424ae8a560bba16c92fe44a0"}, - {file = "numpy-2.3.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e1708fac43ef8b419c975926ce1eaf793b0c13b7356cfab6ab0dc34c0a02ac0f"}, - {file = "numpy-2.3.4-cp314-cp314t-win32.whl", hash = "sha256:863e3b5f4d9915aaf1b8ec79ae560ad21f0b8d5e3adc31e73126491bb86dee1d"}, - {file = "numpy-2.3.4-cp314-cp314t-win_amd64.whl", hash = "sha256:962064de37b9aef801d33bc579690f8bfe6c5e70e29b61783f60bcba838a14d6"}, - {file = "numpy-2.3.4-cp314-cp314t-win_arm64.whl", hash = "sha256:8b5a9a39c45d852b62693d9b3f3e0fe052541f804296ff401a72a1b60edafb29"}, - {file = "numpy-2.3.4-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:6e274603039f924c0fe5cb73438fa9246699c78a6df1bd3decef9ae592ae1c05"}, - {file = "numpy-2.3.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d149aee5c72176d9ddbc6803aef9c0f6d2ceeea7626574fc68518da5476fa346"}, - {file = "numpy-2.3.4-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:6d34ed9db9e6395bb6cd33286035f73a59b058169733a9db9f85e650b88df37e"}, - {file = "numpy-2.3.4-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:fdebe771ca06bb8d6abce84e51dca9f7921fe6ad34a0c914541b063e9a68928b"}, - {file = "numpy-2.3.4-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:957e92defe6c08211eb77902253b14fe5b480ebc5112bc741fd5e9cd0608f847"}, - {file = "numpy-2.3.4-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:13b9062e4f5c7ee5c7e5be96f29ba71bc5a37fed3d1d77c37390ae00724d296d"}, - {file = "numpy-2.3.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:81b3a59793523e552c4a96109dde028aa4448ae06ccac5a76ff6532a85558a7f"}, - {file = "numpy-2.3.4.tar.gz", hash = "sha256:a7d018bfedb375a8d979ac758b120ba846a7fe764911a64465fd87b8729f4a6a"}, +markers = "python_version == \"3.11\"" +files = [ + {file = "numpy-2.4.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0280e0356c0829a18d9de1cb7eee50ec22ca639878d7240307ca0943d73cd2c4"}, + {file = "numpy-2.4.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:110f8b71aacb688ec69062bb7f6938a0f8acb01b7c1c4beb453c65b6d234584d"}, + {file = "numpy-2.4.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:4cfe66903cc32a9921a6733d96b19bb6abf310397581bbad89c228f5abaf0ee8"}, + {file = "numpy-2.4.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8155154c7c691289fe18f510b5d4657c68c67989f293f0535a91360392ff6538"}, + {file = "numpy-2.4.6-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ab0a9c4ffb1a6d95ef519fe4247dba8eb6b18ad93999f76b7f657039acabd47"}, + {file = "numpy-2.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:89cd468399cfd2504718f0ba50e410dca55a170b61a02ad92bb18c8a65186e93"}, + {file = "numpy-2.4.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c2d37ab77531417474168eb79d6d80b14f821a966818505d03013d0833edb7a8"}, + {file = "numpy-2.4.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f407cb6b8e9d6d8c626bc73c945db1706035af8fd632295547bf1c9e46d092d6"}, + {file = "numpy-2.4.6-cp311-cp311-win32.whl", hash = "sha256:ddea102b48f9e339f3948bf22040944184627a30fdf7f858667673b9c5f033c8"}, + {file = "numpy-2.4.6-cp311-cp311-win_amd64.whl", hash = "sha256:1e254a00cdf42b1e4d5b3d68d33af63268d41340d8885df2ab6470f2e1500147"}, + {file = "numpy-2.4.6-cp311-cp311-win_arm64.whl", hash = "sha256:ed9749eef4cbd126da3dc1d6bcb3a57f5eb7ac6a6484146bdbf743f552dfc577"}, + {file = "numpy-2.4.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:001fbb8e08d942dd57599e781f2472269ee7f2755fae407b4f67b2f0b17da3f1"}, + {file = "numpy-2.4.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ebfb099f8dcf083deef3ac1ca4c1503f387cf76296fcb3816b66f5ecb5f54fdb"}, + {file = "numpy-2.4.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3213d622a0283a39a93d188f3cf72b26862df52fbb4ca3697f51705016523d41"}, + {file = "numpy-2.4.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:357cc07a6d7b0b182ff02249616a03742827ebb1277546b5c7cd7f7620a45698"}, + {file = "numpy-2.4.6-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f9fb9157b4ce2971008323afe46053787b526ef624fea915b261468a8421a0f"}, + {file = "numpy-2.4.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90f9849678c75fe7afa2d348ac842c168b0a4d3d61919687216dfc547976d853"}, + {file = "numpy-2.4.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c1a2af6c6ef86344a6b0db6b97834208bf598db514f2b155042439b62605601a"}, + {file = "numpy-2.4.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e5805d5a22fd19c8ccff10a9561f9df94436b0545619ea579db2d3c35294bce2"}, + {file = "numpy-2.4.6-cp312-cp312-win32.whl", hash = "sha256:e3eeb0aabd6bd5ce64faae67e9935203a6991b4bc2a485a767fbafb2c5125f45"}, + {file = "numpy-2.4.6-cp312-cp312-win_amd64.whl", hash = "sha256:d8e8286dd7cea7895157318d1b91cdacac64c479f3cbc8dce548331728484751"}, + {file = "numpy-2.4.6-cp312-cp312-win_arm64.whl", hash = "sha256:4081eb135ac24158bd51cdfbef16f1c64df7063b1143f24731387137c092bec8"}, + {file = "numpy-2.4.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:511dbaf848decaaaf4b4ca48032619fb3138710c4bf7da7617765edad1ef96b0"}, + {file = "numpy-2.4.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bf162abab1c1a736333192707cef898e735a5ca00f38f27eeedf44b39d9e85eb"}, + {file = "numpy-2.4.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:043191bfa8eab18c776647b62723ac9dddece59743b13f49b2016094129c2b3f"}, + {file = "numpy-2.4.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:6180d8b35af935aed8ece3a85e0a43f87393ae0ac87c8d2c8bd2c993f7270ef3"}, + {file = "numpy-2.4.6-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72fbe16c6fac95aedf5937fa873445cec2110be35d8a4e9433d7501fd98dae6b"}, + {file = "numpy-2.4.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a7830bab239b79cda9c08c2da014761cafb48da6150e1da17ac06283f43b6089"}, + {file = "numpy-2.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ef4aea96ce4d3b074422cb4f2f64e216bf9e213004bb58ecfdf50ea02ea8eb9a"}, + {file = "numpy-2.4.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dfa20cc6ca228e6b155b11da03825975ce66aea520985dbbddf0f2a5a495c605"}, + {file = "numpy-2.4.6-cp313-cp313-win32.whl", hash = "sha256:56b39e5e0622a09a25bf5baf62f4bcf0cb8a41ae6e2819cf49bbc5a74c083f91"}, + {file = "numpy-2.4.6-cp313-cp313-win_amd64.whl", hash = "sha256:c4fc99836233ea196540b17ab0983aff60ed07941751930f5f4d05bc3b3b7359"}, + {file = "numpy-2.4.6-cp313-cp313-win_arm64.whl", hash = "sha256:a7c711e21628b52034bb5ab8d1bce291f752fcc5e92accc615778acee1ff4778"}, + {file = "numpy-2.4.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:112b06a867b235ef466ed3508ddf0238050df9c727cafb5301ac385b899189a1"}, + {file = "numpy-2.4.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:eaf7fa2de5c0be8ae6ff8e9bea2ccd725e980541244521d8d4b5f3354a27babe"}, + {file = "numpy-2.4.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:7265a2f3d436e54ef9f2b52b5c937e6be778781bd97a590319d7348f1c1ca997"}, + {file = "numpy-2.4.6-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f74a575920ab21fe304421a3fc28793d82e299cae9eccb37084e9fc7f3617c20"}, + {file = "numpy-2.4.6-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ede83e07a75dd06bc501566c1eca2afc0d61677c1472ac9ad93fdee6e638a48d"}, + {file = "numpy-2.4.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:68bb27509ac1b9a3443094260f6326150663b06abe40b73a2f81160623da5b67"}, + {file = "numpy-2.4.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a0df0043bdb289bde1f62da130d20df23d58b45429f752bc7a8fc5325a225ecd"}, + {file = "numpy-2.4.6-cp313-cp313t-win32.whl", hash = "sha256:29a287e0cf63ff528da061de6b9f64a4618da591ca1046aafc54062e40ca7eab"}, + {file = "numpy-2.4.6-cp313-cp313t-win_amd64.whl", hash = "sha256:25c692919ac5a01f170a3bfcd62d745b24fd095c353d50812637d6fcab442e75"}, + {file = "numpy-2.4.6-cp313-cp313t-win_arm64.whl", hash = "sha256:1e978ec1e8bd0e0e4de6bb75de9d30cbb74db6b6a2bb727618613703ca0167dd"}, + {file = "numpy-2.4.6-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:06ca2f61ec4385a07a6977c55ba998a4466c123642b4a32694d3128fce18c079"}, + {file = "numpy-2.4.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:38efbc8de75c7a0fc1ac190162d892787f3f47b57cc291231aafee36b80982b7"}, + {file = "numpy-2.4.6-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:d581b735e177fdcdce6fed8e7e8880a3fb6ee4e3653a3ac6af01c6f4c03effc5"}, + {file = "numpy-2.4.6-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:0a041d3d761dc3c35cc56ce0351506a02bcbc25f7b169f652435141a17db9096"}, + {file = "numpy-2.4.6-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40fdc1ae7125e518ea98e53e69a4ebc27e1fd50510c47b7ea130cf21e5e1d42b"}, + {file = "numpy-2.4.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a2c306dea656c12c68f51f4cea133cbe78ca7435eb28c735eac1d3ebe73be6e8"}, + {file = "numpy-2.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:33111801a01c12a8a1e3721f0a9232f8cfc8ae2c6b7098167e6f623c6073f402"}, + {file = "numpy-2.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae506e6902902557576a26ff33eda8695e7ecb3cb36c3b573a0765dee114ebdb"}, + {file = "numpy-2.4.6-cp314-cp314-win32.whl", hash = "sha256:aaf159caa35993cb1f56fb9b8e4610d35758e7ca005412eb1daa856a78c9c4b1"}, + {file = "numpy-2.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:b507f5c4c1d508876d1819b6bf9a49d365b96320b5d4993426b33a23ca4b8261"}, + {file = "numpy-2.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:6f41ae150c4e32db4f3310cdaf64b1593a03dbabe29eec77fc9b50fe64061df6"}, + {file = "numpy-2.4.6-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ece3d2cfe132e7d51f44a832b303895e6f2d499c5e74dfbdb06ee246147a304a"}, + {file = "numpy-2.4.6-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:e3e5193ef5a3dc73bceee50f7fdc2c90dbb76c42df8d8fae3d1067a583df579e"}, + {file = "numpy-2.4.6-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:17f9ade344e7d9b464a084d69bcf18fc691cb1db67c62ed80820bf4926d78f0e"}, + {file = "numpy-2.4.6-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cd5ffd25db4e7ba6a375693b3fc0fc1791ec636c17db3720da19bde7180ec43"}, + {file = "numpy-2.4.6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d92c3819208a60205a12a245c91ad70cb0a85336659b19b834205573ac8456e"}, + {file = "numpy-2.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e85b752a1e912b70eaad4fafbd4d1238007ab221de2009b9a2f5ae7461239895"}, + {file = "numpy-2.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:29cb7f67d10b479ff07c17d33e39f78c07f71c40ef30d63c153d340e96cd3fb4"}, + {file = "numpy-2.4.6-cp314-cp314t-win32.whl", hash = "sha256:260a5d70215b61ab4fadf5c7baacd64821842975eea312125ed3c39a6391b063"}, + {file = "numpy-2.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:81a1cca95ed5bb92aa8b10dd2cdc9a0d3853a50fad926c28b5d7e8ea54389627"}, + {file = "numpy-2.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:0c9136e14ed34a9e343a31c533d78a9813a69a3148332bce5e9821cb2f996e66"}, + {file = "numpy-2.4.6-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:55cced7c52e981362f708ad635198e97a752dfba412cc03c23bbf3bd8d5cd662"}, + {file = "numpy-2.4.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d6da64deb6b8ed903e7560180a92f2d804ee1ba5eeb849ac2748b8c1aba1f6d7"}, + {file = "numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:68a5124b13fa6cc2086764a20005d30bc0548146f7f5322f02fce212ca14317f"}, + {file = "numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:948424b06129ce883307e8cff868c31396d8dc7630a59c61d70d98dbe70f222c"}, + {file = "numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5dbbdb29840ca3d91ee0fece42fc29278886d908280bfec0a5846c6f901a3eb0"}, + {file = "numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8ad03c0965fb3c692200e74d458ca28c1dbb4ce96f9a479a8aa041ad5fabca02"}, + {file = "numpy-2.4.6-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:2803abfebfc990042cd494d8ce2d5f82e9d847af6d35ec486923aa19dbad5e73"}, + {file = "numpy-2.4.6.tar.gz", hash = "sha256:f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda"}, +] + +[[package]] +name = "numpy" +version = "2.5.2" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.12" +groups = ["main", "dev", "floris"] +markers = "python_version >= \"3.12\"" +files = [ + {file = "numpy-2.5.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:14e373cfc6387177e8409dac3c7159be8eb05cd77096cd7c950268b86f62831c"}, + {file = "numpy-2.5.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4bbd96c833ecc8cc069ce518078fc8c60cb9cbfb0fea5b7a803ad65035596d03"}, + {file = "numpy-2.5.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:6e8172ddfcf5cf74b811d372b570b83c60bd2de87a6fbfbebdadb4a9bd9c6cbb"}, + {file = "numpy-2.5.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:65f188481f1669e26f62b701e8205d19e460fa4a9b52a1414ba382330e4a3414"}, + {file = "numpy-2.5.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8ee9c4eeb8454b3660a8b53493563c3e121c2fc94fbd72b848ef814ed7b676a9"}, + {file = "numpy-2.5.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3cdec01fa790a186d430433fdd4d4ffb70eed6f0eeb4bf05c8dbe2dce0a9bcb8"}, + {file = "numpy-2.5.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7999d4ddb0c4025018373fd787510d46e04c769467af22869707b3c1cfd459ab"}, + {file = "numpy-2.5.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c1f017dc0875c9209d219f97feceb7d54c2661bb243deb4114478e1295808af7"}, + {file = "numpy-2.5.2-cp312-cp312-win32.whl", hash = "sha256:d6a48072864e3324e194a8fbb3c657bcc5b5c869dbc64c9537b1d5c862572c0a"}, + {file = "numpy-2.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:28ac63476ec7651484215ee7fa15a1f78b57c14621f01e392afe17b9a1390ce4"}, + {file = "numpy-2.5.2-cp312-cp312-win_arm64.whl", hash = "sha256:27650bb0e7140fa3d37b9923b4803645e0b125d190f326eecfd3f4dad8e8ade1"}, + {file = "numpy-2.5.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8e4cb9a754c8a0c62eaa88273a5fba3391f4a610d1dee893c0755da31c083f15"}, + {file = "numpy-2.5.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:52c808f96484f5571a5cc863775ce50247c17dfb3b0361f8ed6b4b0456f80080"}, + {file = "numpy-2.5.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:29d81e97f668489cba8ebfd796b9bdd453525d35dd9e162e2daec94bf3fc7740"}, + {file = "numpy-2.5.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:afb3f0632d6b2e3ba04dbce8d1e48d321b369138b73830b5ca371a0e8d479d56"}, + {file = "numpy-2.5.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0aadf13b60048d501e05fa699efaf7734e2494f3498a4c2a5521d822640324f3"}, + {file = "numpy-2.5.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:29b86ff8a6cc556b47ec6b64b194815cc80e6bf5eedcc6cddfd65318cb0b4eee"}, + {file = "numpy-2.5.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6950c4b7dd562453090548ba7f5da7e59f57f85663f15d5dcc60e249192f7e59"}, + {file = "numpy-2.5.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b9727f472d2f3888053b8a75ab0cb94745a9de224bb5846dbadc0092101bc71d"}, + {file = "numpy-2.5.2-cp313-cp313-win32.whl", hash = "sha256:4f9744f9fbdcea0bc552e8f19e1f141f811a3f9bc2be2cc6e86d982cab23e3f4"}, + {file = "numpy-2.5.2-cp313-cp313-win_amd64.whl", hash = "sha256:85aaccb24182c25df891ad0ec333585967e115269d5f1b17f2c9ae005bc96657"}, + {file = "numpy-2.5.2-cp313-cp313-win_arm64.whl", hash = "sha256:bd68ece1553d2023c09a4226d9e41c586ad2d20594d1a456186c33513d2cb3f2"}, + {file = "numpy-2.5.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:d787cf769c3baeb5f6235e778edb52c08dfa923789b5958f28e6450f96107cb1"}, + {file = "numpy-2.5.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:24b9dc2e3d84aa58523798805194e23e736f3f6ce2d1a5b92583ae734e6dbda8"}, + {file = "numpy-2.5.2-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:9e9413326d726c2545bfa65d2c0876871e8d8386e77f992c1d426e180bbd4323"}, + {file = "numpy-2.5.2-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:60e902ac295855348a5ca2ea4c89108989a9f5fddfad3dfc0a8f36b10358567e"}, + {file = "numpy-2.5.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:50e500dc868e9313530ce12ba470fe50ff3afe3d62993ed6eff652dacd555b65"}, + {file = "numpy-2.5.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318b9a4c845dbea06708a29c84ee429cc3065048db34cdb799047643492050ee"}, + {file = "numpy-2.5.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:34c319e2963be042673fb46570501b2f06c41924e17e3563d58646b4380dfb68"}, + {file = "numpy-2.5.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f06571a052127dc1b4e8b83029b4d1b20daa2b64a31cdd181fc6bc774e9000eb"}, + {file = "numpy-2.5.2-cp314-cp314-win32.whl", hash = "sha256:2cc779226e476d1e1f08c74068c419e60f41a9e0e069c92f6671d31d5c985e98"}, + {file = "numpy-2.5.2-cp314-cp314-win_amd64.whl", hash = "sha256:7587f53dfbd5edc0f7b87c6217b4c6d2d1f2ef9c3da70bc1315e7db5f8d7ec9d"}, + {file = "numpy-2.5.2-cp314-cp314-win_arm64.whl", hash = "sha256:3e4c367352d3747784248a227fbec218e193b56f7e6692e3b64fc805478ecfdf"}, + {file = "numpy-2.5.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b879fb674276e331513fb136b78dbc6bd3c848309e0d841cfd63be3896c4cfc1"}, + {file = "numpy-2.5.2-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:fd0d703772bba096843785bd38371e31bb4a0c1151497ad5739d182114a73f7f"}, + {file = "numpy-2.5.2-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:3a2f061cebd9e3d23bdcfaaded5e2293a4c6a5b60fa42df85d410a725ce621bf"}, + {file = "numpy-2.5.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6df895598c0edcb41030126c89e0f353b07d93238116143b7405e937359736c4"}, + {file = "numpy-2.5.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1ab3d4a901f844ea836c3e80bf463c6a27d7f3c14e8e292fcf28d348b25b9bce"}, + {file = "numpy-2.5.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:cebc2d6dbb605a7703d59751dea4bd6b0ab127a5a4338a6f432df1936fef8b26"}, + {file = "numpy-2.5.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:eaca7ff36f0f52e2111ec71f169d8fd3e889e7ddc0d2592e0d703fd8d3ce8fac"}, + {file = "numpy-2.5.2-cp314-cp314t-win32.whl", hash = "sha256:ddf47472af2e4280d79bac82304f5e80150211f1b9e614b760061d5fdfbb6eba"}, + {file = "numpy-2.5.2-cp314-cp314t-win_amd64.whl", hash = "sha256:44ef9675d908e65f9953063837c3277730f3f4437615a4cdab67b366cabaf884"}, + {file = "numpy-2.5.2-cp314-cp314t-win_arm64.whl", hash = "sha256:eaa088384c46f519dacb93b7ec483a6d6b19a4a2085ae4f25ab9b1c43d387d1e"}, + {file = "numpy-2.5.2-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:078f9b027b478c9379b9677babbf0f8b8f1ecfada27636d7b9a93990c638739f"}, + {file = "numpy-2.5.2-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:50a68f4bacd8a2b33d8da3d2269d0d78500f86ea582e4786dc10f5ef2c2c6842"}, + {file = "numpy-2.5.2-cp315-cp315-macosx_14_0_arm64.whl", hash = "sha256:e79aba74ffaf5f78a050d777c184cddf8fdffabab38acf5f3ef1fecbc17895d6"}, + {file = "numpy-2.5.2-cp315-cp315-macosx_14_0_x86_64.whl", hash = "sha256:9a0731745a72a184490a582fb4af2533512bd071ace67785b5fdffc0ae58dce8"}, + {file = "numpy-2.5.2-cp315-cp315-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4ec954036759bcee3aa484f8603bd9c14f3e776293b85578b8734c2d72777c69"}, + {file = "numpy-2.5.2-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dc649493697006bc90614a5f0bbc8cb3cb1866715c474e473694968d7e6b99ab"}, + {file = "numpy-2.5.2-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:cf7de32f486e4ac9e2d93b810f9e9ac72a728dd46a32a0bb403222f27f653514"}, + {file = "numpy-2.5.2-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:2ffa7bacab3e2ee1b19ed31766bb60bb380b68c23f051e199c5cc598afd68710"}, + {file = "numpy-2.5.2-cp315-cp315-win32.whl", hash = "sha256:6b588cc8f902d6bff201c19fd00c43ab8545671e3554d014e12e14139e5e8617"}, + {file = "numpy-2.5.2-cp315-cp315-win_amd64.whl", hash = "sha256:07d4e89f3a9ab0a9ba24264ccdb642b3dd951b2281e8883a5481a4aa79cc31a7"}, + {file = "numpy-2.5.2-cp315-cp315-win_arm64.whl", hash = "sha256:a610dc7e3c52edd39c2bc2375ff9c3fd59cb3ad00e4472d36f83bc1457145788"}, + {file = "numpy-2.5.2-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:40f4d451aed46a8046a1aae41c4e55fb3612273df9c502480135e1501576a34b"}, + {file = "numpy-2.5.2-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:c081cbe16ba1ab53078e5ff29013621e33c509eedab055775d956427712c236e"}, + {file = "numpy-2.5.2-cp315-cp315t-macosx_14_0_arm64.whl", hash = "sha256:0090ccdd57ec2703e9b49d0bf554767370581c1dd0a6b2bb2b2d9def317d042a"}, + {file = "numpy-2.5.2-cp315-cp315t-macosx_14_0_x86_64.whl", hash = "sha256:6a9bb119fb8dd21ba30b3f0e555b7e2b081bd9883af21ec9c1c633d161cda3a8"}, + {file = "numpy-2.5.2-cp315-cp315t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a839318485284a6fb31be4f8f2c91c8f2cb22f4543c4a8903f12b0671ffe07cc"}, + {file = "numpy-2.5.2-cp315-cp315t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba0a474801b8dc67b66bf465548abc90e82b44d2611b5770f33008dcabffe8ec"}, + {file = "numpy-2.5.2-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:0a4035ae1129ff8777f08bfbd44f1e5d8e9c049ce0c2dd78fc0d92c13e7251c0"}, + {file = "numpy-2.5.2-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:77843ca236b777e67f8d6b3660ea116e499612703a0ecd7093f316201eb9d8e2"}, + {file = "numpy-2.5.2-cp315-cp315t-win32.whl", hash = "sha256:7354826bc6f8f69402e9b7fe28d15fcd34feebd74f856f111585c5b0c9fb0251"}, + {file = "numpy-2.5.2-cp315-cp315t-win_amd64.whl", hash = "sha256:e5651f3f87add730ee6608d915009e19c911fba0cb000c7e3ea994b7d768eb12"}, + {file = "numpy-2.5.2-cp315-cp315t-win_arm64.whl", hash = "sha256:5f8e00be2ec6f45f4e8a41a527f68d44a7d96fee92a650e4d8b1326f77f61e6e"}, + {file = "numpy-2.5.2.tar.gz", hash = "sha256:d482d171c406ae88c5b19cad3b6a1c4c5209f886ab74bc44c2c865c23f52d860"}, ] [[package]] @@ -2444,14 +2838,14 @@ files = [ [[package]] name = "packaging" -version = "25.0" +version = "26.3" description = "Core utilities for Python packages" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["dev", "floris"] files = [ - {file = "packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484"}, - {file = "packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"}, + {file = "packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c"}, + {file = "packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79"}, ] [[package]] @@ -2652,18 +3046,18 @@ files = [ [[package]] name = "parso" -version = "0.8.5" +version = "0.8.7" description = "A Python Parser" optional = false python-versions = ">=3.6" groups = ["dev"] files = [ - {file = "parso-0.8.5-py2.py3-none-any.whl", hash = "sha256:646204b5ee239c396d040b90f9e272e9a8017c630092bf59980beb62fd033887"}, - {file = "parso-0.8.5.tar.gz", hash = "sha256:034d7354a9a018bdce352f48b2a8a450f05e9d6ee85db84764e9b6bd96dafe5a"}, + {file = "parso-0.8.7-py2.py3-none-any.whl", hash = "sha256:a8926eb2a1b915486941fdbd31e86a4baf88fe8c210f25f2f35ecec5b574ca1c"}, + {file = "parso-0.8.7.tar.gz", hash = "sha256:eaaac4c9fdd5e9e8852dc778d2d7405897ec510f2a298071453e5e3a07914bb1"}, ] [package.extras] -qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] +qa = ["flake8 (==5.0.4)", "types-setuptools (==67.2.0.1)", "zuban (==0.5.1)"] testing = ["docopt", "pytest"] [[package]] @@ -2686,16 +3080,21 @@ ppft = ">=1.7.8" [[package]] name = "pathspec" -version = "0.12.1" +version = "1.1.1" description = "Utility library for gitignore style pattern matching of file paths." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, - {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, + {file = "pathspec-1.1.1-py3-none-any.whl", hash = "sha256:a00ce642f577bf7f473932318056212bc4f8bfdf53128c78bbd5af0b9b20b189"}, + {file = "pathspec-1.1.1.tar.gz", hash = "sha256:17db5ecd524104a120e173814c90367a96a98d07c45b2e10c2f3919fff91bf5a"}, ] +[package.extras] +hyperscan = ["hyperscan (>=0.7)"] +optional = ["typing-extensions (>=4)"] +re2 = ["google-re2 (>=1.1)"] + [[package]] name = "pexpect" version = "4.9.0" @@ -2714,103 +3113,99 @@ ptyprocess = ">=0.5" [[package]] name = "pillow" -version = "12.0.0" +version = "12.3.0" description = "Python Imaging Library (fork)" optional = false python-versions = ">=3.10" groups = ["dev", "floris"] files = [ - {file = "pillow-12.0.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:3adfb466bbc544b926d50fe8f4a4e6abd8c6bffd28a26177594e6e9b2b76572b"}, - {file = "pillow-12.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1ac11e8ea4f611c3c0147424eae514028b5e9077dd99ab91e1bd7bc33ff145e1"}, - {file = "pillow-12.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d49e2314c373f4c2b39446fb1a45ed333c850e09d0c59ac79b72eb3b95397363"}, - {file = "pillow-12.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c7b2a63fd6d5246349f3d3f37b14430d73ee7e8173154461785e43036ffa96ca"}, - {file = "pillow-12.0.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d64317d2587c70324b79861babb9c09f71fbb780bad212018874b2c013d8600e"}, - {file = "pillow-12.0.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d77153e14b709fd8b8af6f66a3afbb9ed6e9fc5ccf0b6b7e1ced7b036a228782"}, - {file = "pillow-12.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:32ed80ea8a90ee3e6fa08c21e2e091bba6eda8eccc83dbc34c95169507a91f10"}, - {file = "pillow-12.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c828a1ae702fc712978bda0320ba1b9893d99be0badf2647f693cc01cf0f04fa"}, - {file = "pillow-12.0.0-cp310-cp310-win32.whl", hash = "sha256:bd87e140e45399c818fac4247880b9ce719e4783d767e030a883a970be632275"}, - {file = "pillow-12.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:455247ac8a4cfb7b9bc45b7e432d10421aea9fc2e74d285ba4072688a74c2e9d"}, - {file = "pillow-12.0.0-cp310-cp310-win_arm64.whl", hash = "sha256:6ace95230bfb7cd79ef66caa064bbe2f2a1e63d93471c3a2e1f1348d9f22d6b7"}, - {file = "pillow-12.0.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:0fd00cac9c03256c8b2ff58f162ebcd2587ad3e1f2e397eab718c47e24d231cc"}, - {file = "pillow-12.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a3475b96f5908b3b16c47533daaa87380c491357d197564e0ba34ae75c0f3257"}, - {file = "pillow-12.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:110486b79f2d112cf6add83b28b627e369219388f64ef2f960fef9ebaf54c642"}, - {file = "pillow-12.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5269cc1caeedb67e6f7269a42014f381f45e2e7cd42d834ede3c703a1d915fe3"}, - {file = "pillow-12.0.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aa5129de4e174daccbc59d0a3b6d20eaf24417d59851c07ebb37aeb02947987c"}, - {file = "pillow-12.0.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bee2a6db3a7242ea309aa7ee8e2780726fed67ff4e5b40169f2c940e7eb09227"}, - {file = "pillow-12.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:90387104ee8400a7b4598253b4c406f8958f59fcf983a6cea2b50d59f7d63d0b"}, - {file = "pillow-12.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bc91a56697869546d1b8f0a3ff35224557ae7f881050e99f615e0119bf934b4e"}, - {file = "pillow-12.0.0-cp311-cp311-win32.whl", hash = "sha256:27f95b12453d165099c84f8a8bfdfd46b9e4bda9e0e4b65f0635430027f55739"}, - {file = "pillow-12.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:b583dc9070312190192631373c6c8ed277254aa6e6084b74bdd0a6d3b221608e"}, - {file = "pillow-12.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:759de84a33be3b178a64c8ba28ad5c135900359e85fb662bc6e403ad4407791d"}, - {file = "pillow-12.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:53561a4ddc36facb432fae7a9d8afbfaf94795414f5cdc5fc52f28c1dca90371"}, - {file = "pillow-12.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:71db6b4c1653045dacc1585c1b0d184004f0d7e694c7b34ac165ca70c0838082"}, - {file = "pillow-12.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2fa5f0b6716fc88f11380b88b31fe591a06c6315e955c096c35715788b339e3f"}, - {file = "pillow-12.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:82240051c6ca513c616f7f9da06e871f61bfd7805f566275841af15015b8f98d"}, - {file = "pillow-12.0.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:55f818bd74fe2f11d4d7cbc65880a843c4075e0ac7226bc1a23261dbea531953"}, - {file = "pillow-12.0.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b87843e225e74576437fd5b6a4c2205d422754f84a06942cfaf1dc32243e45a8"}, - {file = "pillow-12.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c607c90ba67533e1b2355b821fef6764d1dd2cbe26b8c1005ae84f7aea25ff79"}, - {file = "pillow-12.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:21f241bdd5080a15bc86d3466a9f6074a9c2c2b314100dd896ac81ee6db2f1ba"}, - {file = "pillow-12.0.0-cp312-cp312-win32.whl", hash = "sha256:dd333073e0cacdc3089525c7df7d39b211bcdf31fc2824e49d01c6b6187b07d0"}, - {file = "pillow-12.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:9fe611163f6303d1619bbcb653540a4d60f9e55e622d60a3108be0d5b441017a"}, - {file = "pillow-12.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:7dfb439562f234f7d57b1ac6bc8fe7f838a4bd49c79230e0f6a1da93e82f1fad"}, - {file = "pillow-12.0.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:0869154a2d0546545cde61d1789a6524319fc1897d9ee31218eae7a60ccc5643"}, - {file = "pillow-12.0.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:a7921c5a6d31b3d756ec980f2f47c0cfdbce0fc48c22a39347a895f41f4a6ea4"}, - {file = "pillow-12.0.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:1ee80a59f6ce048ae13cda1abf7fbd2a34ab9ee7d401c46be3ca685d1999a399"}, - {file = "pillow-12.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c50f36a62a22d350c96e49ad02d0da41dbd17ddc2e29750dbdba4323f85eb4a5"}, - {file = "pillow-12.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5193fde9a5f23c331ea26d0cf171fbf67e3f247585f50c08b3e205c7aeb4589b"}, - {file = "pillow-12.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:bde737cff1a975b70652b62d626f7785e0480918dece11e8fef3c0cf057351c3"}, - {file = "pillow-12.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a6597ff2b61d121172f5844b53f21467f7082f5fb385a9a29c01414463f93b07"}, - {file = "pillow-12.0.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0b817e7035ea7f6b942c13aa03bb554fc44fea70838ea21f8eb31c638326584e"}, - {file = "pillow-12.0.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f4f1231b7dec408e8670264ce63e9c71409d9583dd21d32c163e25213ee2a344"}, - {file = "pillow-12.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6e51b71417049ad6ab14c49608b4a24d8fb3fe605e5dfabfe523b58064dc3d27"}, - {file = "pillow-12.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d120c38a42c234dc9a8c5de7ceaaf899cf33561956acb4941653f8bdc657aa79"}, - {file = "pillow-12.0.0-cp313-cp313-win32.whl", hash = "sha256:4cc6b3b2efff105c6a1656cfe59da4fdde2cda9af1c5e0b58529b24525d0a098"}, - {file = "pillow-12.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:4cf7fed4b4580601c4345ceb5d4cbf5a980d030fd5ad07c4d2ec589f95f09905"}, - {file = "pillow-12.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:9f0b04c6b8584c2c193babcccc908b38ed29524b29dd464bc8801bf10d746a3a"}, - {file = "pillow-12.0.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:7fa22993bac7b77b78cae22bad1e2a987ddf0d9015c63358032f84a53f23cdc3"}, - {file = "pillow-12.0.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f135c702ac42262573fe9714dfe99c944b4ba307af5eb507abef1667e2cbbced"}, - {file = "pillow-12.0.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c85de1136429c524e55cfa4e033b4a7940ac5c8ee4d9401cc2d1bf48154bbc7b"}, - {file = "pillow-12.0.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:38df9b4bfd3db902c9c2bd369bcacaf9d935b2fff73709429d95cc41554f7b3d"}, - {file = "pillow-12.0.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7d87ef5795da03d742bf49439f9ca4d027cde49c82c5371ba52464aee266699a"}, - {file = "pillow-12.0.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:aff9e4d82d082ff9513bdd6acd4f5bd359f5b2c870907d2b0a9c5e10d40c88fe"}, - {file = "pillow-12.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:8d8ca2b210ada074d57fcee40c30446c9562e542fc46aedc19baf758a93532ee"}, - {file = "pillow-12.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:99a7f72fb6249302aa62245680754862a44179b545ded638cf1fef59befb57ef"}, - {file = "pillow-12.0.0-cp313-cp313t-win32.whl", hash = "sha256:4078242472387600b2ce8d93ade8899c12bf33fa89e55ec89fe126e9d6d5d9e9"}, - {file = "pillow-12.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:2c54c1a783d6d60595d3514f0efe9b37c8808746a66920315bfd34a938d7994b"}, - {file = "pillow-12.0.0-cp313-cp313t-win_arm64.whl", hash = "sha256:26d9f7d2b604cd23aba3e9faf795787456ac25634d82cd060556998e39c6fa47"}, - {file = "pillow-12.0.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:beeae3f27f62308f1ddbcfb0690bf44b10732f2ef43758f169d5e9303165d3f9"}, - {file = "pillow-12.0.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:d4827615da15cd59784ce39d3388275ec093ae3ee8d7f0c089b76fa87af756c2"}, - {file = "pillow-12.0.0-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:3e42edad50b6909089750e65c91aa09aaf1e0a71310d383f11321b27c224ed8a"}, - {file = "pillow-12.0.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:e5d8efac84c9afcb40914ab49ba063d94f5dbdf5066db4482c66a992f47a3a3b"}, - {file = "pillow-12.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:266cd5f2b63ff316d5a1bba46268e603c9caf5606d44f38c2873c380950576ad"}, - {file = "pillow-12.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:58eea5ebe51504057dd95c5b77d21700b77615ab0243d8152793dc00eb4faf01"}, - {file = "pillow-12.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f13711b1a5ba512d647a0e4ba79280d3a9a045aaf7e0cc6fbe96b91d4cdf6b0c"}, - {file = "pillow-12.0.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6846bd2d116ff42cba6b646edf5bf61d37e5cbd256425fa089fee4ff5c07a99e"}, - {file = "pillow-12.0.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c98fa880d695de164b4135a52fd2e9cd7b7c90a9d8ac5e9e443a24a95ef9248e"}, - {file = "pillow-12.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fa3ed2a29a9e9d2d488b4da81dcb54720ac3104a20bf0bd273f1e4648aff5af9"}, - {file = "pillow-12.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d034140032870024e6b9892c692fe2968493790dd57208b2c37e3fb35f6df3ab"}, - {file = "pillow-12.0.0-cp314-cp314-win32.whl", hash = "sha256:1b1b133e6e16105f524a8dec491e0586d072948ce15c9b914e41cdadd209052b"}, - {file = "pillow-12.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:8dc232e39d409036af549c86f24aed8273a40ffa459981146829a324e0848b4b"}, - {file = "pillow-12.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:d52610d51e265a51518692045e372a4c363056130d922a7351429ac9f27e70b0"}, - {file = "pillow-12.0.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:1979f4566bb96c1e50a62d9831e2ea2d1211761e5662afc545fa766f996632f6"}, - {file = "pillow-12.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b2e4b27a6e15b04832fe9bf292b94b5ca156016bbc1ea9c2c20098a0320d6cf6"}, - {file = "pillow-12.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fb3096c30df99fd01c7bf8e544f392103d0795b9f98ba71a8054bcbf56b255f1"}, - {file = "pillow-12.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7438839e9e053ef79f7112c881cef684013855016f928b168b81ed5835f3e75e"}, - {file = "pillow-12.0.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d5c411a8eaa2299322b647cd932586b1427367fd3184ffbb8f7a219ea2041ca"}, - {file = "pillow-12.0.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d7e091d464ac59d2c7ad8e7e08105eaf9dafbc3883fd7265ffccc2baad6ac925"}, - {file = "pillow-12.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:792a2c0be4dcc18af9d4a2dfd8a11a17d5e25274a1062b0ec1c2d79c76f3e7f8"}, - {file = "pillow-12.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:afbefa430092f71a9593a99ab6a4e7538bc9eabbf7bf94f91510d3503943edc4"}, - {file = "pillow-12.0.0-cp314-cp314t-win32.whl", hash = "sha256:3830c769decf88f1289680a59d4f4c46c72573446352e2befec9a8512104fa52"}, - {file = "pillow-12.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:905b0365b210c73afb0ebe9101a32572152dfd1c144c7e28968a331b9217b94a"}, - {file = "pillow-12.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:99353a06902c2e43b43e8ff74ee65a7d90307d82370604746738a1e0661ccca7"}, - {file = "pillow-12.0.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b22bd8c974942477156be55a768f7aa37c46904c175be4e158b6a86e3a6b7ca8"}, - {file = "pillow-12.0.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:805ebf596939e48dbb2e4922a1d3852cfc25c38160751ce02da93058b48d252a"}, - {file = "pillow-12.0.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cae81479f77420d217def5f54b5b9d279804d17e982e0f2fa19b1d1e14ab5197"}, - {file = "pillow-12.0.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aeaefa96c768fc66818730b952a862235d68825c178f1b3ffd4efd7ad2edcb7c"}, - {file = "pillow-12.0.0-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:09f2d0abef9e4e2f349305a4f8cc784a8a6c2f58a8c4892eea13b10a943bd26e"}, - {file = "pillow-12.0.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bdee52571a343d721fb2eb3b090a82d959ff37fc631e3f70422e0c2e029f3e76"}, - {file = "pillow-12.0.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:b290fd8aa38422444d4b50d579de197557f182ef1068b75f5aa8558638b8d0a5"}, - {file = "pillow-12.0.0.tar.gz", hash = "sha256:87d4f8125c9988bfbed67af47dd7a953e2fc7b0cc1e7800ec6d2080d490bb353"}, + {file = "pillow-12.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:6c0016e7b354317c4e9e525b937ac8596c38d2d232b419529b9cd7a1cd46e39a"}, + {file = "pillow-12.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bcc33feacfaefce60c12fd500a277533bdc02b10a19f7f6d348763d8140bbba7"}, + {file = "pillow-12.3.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5594fc43d548a7ed94949d139aa1341b270f1863f11cfd37f5a6c8b778a6b67f"}, + {file = "pillow-12.3.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f0606c8bf2cdefea14a43530f7657cbbb7ecf1c4222512492ef4a4434a9501ec"}, + {file = "pillow-12.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:85f998ea1848bc6757289e739cfbdda3a04adfd58b02fc018ce54d754a5ce468"}, + {file = "pillow-12.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:25b9b82bb22e6e2b3cd07b39c68b7b862001226cb3dff7130d1cb914121b39ed"}, + {file = "pillow-12.3.0-cp310-cp310-win32.whl", hash = "sha256:37dc8f7bbb66efe481bb60defacef820c950c24713fb44962ed6aa2a50966de1"}, + {file = "pillow-12.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:300557495eb45ebb8aec96c2da9c4be642fbf7cd937278b4013ba894ea8eb0eb"}, + {file = "pillow-12.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:514435a37670e3e5e08f3945b68718b6ed329bb84367777e16f9f4dfe1e61a0f"}, + {file = "pillow-12.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:00808c5e14ef63ac5161091d242999076604ff74b883423a11e5d7bbb38bf756"}, + {file = "pillow-12.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:37d6d0a00072fd2948eb22bce7e1475f34569d90c87c59f7a2ec59541b77f7a6"}, + {file = "pillow-12.3.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bcb46e2f9feff8d06323983bd83ed00c201fdcab3d74973e7072a889b3979fcd"}, + {file = "pillow-12.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:23d27a3e0307ec2244cc51e7287b919aa68d097504ebe19df4e76a98a3eea5bd"}, + {file = "pillow-12.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4f883547d4b7f0495ebe7056b0cc2aea76094e7a4abc8e933540f3271df27d9c"}, + {file = "pillow-12.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:236ff70b9312fb68943c703aa842ca6a758abfa45ac187a5e7c1452e96ef72b5"}, + {file = "pillow-12.3.0-cp311-cp311-win32.whl", hash = "sha256:10e41f0fbf1eec8cfd234b8fe17a4caac7c9d0db4c204d3c173a8f9f6ef3232b"}, + {file = "pillow-12.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:8e95e1385e4998ae9694eeaa4730ba5457ff61185b3a55e2e7bea0880aef452a"}, + {file = "pillow-12.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:ebaea975e03d3141d9d3a507df75c9b3ec90fa9d2ffd07567b3a978d9d790b26"}, + {file = "pillow-12.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ba09209fbe443b4acccebe845d8a138b89a8f4fbaeedd44953490b5315d5e965"}, + {file = "pillow-12.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ffd0c5368496f41b0944be820fcb7a838aa6e623d250b01acf2643939c3f99d7"}, + {file = "pillow-12.3.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d9c7f76c0673154f044e9d78c8655fb4213f6ca31a836df48b40fe5d187717b9"}, + {file = "pillow-12.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:78cb2c6865a35ab8ff8b75fd122f6033b92a62c82801110e48ddd6c936a45d91"}, + {file = "pillow-12.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e491916b378fba47242221bb9ead245211b70d504f495d105d17b14a24b4907c"}, + {file = "pillow-12.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0dd2064cbc55aaec028ef5fbb60fa47bb6c3e7918e07ff17935284b227a9d2df"}, + {file = "pillow-12.3.0-cp312-cp312-win32.whl", hash = "sha256:dbce0b29841537a2fa4a214c2bbf14de3587c9680caa9b4e217568472490b28f"}, + {file = "pillow-12.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:a2b55dd6b2a4c4b7d87ffa56bdb33fdc5fdb9a462173861a7bc097f17d91cb09"}, + {file = "pillow-12.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:331b624368d4f1d069149002f25f44bc61c8919ce8ddb3c45bdad8f6e2d89510"}, + {file = "pillow-12.3.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:21900ce7ba264168cd50defae43cd75d25c833ad4ad6e73ffc5596d12e25ac89"}, + {file = "pillow-12.3.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:4e8c2a84d977f50b9daed6eeaf3baef67d00d5d74d932288f02cb94518ee3ace"}, + {file = "pillow-12.3.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:ae26d61dfa7a47befdc7572b521024e8745f3d809bd95ca9505a7bba9ef849ec"}, + {file = "pillow-12.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7a743ff716f746fc19a9557f60dab1600d4613255f8a7aeb3cdde4db7eb15a66"}, + {file = "pillow-12.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d69141514cc30b774ceea5e3ed3a6635c8d8a96edf664689b890f4089111fb35"}, + {file = "pillow-12.3.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f7401aebd7f581d7f83a439d87d474999317ee099218e5ad25d125290990ba65"}, + {file = "pillow-12.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0847a763afefb695bc912d7c131e7e0632d4edc1d8698f58ddabec8e46b8b6d3"}, + {file = "pillow-12.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:571b9fcb07b97ef3a492028fb3d2dc0993ca23a06138b0315286566d29ef718a"}, + {file = "pillow-12.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:756c768d0c9c2955feb7a56c37ea24aea2e369f8d36a88da270b6a9f19e62b5e"}, + {file = "pillow-12.3.0-cp313-cp313-win32.whl", hash = "sha256:a876864214e136f0eb367788dbd7df045f4806801518e2cfe9e13229cfe06d8f"}, + {file = "pillow-12.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:1cca606cd25738df4ed873d5ad46bbdb3d83b5cbca291f6b4ff13a4df6b0bbe8"}, + {file = "pillow-12.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:b629de27fda84b42cde7edef0d85f13b958b47f6e9bbcbba9b673c562a89bd8b"}, + {file = "pillow-12.3.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:9cf95fe4d0f84c82d282745d9bb08ad9f926efa00be4697e767b814ce40d4330"}, + {file = "pillow-12.3.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:8728f216dcdb6e6d555cf971cb34076139ad74b31fc2c14da4fafc741c5f6217"}, + {file = "pillow-12.3.0-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:a45650e8ce7fafffd731db8550230db6b0d306d181a90b67d3e6bca2f1990930"}, + {file = "pillow-12.3.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:ba54cfebe86920a559a7c4d6b9050791c20513650a1952ebe3368c7dc70306f8"}, + {file = "pillow-12.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e158cb00350dc278f3b91551101aa7d12415a66ebf2c91d8d5ac14e56ddd3ad0"}, + {file = "pillow-12.3.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e9aeb04d6aef139de265b29683e119b638208f88cf73cdd1658aa07221165321"}, + {file = "pillow-12.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b"}, + {file = "pillow-12.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fe3cca2e4e8a592be0f269a1ca4835c25199d9f3ce815c8491048f785b0a0198"}, + {file = "pillow-12.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:23aceaa007d6172b02c277f0cd359c79492bbb14f7072b4ede9fbcaf20648130"}, + {file = "pillow-12.3.0-cp314-cp314-win32.whl", hash = "sha256:af8d94b0db561cf68b88a267c5c44b49e134f525d0dc2cb7ed413a66bc23559a"}, + {file = "pillow-12.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:fdafc9cce40277e0f7a0feabce0ee50dd2fa1800f3b38015e51296b5e814048d"}, + {file = "pillow-12.3.0-cp314-cp314-win_arm64.whl", hash = "sha256:e91206ee562682b51b98ef4b26a6ef48fd84e15fd4c4bc5ec768eb641d206838"}, + {file = "pillow-12.3.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:164b31cd1a0490ab6efae01aa5df49da7061be0af1b30e035b6e9a1bfe34ee6e"}, + {file = "pillow-12.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5afb51d599ea772b8365ae807ae557f18bccfe46ab261fd1c2a9ed700fc6eb17"}, + {file = "pillow-12.3.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3edce1d53195db527e0191f84b71d02022de0540bf43a16ed734ed7537b07385"}, + {file = "pillow-12.3.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bf16ba1b4d0b6b7c8e534936632270cf70eb00dbe09005bc345b2677b726855c"}, + {file = "pillow-12.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:24870b09b224f7ae3c39ed07d10e819d06f8720bc551847b1d623832b5b0e28d"}, + {file = "pillow-12.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:30f2aa603c41533cc25c05acd0da21636e84a315768feb631c937177db558931"}, + {file = "pillow-12.3.0-cp314-cp314t-win32.whl", hash = "sha256:4b0a7fe987b14c31ebda6083f74f22b561fd3739bc0ac51e019622e3d72668c7"}, + {file = "pillow-12.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:962864dc93511324d51ddbb5b9f8731bf71675b93ca612a07441896f4688fb8c"}, + {file = "pillow-12.3.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0740a512dc522224c77d9aa5a8d70d8b7d73fb91f2c21125d8d025d3b8990e45"}, + {file = "pillow-12.3.0-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:0feb2e9d6ad6c9e3c06effe9d00f3f1e618a6643273576b016f591e9315a7139"}, + {file = "pillow-12.3.0-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:9e881fca225083806662a5c43d627d215f258ff43c890f831966c7d7ba9c7402"}, + {file = "pillow-12.3.0-cp315-cp315-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:4998562bf62a445225f22e07c896bb04b35b1b1f2eb6d760584c9c51d7a5f78c"}, + {file = "pillow-12.3.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:dc624f6bc473dacdf7ef7eb8678d0d08edf15cd94fad6ae5c7d6cc67a4e4902f"}, + {file = "pillow-12.3.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:71d6097b330eea8fd15097780c8e89cb1a8ce7838669f48c5bacd6f663dd4701"}, + {file = "pillow-12.3.0-cp315-cp315-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:28ce87c5ab450a9dd970b52e5aca5fe63ed432d18a2eaddd1979a00a1ba24ace"}, + {file = "pillow-12.3.0-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6b02afb9b97f65fbca5f31db6a2a3ba21aa93030225f150fa3f249717e938fb4"}, + {file = "pillow-12.3.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:1182d52bc2d5e5d7d0949503aa7e36d12f42205dc287e4883f407b1988820d39"}, + {file = "pillow-12.3.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:e795b7eb908249c4e43c7c99fac7c2c75dab0c43566e37db472a355f63693d71"}, + {file = "pillow-12.3.0-cp315-cp315-win32.whl", hash = "sha256:57b3d78c95ba9059768b10e28b813002261d3f3dfc55cc48b0c988f625175827"}, + {file = "pillow-12.3.0-cp315-cp315-win_amd64.whl", hash = "sha256:fa4ecea169a355be7a3ade2c783e2ed12f0e40d2c5621cda8b3297faf7fbb9f5"}, + {file = "pillow-12.3.0-cp315-cp315-win_arm64.whl", hash = "sha256:877c3f311ff35410f690861c4409e7ccbf0cd2f878e50628a28e5a0bb689e658"}, + {file = "pillow-12.3.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:e9871b1ffbfa9656b60aeee92ed5136a5742696006fa322b29ea3d8da0ecc9cf"}, + {file = "pillow-12.3.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:53aa02d20d10c3d814d536aa4e5ac9b84ca0ff5a88377963b085ad6822f93e64"}, + {file = "pillow-12.3.0-cp315-cp315t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:446c34dcc4324b084a53b705127dc15717b22c5e140ae0a3c38349d4efec071e"}, + {file = "pillow-12.3.0-cp315-cp315t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cf1845d02ad822a369a49f2bb9345b1614744267682e7a03527dc3bf6eea1777"}, + {file = "pillow-12.3.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:186941b6aef820ad110fb01fb06eb925374dc3a21b17e37ec9a53b250c6fe2d1"}, + {file = "pillow-12.3.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:f13c32a3abd6079a66d9526e18dad9b6d280384d49d7c54040cd57b6424041d9"}, + {file = "pillow-12.3.0-cp315-cp315t-win32.whl", hash = "sha256:1657923d2d45afb66526e5b933e5b3052e6bdea196c90d3abb2424e18c77dae8"}, + {file = "pillow-12.3.0-cp315-cp315t-win_amd64.whl", hash = "sha256:8cd2f7bdda092d99c9fc2fb7391354f306d01443d22785d0cbfafa2e2c8bb418"}, + {file = "pillow-12.3.0-cp315-cp315t-win_arm64.whl", hash = "sha256:06ff022112bc9cbf83b60f8e028d94ad87b60621706487e65f673de61610ab59"}, + {file = "pillow-12.3.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b3c777e849237620b022f7f297dd67705f9f5cf1685f09f02e46f93e92725468"}, + {file = "pillow-12.3.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:b343699e8308bdc51978310e1c959c584e7869cc8c40780058c87da7781a1e94"}, + {file = "pillow-12.3.0-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbd139c8447d25dd750ab79ee274cc5e1fe80fc56340ab10b18a195e1b6eca3e"}, + {file = "pillow-12.3.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e7e480451b9fa137494bccd3a7d69adbe8ac65a87d97be61e11f1b1050a5bac3"}, + {file = "pillow-12.3.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:04f01d28a6aaff387bf842a13be313df23ba0597a44f1a976c9feb3c6ff4711a"}, + {file = "pillow-12.3.0.tar.gz", hash = "sha256:3b8182a766685eaa002637e28b4ec8d6b18819a0c71f579bf0dbaa5830297cce"}, ] [package.extras] @@ -2818,26 +3213,21 @@ docs = ["furo", "olefile", "sphinx (>=8.2)", "sphinx-autobuild", "sphinx-copybut fpx = ["olefile"] mic = ["olefile"] test-arrow = ["arro3-compute", "arro3-core", "nanoarrow", "pyarrow"] -tests = ["check-manifest", "coverage (>=7.4.2)", "defusedxml", "markdown2", "olefile", "packaging", "pyroma (>=5)", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "trove-classifiers (>=2024.10.12)"] +tests = ["coverage (>=7.4.2)", "defusedxml", "markdown2", "olefile", "packaging", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "setuptools", "trove-classifiers (>=2024.10.12)"] xmp = ["defusedxml"] [[package]] name = "platformdirs" -version = "4.5.0" +version = "4.11.3" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "platformdirs-4.5.0-py3-none-any.whl", hash = "sha256:e578a81bb873cbb89a41fcc904c7ef523cc18284b7e3b3ccf06aca1403b7ebd3"}, - {file = "platformdirs-4.5.0.tar.gz", hash = "sha256:70ddccdd7c99fc5942e9fc25636a8b34d04c24b335100223152c2803e4063312"}, + {file = "platformdirs-4.11.3-py3-none-any.whl", hash = "sha256:5ed065d443751de711da036041a7a214122efc4a4de393b3f4137ba5576540e7"}, + {file = "platformdirs-4.11.3.tar.gz", hash = "sha256:66a73d38a849810252df809a3d8bcbda8e26f6c189920e7535ad608a48dbb5ab"}, ] -[package.extras] -docs = ["furo (>=2025.9.25)", "proselint (>=0.14)", "sphinx (>=8.2.3)", "sphinx-autodoc-typehints (>=3.2)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.4.2)", "pytest-cov (>=7)", "pytest-mock (>=3.15.1)"] -type = ["mypy (>=1.18.2)"] - [[package]] name = "pluggy" version = "1.6.0" @@ -2920,66 +3310,70 @@ dill = ["dill (>=0.4.1)"] [[package]] name = "prometheus-client" -version = "0.23.1" +version = "0.26.0" description = "Python client for the Prometheus monitoring system." optional = false python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "prometheus_client-0.23.1-py3-none-any.whl", hash = "sha256:dd1913e6e76b59cfe44e7a4b83e01afc9873c1bdfd2ed8739f1e76aeca115f99"}, - {file = "prometheus_client-0.23.1.tar.gz", hash = "sha256:6ae8f9081eaaaf153a2e959d2e6c4f4fb57b12ef76c8c7980202f1e57b48b2ce"}, + {file = "prometheus_client-0.26.0-py3-none-any.whl", hash = "sha256:fa93d06737aa02bacd05794768508bb97d2fbee28cb3bca04eaae92f0ca953d6"}, + {file = "prometheus_client-0.26.0.tar.gz", hash = "sha256:04a91bcf94e2cf74a44a1a874d651a2e853ed354b6e822f3b7487751465d5c2b"}, ] [package.extras] +aiohttp = ["aiohttp"] +django = ["django"] twisted = ["twisted"] [[package]] name = "prompt-toolkit" -version = "3.0.52" +version = "3.0.53" description = "Library for building powerful interactive command lines in Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "prompt_toolkit-3.0.52-py3-none-any.whl", hash = "sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955"}, - {file = "prompt_toolkit-3.0.52.tar.gz", hash = "sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855"}, + {file = "prompt_toolkit-3.0.53-py3-none-any.whl", hash = "sha256:01c0891d7f9237d5e339f7d3e42cdae80b7534abb1c7c0e3352efba6231492f2"}, + {file = "prompt_toolkit-3.0.53.tar.gz", hash = "sha256:9ec8a0ad96d5c56148b3f914aa79c1564c3fde5d2e6b876e7bc327e353cf8fa6"}, ] [package.dependencies] -wcwidth = "*" +wcwidth = ">=0.1.4" [[package]] name = "psutil" -version = "7.1.2" +version = "7.2.2" description = "Cross-platform lib for process and system monitoring." optional = false python-versions = ">=3.6" groups = ["dev"] files = [ - {file = "psutil-7.1.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0cc5c6889b9871f231ed5455a9a02149e388fffcb30b607fb7a8896a6d95f22e"}, - {file = "psutil-7.1.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8e9e77a977208d84aa363a4a12e0f72189d58bbf4e46b49aae29a2c6e93ef206"}, - {file = "psutil-7.1.2-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d9623a5e4164d2220ecceb071f4b333b3c78866141e8887c072129185f41278"}, - {file = "psutil-7.1.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:364b1c10fe4ed59c89ec49e5f1a70da353b27986fa8233b4b999df4742a5ee2f"}, - {file = "psutil-7.1.2-cp313-cp313t-win_amd64.whl", hash = "sha256:f101ef84de7e05d41310e3ccbdd65a6dd1d9eed85e8aaf0758405d022308e204"}, - {file = "psutil-7.1.2-cp313-cp313t-win_arm64.whl", hash = "sha256:20c00824048a95de67f00afedc7b08b282aa08638585b0206a9fb51f28f1a165"}, - {file = "psutil-7.1.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:e09cfe92aa8e22b1ec5e2d394820cf86c5dff6367ac3242366485dfa874d43bc"}, - {file = "psutil-7.1.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:fa6342cf859c48b19df3e4aa170e4cfb64aadc50b11e06bb569c6c777b089c9e"}, - {file = "psutil-7.1.2-cp314-cp314t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:625977443498ee7d6c1e63e93bacca893fd759a66c5f635d05e05811d23fb5ee"}, - {file = "psutil-7.1.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a24bcd7b7f2918d934af0fb91859f621b873d6aa81267575e3655cd387572a7"}, - {file = "psutil-7.1.2-cp314-cp314t-win_amd64.whl", hash = "sha256:329f05610da6380982e6078b9d0881d9ab1e9a7eb7c02d833bfb7340aa634e31"}, - {file = "psutil-7.1.2-cp314-cp314t-win_arm64.whl", hash = "sha256:7b04c29e3c0c888e83ed4762b70f31e65c42673ea956cefa8ced0e31e185f582"}, - {file = "psutil-7.1.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c9ba5c19f2d46203ee8c152c7b01df6eec87d883cfd8ee1af2ef2727f6b0f814"}, - {file = "psutil-7.1.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:2a486030d2fe81bec023f703d3d155f4823a10a47c36784c84f1cc7f8d39bedb"}, - {file = "psutil-7.1.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3efd8fc791492e7808a51cb2b94889db7578bfaea22df931424f874468e389e3"}, - {file = "psutil-7.1.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e2aeb9b64f481b8eabfc633bd39e0016d4d8bbcd590d984af764d80bf0851b8a"}, - {file = "psutil-7.1.2-cp37-abi3-win_amd64.whl", hash = "sha256:8e17852114c4e7996fe9da4745c2bdef001ebbf2f260dec406290e66628bdb91"}, - {file = "psutil-7.1.2-cp37-abi3-win_arm64.whl", hash = "sha256:3e988455e61c240cc879cb62a008c2699231bf3e3d061d7fce4234463fd2abb4"}, - {file = "psutil-7.1.2.tar.gz", hash = "sha256:aa225cdde1335ff9684708ee8c72650f6598d5ed2114b9a7c5802030b1785018"}, + {file = "psutil-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b"}, + {file = "psutil-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea"}, + {file = "psutil-7.2.2-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63"}, + {file = "psutil-7.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312"}, + {file = "psutil-7.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b"}, + {file = "psutil-7.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9"}, + {file = "psutil-7.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00"}, + {file = "psutil-7.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9"}, + {file = "psutil-7.2.2-cp314-cp314t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a"}, + {file = "psutil-7.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf"}, + {file = "psutil-7.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1"}, + {file = "psutil-7.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841"}, + {file = "psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486"}, + {file = "psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979"}, + {file = "psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9"}, + {file = "psutil-7.2.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e"}, + {file = "psutil-7.2.2-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8"}, + {file = "psutil-7.2.2-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc"}, + {file = "psutil-7.2.2-cp37-abi3-win_amd64.whl", hash = "sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988"}, + {file = "psutil-7.2.2-cp37-abi3-win_arm64.whl", hash = "sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee"}, + {file = "psutil-7.2.2.tar.gz", hash = "sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372"}, ] [package.extras] -dev = ["abi3audit", "black", "check-manifest", "coverage", "packaging", "pylint", "pyperf", "pypinfo", "pyreadline ; os_name == \"nt\"", "pytest", "pytest-cov", "pytest-instafail", "pytest-subtests", "pytest-xdist", "pywin32 ; os_name == \"nt\" and platform_python_implementation != \"PyPy\"", "requests", "rstcheck", "ruff", "setuptools", "sphinx", "sphinx_rtd_theme", "toml-sort", "twine", "validate-pyproject[all]", "virtualenv", "vulture", "wheel", "wheel ; os_name == \"nt\" and platform_python_implementation != \"PyPy\"", "wmi ; os_name == \"nt\" and platform_python_implementation != \"PyPy\""] -test = ["pytest", "pytest-instafail", "pytest-subtests", "pytest-xdist", "pywin32 ; os_name == \"nt\" and platform_python_implementation != \"PyPy\"", "setuptools", "wheel ; os_name == \"nt\" and platform_python_implementation != \"PyPy\"", "wmi ; os_name == \"nt\" and platform_python_implementation != \"PyPy\""] +dev = ["abi3audit", "black", "check-manifest", "colorama ; os_name == \"nt\"", "coverage", "packaging", "psleak", "pylint", "pyperf", "pypinfo", "pyreadline3 ; os_name == \"nt\"", "pytest", "pytest-cov", "pytest-instafail", "pytest-xdist", "pywin32 ; os_name == \"nt\" and implementation_name != \"pypy\"", "requests", "rstcheck", "ruff", "setuptools", "sphinx", "sphinx_rtd_theme", "toml-sort", "twine", "validate-pyproject[all]", "virtualenv", "vulture", "wheel", "wheel ; os_name == \"nt\" and implementation_name != \"pypy\"", "wmi ; os_name == \"nt\" and implementation_name != \"pypy\""] +test = ["psleak", "pytest", "pytest-instafail", "pytest-xdist", "pywin32 ; os_name == \"nt\" and implementation_name != \"pypy\"", "setuptools", "wheel ; os_name == \"nt\" and implementation_name != \"pypy\"", "wmi ; os_name == \"nt\" and implementation_name != \"pypy\""] [[package]] name = "ptyprocess" @@ -3011,27 +3405,27 @@ tests = ["pytest"] [[package]] name = "pycparser" -version = "2.23" +version = "3.0" description = "C parser in Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" groups = ["dev"] markers = "implementation_name != \"PyPy\"" files = [ - {file = "pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934"}, - {file = "pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2"}, + {file = "pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992"}, + {file = "pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29"}, ] [[package]] name = "pygments" -version = "2.19.2" +version = "2.21.0" description = "Pygments is a syntax highlighting package written in Python." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b"}, - {file = "pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887"}, + {file = "pygments-2.21.0-py3-none-any.whl", hash = "sha256:2363c69b61c4a97c838da3b130dcd6468f4848992b21a82f2a63ec34377137d9"}, + {file = "pygments-2.21.0.tar.gz", hash = "sha256:610ca751c9bc2492b38eb9a38a7fbc93edbbb2d7182edaf34e66ae493dee5c8c"}, ] [package.extras] @@ -3039,14 +3433,14 @@ windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pyparsing" -version = "3.2.5" +version = "3.3.2" description = "pyparsing - Classes and methods to define and execute parsing grammars" optional = false python-versions = ">=3.9" groups = ["dev", "floris"] files = [ - {file = "pyparsing-3.2.5-py3-none-any.whl", hash = "sha256:e38a4f02064cf41fe6593d328d0512495ad1f3d8a91c4f73fc401b3079a59a5e"}, - {file = "pyparsing-3.2.5.tar.gz", hash = "sha256:2df8d5b7b2802ef88e8d016a2eb9c7aeaa923529cd251ed0fe4608275d4105b6"}, + {file = "pyparsing-3.3.2-py3-none-any.whl", hash = "sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d"}, + {file = "pyparsing-3.3.2.tar.gz", hash = "sha256:c777f4d763f140633dcb6d8a3eda953bf7a214dc4eff598413c070bcdc117cbc"}, ] [package.extras] @@ -3108,19 +3502,16 @@ six = ">=1.5" [[package]] name = "python-json-logger" -version = "4.0.0" +version = "4.2.0" description = "JSON Log Formatter for the Python Logging Package" optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "python_json_logger-4.0.0-py3-none-any.whl", hash = "sha256:af09c9daf6a813aa4cc7180395f50f2a9e5fa056034c9953aec92e381c5ba1e2"}, - {file = "python_json_logger-4.0.0.tar.gz", hash = "sha256:f58e68eb46e1faed27e0f574a55a0455eecd7b8a5b88b85a784519ba3cff047f"}, + {file = "python_json_logger-4.2.0-py3-none-any.whl", hash = "sha256:158a52126fcd6869e09574d2b66272666f3dc8f468c62637ef9a1fa883719cb9"}, + {file = "python_json_logger-4.2.0.tar.gz", hash = "sha256:e371ebe22ec01e289850102091a2b1f6fc9e655c7f1f5f29073936756c290afa"}, ] -[package.extras] -dev = ["backports.zoneinfo ; python_version < \"3.9\"", "black", "build", "freezegun", "mdx_truly_sane_lists", "mike", "mkdocs", "mkdocs-awesome-pages-plugin", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-material (>=8.5)", "mkdocstrings[python]", "msgspec ; implementation_name != \"pypy\"", "mypy", "orjson ; implementation_name != \"pypy\"", "pylint", "pytest", "tzdata", "validate-pyproject[all]"] - [[package]] name = "pytz" version = "2026.3.post1" @@ -3136,22 +3527,28 @@ files = [ [[package]] name = "pywinpty" -version = "3.0.2" +version = "3.0.5" description = "Pseudo terminal support for Windows from Python." optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["dev"] markers = "os_name == \"nt\"" files = [ - {file = "pywinpty-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:65db57fd3387d71e8372b6a54269cbcd0f6dfa6d4616a29e0af749ec19f5c558"}, - {file = "pywinpty-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:327790d70e4c841ebd9d0f295a780177149aeb405bca44c7115a3de5c2054b23"}, - {file = "pywinpty-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:99fdd9b455f0ad6419aba6731a7a0d2f88ced83c3c94a80ff9533d95fa8d8a9e"}, - {file = "pywinpty-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:18f78b81e4cfee6aabe7ea8688441d30247b73e52cd9657138015c5f4ee13a51"}, - {file = "pywinpty-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:663383ecfab7fc382cc97ea5c4f7f0bb32c2f889259855df6ea34e5df42d305b"}, - {file = "pywinpty-3.0.2-cp314-cp314-win_amd64.whl", hash = "sha256:28297cecc37bee9f24d8889e47231972d6e9e84f7b668909de54f36ca785029a"}, - {file = "pywinpty-3.0.2-cp314-cp314t-win_amd64.whl", hash = "sha256:34b55ae9a1b671fe3eae071d86618110538e8eaad18fcb1531c0830b91a82767"}, - {file = "pywinpty-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:3962daf801bc38dd4de872108c424b5338c9a46c6efca5761854cd66370a9022"}, - {file = "pywinpty-3.0.2.tar.gz", hash = "sha256:1505cc4cb248af42cb6285a65c9c2086ee9e7e574078ee60933d5d7fa86fb004"}, + {file = "pywinpty-3.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:b467dcad72365bc2205ed8b6e694e817d71de269d46e56cfe267dfa9d3d30e1b"}, + {file = "pywinpty-3.0.5-cp310-cp310-win_arm64.whl", hash = "sha256:7dc4046ea8e4d7f0a16dae8dfcaeeda6df7ca3a9330444d2ba5bb96138fe0a91"}, + {file = "pywinpty-3.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:af7a8720c78776ddd6259b71dd567944f766a6cd67f8d2887fbc4973967bacda"}, + {file = "pywinpty-3.0.5-cp311-cp311-win_arm64.whl", hash = "sha256:c2406f54f699eab75953fb75ce805f2ae55a33a957cd070890abd454fb4b7680"}, + {file = "pywinpty-3.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:d62946adf14b15b54c0b8d785f93fe18b04da23f4ad59e2e8c4612646e9abd23"}, + {file = "pywinpty-3.0.5-cp312-cp312-win_arm64.whl", hash = "sha256:e9391c05fbfa7a992a97e831fc6849887b4014a614192e3d984a7ca59592b376"}, + {file = "pywinpty-3.0.5-cp313-cp313-win_amd64.whl", hash = "sha256:48db1b0ad9d0a1b81dcaaa7163a99a7808deaceb0c1b2344716dc1fc090c3c4c"}, + {file = "pywinpty-3.0.5-cp313-cp313-win_arm64.whl", hash = "sha256:2c6008fb2d3774b48693b2fcb7f2cc317ade9dc581289a964ffeeaf81307c9b5"}, + {file = "pywinpty-3.0.5-cp313-cp313t-win_amd64.whl", hash = "sha256:22ce1b780d89821cc52daf6eac0708af22d93d000ce9c7c07e37489db8594598"}, + {file = "pywinpty-3.0.5-cp313-cp313t-win_arm64.whl", hash = "sha256:9c2919a81bc5cfb09b86fc5a002112b2de95ca4304a07413cbeeb746a1307a5c"}, + {file = "pywinpty-3.0.5-cp314-cp314-win_amd64.whl", hash = "sha256:03bb3c16d691d9242267201830bcd0e64a9b663170e9042bc84b210da9de15ac"}, + {file = "pywinpty-3.0.5-cp314-cp314-win_arm64.whl", hash = "sha256:89c5c6ef08997a3b4b277b214a35fe15cab4dd6d119f0140aa71df5b1168fdbc"}, + {file = "pywinpty-3.0.5-cp314-cp314t-win_amd64.whl", hash = "sha256:7b566165e0c5fdd6abe167a5ac8b954be6a843eb55a85946576d6bc1dea03d6d"}, + {file = "pywinpty-3.0.5-cp314-cp314t-win_arm64.whl", hash = "sha256:24366280a8aa677323da87bec729cb3ea3b35367386cece0978bdc6e4695c690"}, + {file = "pywinpty-3.0.5.tar.gz", hash = "sha256:61db0db063de9865adbea66db294628f8577f608d9764a4c7d3384eeacc4e81b"}, ] [[package]] @@ -3361,25 +3758,25 @@ typing-extensions = {version = ">=4.4.0", markers = "python_version < \"3.13\""} [[package]] name = "requests" -version = "2.32.5" +version = "2.34.2" description = "Python HTTP for Humans." optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6"}, - {file = "requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf"}, + {file = "requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0"}, + {file = "requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed"}, ] [package.dependencies] -certifi = ">=2017.4.17" +certifi = ">=2023.5.7" charset_normalizer = ">=2,<4" idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<3" +urllib3 = ">=1.26,<3" [package.extras] socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<8)"] [[package]] name = "rfc3339-validator" @@ -3428,127 +3825,255 @@ testing = ["pytest (>=8.3.5)"] [[package]] name = "rpds-py" -version = "0.28.0" +version = "0.30.0" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.10" groups = ["dev"] +markers = "python_version < \"3.11\"" +files = [ + {file = "rpds_py-0.30.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:679ae98e00c0e8d68a7fda324e16b90fd5260945b45d3b824c892cec9eea3288"}, + {file = "rpds_py-0.30.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4cc2206b76b4f576934f0ed374b10d7ca5f457858b157ca52064bdfc26b9fc00"}, + {file = "rpds_py-0.30.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:389a2d49eded1896c3d48b0136ead37c48e221b391c052fba3f4055c367f60a6"}, + {file = "rpds_py-0.30.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:32c8528634e1bf7121f3de08fa85b138f4e0dc47657866630611b03967f041d7"}, + {file = "rpds_py-0.30.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f207f69853edd6f6700b86efb84999651baf3789e78a466431df1331608e5324"}, + {file = "rpds_py-0.30.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:67b02ec25ba7a9e8fa74c63b6ca44cf5707f2fbfadae3ee8e7494297d56aa9df"}, + {file = "rpds_py-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0e95f6819a19965ff420f65578bacb0b00f251fefe2c8b23347c37174271f3"}, + {file = "rpds_py-0.30.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:a452763cc5198f2f98898eb98f7569649fe5da666c2dc6b5ddb10fde5a574221"}, + {file = "rpds_py-0.30.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e0b65193a413ccc930671c55153a03ee57cecb49e6227204b04fae512eb657a7"}, + {file = "rpds_py-0.30.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:858738e9c32147f78b3ac24dc0edb6610000e56dc0f700fd5f651d0a0f0eb9ff"}, + {file = "rpds_py-0.30.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:da279aa314f00acbb803da1e76fa18666778e8a8f83484fba94526da5de2cba7"}, + {file = "rpds_py-0.30.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c64d38fb49b6cdeda16ab49e35fe0da2e1e9b34bc38bd78386530f218b37139"}, + {file = "rpds_py-0.30.0-cp310-cp310-win32.whl", hash = "sha256:6de2a32a1665b93233cde140ff8b3467bdb9e2af2b91079f0333a0974d12d464"}, + {file = "rpds_py-0.30.0-cp310-cp310-win_amd64.whl", hash = "sha256:1726859cd0de969f88dc8673bdd954185b9104e05806be64bcd87badbe313169"}, + {file = "rpds_py-0.30.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a2bffea6a4ca9f01b3f8e548302470306689684e61602aa3d141e34da06cf425"}, + {file = "rpds_py-0.30.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dc4f992dfe1e2bc3ebc7444f6c7051b4bc13cd8e33e43511e8ffd13bf407010d"}, + {file = "rpds_py-0.30.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:422c3cb9856d80b09d30d2eb255d0754b23e090034e1deb4083f8004bd0761e4"}, + {file = "rpds_py-0.30.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07ae8a593e1c3c6b82ca3292efbe73c30b61332fd612e05abee07c79359f292f"}, + {file = "rpds_py-0.30.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12f90dd7557b6bd57f40abe7747e81e0c0b119bef015ea7726e69fe550e394a4"}, + {file = "rpds_py-0.30.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99b47d6ad9a6da00bec6aabe5a6279ecd3c06a329d4aa4771034a21e335c3a97"}, + {file = "rpds_py-0.30.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33f559f3104504506a44bb666b93a33f5d33133765b0c216a5bf2f1e1503af89"}, + {file = "rpds_py-0.30.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:946fe926af6e44f3697abbc305ea168c2c31d3e3ef1058cf68f379bf0335a78d"}, + {file = "rpds_py-0.30.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:495aeca4b93d465efde585977365187149e75383ad2684f81519f504f5c13038"}, + {file = "rpds_py-0.30.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9a0ca5da0386dee0655b4ccdf46119df60e0f10da268d04fe7cc87886872ba7"}, + {file = "rpds_py-0.30.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8d6d1cc13664ec13c1b84241204ff3b12f9bb82464b8ad6e7a5d3486975c2eed"}, + {file = "rpds_py-0.30.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3896fa1be39912cf0757753826bc8bdc8ca331a28a7c4ae46b7a21280b06bb85"}, + {file = "rpds_py-0.30.0-cp311-cp311-win32.whl", hash = "sha256:55f66022632205940f1827effeff17c4fa7ae1953d2b74a8581baaefb7d16f8c"}, + {file = "rpds_py-0.30.0-cp311-cp311-win_amd64.whl", hash = "sha256:a51033ff701fca756439d641c0ad09a41d9242fa69121c7d8769604a0a629825"}, + {file = "rpds_py-0.30.0-cp311-cp311-win_arm64.whl", hash = "sha256:47b0ef6231c58f506ef0b74d44e330405caa8428e770fec25329ed2cb971a229"}, + {file = "rpds_py-0.30.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a161f20d9a43006833cd7068375a94d035714d73a172b681d8881820600abfad"}, + {file = "rpds_py-0.30.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6abc8880d9d036ecaafe709079969f56e876fcf107f7a8e9920ba6d5a3878d05"}, + {file = "rpds_py-0.30.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca28829ae5f5d569bb62a79512c842a03a12576375d5ece7d2cadf8abe96ec28"}, + {file = "rpds_py-0.30.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a1010ed9524c73b94d15919ca4d41d8780980e1765babf85f9a2f90d247153dd"}, + {file = "rpds_py-0.30.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8d1736cfb49381ba528cd5baa46f82fdc65c06e843dab24dd70b63d09121b3f"}, + {file = "rpds_py-0.30.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d948b135c4693daff7bc2dcfc4ec57237a29bd37e60c2fabf5aff2bbacf3e2f1"}, + {file = "rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47f236970bccb2233267d89173d3ad2703cd36a0e2a6e92d0560d333871a3d23"}, + {file = "rpds_py-0.30.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:2e6ecb5a5bcacf59c3f912155044479af1d0b6681280048b338b28e364aca1f6"}, + {file = "rpds_py-0.30.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a8fa71a2e078c527c3e9dc9fc5a98c9db40bcc8a92b4e8858e36d329f8684b51"}, + {file = "rpds_py-0.30.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:73c67f2db7bc334e518d097c6d1e6fed021bbc9b7d678d6cc433478365d1d5f5"}, + {file = "rpds_py-0.30.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5ba103fb455be00f3b1c2076c9d4264bfcb037c976167a6047ed82f23153f02e"}, + {file = "rpds_py-0.30.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7cee9c752c0364588353e627da8a7e808a66873672bcb5f52890c33fd965b394"}, + {file = "rpds_py-0.30.0-cp312-cp312-win32.whl", hash = "sha256:1ab5b83dbcf55acc8b08fc62b796ef672c457b17dbd7820a11d6c52c06839bdf"}, + {file = "rpds_py-0.30.0-cp312-cp312-win_amd64.whl", hash = "sha256:a090322ca841abd453d43456ac34db46e8b05fd9b3b4ac0c78bcde8b089f959b"}, + {file = "rpds_py-0.30.0-cp312-cp312-win_arm64.whl", hash = "sha256:669b1805bd639dd2989b281be2cfd951c6121b65e729d9b843e9639ef1fd555e"}, + {file = "rpds_py-0.30.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f83424d738204d9770830d35290ff3273fbb02b41f919870479fab14b9d303b2"}, + {file = "rpds_py-0.30.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e7536cd91353c5273434b4e003cbda89034d67e7710eab8761fd918ec6c69cf8"}, + {file = "rpds_py-0.30.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2771c6c15973347f50fece41fc447c054b7ac2ae0502388ce3b6738cd366e3d4"}, + {file = "rpds_py-0.30.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0a59119fc6e3f460315fe9d08149f8102aa322299deaa5cab5b40092345c2136"}, + {file = "rpds_py-0.30.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76fec018282b4ead0364022e3c54b60bf368b9d926877957a8624b58419169b7"}, + {file = "rpds_py-0.30.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:692bef75a5525db97318e8cd061542b5a79812d711ea03dbc1f6f8dbb0c5f0d2"}, + {file = "rpds_py-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9027da1ce107104c50c81383cae773ef5c24d296dd11c99e2629dbd7967a20c6"}, + {file = "rpds_py-0.30.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:9cf69cdda1f5968a30a359aba2f7f9aa648a9ce4b580d6826437f2b291cfc86e"}, + {file = "rpds_py-0.30.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a4796a717bf12b9da9d3ad002519a86063dcac8988b030e405704ef7d74d2d9d"}, + {file = "rpds_py-0.30.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5d4c2aa7c50ad4728a094ebd5eb46c452e9cb7edbfdb18f9e1221f597a73e1e7"}, + {file = "rpds_py-0.30.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ba81a9203d07805435eb06f536d95a266c21e5b2dfbf6517748ca40c98d19e31"}, + {file = "rpds_py-0.30.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:945dccface01af02675628334f7cf49c2af4c1c904748efc5cf7bbdf0b579f95"}, + {file = "rpds_py-0.30.0-cp313-cp313-win32.whl", hash = "sha256:b40fb160a2db369a194cb27943582b38f79fc4887291417685f3ad693c5a1d5d"}, + {file = "rpds_py-0.30.0-cp313-cp313-win_amd64.whl", hash = "sha256:806f36b1b605e2d6a72716f321f20036b9489d29c51c91f4dd29a3e3afb73b15"}, + {file = "rpds_py-0.30.0-cp313-cp313-win_arm64.whl", hash = "sha256:d96c2086587c7c30d44f31f42eae4eac89b60dabbac18c7669be3700f13c3ce1"}, + {file = "rpds_py-0.30.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:eb0b93f2e5c2189ee831ee43f156ed34e2a89a78a66b98cadad955972548be5a"}, + {file = "rpds_py-0.30.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:922e10f31f303c7c920da8981051ff6d8c1a56207dbdf330d9047f6d30b70e5e"}, + {file = "rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdc62c8286ba9bf7f47befdcea13ea0e26bf294bda99758fd90535cbaf408000"}, + {file = "rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:47f9a91efc418b54fb8190a6b4aa7813a23fb79c51f4bb84e418f5476c38b8db"}, + {file = "rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f3587eb9b17f3789ad50824084fa6f81921bbf9a795826570bda82cb3ed91f2"}, + {file = "rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39c02563fc592411c2c61d26b6c5fe1e51eaa44a75aa2c8735ca88b0d9599daa"}, + {file = "rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51a1234d8febafdfd33a42d97da7a43f5dcb120c1060e352a3fbc0c6d36e2083"}, + {file = "rpds_py-0.30.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:eb2c4071ab598733724c08221091e8d80e89064cd472819285a9ab0f24bcedb9"}, + {file = "rpds_py-0.30.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6bdfdb946967d816e6adf9a3d8201bfad269c67efe6cefd7093ef959683c8de0"}, + {file = "rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c77afbd5f5250bf27bf516c7c4a016813eb2d3e116139aed0096940c5982da94"}, + {file = "rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:61046904275472a76c8c90c9ccee9013d70a6d0f73eecefd38c1ae7c39045a08"}, + {file = "rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c5f36a861bc4b7da6516dbdf302c55313afa09b81931e8280361a4f6c9a2d27"}, + {file = "rpds_py-0.30.0-cp313-cp313t-win32.whl", hash = "sha256:3d4a69de7a3e50ffc214ae16d79d8fbb0922972da0356dcf4d0fdca2878559c6"}, + {file = "rpds_py-0.30.0-cp313-cp313t-win_amd64.whl", hash = "sha256:f14fc5df50a716f7ece6a80b6c78bb35ea2ca47c499e422aa4463455dd96d56d"}, + {file = "rpds_py-0.30.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:68f19c879420aa08f61203801423f6cd5ac5f0ac4ac82a2368a9fcd6a9a075e0"}, + {file = "rpds_py-0.30.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ec7c4490c672c1a0389d319b3a9cfcd098dcdc4783991553c332a15acf7249be"}, + {file = "rpds_py-0.30.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f251c812357a3fed308d684a5079ddfb9d933860fc6de89f2b7ab00da481e65f"}, + {file = "rpds_py-0.30.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac98b175585ecf4c0348fd7b29c3864bda53b805c773cbf7bfdaffc8070c976f"}, + {file = "rpds_py-0.30.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3e62880792319dbeb7eb866547f2e35973289e7d5696c6e295476448f5b63c87"}, + {file = "rpds_py-0.30.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e7fc54e0900ab35d041b0601431b0a0eb495f0851a0639b6ef90f7741b39a18"}, + {file = "rpds_py-0.30.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47e77dc9822d3ad616c3d5759ea5631a75e5809d5a28707744ef79d7a1bcfcad"}, + {file = "rpds_py-0.30.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b4dc1a6ff022ff85ecafef7979a2c6eb423430e05f1165d6688234e62ba99a07"}, + {file = "rpds_py-0.30.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4559c972db3a360808309e06a74628b95eaccbf961c335c8fe0d590cf587456f"}, + {file = "rpds_py-0.30.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0ed177ed9bded28f8deb6ab40c183cd1192aa0de40c12f38be4d59cd33cb5c65"}, + {file = "rpds_py-0.30.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ad1fa8db769b76ea911cb4e10f049d80bf518c104f15b3edb2371cc65375c46f"}, + {file = "rpds_py-0.30.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:46e83c697b1f1c72b50e5ee5adb4353eef7406fb3f2043d64c33f20ad1c2fc53"}, + {file = "rpds_py-0.30.0-cp314-cp314-win32.whl", hash = "sha256:ee454b2a007d57363c2dfd5b6ca4a5d7e2c518938f8ed3b706e37e5d470801ed"}, + {file = "rpds_py-0.30.0-cp314-cp314-win_amd64.whl", hash = "sha256:95f0802447ac2d10bcc69f6dc28fe95fdf17940367b21d34e34c737870758950"}, + {file = "rpds_py-0.30.0-cp314-cp314-win_arm64.whl", hash = "sha256:613aa4771c99f03346e54c3f038e4cc574ac09a3ddfb0e8878487335e96dead6"}, + {file = "rpds_py-0.30.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:7e6ecfcb62edfd632e56983964e6884851786443739dbfe3582947e87274f7cb"}, + {file = "rpds_py-0.30.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a1d0bc22a7cdc173fedebb73ef81e07faef93692b8c1ad3733b67e31e1b6e1b8"}, + {file = "rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d08f00679177226c4cb8c5265012eea897c8ca3b93f429e546600c971bcbae7"}, + {file = "rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5965af57d5848192c13534f90f9dd16464f3c37aaf166cc1da1cae1fd5a34898"}, + {file = "rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a4e86e34e9ab6b667c27f3211ca48f73dba7cd3d90f8d5b11be56e5dbc3fb4e"}, + {file = "rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d3e6b26f2c785d65cc25ef1e5267ccbe1b069c5c21b8cc724efee290554419"}, + {file = "rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:626a7433c34566535b6e56a1b39a7b17ba961e97ce3b80ec62e6f1312c025551"}, + {file = "rpds_py-0.30.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:acd7eb3f4471577b9b5a41baf02a978e8bdeb08b4b355273994f8b87032000a8"}, + {file = "rpds_py-0.30.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe5fa731a1fa8a0a56b0977413f8cacac1768dad38d16b3a296712709476fbd5"}, + {file = "rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:74a3243a411126362712ee1524dfc90c650a503502f135d54d1b352bd01f2404"}, + {file = "rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:3e8eeb0544f2eb0d2581774be4c3410356eba189529a6b3e36bbbf9696175856"}, + {file = "rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:dbd936cde57abfee19ab3213cf9c26be06d60750e60a8e4dd85d1ab12c8b1f40"}, + {file = "rpds_py-0.30.0-cp314-cp314t-win32.whl", hash = "sha256:dc824125c72246d924f7f796b4f63c1e9dc810c7d9e2355864b3c3a73d59ade0"}, + {file = "rpds_py-0.30.0-cp314-cp314t-win_amd64.whl", hash = "sha256:27f4b0e92de5bfbc6f86e43959e6edd1425c33b5e69aab0984a72047f2bcf1e3"}, + {file = "rpds_py-0.30.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c2262bdba0ad4fc6fb5545660673925c2d2a5d9e2e0fb603aad545427be0fc58"}, + {file = "rpds_py-0.30.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ee6af14263f25eedc3bb918a3c04245106a42dfd4f5c2285ea6f997b1fc3f89a"}, + {file = "rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3adbb8179ce342d235c31ab8ec511e66c73faa27a47e076ccc92421add53e2bb"}, + {file = "rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:250fa00e9543ac9b97ac258bd37367ff5256666122c2d0f2bc97577c60a1818c"}, + {file = "rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9854cf4f488b3d57b9aaeb105f06d78e5529d3145b1e4a41750167e8c213c6d3"}, + {file = "rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:993914b8e560023bc0a8bf742c5f303551992dcb85e247b1e5c7f4a7d145bda5"}, + {file = "rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58edca431fb9b29950807e301826586e5bbf24163677732429770a697ffe6738"}, + {file = "rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:dea5b552272a944763b34394d04577cf0f9bd013207bc32323b5a89a53cf9c2f"}, + {file = "rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ba3af48635eb83d03f6c9735dfb21785303e73d22ad03d489e88adae6eab8877"}, + {file = "rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:dff13836529b921e22f15cb099751209a60009731a68519630a24d61f0b1b30a"}, + {file = "rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:1b151685b23929ab7beec71080a8889d4d6d9fa9a983d213f07121205d48e2c4"}, + {file = "rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ac37f9f516c51e5753f27dfdef11a88330f04de2d564be3991384b2f3535d02e"}, + {file = "rpds_py-0.30.0.tar.gz", hash = "sha256:dd8ff7cf90014af0c0f787eea34794ebf6415242ee1d6fa91eaba725cc441e84"}, +] + +[[package]] +name = "rpds-py" +version = "2026.6.3" +description = "Python bindings to Rust's persistent data structures (rpds)" +optional = false +python-versions = ">=3.11" +groups = ["dev"] +markers = "python_version >= \"3.11\"" files = [ - {file = "rpds_py-0.28.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:7b6013db815417eeb56b2d9d7324e64fcd4fa289caeee6e7a78b2e11fc9b438a"}, - {file = "rpds_py-0.28.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1a4c6b05c685c0c03f80dabaeb73e74218c49deea965ca63f76a752807397207"}, - {file = "rpds_py-0.28.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4794c6c3fbe8f9ac87699b131a1f26e7b4abcf6d828da46a3a52648c7930eba"}, - {file = "rpds_py-0.28.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2e8456b6ee5527112ff2354dd9087b030e3429e43a74f480d4a5ca79d269fd85"}, - {file = "rpds_py-0.28.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:beb880a9ca0a117415f241f66d56025c02037f7c4efc6fe59b5b8454f1eaa50d"}, - {file = "rpds_py-0.28.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6897bebb118c44b38c9cb62a178e09f1593c949391b9a1a6fe777ccab5934ee7"}, - {file = "rpds_py-0.28.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1b553dd06e875249fd43efd727785efb57a53180e0fde321468222eabbeaafa"}, - {file = "rpds_py-0.28.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:f0b2044fdddeea5b05df832e50d2a06fe61023acb44d76978e1b060206a8a476"}, - {file = "rpds_py-0.28.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:05cf1e74900e8da73fa08cc76c74a03345e5a3e37691d07cfe2092d7d8e27b04"}, - {file = "rpds_py-0.28.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:efd489fec7c311dae25e94fe7eeda4b3d06be71c68f2cf2e8ef990ffcd2cd7e8"}, - {file = "rpds_py-0.28.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:ada7754a10faacd4f26067e62de52d6af93b6d9542f0df73c57b9771eb3ba9c4"}, - {file = "rpds_py-0.28.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c2a34fd26588949e1e7977cfcbb17a9a42c948c100cab890c6d8d823f0586457"}, - {file = "rpds_py-0.28.0-cp310-cp310-win32.whl", hash = "sha256:f9174471d6920cbc5e82a7822de8dfd4dcea86eb828b04fc8c6519a77b0ee51e"}, - {file = "rpds_py-0.28.0-cp310-cp310-win_amd64.whl", hash = "sha256:6e32dd207e2c4f8475257a3540ab8a93eff997abfa0a3fdb287cae0d6cd874b8"}, - {file = "rpds_py-0.28.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:03065002fd2e287725d95fbc69688e0c6daf6c6314ba38bdbaa3895418e09296"}, - {file = "rpds_py-0.28.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:28ea02215f262b6d078daec0b45344c89e161eab9526b0d898221d96fdda5f27"}, - {file = "rpds_py-0.28.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25dbade8fbf30bcc551cb352376c0ad64b067e4fc56f90e22ba70c3ce205988c"}, - {file = "rpds_py-0.28.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3c03002f54cc855860bfdc3442928ffdca9081e73b5b382ed0b9e8efe6e5e205"}, - {file = "rpds_py-0.28.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b9699fa7990368b22032baf2b2dce1f634388e4ffc03dfefaaac79f4695edc95"}, - {file = "rpds_py-0.28.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9b06fe1a75e05e0713f06ea0c89ecb6452210fd60e2f1b6ddc1067b990e08d9"}, - {file = "rpds_py-0.28.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac9f83e7b326a3f9ec3ef84cda98fb0a74c7159f33e692032233046e7fd15da2"}, - {file = "rpds_py-0.28.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:0d3259ea9ad8743a75a43eb7819324cdab393263c91be86e2d1901ee65c314e0"}, - {file = "rpds_py-0.28.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9a7548b345f66f6695943b4ef6afe33ccd3f1b638bd9afd0f730dd255c249c9e"}, - {file = "rpds_py-0.28.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c9a40040aa388b037eb39416710fbcce9443498d2eaab0b9b45ae988b53f5c67"}, - {file = "rpds_py-0.28.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8f60c7ea34e78c199acd0d3cda37a99be2c861dd2b8cf67399784f70c9f8e57d"}, - {file = "rpds_py-0.28.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1571ae4292649100d743b26d5f9c63503bb1fedf538a8f29a98dce2d5ba6b4e6"}, - {file = "rpds_py-0.28.0-cp311-cp311-win32.whl", hash = "sha256:5cfa9af45e7c1140af7321fa0bef25b386ee9faa8928c80dc3a5360971a29e8c"}, - {file = "rpds_py-0.28.0-cp311-cp311-win_amd64.whl", hash = "sha256:dd8d86b5d29d1b74100982424ba53e56033dc47720a6de9ba0259cf81d7cecaa"}, - {file = "rpds_py-0.28.0-cp311-cp311-win_arm64.whl", hash = "sha256:4e27d3a5709cc2b3e013bf93679a849213c79ae0573f9b894b284b55e729e120"}, - {file = "rpds_py-0.28.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:6b4f28583a4f247ff60cd7bdda83db8c3f5b05a7a82ff20dd4b078571747708f"}, - {file = "rpds_py-0.28.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d678e91b610c29c4b3d52a2c148b641df2b4676ffe47c59f6388d58b99cdc424"}, - {file = "rpds_py-0.28.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e819e0e37a44a78e1383bf1970076e2ccc4dc8c2bbaa2f9bd1dc987e9afff628"}, - {file = "rpds_py-0.28.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5ee514e0f0523db5d3fb171f397c54875dbbd69760a414dccf9d4d7ad628b5bd"}, - {file = "rpds_py-0.28.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5f3fa06d27fdcee47f07a39e02862da0100cb4982508f5ead53ec533cd5fe55e"}, - {file = "rpds_py-0.28.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:46959ef2e64f9e4a41fc89aa20dbca2b85531f9a72c21099a3360f35d10b0d5a"}, - {file = "rpds_py-0.28.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8455933b4bcd6e83fde3fefc987a023389c4b13f9a58c8d23e4b3f6d13f78c84"}, - {file = "rpds_py-0.28.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:ad50614a02c8c2962feebe6012b52f9802deec4263946cddea37aaf28dd25a66"}, - {file = "rpds_py-0.28.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e5deca01b271492553fdb6c7fd974659dce736a15bae5dad7ab8b93555bceb28"}, - {file = "rpds_py-0.28.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:735f8495a13159ce6a0d533f01e8674cec0c57038c920495f87dcb20b3ddb48a"}, - {file = "rpds_py-0.28.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:961ca621ff10d198bbe6ba4957decca61aa2a0c56695384c1d6b79bf61436df5"}, - {file = "rpds_py-0.28.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2374e16cc9131022e7d9a8f8d65d261d9ba55048c78f3b6e017971a4f5e6353c"}, - {file = "rpds_py-0.28.0-cp312-cp312-win32.whl", hash = "sha256:d15431e334fba488b081d47f30f091e5d03c18527c325386091f31718952fe08"}, - {file = "rpds_py-0.28.0-cp312-cp312-win_amd64.whl", hash = "sha256:a410542d61fc54710f750d3764380b53bf09e8c4edbf2f9141a82aa774a04f7c"}, - {file = "rpds_py-0.28.0-cp312-cp312-win_arm64.whl", hash = "sha256:1f0cfd1c69e2d14f8c892b893997fa9a60d890a0c8a603e88dca4955f26d1edd"}, - {file = "rpds_py-0.28.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:e9e184408a0297086f880556b6168fa927d677716f83d3472ea333b42171ee3b"}, - {file = "rpds_py-0.28.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:edd267266a9b0448f33dc465a97cfc5d467594b600fe28e7fa2f36450e03053a"}, - {file = "rpds_py-0.28.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85beb8b3f45e4e32f6802fb6cd6b17f615ef6c6a52f265371fb916fae02814aa"}, - {file = "rpds_py-0.28.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d2412be8d00a1b895f8ad827cc2116455196e20ed994bb704bf138fe91a42724"}, - {file = "rpds_py-0.28.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cf128350d384b777da0e68796afdcebc2e9f63f0e9f242217754e647f6d32491"}, - {file = "rpds_py-0.28.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a2036d09b363aa36695d1cc1a97b36865597f4478470b0697b5ee9403f4fe399"}, - {file = "rpds_py-0.28.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8e1e9be4fa6305a16be628959188e4fd5cd6f1b0e724d63c6d8b2a8adf74ea6"}, - {file = "rpds_py-0.28.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:0a403460c9dd91a7f23fc3188de6d8977f1d9603a351d5db6cf20aaea95b538d"}, - {file = "rpds_py-0.28.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d7366b6553cdc805abcc512b849a519167db8f5e5c3472010cd1228b224265cb"}, - {file = "rpds_py-0.28.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5b43c6a3726efd50f18d8120ec0551241c38785b68952d240c45ea553912ac41"}, - {file = "rpds_py-0.28.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:0cb7203c7bc69d7c1585ebb33a2e6074492d2fc21ad28a7b9d40457ac2a51ab7"}, - {file = "rpds_py-0.28.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7a52a5169c664dfb495882adc75c304ae1d50df552fbd68e100fdc719dee4ff9"}, - {file = "rpds_py-0.28.0-cp313-cp313-win32.whl", hash = "sha256:2e42456917b6687215b3e606ab46aa6bca040c77af7df9a08a6dcfe8a4d10ca5"}, - {file = "rpds_py-0.28.0-cp313-cp313-win_amd64.whl", hash = "sha256:e0a0311caedc8069d68fc2bf4c9019b58a2d5ce3cd7cb656c845f1615b577e1e"}, - {file = "rpds_py-0.28.0-cp313-cp313-win_arm64.whl", hash = "sha256:04c1b207ab8b581108801528d59ad80aa83bb170b35b0ddffb29c20e411acdc1"}, - {file = "rpds_py-0.28.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:f296ea3054e11fc58ad42e850e8b75c62d9a93a9f981ad04b2e5ae7d2186ff9c"}, - {file = "rpds_py-0.28.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5a7306c19b19005ad98468fcefeb7100b19c79fc23a5f24a12e06d91181193fa"}, - {file = "rpds_py-0.28.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5d9b86aa501fed9862a443c5c3116f6ead8bc9296185f369277c42542bd646b"}, - {file = "rpds_py-0.28.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e5bbc701eff140ba0e872691d573b3d5d30059ea26e5785acba9132d10c8c31d"}, - {file = "rpds_py-0.28.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a5690671cd672a45aa8616d7374fdf334a1b9c04a0cac3c854b1136e92374fe"}, - {file = "rpds_py-0.28.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9f1d92ecea4fa12f978a367c32a5375a1982834649cdb96539dcdc12e609ab1a"}, - {file = "rpds_py-0.28.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d252db6b1a78d0a3928b6190156042d54c93660ce4d98290d7b16b5296fb7cc"}, - {file = "rpds_py-0.28.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:d61b355c3275acb825f8777d6c4505f42b5007e357af500939d4a35b19177259"}, - {file = "rpds_py-0.28.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:acbe5e8b1026c0c580d0321c8aae4b0a1e1676861d48d6e8c6586625055b606a"}, - {file = "rpds_py-0.28.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:8aa23b6f0fc59b85b4c7d89ba2965af274346f738e8d9fc2455763602e62fd5f"}, - {file = "rpds_py-0.28.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:7b14b0c680286958817c22d76fcbca4800ddacef6f678f3a7c79a1fe7067fe37"}, - {file = "rpds_py-0.28.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:bcf1d210dfee61a6c86551d67ee1031899c0fdbae88b2d44a569995d43797712"}, - {file = "rpds_py-0.28.0-cp313-cp313t-win32.whl", hash = "sha256:3aa4dc0fdab4a7029ac63959a3ccf4ed605fee048ba67ce89ca3168da34a1342"}, - {file = "rpds_py-0.28.0-cp313-cp313t-win_amd64.whl", hash = "sha256:7b7d9d83c942855e4fdcfa75d4f96f6b9e272d42fffcb72cd4bb2577db2e2907"}, - {file = "rpds_py-0.28.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:dcdcb890b3ada98a03f9f2bb108489cdc7580176cb73b4f2d789e9a1dac1d472"}, - {file = "rpds_py-0.28.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:f274f56a926ba2dc02976ca5b11c32855cbd5925534e57cfe1fda64e04d1add2"}, - {file = "rpds_py-0.28.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4fe0438ac4a29a520ea94c8c7f1754cdd8feb1bc490dfda1bfd990072363d527"}, - {file = "rpds_py-0.28.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8a358a32dd3ae50e933347889b6af9a1bdf207ba5d1a3f34e1a38cd3540e6733"}, - {file = "rpds_py-0.28.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e80848a71c78aa328fefaba9c244d588a342c8e03bda518447b624ea64d1ff56"}, - {file = "rpds_py-0.28.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f586db2e209d54fe177e58e0bc4946bea5fb0102f150b1b2f13de03e1f0976f8"}, - {file = "rpds_py-0.28.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ae8ee156d6b586e4292491e885d41483136ab994e719a13458055bec14cf370"}, - {file = "rpds_py-0.28.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:a805e9b3973f7e27f7cab63a6b4f61d90f2e5557cff73b6e97cd5b8540276d3d"}, - {file = "rpds_py-0.28.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5d3fd16b6dc89c73a4da0b4ac8b12a7ecc75b2864b95c9e5afed8003cb50a728"}, - {file = "rpds_py-0.28.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:6796079e5d24fdaba6d49bda28e2c47347e89834678f2bc2c1b4fc1489c0fb01"}, - {file = "rpds_py-0.28.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:76500820c2af232435cbe215e3324c75b950a027134e044423f59f5b9a1ba515"}, - {file = "rpds_py-0.28.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:bbdc5640900a7dbf9dd707fe6388972f5bbd883633eb68b76591044cfe346f7e"}, - {file = "rpds_py-0.28.0-cp314-cp314-win32.whl", hash = "sha256:adc8aa88486857d2b35d75f0640b949759f79dc105f50aa2c27816b2e0dd749f"}, - {file = "rpds_py-0.28.0-cp314-cp314-win_amd64.whl", hash = "sha256:66e6fa8e075b58946e76a78e69e1a124a21d9a48a5b4766d15ba5b06869d1fa1"}, - {file = "rpds_py-0.28.0-cp314-cp314-win_arm64.whl", hash = "sha256:a6fe887c2c5c59413353b7c0caff25d0e566623501ccfff88957fa438a69377d"}, - {file = "rpds_py-0.28.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:7a69df082db13c7070f7b8b1f155fa9e687f1d6aefb7b0e3f7231653b79a067b"}, - {file = "rpds_py-0.28.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b1cde22f2c30ebb049a9e74c5374994157b9b70a16147d332f89c99c5960737a"}, - {file = "rpds_py-0.28.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5338742f6ba7a51012ea470bd4dc600a8c713c0c72adaa0977a1b1f4327d6592"}, - {file = "rpds_py-0.28.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e1460ebde1bcf6d496d80b191d854adedcc619f84ff17dc1c6d550f58c9efbba"}, - {file = "rpds_py-0.28.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e3eb248f2feba84c692579257a043a7699e28a77d86c77b032c1d9fbb3f0219c"}, - {file = "rpds_py-0.28.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bd3bbba5def70b16cd1c1d7255666aad3b290fbf8d0fe7f9f91abafb73611a91"}, - {file = "rpds_py-0.28.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3114f4db69ac5a1f32e7e4d1cbbe7c8f9cf8217f78e6e002cedf2d54c2a548ed"}, - {file = "rpds_py-0.28.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:4b0cb8a906b1a0196b863d460c0222fb8ad0f34041568da5620f9799b83ccf0b"}, - {file = "rpds_py-0.28.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cf681ac76a60b667106141e11a92a3330890257e6f559ca995fbb5265160b56e"}, - {file = "rpds_py-0.28.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1e8ee6413cfc677ce8898d9cde18cc3a60fc2ba756b0dec5b71eb6eb21c49fa1"}, - {file = "rpds_py-0.28.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:b3072b16904d0b5572a15eb9d31c1954e0d3227a585fc1351aa9878729099d6c"}, - {file = "rpds_py-0.28.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b670c30fd87a6aec281c3c9896d3bae4b205fd75d79d06dc87c2503717e46092"}, - {file = "rpds_py-0.28.0-cp314-cp314t-win32.whl", hash = "sha256:8014045a15b4d2b3476f0a287fcc93d4f823472d7d1308d47884ecac9e612be3"}, - {file = "rpds_py-0.28.0-cp314-cp314t-win_amd64.whl", hash = "sha256:7a4e59c90d9c27c561eb3160323634a9ff50b04e4f7820600a2beb0ac90db578"}, - {file = "rpds_py-0.28.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f5e7101145427087e493b9c9b959da68d357c28c562792300dd21a095118ed16"}, - {file = "rpds_py-0.28.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:31eb671150b9c62409a888850aaa8e6533635704fe2b78335f9aaf7ff81eec4d"}, - {file = "rpds_py-0.28.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48b55c1f64482f7d8bd39942f376bfdf2f6aec637ee8c805b5041e14eeb771db"}, - {file = "rpds_py-0.28.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:24743a7b372e9a76171f6b69c01aedf927e8ac3e16c474d9fe20d552a8cb45c7"}, - {file = "rpds_py-0.28.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:389c29045ee8bbb1627ea190b4976a310a295559eaf9f1464a1a6f2bf84dde78"}, - {file = "rpds_py-0.28.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:23690b5827e643150cf7b49569679ec13fe9a610a15949ed48b85eb7f98f34ec"}, - {file = "rpds_py-0.28.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f0c9266c26580e7243ad0d72fc3e01d6b33866cfab5084a6da7576bcf1c4f72"}, - {file = "rpds_py-0.28.0-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:4c6c4db5d73d179746951486df97fd25e92396be07fc29ee8ff9a8f5afbdfb27"}, - {file = "rpds_py-0.28.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a3b695a8fa799dd2cfdb4804b37096c5f6dba1ac7f48a7fbf6d0485bcd060316"}, - {file = "rpds_py-0.28.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:6aa1bfce3f83baf00d9c5fcdbba93a3ab79958b4c7d7d1f55e7fe68c20e63912"}, - {file = "rpds_py-0.28.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:7b0f9dceb221792b3ee6acb5438eb1f02b0cb2c247796a72b016dcc92c6de829"}, - {file = "rpds_py-0.28.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:5d0145edba8abd3db0ab22b5300c99dc152f5c9021fab861be0f0544dc3cbc5f"}, - {file = "rpds_py-0.28.0.tar.gz", hash = "sha256:abd4df20485a0983e2ca334a216249b6186d6e3c1627e106651943dbdb791aea"}, + {file = "rpds_py-2026.6.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:7b689145a1485c335569bd056464f3243a29af7ed3871c7be31ad624ba239bc7"}, + {file = "rpds_py-2026.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:db08f45aecde626498fb3df07bcf6d2ec040af42e859a4f5040d79c200342911"}, + {file = "rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:acc992ab27b15f852c76755eb2ab7dce86585ddadba6fa5946e58556088845b4"}, + {file = "rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f88d653e7b3b779d71ae7454e20dcc9b6bae903f33c269db9f2be41bda3f261"}, + {file = "rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e52655eaf81e32593abedaa4bfe33170c8cfedf3365ed9be6e11e07f148f0278"}, + {file = "rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dfcc8b909769d19db55c7cc9541eb64b9b774b1057ffffb4f1048070475bb9f9"}, + {file = "rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c1255b302953c86a486b81d330d5ee1d5bd937691ce271b6be0ef0e299eaab7"}, + {file = "rpds_py-2026.6.3-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:8d2294a31386bfa251d8c8a39472beee17db67d4f1a6eabea665d35c9a4461c3"}, + {file = "rpds_py-2026.6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f8f23ead891a3b762f35ab3b04623da7056545b48aa60d59957e6789914545da"}, + {file = "rpds_py-2026.6.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:421aba32367055614287a4292b6a17f1939c9452299f7a0209c117e990b646d4"}, + {file = "rpds_py-2026.6.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1e5822dfc2f0d4ab7e745eaa6d85945069329beeccef965af3f3bb26058fcab6"}, + {file = "rpds_py-2026.6.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:83e35b57523816c8613fd0776b40cd8bb9f596b37ddd2692eb4a6bb5ab2f8c93"}, + {file = "rpds_py-2026.6.3-cp311-cp311-win32.whl", hash = "sha256:de3eceba0b683bcbb1ab93da016d0270df1f9ae7be716b40214c5dafac6ea45a"}, + {file = "rpds_py-2026.6.3-cp311-cp311-win_amd64.whl", hash = "sha256:2c54a076ca4d370980ab57bc0e31df57bbe8d41340436a90ef8b1219a3cbb127"}, + {file = "rpds_py-2026.6.3-cp311-cp311-win_arm64.whl", hash = "sha256:168c733a7112e071bb7a66460e667edfcff06c017a3c523f7a8a8e08d0140804"}, + {file = "rpds_py-2026.6.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a0811d33247c3d6128a3001d763f2aa056bb3425204335400ac54f89eec3a0d0"}, + {file = "rpds_py-2026.6.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:538949e262e46caa31ac01bdb3c1e8f642622922cacbabbae6a8445d9dc33eaf"}, + {file = "rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55927d532399c2c646100ff7feb48eaa940ad70f42cd68e1328f3ded9f81ca24"}, + {file = "rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f56f1695bc5c0871cbc33dc0130fcf503aab0c57dcc5a6700a4f49eba4f2652e"}, + {file = "rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:270b293dae9058fc9fcedab50f13cebf46fb8ed1d1d54e0521a9da5d6b211975"}, + {file = "rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:127565fead0a10943b282957bd5447804ff3160ad79f2ad2635e6d249e380680"}, + {file = "rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecabd69db66de867690f9797f2f8fa27ba501bbc24540cbdbdc649cd15888ba6"}, + {file = "rpds_py-2026.6.3-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:58eadac9cd119677b60e1cf8ac4052f35949d71b8a9e5556efccbe82533cf22a"}, + {file = "rpds_py-2026.6.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7491ee23305ac3eb59e492b6945881f5cd77a6f731061a3f25b77fd40f9e99a4"}, + {file = "rpds_py-2026.6.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2c99f7e8ccb3dd6e3e4bfeac657a7b208c9bac8075f4b078c02d7404c34107fa"}, + {file = "rpds_py-2026.6.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:62698275682bf121181861295c9181e789030a2d516071f5b8f3c23c170cd0fc"}, + {file = "rpds_py-2026.6.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a214c993455f99a89aaeadc9b21241900037adc9d97203e374d75513c5911822"}, + {file = "rpds_py-2026.6.3-cp312-cp312-win32.whl", hash = "sha256:501f9f04a588d6a09179368c57071301445191767c64e4b52a6aa9871f1ef5ed"}, + {file = "rpds_py-2026.6.3-cp312-cp312-win_amd64.whl", hash = "sha256:2c958bf94822e9290a40aaf2a822d4bc5c88099093e3948ad6c571eca9272e5f"}, + {file = "rpds_py-2026.6.3-cp312-cp312-win_arm64.whl", hash = "sha256:22bffe6042b9bcb0822bcd1955ec00e245daf17b4344e4ed8e9551b976b63e96"}, + {file = "rpds_py-2026.6.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:3cfe765c1da0072636ca06628261e0ea05688e160d5c8a03e0217c3854037223"}, + {file = "rpds_py-2026.6.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f4d78253f6996be4901669ad25319f842f740eccf4d58e3c7f3dd39e6dde1d8f"}, + {file = "rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54f45a148e28767bf343d33a684693c70e451c6f4c0e9904709a723fafbdfc1f"}, + {file = "rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:842e7b070435622248c7a2c44ae53fa1440e073cc3023bc919fed570884097a7"}, + {file = "rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8020133a74bd81b4572dd8e4be028a6b1ebcd70e6726edc3918008c08bee6ee6"}, + {file = "rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cdc7e35386f3847df728fbcb5e887e2d79c19e2fa1eba9e51b6621d23e3243af"}, + {file = "rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acac386b453c2516111b50985d60ce46e7fadb5ea71ae7b25f4c946935bf27cf"}, + {file = "rpds_py-2026.6.3-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:425560c6fa0415f27261727bb20bd097568485e5eb0c121f1949417d1c516885"}, + {file = "rpds_py-2026.6.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a550fb4950a06dde3beb4721f5ad4b25bf4513784665b0a8522c792e2bd822a4"}, + {file = "rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4f4bca01b63096f606e095734dd56e74e175f94cfbf24ff3d63281cec61f7bb7"}, + {file = "rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ccffae9a092a00deb7efd545fe5e2c33c33b88e7c054337e9a74c179347d0b7d"}, + {file = "rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1cf01971c4f2c5553b772a542e4aaf191789cd331bc2cd4ff0e6e65ba49e1e97"}, + {file = "rpds_py-2026.6.3-cp313-cp313-win32.whl", hash = "sha256:8c3d1e9c15b9d51ca0391e13da1a25a0a4df3c58a37c9dc368e0736cf7f69df0"}, + {file = "rpds_py-2026.6.3-cp313-cp313-win_amd64.whl", hash = "sha256:9250a9a0a6fd4648b3f868da8d91a4c52b5811a62df58e753d50ae4454a36f80"}, + {file = "rpds_py-2026.6.3-cp313-cp313-win_arm64.whl", hash = "sha256:900a67df3fd1660b035a4761c4ce73c382ea6b35f90f9863c36c6fd8bf8b09bb"}, + {file = "rpds_py-2026.6.3-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:931908d9fc855d8f74783377822be318edb6dcb19e47169dc038f9a1bf60b06e"}, + {file = "rpds_py-2026.6.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d7469697dce35be237db177d42e2a2ee26e6dcc5fc052078a6fefabd288c6edd"}, + {file = "rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bcfbcf66006befb9fd2aeaa9e01feaf881b4dc330a02ba07d2322b1c11be7b5d"}, + {file = "rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:847927daf4cffbd4e90e42bc890069897101edd015f956cb8721b3473372edda"}, + {file = "rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aca6c1ef08a82bfe327cc156da694660f599923e2e6665b6d81c9c2d0ac9ffc8"}, + {file = "rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ae50181a047c871561212bb97f7932a2d45fb53e947bd9b57ebad85b529cbc53"}, + {file = "rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc319e5a1de4b6913aac94bf6a2f9e847371e0a140a43dd4991db1a09bc2d504"}, + {file = "rpds_py-2026.6.3-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:e4316bf32babbed84e691e352faf967ce2f0f024174a8643c37c94a1080374fc"}, + {file = "rpds_py-2026.6.3-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8c6e5a2f750cc71c3e3b11d71661f21d6f9bc6cebc6564b1466417a1ec03ec77"}, + {file = "rpds_py-2026.6.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4470ce197d4090875cf6affbf1f853338387428df97c4fb7b7106317b8214698"}, + {file = "rpds_py-2026.6.3-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ea964164cc9afa72d4d9b23cc28dafae93693c0a53e0b42acbff15b22c3f9ddd"}, + {file = "rpds_py-2026.6.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:639c8929aa0afe81be836b04de888460d6bed38b9c54cfc18da8f6bfabf5af5d"}, + {file = "rpds_py-2026.6.3-cp314-cp314-win32.whl", hash = "sha256:882076c00c0a608b131187055ddc5ae29f2e7eaf870d6168980420d58528a5c8"}, + {file = "rpds_py-2026.6.3-cp314-cp314-win_amd64.whl", hash = "sha256:0be972be84cfcaf46c8c6edf690ca0f154ac17babf1f6a955a51579b34ad2dc5"}, + {file = "rpds_py-2026.6.3-cp314-cp314-win_arm64.whl", hash = "sha256:2a9c6f195058cb45335e8cc3802745c603d716eb96bc9625950c1aac71c0c703"}, + {file = "rpds_py-2026.6.3-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:f90938e92afda60266da758ee7d363447f7f0138c9559f9e1811629580582d90"}, + {file = "rpds_py-2026.6.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ec829541c45bca16e61c7ae50c20501f213605beb75d1aba91a6ee37fbbb56a4"}, + {file = "rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afd70d95892096cdb26f15a00c45907b17817577aa8d1c76b2dcc2788391f9e9"}, + {file = "rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:29dfa0533a5d4c94d4dfa1b694fcb56c9c63aad8330ffdd816fd225d0a7a162f"}, + {file = "rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:af05d726809bff6b141be124d4c7ce998f9c9c7f30edb1f46c07aa103d540b41"}, + {file = "rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9826217f048f620d9a712672818bf231442c1b35d96b227a07eabd11b4bb6945"}, + {file = "rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:536bceea4fa4acf7e1c61da2b5786304367c816c8895be71b8f537c480b0ea1f"}, + {file = "rpds_py-2026.6.3-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:bc0011654b91cc4fb2ae701bec0a0ba1e552c0714247fa7af6c59e0ccfa3a4e1"}, + {file = "rpds_py-2026.6.3-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:539d75de9e0d536c84ff18dfeb805398e58227001ce09231a26a08b9aed1ee0e"}, + {file = "rpds_py-2026.6.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:166cf54d9f44fc6ceb53c7860258dde44a81406646de79f8ed3234fca3b6e538"}, + {file = "rpds_py-2026.6.3-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:d34c20167764fbcf927194d532dd7e0c56772f0a5f943fa5ef9e9afbba8fb9db"}, + {file = "rpds_py-2026.6.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ea7bb13b7c9a29791f87a0387ba7d3ad3a6d783d827e4d3f27b40a0ff44495e2"}, + {file = "rpds_py-2026.6.3-cp314-cp314t-win32.whl", hash = "sha256:6de4744d05bd1aa1be4ed7ea1189e3979196808008113bbbf899a460966b925e"}, + {file = "rpds_py-2026.6.3-cp314-cp314t-win_amd64.whl", hash = "sha256:c7b9a2f8f4d8e90af72571d3d495deebdd7e3c75451f5b41719aee166e940fc2"}, + {file = "rpds_py-2026.6.3-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:e059c5dde6452b44424bd1834557556c226b57781dee1227af23518459722b13"}, + {file = "rpds_py-2026.6.3-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:2f7c26fbc5acd2522b95d4177fe4710ffd8e9b20529e703ffbf8db4d93903f05"}, + {file = "rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3086b538543802f84c843911242db20447de00d8752dd0efc936dbcf02218ba"}, + {file = "rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8f2e5c5ee828d42cb11760761c0af6507927bec42d0ad5458f97c9203b054617"}, + {file = "rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed0c1e5d10cdc7135537988c74a0188da68e2f3c30813ba3744ab1e42e0480f9"}, + {file = "rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c2642a7603ec0b16ed77da4555db3b4b472341904873788327c0b0d7b95f1bb"}, + {file = "rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e4320744c1ffdd95a603def63344bfab2d33edeab301c5007e7de9f9f5b3885"}, + {file = "rpds_py-2026.6.3-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:a9f4645593036b81bbdb36b9c8e0ea0d1c3fee968c4d59db0344c14087ef143a"}, + {file = "rpds_py-2026.6.3-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e55d236be29255554da47abe5c577637db7c24a02b8b46f0ca9524c855801868"}, + {file = "rpds_py-2026.6.3-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:24e9c5386e16669b674a69c156c8eeefcb578f3b3397b713b08e6d60f3c7b187"}, + {file = "rpds_py-2026.6.3-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:c60924535c75f1566b6eb75b5c31a48a43fef04fa2d0d201acbad8a9969c6107"}, + {file = "rpds_py-2026.6.3-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:38a2fea2787428f811719ceb9114cb78964a3138838320c29ac39526c79c16ba"}, + {file = "rpds_py-2026.6.3-cp315-cp315-win32.whl", hash = "sha256:d483fe17f01ad64b7bf7cc38fcefff1ca9fb83f8c2b2542b68f97ffe0611b369"}, + {file = "rpds_py-2026.6.3-cp315-cp315-win_amd64.whl", hash = "sha256:67e3a721ffc5d8d2210d3671872298c4a84e4b8035cfe42ffd7cde35d772b146"}, + {file = "rpds_py-2026.6.3-cp315-cp315-win_arm64.whl", hash = "sha256:6e84adbcf4bf841aed8116a8264b9f50b4cb3e7bd89b516122e616ac56ca269e"}, + {file = "rpds_py-2026.6.3-cp315-cp315t-macosx_10_12_x86_64.whl", hash = "sha256:ae6dd8f10bd17aad820876d24caec9efdafd80a318d16c0a48edb5e136902c6b"}, + {file = "rpds_py-2026.6.3-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:bdbd97738551fca3917c1bd7188bec1920bb520104f28e7e1007f9ceb17b7690"}, + {file = "rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b95977e7211527ab0ba576e286d023389fbeeb32a6b7b771665d333c60e5342"}, + {file = "rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d15fde0e6fb0d88a60d221204873743e5d9f0b7d29165e62cd86d0413ad74ba6"}, + {file = "rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a136d453475ac0fcbda502ef1e6504bd28d6d904700915d278deeab0d00fe140"}, + {file = "rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f826877d462181e5eb1c26a0026b8d0cab05d99844ecb6d8bf3627a2ca0c0442"}, + {file = "rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79486287de1730dbaff3dbd124d0ca4d2ef7f9d29bf2544f1f93c09b5bcbbd12"}, + {file = "rpds_py-2026.6.3-cp315-cp315t-manylinux_2_31_riscv64.whl", hash = "sha256:808345f53cb952433ca2816f1604ff3515608a81784954f38d4452acfe8e61d5"}, + {file = "rpds_py-2026.6.3-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1967debc37f64f2c4dc90a7f563aec558b471966e12adcac4e1c4240496b6ebf"}, + {file = "rpds_py-2026.6.3-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:f0840b5b17057f7fd918b76183a4b5a0635f43e14eb2ce60dce1d4ee4707ea00"}, + {file = "rpds_py-2026.6.3-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:faa679d19a6696fd54259ad321251ad77a13e70e03dd834daa762a44fb6196ef"}, + {file = "rpds_py-2026.6.3-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:23a439f31ccbeff1574e24889128821d1f7917470e830cf6544dced1c662262a"}, + {file = "rpds_py-2026.6.3-cp315-cp315t-win32.whl", hash = "sha256:913ca42ccad3f8cc6e292b587ae8ae49c8c823e5dce51a736252fc7c7cdfa577"}, + {file = "rpds_py-2026.6.3-cp315-cp315t-win_amd64.whl", hash = "sha256:ae3d4fe8c0b9213624fdce7279d70e3b148b682ca20719ebd193a23ebfa47324"}, + {file = "rpds_py-2026.6.3-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:4cf2d36a2357e4d07bb5a4f98801265327b48256867816cfd2ceb001e9754a8f"}, + {file = "rpds_py-2026.6.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:30c6dc199b24a5e3e81d50da0f00858c5bbdb2617a750395687f4339c5818171"}, + {file = "rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9891e594296ab9dada6551c8e7b387b2721f27a67eecd528412e8906247a7b90"}, + {file = "rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b5c2dc92304aa48a4a60443b548bb12f12e119d4b72f314015e67b9e1be97fca"}, + {file = "rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:127e08c0642d880cf32ca47ec2a4a77b901f7e2dd1ad9762adb13955d72ffcc9"}, + {file = "rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8bb68f03f395eb793220b45c097bd4d8c32944393da0fad8b999efac0868fc8c"}, + {file = "rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3450b693fde92133e9f51060568a4c31fcca76d5e53bbd611e689ca446517e9"}, + {file = "rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:5e8d07bddee435a2ff6f1920e18feff28d0bc4533e42f4bf6927fbd073312c41"}, + {file = "rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3a83ae6c67b7676b9878378547ca8e93ed77a580037bcbcd1d32f739e1e6089c"}, + {file = "rpds_py-2026.6.3-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2bfd04c19ddbd6640de0b51894d764bd2758854d5b75bd102d2ef10cb9c293a9"}, + {file = "rpds_py-2026.6.3-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:ca6546b66be9dc4738b1b043d5ebd5488c66c578c5ff0fd0e8065313fe3afb76"}, + {file = "rpds_py-2026.6.3-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8e65860d238379ed982fd9ba690579b5e95af2f4840f99c772816dbe573cb826"}, + {file = "rpds_py-2026.6.3.tar.gz", hash = "sha256:1cebd1337c242e4ec2293e541f712b2da849b29f48f0c293684b71c0632625d4"}, ] [[package]] @@ -3580,165 +4105,224 @@ files = [ [[package]] name = "scipy" -version = "1.13.1" +version = "1.15.3" description = "Fundamental algorithms for scientific computing in Python" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["main", "floris"] markers = "python_version < \"3.11\"" files = [ - {file = "scipy-1.13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:20335853b85e9a49ff7572ab453794298bcf0354d8068c5f6775a0eabf350aca"}, - {file = "scipy-1.13.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d605e9c23906d1994f55ace80e0125c587f96c020037ea6aa98d01b4bd2e222f"}, - {file = "scipy-1.13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfa31f1def5c819b19ecc3a8b52d28ffdcc7ed52bb20c9a7589669dd3c250989"}, - {file = "scipy-1.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26264b282b9da0952a024ae34710c2aff7d27480ee91a2e82b7b7073c24722f"}, - {file = "scipy-1.13.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:eccfa1906eacc02de42d70ef4aecea45415f5be17e72b61bafcfd329bdc52e94"}, - {file = "scipy-1.13.1-cp310-cp310-win_amd64.whl", hash = "sha256:2831f0dc9c5ea9edd6e51e6e769b655f08ec6db6e2e10f86ef39bd32eb11da54"}, - {file = "scipy-1.13.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:27e52b09c0d3a1d5b63e1105f24177e544a222b43611aaf5bc44d4a0979e32f9"}, - {file = "scipy-1.13.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:54f430b00f0133e2224c3ba42b805bfd0086fe488835effa33fa291561932326"}, - {file = "scipy-1.13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e89369d27f9e7b0884ae559a3a956e77c02114cc60a6058b4e5011572eea9299"}, - {file = "scipy-1.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a78b4b3345f1b6f68a763c6e25c0c9a23a9fd0f39f5f3d200efe8feda560a5fa"}, - {file = "scipy-1.13.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45484bee6d65633752c490404513b9ef02475b4284c4cfab0ef946def50b3f59"}, - {file = "scipy-1.13.1-cp311-cp311-win_amd64.whl", hash = "sha256:5713f62f781eebd8d597eb3f88b8bf9274e79eeabf63afb4a737abc6c84ad37b"}, - {file = "scipy-1.13.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5d72782f39716b2b3509cd7c33cdc08c96f2f4d2b06d51e52fb45a19ca0c86a1"}, - {file = "scipy-1.13.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:017367484ce5498445aade74b1d5ab377acdc65e27095155e448c88497755a5d"}, - {file = "scipy-1.13.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:949ae67db5fa78a86e8fa644b9a6b07252f449dcf74247108c50e1d20d2b4627"}, - {file = "scipy-1.13.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de3ade0e53bc1f21358aa74ff4830235d716211d7d077e340c7349bc3542e884"}, - {file = "scipy-1.13.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2ac65fb503dad64218c228e2dc2d0a0193f7904747db43014645ae139c8fad16"}, - {file = "scipy-1.13.1-cp312-cp312-win_amd64.whl", hash = "sha256:cdd7dacfb95fea358916410ec61bbc20440f7860333aee6d882bb8046264e949"}, - {file = "scipy-1.13.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:436bbb42a94a8aeef855d755ce5a465479c721e9d684de76bf61a62e7c2b81d5"}, - {file = "scipy-1.13.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:8335549ebbca860c52bf3d02f80784e91a004b71b059e3eea9678ba994796a24"}, - {file = "scipy-1.13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d533654b7d221a6a97304ab63c41c96473ff04459e404b83275b60aa8f4b7004"}, - {file = "scipy-1.13.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637e98dcf185ba7f8e663e122ebf908c4702420477ae52a04f9908707456ba4d"}, - {file = "scipy-1.13.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a014c2b3697bde71724244f63de2476925596c24285c7a637364761f8710891c"}, - {file = "scipy-1.13.1-cp39-cp39-win_amd64.whl", hash = "sha256:392e4ec766654852c25ebad4f64e4e584cf19820b980bc04960bca0b0cd6eaa2"}, - {file = "scipy-1.13.1.tar.gz", hash = "sha256:095a87a0312b08dfd6a6155cbbd310a8c51800fc931b8c0b84003014b874ed3c"}, + {file = "scipy-1.15.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:a345928c86d535060c9c2b25e71e87c39ab2f22fc96e9636bd74d1dbf9de448c"}, + {file = "scipy-1.15.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:ad3432cb0f9ed87477a8d97f03b763fd1d57709f1bbde3c9369b1dff5503b253"}, + {file = "scipy-1.15.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:aef683a9ae6eb00728a542b796f52a5477b78252edede72b8327a886ab63293f"}, + {file = "scipy-1.15.3-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:1c832e1bd78dea67d5c16f786681b28dd695a8cb1fb90af2e27580d3d0967e92"}, + {file = "scipy-1.15.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:263961f658ce2165bbd7b99fa5135195c3a12d9bef045345016b8b50c315cb82"}, + {file = "scipy-1.15.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e2abc762b0811e09a0d3258abee2d98e0c703eee49464ce0069590846f31d40"}, + {file = "scipy-1.15.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ed7284b21a7a0c8f1b6e5977ac05396c0d008b89e05498c8b7e8f4a1423bba0e"}, + {file = "scipy-1.15.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5380741e53df2c566f4d234b100a484b420af85deb39ea35a1cc1be84ff53a5c"}, + {file = "scipy-1.15.3-cp310-cp310-win_amd64.whl", hash = "sha256:9d61e97b186a57350f6d6fd72640f9e99d5a4a2b8fbf4b9ee9a841eab327dc13"}, + {file = "scipy-1.15.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:993439ce220d25e3696d1b23b233dd010169b62f6456488567e830654ee37a6b"}, + {file = "scipy-1.15.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:34716e281f181a02341ddeaad584205bd2fd3c242063bd3423d61ac259ca7eba"}, + {file = "scipy-1.15.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3b0334816afb8b91dab859281b1b9786934392aa3d527cd847e41bb6f45bee65"}, + {file = "scipy-1.15.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:6db907c7368e3092e24919b5e31c76998b0ce1684d51a90943cb0ed1b4ffd6c1"}, + {file = "scipy-1.15.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:721d6b4ef5dc82ca8968c25b111e307083d7ca9091bc38163fb89243e85e3889"}, + {file = "scipy-1.15.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39cb9c62e471b1bb3750066ecc3a3f3052b37751c7c3dfd0fd7e48900ed52982"}, + {file = "scipy-1.15.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:795c46999bae845966368a3c013e0e00947932d68e235702b5c3f6ea799aa8c9"}, + {file = "scipy-1.15.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:18aaacb735ab38b38db42cb01f6b92a2d0d4b6aabefeb07f02849e47f8fb3594"}, + {file = "scipy-1.15.3-cp311-cp311-win_amd64.whl", hash = "sha256:ae48a786a28412d744c62fd7816a4118ef97e5be0bee968ce8f0a2fba7acf3bb"}, + {file = "scipy-1.15.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6ac6310fdbfb7aa6612408bd2f07295bcbd3fda00d2d702178434751fe48e019"}, + {file = "scipy-1.15.3-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:185cd3d6d05ca4b44a8f1595af87f9c372bb6acf9c808e99aa3e9aa03bd98cf6"}, + {file = "scipy-1.15.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:05dc6abcd105e1a29f95eada46d4a3f251743cfd7d3ae8ddb4088047f24ea477"}, + {file = "scipy-1.15.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:06efcba926324df1696931a57a176c80848ccd67ce6ad020c810736bfd58eb1c"}, + {file = "scipy-1.15.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05045d8b9bfd807ee1b9f38761993297b10b245f012b11b13b91ba8945f7e45"}, + {file = "scipy-1.15.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:271e3713e645149ea5ea3e97b57fdab61ce61333f97cfae392c28ba786f9bb49"}, + {file = "scipy-1.15.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6cfd56fc1a8e53f6e89ba3a7a7251f7396412d655bca2aa5611c8ec9a6784a1e"}, + {file = "scipy-1.15.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0ff17c0bb1cb32952c09217d8d1eed9b53d1463e5f1dd6052c7857f83127d539"}, + {file = "scipy-1.15.3-cp312-cp312-win_amd64.whl", hash = "sha256:52092bc0472cfd17df49ff17e70624345efece4e1a12b23783a1ac59a1b728ed"}, + {file = "scipy-1.15.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2c620736bcc334782e24d173c0fdbb7590a0a436d2fdf39310a8902505008759"}, + {file = "scipy-1.15.3-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:7e11270a000969409d37ed399585ee530b9ef6aa99d50c019de4cb01e8e54e62"}, + {file = "scipy-1.15.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8c9ed3ba2c8a2ce098163a9bdb26f891746d02136995df25227a20e71c396ebb"}, + {file = "scipy-1.15.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:0bdd905264c0c9cfa74a4772cdb2070171790381a5c4d312c973382fc6eaf730"}, + {file = "scipy-1.15.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79167bba085c31f38603e11a267d862957cbb3ce018d8b38f79ac043bc92d825"}, + {file = "scipy-1.15.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9deabd6d547aee2c9a81dee6cc96c6d7e9a9b1953f74850c179f91fdc729cb7"}, + {file = "scipy-1.15.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dde4fc32993071ac0c7dd2d82569e544f0bdaff66269cb475e0f369adad13f11"}, + {file = "scipy-1.15.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f77f853d584e72e874d87357ad70f44b437331507d1c311457bed8ed2b956126"}, + {file = "scipy-1.15.3-cp313-cp313-win_amd64.whl", hash = "sha256:b90ab29d0c37ec9bf55424c064312930ca5f4bde15ee8619ee44e69319aab163"}, + {file = "scipy-1.15.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3ac07623267feb3ae308487c260ac684b32ea35fd81e12845039952f558047b8"}, + {file = "scipy-1.15.3-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:6487aa99c2a3d509a5227d9a5e889ff05830a06b2ce08ec30df6d79db5fcd5c5"}, + {file = "scipy-1.15.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:50f9e62461c95d933d5c5ef4a1f2ebf9a2b4e83b0db374cb3f1de104d935922e"}, + {file = "scipy-1.15.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:14ed70039d182f411ffc74789a16df3835e05dc469b898233a245cdfd7f162cb"}, + {file = "scipy-1.15.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a769105537aa07a69468a0eefcd121be52006db61cdd8cac8a0e68980bbb723"}, + {file = "scipy-1.15.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9db984639887e3dffb3928d118145ffe40eff2fa40cb241a306ec57c219ebbbb"}, + {file = "scipy-1.15.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:40e54d5c7e7ebf1aa596c374c49fa3135f04648a0caabcb66c52884b943f02b4"}, + {file = "scipy-1.15.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5e721fed53187e71d0ccf382b6bf977644c533e506c4d33c3fb24de89f5c3ed5"}, + {file = "scipy-1.15.3-cp313-cp313t-win_amd64.whl", hash = "sha256:76ad1fb5f8752eabf0fa02e4cc0336b4e8f021e2d5f061ed37d6d264db35e3ca"}, + {file = "scipy-1.15.3.tar.gz", hash = "sha256:eae3cf522bc7df64b42cad3925c876e1b0b6c35c1337c93e12c0f366f55b0eaf"}, ] [package.dependencies] -numpy = ">=1.22.4,<2.3" +numpy = ">=1.23.5,<2.5" [package.extras] -dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] -doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.12.0)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0)", "sphinx-design (>=0.4.0)"] -test = ["array-api-strict", "asv", "gmpy2", "hypothesis (>=6.30)", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] +dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy (==1.10.0)", "pycodestyle", "pydevtool", "rich-click", "ruff (>=0.0.292)", "types-psutil", "typing_extensions"] +doc = ["intersphinx_registry", "jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.19.1)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0,<8.0.0)", "sphinx-copybutton", "sphinx-design (>=0.4.0)"] +test = ["Cython", "array-api-strict (>=2.0,<2.1.1)", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja ; sys_platform != \"emscripten\"", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] [[package]] name = "scipy" -version = "1.16.3" +version = "1.17.1" description = "Fundamental algorithms for scientific computing in Python" optional = false python-versions = ">=3.11" groups = ["main", "floris"] -markers = "python_version >= \"3.11\"" -files = [ - {file = "scipy-1.16.3-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:40be6cf99e68b6c4321e9f8782e7d5ff8265af28ef2cd56e9c9b2638fa08ad97"}, - {file = "scipy-1.16.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:8be1ca9170fcb6223cc7c27f4305d680ded114a1567c0bd2bfcbf947d1b17511"}, - {file = "scipy-1.16.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:bea0a62734d20d67608660f69dcda23e7f90fb4ca20974ab80b6ed40df87a005"}, - {file = "scipy-1.16.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:2a207a6ce9c24f1951241f4693ede2d393f59c07abc159b2cb2be980820e01fb"}, - {file = "scipy-1.16.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:532fb5ad6a87e9e9cd9c959b106b73145a03f04c7d57ea3e6f6bb60b86ab0876"}, - {file = "scipy-1.16.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0151a0749efeaaab78711c78422d413c583b8cdd2011a3c1d6c794938ee9fdb2"}, - {file = "scipy-1.16.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b7180967113560cca57418a7bc719e30366b47959dd845a93206fbed693c867e"}, - {file = "scipy-1.16.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:deb3841c925eeddb6afc1e4e4a45e418d19ec7b87c5df177695224078e8ec733"}, - {file = "scipy-1.16.3-cp311-cp311-win_amd64.whl", hash = "sha256:53c3844d527213631e886621df5695d35e4f6a75f620dca412bcd292f6b87d78"}, - {file = "scipy-1.16.3-cp311-cp311-win_arm64.whl", hash = "sha256:9452781bd879b14b6f055b26643703551320aa8d79ae064a71df55c00286a184"}, - {file = "scipy-1.16.3-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:81fc5827606858cf71446a5e98715ba0e11f0dbc83d71c7409d05486592a45d6"}, - {file = "scipy-1.16.3-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:c97176013d404c7346bf57874eaac5187d969293bf40497140b0a2b2b7482e07"}, - {file = "scipy-1.16.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:2b71d93c8a9936046866acebc915e2af2e292b883ed6e2cbe5c34beb094b82d9"}, - {file = "scipy-1.16.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:3d4a07a8e785d80289dfe66b7c27d8634a773020742ec7187b85ccc4b0e7b686"}, - {file = "scipy-1.16.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0553371015692a898e1aa858fed67a3576c34edefa6b7ebdb4e9dde49ce5c203"}, - {file = "scipy-1.16.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:72d1717fd3b5e6ec747327ce9bda32d5463f472c9dce9f54499e81fbd50245a1"}, - {file = "scipy-1.16.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1fb2472e72e24d1530debe6ae078db70fb1605350c88a3d14bc401d6306dbffe"}, - {file = "scipy-1.16.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c5192722cffe15f9329a3948c4b1db789fbb1f05c97899187dcf009b283aea70"}, - {file = "scipy-1.16.3-cp312-cp312-win_amd64.whl", hash = "sha256:56edc65510d1331dae01ef9b658d428e33ed48b4f77b1d51caf479a0253f96dc"}, - {file = "scipy-1.16.3-cp312-cp312-win_arm64.whl", hash = "sha256:a8a26c78ef223d3e30920ef759e25625a0ecdd0d60e5a8818b7513c3e5384cf2"}, - {file = "scipy-1.16.3-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:d2ec56337675e61b312179a1ad124f5f570c00f920cc75e1000025451b88241c"}, - {file = "scipy-1.16.3-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:16b8bc35a4cc24db80a0ec836a9286d0e31b2503cb2fd7ff7fb0e0374a97081d"}, - {file = "scipy-1.16.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:5803c5fadd29de0cf27fa08ccbfe7a9e5d741bf63e4ab1085437266f12460ff9"}, - {file = "scipy-1.16.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:b81c27fc41954319a943d43b20e07c40bdcd3ff7cf013f4fb86286faefe546c4"}, - {file = "scipy-1.16.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0c3b4dd3d9b08dbce0f3440032c52e9e2ab9f96ade2d3943313dfe51a7056959"}, - {file = "scipy-1.16.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7dc1360c06535ea6116a2220f760ae572db9f661aba2d88074fe30ec2aa1ff88"}, - {file = "scipy-1.16.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:663b8d66a8748051c3ee9c96465fb417509315b99c71550fda2591d7dd634234"}, - {file = "scipy-1.16.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eab43fae33a0c39006a88096cd7b4f4ef545ea0447d250d5ac18202d40b6611d"}, - {file = "scipy-1.16.3-cp313-cp313-win_amd64.whl", hash = "sha256:062246acacbe9f8210de8e751b16fc37458213f124bef161a5a02c7a39284304"}, - {file = "scipy-1.16.3-cp313-cp313-win_arm64.whl", hash = "sha256:50a3dbf286dbc7d84f176f9a1574c705f277cb6565069f88f60db9eafdbe3ee2"}, - {file = "scipy-1.16.3-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:fb4b29f4cf8cc5a8d628bc8d8e26d12d7278cd1f219f22698a378c3d67db5e4b"}, - {file = "scipy-1.16.3-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:8d09d72dc92742988b0e7750bddb8060b0c7079606c0d24a8cc8e9c9c11f9079"}, - {file = "scipy-1.16.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:03192a35e661470197556de24e7cb1330d84b35b94ead65c46ad6f16f6b28f2a"}, - {file = "scipy-1.16.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:57d01cb6f85e34f0946b33caa66e892aae072b64b034183f3d87c4025802a119"}, - {file = "scipy-1.16.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:96491a6a54e995f00a28a3c3badfff58fd093bf26cd5fb34a2188c8c756a3a2c"}, - {file = "scipy-1.16.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cd13e354df9938598af2be05822c323e97132d5e6306b83a3b4ee6724c6e522e"}, - {file = "scipy-1.16.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:63d3cdacb8a824a295191a723ee5e4ea7768ca5ca5f2838532d9f2e2b3ce2135"}, - {file = "scipy-1.16.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e7efa2681ea410b10dde31a52b18b0154d66f2485328830e45fdf183af5aefc6"}, - {file = "scipy-1.16.3-cp313-cp313t-win_amd64.whl", hash = "sha256:2d1ae2cf0c350e7705168ff2429962a89ad90c2d49d1dd300686d8b2a5af22fc"}, - {file = "scipy-1.16.3-cp313-cp313t-win_arm64.whl", hash = "sha256:0c623a54f7b79dd88ef56da19bc2873afec9673a48f3b85b18e4d402bdd29a5a"}, - {file = "scipy-1.16.3-cp314-cp314-macosx_10_14_x86_64.whl", hash = "sha256:875555ce62743e1d54f06cdf22c1e0bc47b91130ac40fe5d783b6dfa114beeb6"}, - {file = "scipy-1.16.3-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:bb61878c18a470021fb515a843dc7a76961a8daceaaaa8bad1332f1bf4b54657"}, - {file = "scipy-1.16.3-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:f2622206f5559784fa5c4b53a950c3c7c1cf3e84ca1b9c4b6c03f062f289ca26"}, - {file = "scipy-1.16.3-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:7f68154688c515cdb541a31ef8eb66d8cd1050605be9dcd74199cbd22ac739bc"}, - {file = "scipy-1.16.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8b3c820ddb80029fe9f43d61b81d8b488d3ef8ca010d15122b152db77dc94c22"}, - {file = "scipy-1.16.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d3837938ae715fc0fe3c39c0202de3a8853aff22ca66781ddc2ade7554b7e2cc"}, - {file = "scipy-1.16.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:aadd23f98f9cb069b3bd64ddc900c4d277778242e961751f77a8cb5c4b946fb0"}, - {file = "scipy-1.16.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b7c5f1bda1354d6a19bc6af73a649f8285ca63ac6b52e64e658a5a11d4d69800"}, - {file = "scipy-1.16.3-cp314-cp314-win_amd64.whl", hash = "sha256:e5d42a9472e7579e473879a1990327830493a7047506d58d73fc429b84c1d49d"}, - {file = "scipy-1.16.3-cp314-cp314-win_arm64.whl", hash = "sha256:6020470b9d00245926f2d5bb93b119ca0340f0d564eb6fbaad843eaebf9d690f"}, - {file = "scipy-1.16.3-cp314-cp314t-macosx_10_14_x86_64.whl", hash = "sha256:e1d27cbcb4602680a49d787d90664fa4974063ac9d4134813332a8c53dbe667c"}, - {file = "scipy-1.16.3-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:9b9c9c07b6d56a35777a1b4cc8966118fb16cfd8daf6743867d17d36cfad2d40"}, - {file = "scipy-1.16.3-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:3a4c460301fb2cffb7f88528f30b3127742cff583603aa7dc964a52c463b385d"}, - {file = "scipy-1.16.3-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:f667a4542cc8917af1db06366d3f78a5c8e83badd56409f94d1eac8d8d9133fa"}, - {file = "scipy-1.16.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f379b54b77a597aa7ee5e697df0d66903e41b9c85a6dd7946159e356319158e8"}, - {file = "scipy-1.16.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4aff59800a3b7f786b70bfd6ab551001cb553244988d7d6b8299cb1ea653b353"}, - {file = "scipy-1.16.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:da7763f55885045036fabcebd80144b757d3db06ab0861415d1c3b7c69042146"}, - {file = "scipy-1.16.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ffa6eea95283b2b8079b821dc11f50a17d0571c92b43e2b5b12764dc5f9b285d"}, - {file = "scipy-1.16.3-cp314-cp314t-win_amd64.whl", hash = "sha256:d9f48cafc7ce94cf9b15c6bffdc443a81a27bf7075cf2dcd5c8b40f85d10c4e7"}, - {file = "scipy-1.16.3-cp314-cp314t-win_arm64.whl", hash = "sha256:21d9d6b197227a12dcbf9633320a4e34c6b0e51c57268df255a0942983bac562"}, - {file = "scipy-1.16.3.tar.gz", hash = "sha256:01e87659402762f43bd2fee13370553a17ada367d42e7487800bf2916535aecb"}, +markers = "python_version == \"3.11\"" +files = [ + {file = "scipy-1.17.1-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:1f95b894f13729334fb990162e911c9e5dc1ab390c58aa6cbecb389c5b5e28ec"}, + {file = "scipy-1.17.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:e18f12c6b0bc5a592ed23d3f7b891f68fd7f8241d69b7883769eb5d5dfb52696"}, + {file = "scipy-1.17.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:a3472cfbca0a54177d0faa68f697d8ba4c80bbdc19908c3465556d9f7efce9ee"}, + {file = "scipy-1.17.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:766e0dc5a616d026a3a1cffa379af959671729083882f50307e18175797b3dfd"}, + {file = "scipy-1.17.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:744b2bf3640d907b79f3fd7874efe432d1cf171ee721243e350f55234b4cec4c"}, + {file = "scipy-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43af8d1f3bea642559019edfe64e9b11192a8978efbd1539d7bc2aaa23d92de4"}, + {file = "scipy-1.17.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cd96a1898c0a47be4520327e01f874acfd61fb48a9420f8aa9f6483412ffa444"}, + {file = "scipy-1.17.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4eb6c25dd62ee8d5edf68a8e1c171dd71c292fdae95d8aeb3dd7d7de4c364082"}, + {file = "scipy-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:d30e57c72013c2a4fe441c2fcb8e77b14e152ad48b5464858e07e2ad9fbfceff"}, + {file = "scipy-1.17.1-cp311-cp311-win_arm64.whl", hash = "sha256:9ecb4efb1cd6e8c4afea0daa91a87fbddbce1b99d2895d151596716c0b2e859d"}, + {file = "scipy-1.17.1-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:35c3a56d2ef83efc372eaec584314bd0ef2e2f0d2adb21c55e6ad5b344c0dcb8"}, + {file = "scipy-1.17.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:fcb310ddb270a06114bb64bbe53c94926b943f5b7f0842194d585c65eb4edd76"}, + {file = "scipy-1.17.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:cc90d2e9c7e5c7f1a482c9875007c095c3194b1cfedca3c2f3291cdc2bc7c086"}, + {file = "scipy-1.17.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:c80be5ede8f3f8eded4eff73cc99a25c388ce98e555b17d31da05287015ffa5b"}, + {file = "scipy-1.17.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e19ebea31758fac5893a2ac360fedd00116cbb7628e650842a6691ba7ca28a21"}, + {file = "scipy-1.17.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:02ae3b274fde71c5e92ac4d54bc06c42d80e399fec704383dcd99b301df37458"}, + {file = "scipy-1.17.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8a604bae87c6195d8b1045eddece0514d041604b14f2727bbc2b3020172045eb"}, + {file = "scipy-1.17.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f590cd684941912d10becc07325a3eeb77886fe981415660d9265c4c418d0bea"}, + {file = "scipy-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:41b71f4a3a4cab9d366cd9065b288efc4d4f3c0b37a91a8e0947fb5bd7f31d87"}, + {file = "scipy-1.17.1-cp312-cp312-win_arm64.whl", hash = "sha256:f4115102802df98b2b0db3cce5cb9b92572633a1197c77b7553e5203f284a5b3"}, + {file = "scipy-1.17.1-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:5e3c5c011904115f88a39308379c17f91546f77c1667cea98739fe0fccea804c"}, + {file = "scipy-1.17.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:6fac755ca3d2c3edcb22f479fceaa241704111414831ddd3bc6056e18516892f"}, + {file = "scipy-1.17.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:7ff200bf9d24f2e4d5dc6ee8c3ac64d739d3a89e2326ba68aaf6c4a2b838fd7d"}, + {file = "scipy-1.17.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4b400bdc6f79fa02a4d86640310dde87a21fba0c979efff5248908c6f15fad1b"}, + {file = "scipy-1.17.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2b64ca7d4aee0102a97f3ba22124052b4bd2152522355073580bf4845e2550b6"}, + {file = "scipy-1.17.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:581b2264fc0aa555f3f435a5944da7504ea3a065d7029ad60e7c3d1ae09c5464"}, + {file = "scipy-1.17.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:beeda3d4ae615106d7094f7e7cef6218392e4465cc95d25f900bebabfded0950"}, + {file = "scipy-1.17.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6609bc224e9568f65064cfa72edc0f24ee6655b47575954ec6339534b2798369"}, + {file = "scipy-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:37425bc9175607b0268f493d79a292c39f9d001a357bebb6b88fdfaff13f6448"}, + {file = "scipy-1.17.1-cp313-cp313-win_arm64.whl", hash = "sha256:5cf36e801231b6a2059bf354720274b7558746f3b1a4efb43fcf557ccd484a87"}, + {file = "scipy-1.17.1-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:d59c30000a16d8edc7e64152e30220bfbd724c9bbb08368c054e24c651314f0a"}, + {file = "scipy-1.17.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:010f4333c96c9bb1a4516269e33cb5917b08ef2166d5556ca2fd9f082a9e6ea0"}, + {file = "scipy-1.17.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:2ceb2d3e01c5f1d83c4189737a42d9cb2fc38a6eeed225e7515eef71ad301dce"}, + {file = "scipy-1.17.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:844e165636711ef41f80b4103ed234181646b98a53c8f05da12ca5ca289134f6"}, + {file = "scipy-1.17.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:158dd96d2207e21c966063e1635b1063cd7787b627b6f07305315dd73d9c679e"}, + {file = "scipy-1.17.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:74cbb80d93260fe2ffa334efa24cb8f2f0f622a9b9febf8b483c0b865bfb3475"}, + {file = "scipy-1.17.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:dbc12c9f3d185f5c737d801da555fb74b3dcfa1a50b66a1a93e09190f41fab50"}, + {file = "scipy-1.17.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:94055a11dfebe37c656e70317e1996dc197e1a15bbcc351bcdd4610e128fe1ca"}, + {file = "scipy-1.17.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e30bdeaa5deed6bc27b4cc490823cd0347d7dae09119b8803ae576ea0ce52e4c"}, + {file = "scipy-1.17.1-cp313-cp313t-win_arm64.whl", hash = "sha256:a720477885a9d2411f94a93d16f9d89bad0f28ca23c3f8daa521e2dcc3f44d49"}, + {file = "scipy-1.17.1-cp314-cp314-macosx_10_14_x86_64.whl", hash = "sha256:a48a72c77a310327f6a3a920092fa2b8fd03d7deaa60f093038f22d98e096717"}, + {file = "scipy-1.17.1-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:45abad819184f07240d8a696117a7aacd39787af9e0b719d00285549ed19a1e9"}, + {file = "scipy-1.17.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:3fd1fcdab3ea951b610dc4cef356d416d5802991e7e32b5254828d342f7b7e0b"}, + {file = "scipy-1.17.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:7bdf2da170b67fdf10bca777614b1c7d96ae3ca5794fd9587dce41eb2966e866"}, + {file = "scipy-1.17.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:adb2642e060a6549c343603a3851ba76ef0b74cc8c079a9a58121c7ec9fe2350"}, + {file = "scipy-1.17.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eee2cfda04c00a857206a4330f0c5e3e56535494e30ca445eb19ec624ae75118"}, + {file = "scipy-1.17.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d2650c1fb97e184d12d8ba010493ee7b322864f7d3d00d3f9bb97d9c21de4068"}, + {file = "scipy-1.17.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:08b900519463543aa604a06bec02461558a6e1cef8fdbb8098f77a48a83c8118"}, + {file = "scipy-1.17.1-cp314-cp314-win_amd64.whl", hash = "sha256:3877ac408e14da24a6196de0ddcace62092bfc12a83823e92e49e40747e52c19"}, + {file = "scipy-1.17.1-cp314-cp314-win_arm64.whl", hash = "sha256:f8885db0bc2bffa59d5c1b72fad7a6a92d3e80e7257f967dd81abb553a90d293"}, + {file = "scipy-1.17.1-cp314-cp314t-macosx_10_14_x86_64.whl", hash = "sha256:1cc682cea2ae55524432f3cdff9e9a3be743d52a7443d0cba9017c23c87ae2f6"}, + {file = "scipy-1.17.1-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:2040ad4d1795a0ae89bfc7e8429677f365d45aa9fd5e4587cf1ea737f927b4a1"}, + {file = "scipy-1.17.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:131f5aaea57602008f9822e2115029b55d4b5f7c070287699fe45c661d051e39"}, + {file = "scipy-1.17.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:9cdc1a2fcfd5c52cfb3045feb399f7b3ce822abdde3a193a6b9a60b3cb5854ca"}, + {file = "scipy-1.17.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e3dcd57ab780c741fde8dc68619de988b966db759a3c3152e8e9142c26295ad"}, + {file = "scipy-1.17.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a9956e4d4f4a301ebf6cde39850333a6b6110799d470dbbb1e25326ac447f52a"}, + {file = "scipy-1.17.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:a4328d245944d09fd639771de275701ccadf5f781ba0ff092ad141e017eccda4"}, + {file = "scipy-1.17.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a77cbd07b940d326d39a1d1b37817e2ee4d79cb30e7338f3d0cddffae70fcaa2"}, + {file = "scipy-1.17.1-cp314-cp314t-win_amd64.whl", hash = "sha256:eb092099205ef62cd1782b006658db09e2fed75bffcae7cc0d44052d8aa0f484"}, + {file = "scipy-1.17.1-cp314-cp314t-win_arm64.whl", hash = "sha256:200e1050faffacc162be6a486a984a0497866ec54149a01270adc8a59b7c7d21"}, + {file = "scipy-1.17.1.tar.gz", hash = "sha256:95d8e012d8cb8816c226aef832200b1d45109ed4464303e997c5b13122b297c0"}, ] [package.dependencies] -numpy = ">=1.25.2,<2.6" +numpy = ">=1.26.4,<2.7" [package.extras] -dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy (==1.10.0)", "pycodestyle", "pydevtool", "rich-click", "ruff (>=0.0.292)", "types-psutil", "typing_extensions"] -doc = ["intersphinx_registry", "jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.19.1)", "jupytext", "linkify-it-py", "matplotlib (>=3.5)", "myst-nb (>=1.2.0)", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0,<8.2.0)", "sphinx-copybutton", "sphinx-design (>=0.4.0)"] +dev = ["click (<8.3.0)", "cython-lint (>=0.12.2)", "mypy (==1.10.0)", "pycodestyle", "ruff (>=0.12.0)", "spin", "types-psutil", "typing_extensions"] +doc = ["intersphinx_registry", "jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.19.1)", "jupytext", "linkify-it-py", "matplotlib (>=3.5)", "myst-nb (>=1.2.0)", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0,<8.2.0)", "sphinx-copybutton", "sphinx-design (>=0.4.0)", "tabulate"] test = ["Cython", "array-api-strict (>=2.3.1)", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja ; sys_platform != \"emscripten\"", "pooch", "pytest (>=8.0.0)", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] [[package]] -name = "send2trash" -version = "1.8.3" -description = "Send file to trash natively under Mac OS X, Windows and Linux" +name = "scipy" +version = "1.18.0" +description = "Fundamental algorithms for scientific computing in Python" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" -groups = ["dev"] -files = [ - {file = "Send2Trash-1.8.3-py3-none-any.whl", hash = "sha256:0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9"}, - {file = "Send2Trash-1.8.3.tar.gz", hash = "sha256:b18e7a3966d99871aefeb00cfbcfdced55ce4871194810fc71f4aa484b953abf"}, +python-versions = ">=3.12" +groups = ["main", "floris"] +markers = "python_version >= \"3.12\"" +files = [ + {file = "scipy-1.18.0-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:7bd21faaf5a1a3b2eff922d02db5f191b99a6518db9078a8fb23169f6d22259a"}, + {file = "scipy-1.18.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:265915e79107de9f946b855e50d7470d5893ec3f54b342e1aa6201cbdcd8bb6b"}, + {file = "scipy-1.18.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:9ab7b758be6940954a713ee466e2043e9f6e2ed965c1fce5c91039f4be3d90a9"}, + {file = "scipy-1.18.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:97b6cddaaee0a779ef6b5ca83c9604b27cc16b2b8fc22c142652df8793319fb8"}, + {file = "scipy-1.18.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:52a96e21517c7292375c0e27dd796a811f03fcea5fd4d108fdfea8145dcf17ab"}, + {file = "scipy-1.18.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1f55797419e16e7f30cf88ffb3113ce0467f00cfe3f70d5c281730b21769bfc2"}, + {file = "scipy-1.18.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ad033410e2e0672ffdc1042110cef20e1c46f8fd0616cee1d44d8d58fad8fc11"}, + {file = "scipy-1.18.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4a55985d54c769c872e64b7f4c8a81cc30ef700cc04296abbbf3705439c126de"}, + {file = "scipy-1.18.0-cp312-cp312-win_amd64.whl", hash = "sha256:71ccc8faa2dd16ac310233203474a8b5cb67f10dedd54a3116d34943f4b19132"}, + {file = "scipy-1.18.0-cp312-cp312-win_arm64.whl", hash = "sha256:d88363fd9d8fbd3511bd273f1a49efb2a540773ddf92a91d57498ce7dd7f3e76"}, + {file = "scipy-1.18.0-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:09143f676d157d9f546d663504ef9c1becb819824f1afc018814176411942446"}, + {file = "scipy-1.18.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:5efe260f69417b97ddae455bfb5a95e8359f7f66ad7fa9522a60feb66f169520"}, + {file = "scipy-1.18.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:68363b7eaacd8b5dd426df56d782cc156468ac79a127a1b87ca597d6e2e82197"}, + {file = "scipy-1.18.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:c5557d8be5da8e41353fcd4d21491fdbab83b062fc579e94dc09a7c8ab4f669b"}, + {file = "scipy-1.18.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0d13bca67c096d89fb95ced0d8921807300fce0275643aef9533cc63a0773468"}, + {file = "scipy-1.18.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a46f9273dbd0eb1cefba61c9b8648b4dfe3cbc14a080176f9a73e44b8336dc7f"}, + {file = "scipy-1.18.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5aba46108853ddfc77906b6557aac839d2b52e900c1d72a1180adaaab58d265f"}, + {file = "scipy-1.18.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b6f758e35f12757b5d95c00bc6de2438e229c2664b7a92e96f205959d9f2dfa4"}, + {file = "scipy-1.18.0-cp313-cp313-win_amd64.whl", hash = "sha256:1afac4a847207c7ff8efd321734a50b06d0280b3b2a2c0fc2f413101747ad7c7"}, + {file = "scipy-1.18.0-cp313-cp313-win_arm64.whl", hash = "sha256:c5dbddf60e58c2312316d097271a8e73d40eaf2eabfa4d95ed7d3695bbf2ce7b"}, + {file = "scipy-1.18.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:4c256ee70c0d1a8a2ace807e199ccd4e3f57037433842abb3fb36bc17eaa9578"}, + {file = "scipy-1.18.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:2ef3abc54a4ffc53765374b0d5728532dfdd2585ed23f6b11c206a1f0b1b9af8"}, + {file = "scipy-1.18.0-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:f2a6af57bd9e4a75d70e4117e78a1bbee84f79ae3fbb6d0111005d6ebcc4cb8d"}, + {file = "scipy-1.18.0-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:3f1ac564d3bf6c03d861d2cd87a1bea0da2887136f7fb1bf519c05a8971452d6"}, + {file = "scipy-1.18.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40395a5fcd1abee49a5c7aaa98c29db393eedc835138560a588c47ec16156690"}, + {file = "scipy-1.18.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8ca01e8ae69f1b18e9a58d91afead31be3cef0dd905a10249dac559ee15460a0"}, + {file = "scipy-1.18.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7a7f3b01647384dbc3a711e8c6778e0aabbe93959249fef5c7393396bcac0867"}, + {file = "scipy-1.18.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6aa94e78ec192a30063a5e72e561c28af769dc311190b24fe91774eff1969709"}, + {file = "scipy-1.18.0-cp314-cp314-win_amd64.whl", hash = "sha256:2d8bbdc6c817f5b4006a54d799d4f5bab6f910193cbb9a1ff310833d4d270f61"}, + {file = "scipy-1.18.0-cp314-cp314-win_arm64.whl", hash = "sha256:18e9575f1569b2c54174e6159d32942e03731177f63dce7975f0a0c88d102f5b"}, + {file = "scipy-1.18.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:f351e0dd702687d12a402b867a1b4146a256923e1c38317cbc472f6372b94707"}, + {file = "scipy-1.18.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:7c7a51b33ce387193c97f228320cf8e87361daa1bba750638677729598b3e677"}, + {file = "scipy-1.18.0-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:84031d7b052a54fae2f8632e0ec802073d385476eb9a63079bce6e23ef9283d4"}, + {file = "scipy-1.18.0-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:56abf29a7c067dde59be8b9a22d606a4ea1b2f2a4b756d9d903c62818f5dacce"}, + {file = "scipy-1.18.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ad44305cfa24b1ba5803cbbebf033590ccbac1aa5d612d727b785325ab408b0"}, + {file = "scipy-1.18.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:945c1761b93f38d7f99ae81ae80c63e621471608c7eeead563f6df025585cd58"}, + {file = "scipy-1.18.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1a4441f15d620578772a49e5ab48c0ee1f7a0220e387110283062729136b2553"}, + {file = "scipy-1.18.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9aac6192fac56bf2ca534389d24623f07b39ff83317d58287285e7fbd622ff76"}, + {file = "scipy-1.18.0-cp314-cp314t-win_amd64.whl", hash = "sha256:e40baea28ae7f5475c779741e2d90b1247c78531207b49c7030e698ff81cee3f"}, + {file = "scipy-1.18.0-cp314-cp314t-win_arm64.whl", hash = "sha256:368e0a705903c466aa5f08eefb39e6b1b6b2d659e7352a31fd9e2438365be0f8"}, + {file = "scipy-1.18.0.tar.gz", hash = "sha256:67b2ad2ad54c72ca6d04975a9b2df8c3638c34ddd5b28738e94fc2b57929d378"}, ] +[package.dependencies] +numpy = ">=2.0.0,<2.8" + [package.extras] -nativelib = ["pyobjc-framework-Cocoa ; sys_platform == \"darwin\"", "pywin32 ; sys_platform == \"win32\""] -objc = ["pyobjc-framework-Cocoa ; sys_platform == \"darwin\""] -win32 = ["pywin32 ; sys_platform == \"win32\""] +dev = ["click (<8.3.0)", "cython-lint (>=0.12.2)", "mypy (==1.19.1)", "pycodestyle", "pyrefly (==0.63.0)", "ruff (>=0.12.0)", "spin", "types-psutil", "typing_extensions"] +doc = ["intersphinx_registry", "jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.19.1)", "jupytext", "linkify-it-py", "matplotlib (>=3.5)", "myst-nb (>=1.2.0)", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0,<8.2.0)", "sphinx-copybutton", "sphinx-design (>=0.4.0)", "tabulate"] +test = ["Cython", "array-api-strict (>=2.3.1)", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja ; sys_platform != \"emscripten\"", "pooch", "pytest (>=8.0.0)", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "scipy-doctest (>=2.0.0)", "threadpoolctl"] [[package]] -name = "setuptools" -version = "80.9.0" -description = "Easily download, build, install, upgrade, and uninstall Python packages" +name = "send2trash" +version = "2.1.0" +description = "Send file to trash natively under Mac OS X, Windows and Linux" optional = false -python-versions = ">=3.9" +python-versions = ">=3.8" groups = ["dev"] files = [ - {file = "setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922"}, - {file = "setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c"}, + {file = "send2trash-2.1.0-py3-none-any.whl", hash = "sha256:0da2f112e6d6bb22de6aa6daa7e144831a4febf2a87261451c4ad849fe9a873c"}, + {file = "send2trash-2.1.0.tar.gz", hash = "sha256:1c72b39f09457db3c05ce1d19158c2cbef4c32b8bedd02c155e49282b7ea7459"}, ] [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\"", "ruff (>=0.8.0) ; sys_platform != \"cygwin\""] -core = ["importlib_metadata (>=6) ; python_version < \"3.10\"", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1) ; python_version < \"3.11\"", "wheel (>=0.43.0)"] -cover = ["pytest-cov"] -doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] -enabler = ["pytest-enabler (>=2.2)"] -test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21) ; python_version >= \"3.9\" and sys_platform != \"cygwin\"", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf ; sys_platform != \"cygwin\"", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] -type = ["importlib_metadata (>=7.0.2) ; python_version < \"3.10\"", "jaraco.develop (>=7.21) ; sys_platform != \"cygwin\"", "mypy (==1.14.*)", "pytest-mypy"] +nativelib = ["pyobjc (>=9.0) ; sys_platform == \"darwin\"", "pywin32 (>=305) ; sys_platform == \"win32\""] +test = ["pytest (>=8)"] [[package]] name = "shapely" @@ -3826,28 +4410,16 @@ files = [ {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, ] -[[package]] -name = "sniffio" -version = "1.3.1" -description = "Sniff out which async library your code is running under" -optional = false -python-versions = ">=3.7" -groups = ["dev"] -files = [ - {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, - {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, -] - [[package]] name = "soupsieve" -version = "2.8" +version = "2.9.2" description = "A modern CSS selector implementation for Beautiful Soup." optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "soupsieve-2.8-py3-none-any.whl", hash = "sha256:0cc76456a30e20f5d7f2e14a98a4ae2ee4e5abdc7c5ea0aafe795f344bc7984c"}, - {file = "soupsieve-2.8.tar.gz", hash = "sha256:e2dd4a40a628cb5f28f6d4b0db8800b8f581b65bb380b97de22ba5ca8d72572f"}, + {file = "soupsieve-2.9.2-py3-none-any.whl", hash = "sha256:8089a26fd974ca7a1f30276d3d8492ab266ab15af581642dfe8aa162e0c1c823"}, + {file = "soupsieve-2.9.2.tar.gz", hash = "sha256:4a55d8cf158a9c2e587fa4922f1bbb91d68ac829e2d6f25403a85747c71daf74"}, ] [[package]] @@ -3894,158 +4466,160 @@ typing = ["mypy (>=1.6,<2.0)", "traitlets (>=5.11.1)"] [[package]] name = "tinycss2" -version = "1.4.0" +version = "1.5.1" description = "A tiny CSS parser" optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289"}, - {file = "tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7"}, + {file = "tinycss2-1.5.1-py3-none-any.whl", hash = "sha256:3415ba0f5839c062696996998176c4a3751d18b7edaaeeb658c9ce21ec150661"}, + {file = "tinycss2-1.5.1.tar.gz", hash = "sha256:d339d2b616ba90ccce58da8495a78f46e55d4d25f9fd71dfd526f07e7d53f957"}, ] [package.dependencies] webencodings = ">=0.4" [package.extras] -doc = ["sphinx", "sphinx_rtd_theme"] +doc = ["furo", "sphinx"] test = ["pytest", "ruff"] [[package]] name = "tomli" -version = "2.3.0" +version = "2.4.1" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" groups = ["dev"] markers = "python_version < \"3.11\"" files = [ - {file = "tomli-2.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:88bd15eb972f3664f5ed4b57c1634a97153b4bac4479dcb6a495f41921eb7f45"}, - {file = "tomli-2.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:883b1c0d6398a6a9d29b508c331fa56adbcdff647f6ace4dfca0f50e90dfd0ba"}, - {file = "tomli-2.3.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d1381caf13ab9f300e30dd8feadb3de072aeb86f1d34a8569453ff32a7dea4bf"}, - {file = "tomli-2.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a0e285d2649b78c0d9027570d4da3425bdb49830a6156121360b3f8511ea3441"}, - {file = "tomli-2.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0a154a9ae14bfcf5d8917a59b51ffd5a3ac1fd149b71b47a3a104ca4edcfa845"}, - {file = "tomli-2.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:74bf8464ff93e413514fefd2be591c3b0b23231a77f901db1eb30d6f712fc42c"}, - {file = "tomli-2.3.0-cp311-cp311-win32.whl", hash = "sha256:00b5f5d95bbfc7d12f91ad8c593a1659b6387b43f054104cda404be6bda62456"}, - {file = "tomli-2.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:4dc4ce8483a5d429ab602f111a93a6ab1ed425eae3122032db7e9acf449451be"}, - {file = "tomli-2.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d7d86942e56ded512a594786a5ba0a5e521d02529b3826e7761a05138341a2ac"}, - {file = "tomli-2.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:73ee0b47d4dad1c5e996e3cd33b8a76a50167ae5f96a2607cbe8cc773506ab22"}, - {file = "tomli-2.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:792262b94d5d0a466afb5bc63c7daa9d75520110971ee269152083270998316f"}, - {file = "tomli-2.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f195fe57ecceac95a66a75ac24d9d5fbc98ef0962e09b2eddec5d39375aae52"}, - {file = "tomli-2.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e31d432427dcbf4d86958c184b9bfd1e96b5b71f8eb17e6d02531f434fd335b8"}, - {file = "tomli-2.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7b0882799624980785240ab732537fcfc372601015c00f7fc367c55308c186f6"}, - {file = "tomli-2.3.0-cp312-cp312-win32.whl", hash = "sha256:ff72b71b5d10d22ecb084d345fc26f42b5143c5533db5e2eaba7d2d335358876"}, - {file = "tomli-2.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:1cb4ed918939151a03f33d4242ccd0aa5f11b3547d0cf30f7c74a408a5b99878"}, - {file = "tomli-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5192f562738228945d7b13d4930baffda67b69425a7f0da96d360b0a3888136b"}, - {file = "tomli-2.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:be71c93a63d738597996be9528f4abe628d1adf5e6eb11607bc8fe1a510b5dae"}, - {file = "tomli-2.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c4665508bcbac83a31ff8ab08f424b665200c0e1e645d2bd9ab3d3e557b6185b"}, - {file = "tomli-2.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4021923f97266babc6ccab9f5068642a0095faa0a51a246a6a02fccbb3514eaf"}, - {file = "tomli-2.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4ea38c40145a357d513bffad0ed869f13c1773716cf71ccaa83b0fa0cc4e42f"}, - {file = "tomli-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ad805ea85eda330dbad64c7ea7a4556259665bdf9d2672f5dccc740eb9d3ca05"}, - {file = "tomli-2.3.0-cp313-cp313-win32.whl", hash = "sha256:97d5eec30149fd3294270e889b4234023f2c69747e555a27bd708828353ab606"}, - {file = "tomli-2.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0c95ca56fbe89e065c6ead5b593ee64b84a26fca063b5d71a1122bf26e533999"}, - {file = "tomli-2.3.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:cebc6fe843e0733ee827a282aca4999b596241195f43b4cc371d64fc6639da9e"}, - {file = "tomli-2.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4c2ef0244c75aba9355561272009d934953817c49f47d768070c3c94355c2aa3"}, - {file = "tomli-2.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c22a8bf253bacc0cf11f35ad9808b6cb75ada2631c2d97c971122583b129afbc"}, - {file = "tomli-2.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0eea8cc5c5e9f89c9b90c4896a8deefc74f518db5927d0e0e8d4a80953d774d0"}, - {file = "tomli-2.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b74a0e59ec5d15127acdabd75ea17726ac4c5178ae51b85bfe39c4f8a278e879"}, - {file = "tomli-2.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b5870b50c9db823c595983571d1296a6ff3e1b88f734a4c8f6fc6188397de005"}, - {file = "tomli-2.3.0-cp314-cp314-win32.whl", hash = "sha256:feb0dacc61170ed7ab602d3d972a58f14ee3ee60494292d384649a3dc38ef463"}, - {file = "tomli-2.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:b273fcbd7fc64dc3600c098e39136522650c49bca95df2d11cf3b626422392c8"}, - {file = "tomli-2.3.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:940d56ee0410fa17ee1f12b817b37a4d4e4dc4d27340863cc67236c74f582e77"}, - {file = "tomli-2.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f85209946d1fe94416debbb88d00eb92ce9cd5266775424ff81bc959e001acaf"}, - {file = "tomli-2.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a56212bdcce682e56b0aaf79e869ba5d15a6163f88d5451cbde388d48b13f530"}, - {file = "tomli-2.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c5f3ffd1e098dfc032d4d3af5c0ac64f6d286d98bc148698356847b80fa4de1b"}, - {file = "tomli-2.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5e01decd096b1530d97d5d85cb4dff4af2d8347bd35686654a004f8dea20fc67"}, - {file = "tomli-2.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:8a35dd0e643bb2610f156cca8db95d213a90015c11fee76c946aa62b7ae7e02f"}, - {file = "tomli-2.3.0-cp314-cp314t-win32.whl", hash = "sha256:a1f7f282fe248311650081faafa5f4732bdbfef5d45fe3f2e702fbc6f2d496e0"}, - {file = "tomli-2.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:70a251f8d4ba2d9ac2542eecf008b3c8a9fc5c3f9f02c56a9d7952612be2fdba"}, - {file = "tomli-2.3.0-py3-none-any.whl", hash = "sha256:e95b1af3c5b07d9e643909b5abbec77cd9f1217e6d0bca72b0234736b9fb1f1b"}, - {file = "tomli-2.3.0.tar.gz", hash = "sha256:64be704a875d2a59753d80ee8a533c3fe183e3f06807ff7dc2232938ccb01549"}, + {file = "tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30"}, + {file = "tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a"}, + {file = "tomli-2.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076"}, + {file = "tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9"}, + {file = "tomli-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c"}, + {file = "tomli-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc"}, + {file = "tomli-2.4.1-cp311-cp311-win32.whl", hash = "sha256:ff2983983d34813c1aeb0fa89091e76c3a22889ee83ab27c5eeb45100560c049"}, + {file = "tomli-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e"}, + {file = "tomli-2.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:c2541745709bad0264b7d4705ad453b76ccd191e64aa6f0fc66b69a293a45ece"}, + {file = "tomli-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c742f741d58a28940ce01d58f0ab2ea3ced8b12402f162f4d534dfe18ba1cd6a"}, + {file = "tomli-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7f86fd587c4ed9dd76f318225e7d9b29cfc5a9d43de44e5754db8d1128487085"}, + {file = "tomli-2.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff18e6a727ee0ab0388507b89d1bc6a22b138d1e2fa56d1ad494586d61d2eae9"}, + {file = "tomli-2.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:136443dbd7e1dee43c68ac2694fde36b2849865fa258d39bf822c10e8068eac5"}, + {file = "tomli-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e262d41726bc187e69af7825504c933b6794dc3fbd5945e41a79bb14c31f585"}, + {file = "tomli-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5cb41aa38891e073ee49d55fbc7839cfdb2bc0e600add13874d048c94aadddd1"}, + {file = "tomli-2.4.1-cp312-cp312-win32.whl", hash = "sha256:da25dc3563bff5965356133435b757a795a17b17d01dbc0f42fb32447ddfd917"}, + {file = "tomli-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:52c8ef851d9a240f11a88c003eacb03c31fc1c9c4ec64a99a0f922b93874fda9"}, + {file = "tomli-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:f758f1b9299d059cc3f6546ae2af89670cb1c4d48ea29c3cacc4fe7de3058257"}, + {file = "tomli-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:36d2bd2ad5fb9eaddba5226aa02c8ec3fa4f192631e347b3ed28186d43be6b54"}, + {file = "tomli-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eb0dc4e38e6a1fd579e5d50369aa2e10acfc9cace504579b2faabb478e76941a"}, + {file = "tomli-2.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7f2c7f2b9ca6bdeef8f0fa897f8e05085923eb091721675170254cbc5b02897"}, + {file = "tomli-2.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3c6818a1a86dd6dca7ddcaaf76947d5ba31aecc28cb1b67009a5877c9a64f3f"}, + {file = "tomli-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d312ef37c91508b0ab2cee7da26ec0b3ed2f03ce12bd87a588d771ae15dcf82d"}, + {file = "tomli-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51529d40e3ca50046d7606fa99ce3956a617f9b36380da3b7f0dd3dd28e68cb5"}, + {file = "tomli-2.4.1-cp313-cp313-win32.whl", hash = "sha256:2190f2e9dd7508d2a90ded5ed369255980a1bcdd58e52f7fe24b8162bf9fedbd"}, + {file = "tomli-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d65a2fbf9d2f8352685bc1364177ee3923d6baf5e7f43ea4959d7d8bc326a36"}, + {file = "tomli-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:4b605484e43cdc43f0954ddae319fb75f04cc10dd80d830540060ee7cd0243cd"}, + {file = "tomli-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fd0409a3653af6c147209d267a0e4243f0ae46b011aa978b1080359fddc9b6cf"}, + {file = "tomli-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a120733b01c45e9a0c34aeef92bf0cf1d56cfe81ed9d47d562f9ed591a9828ac"}, + {file = "tomli-2.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:559db847dc486944896521f68d8190be1c9e719fced785720d2216fe7022b662"}, + {file = "tomli-2.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01f520d4f53ef97964a240a035ec2a869fe1a37dde002b57ebc4417a27ccd853"}, + {file = "tomli-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7f94b27a62cfad8496c8d2513e1a222dd446f095fca8987fceef261225538a15"}, + {file = "tomli-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ede3e6487c5ef5d28634ba3f31f989030ad6af71edfb0055cbbd14189ff240ba"}, + {file = "tomli-2.4.1-cp314-cp314-win32.whl", hash = "sha256:3d48a93ee1c9b79c04bb38772ee1b64dcf18ff43085896ea460ca8dec96f35f6"}, + {file = "tomli-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:88dceee75c2c63af144e456745e10101eb67361050196b0b6af5d717254dddf7"}, + {file = "tomli-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:b8c198f8c1805dc42708689ed6864951fd2494f924149d3e4bce7710f8eb5232"}, + {file = "tomli-2.4.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d4d8fe59808a54658fcc0160ecfb1b30f9089906c50b23bcb4c69eddc19ec2b4"}, + {file = "tomli-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7008df2e7655c495dd12d2a4ad038ff878d4ca4b81fccaf82b714e07eae4402c"}, + {file = "tomli-2.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d8591993e228b0c930c4bb0db464bdad97b3289fb981255d6c9a41aedc84b2d"}, + {file = "tomli-2.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:734e20b57ba95624ecf1841e72b53f6e186355e216e5412de414e3c51e5e3c41"}, + {file = "tomli-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8a650c2dbafa08d42e51ba0b62740dae4ecb9338eefa093aa5c78ceb546fcd5c"}, + {file = "tomli-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:504aa796fe0569bb43171066009ead363de03675276d2d121ac1a4572397870f"}, + {file = "tomli-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:b1d22e6e9387bf4739fbe23bfa80e93f6b0373a7f1b96c6227c32bef95a4d7a8"}, + {file = "tomli-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2c1c351919aca02858f740c6d33adea0c5deea37f9ecca1cc1ef9e884a619d26"}, + {file = "tomli-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:eab21f45c7f66c13f2a9e0e1535309cee140182a9cdae1e041d02e47291e8396"}, + {file = "tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe"}, + {file = "tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f"}, ] [[package]] name = "tornado" -version = "6.5.2" +version = "6.5.8" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." optional = false python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "tornado-6.5.2-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:2436822940d37cde62771cff8774f4f00b3c8024fe482e16ca8387b8a2724db6"}, - {file = "tornado-6.5.2-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:583a52c7aa94ee046854ba81d9ebb6c81ec0fd30386d96f7640c96dad45a03ef"}, - {file = "tornado-6.5.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0fe179f28d597deab2842b86ed4060deec7388f1fd9c1b4a41adf8af058907e"}, - {file = "tornado-6.5.2-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b186e85d1e3536d69583d2298423744740986018e393d0321df7340e71898882"}, - {file = "tornado-6.5.2-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e792706668c87709709c18b353da1f7662317b563ff69f00bab83595940c7108"}, - {file = "tornado-6.5.2-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:06ceb1300fd70cb20e43b1ad8aaee0266e69e7ced38fa910ad2e03285009ce7c"}, - {file = "tornado-6.5.2-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:74db443e0f5251be86cbf37929f84d8c20c27a355dd452a5cfa2aada0d001ec4"}, - {file = "tornado-6.5.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b5e735ab2889d7ed33b32a459cac490eda71a1ba6857b0118de476ab6c366c04"}, - {file = "tornado-6.5.2-cp39-abi3-win32.whl", hash = "sha256:c6f29e94d9b37a95013bb669616352ddb82e3bfe8326fccee50583caebc8a5f0"}, - {file = "tornado-6.5.2-cp39-abi3-win_amd64.whl", hash = "sha256:e56a5af51cc30dd2cae649429af65ca2f6571da29504a07995175df14c18f35f"}, - {file = "tornado-6.5.2-cp39-abi3-win_arm64.whl", hash = "sha256:d6c33dc3672e3a1f3618eb63b7ef4683a7688e7b9e6e8f0d9aa5726360a004af"}, - {file = "tornado-6.5.2.tar.gz", hash = "sha256:ab53c8f9a0fa351e2c0741284e06c7a45da86afb544133201c5cc8578eb076a0"}, + {file = "tornado-6.5.8-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:cc6aa787d7cfab7c3d35189dc7a56fbd2399a569624c730c6b55b3d6531d0403"}, + {file = "tornado-6.5.8-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9715b5eb79735b2bcd454ce216a9275b7c0470e64ea1bf5742f78b2f72b26eeb"}, + {file = "tornado-6.5.8-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:547d63f450d570c14fe0e8db2cfb14c9bbd1c2503b4a6612586267955aa47b58"}, + {file = "tornado-6.5.8-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7e2360a0ffbe145eca8af0b19cb7203d79b1a98dd4cccdd6b368f6f49c2e3808"}, + {file = "tornado-6.5.8-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:5d242290bdf7ab3151bc1065fdd75c0dcc21cbc7b49f22a4c56329c2d6566d22"}, + {file = "tornado-6.5.8-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:7b94ff0e128fe0542f3bd331fb44d06260fc4ac16881545159f34ef08aad4195"}, + {file = "tornado-6.5.8-cp39-abi3-win32.whl", hash = "sha256:67832909c4779c64942380cb5f044a5c6163d00831472d80e25e115de9917836"}, + {file = "tornado-6.5.8-cp39-abi3-win_amd64.whl", hash = "sha256:11881db6b7c168494be2c2d12e65931451bdf7ee718535418ae1d8855dd5a0ee"}, + {file = "tornado-6.5.8-cp39-abi3-win_arm64.whl", hash = "sha256:68a7468c7e289f8514d7d664101753903217eff1bb6822c6b5994a0b5f5bcb26"}, + {file = "tornado-6.5.8.tar.gz", hash = "sha256:9452e1b208a8bd771e2cb1f2ff564985b9b214bdebbe622793e1799e0a6bd23f"}, ] [[package]] name = "tqdm" -version = "4.67.1" +version = "4.70.0" description = "Fast, Extensible Progress Meter" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" groups = ["main"] files = [ - {file = "tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"}, - {file = "tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2"}, + {file = "tqdm-4.70.0-py3-none-any.whl", hash = "sha256:7f585706bfddbdebf89daac705b2dfcc16890130727d3197ca62c732b4310953"}, + {file = "tqdm-4.70.0.tar.gz", hash = "sha256:55b0b0dbd97462d06ebee91e4dac24ed4d4702be82b24f07e6c1d27e08cea220"}, ] [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} [package.extras] -dev = ["nbval", "pytest (>=6)", "pytest-asyncio (>=0.24)", "pytest-cov", "pytest-timeout"] -discord = ["requests"] +discord = ["envwrap", "requests"] notebook = ["ipywidgets (>=6)"] -slack = ["slack-sdk"] -telegram = ["requests"] +slack = ["envwrap", "slack-sdk"] +telegram = ["envwrap", "requests"] [[package]] name = "traitlets" -version = "5.14.3" +version = "5.16.1" description = "Traitlets Python configuration system" optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"}, - {file = "traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7"}, + {file = "traitlets-5.16.1-py3-none-any.whl", hash = "sha256:f775618166caa0396c8e337099240f2bd3e5e917d203b2e6fbe21a58d3cb1f6b"}, + {file = "traitlets-5.16.1.tar.gz", hash = "sha256:ed900c2b631aa3a112811139fa97b8d2c3bad5e989656bba4b7e52c7852c18c1"}, ] [package.extras] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"] +test = ["argcomplete (>=3.0.3) ; python_version < \"3.12\"", "argcomplete (>=3.5.2) ; python_version >= \"3.12\"", "mypy (>=2.0) ; implementation_name != \"pypy\"", "pre-commit", "pytest (>=7.0,<10.0)", "pytest-mock", "pytest-mypy-testing ; implementation_name != \"pypy\""] [[package]] name = "typing-extensions" -version = "4.15.0" +version = "4.16.0" description = "Backported and Experimental Type Hints for Python 3.9+" optional = false python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548"}, - {file = "typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"}, + {file = "typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8"}, + {file = "typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5"}, ] [[package]] name = "tzdata" -version = "2025.2" +version = "2026.3" description = "Provider of IANA time zone data" optional = false python-versions = ">=2" groups = ["dev", "floris"] files = [ - {file = "tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8"}, - {file = "tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9"}, + {file = "tzdata-2026.3-py2.py3-none-any.whl", hash = "sha256:dc096730c87af6cab1b171c9d532be840741ff5d459015e7f6947bd7d7e54931"}, + {file = "tzdata-2026.3.tar.gz", hash = "sha256:4a1518b8993086a7982523e071643f3c0e5f213e75b21318e78bcabfff9d1415"}, ] markers = {floris = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or python_version < \"3.11\""} @@ -4094,58 +4668,62 @@ dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake [[package]] name = "urllib3" -version = "2.5.0" +version = "2.7.0" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc"}, - {file = "urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760"}, + {file = "urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897"}, + {file = "urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c"}, ] [package.extras] -brotli = ["brotli (>=1.0.9) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\""] +brotli = ["brotli (>=1.2.0) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=1.2.0.0) ; platform_python_implementation != \"CPython\""] h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] -zstd = ["zstandard (>=0.18.0)"] +zstd = ["backports-zstd (>=1.0.0) ; python_version < \"3.14\""] [[package]] name = "wcwidth" -version = "0.2.14" +version = "0.8.2" description = "Measures the displayed width of unicode strings in a terminal" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" groups = ["dev"] files = [ - {file = "wcwidth-0.2.14-py2.py3-none-any.whl", hash = "sha256:a7bb560c8aee30f9957e5f9895805edd20602f2d7f720186dfd906e82b4982e1"}, - {file = "wcwidth-0.2.14.tar.gz", hash = "sha256:4d478375d31bc5395a3c55c40ccdf3354688364cd61c4f6adacaa9215d0b3605"}, + {file = "wcwidth-0.8.2-py3-none-any.whl", hash = "sha256:d63947694a0539a1d51e01eda7caf800c291020e6cdd7e28ad7b14dd33ad4f85"}, + {file = "wcwidth-0.8.2.tar.gz", hash = "sha256:91fbef97204b96a3d4d421609b80340b760cf33e26da123ff243d76b1fda8dda"}, ] [[package]] name = "webcolors" -version = "24.11.1" +version = "25.10.0" description = "A library for working with the color formats defined by HTML and CSS." optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "webcolors-24.11.1-py3-none-any.whl", hash = "sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9"}, - {file = "webcolors-24.11.1.tar.gz", hash = "sha256:ecb3d768f32202af770477b8b65f318fa4f566c22948673a977b00d589dd80f6"}, + {file = "webcolors-25.10.0-py3-none-any.whl", hash = "sha256:032c727334856fc0b968f63daa252a1ac93d33db2f5267756623c210e57a4f1d"}, + {file = "webcolors-25.10.0.tar.gz", hash = "sha256:62abae86504f66d0f6364c2a8520de4a0c47b80c03fc3a5f1815fedbef7c19bf"}, ] [[package]] name = "webencodings" -version = "0.5.1" +version = "0.6.1" description = "Character encoding aliases for legacy web content" optional = false -python-versions = "*" +python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, - {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, + {file = "webencodings-0.6.1-py3-none-any.whl", hash = "sha256:7fab6269c8bf237c657876b52058ccb182e861518d1c695c1a9aaa8c1c105d5b"}, + {file = "webencodings-0.6.1.tar.gz", hash = "sha256:565f9ad031c702dae404e27a099e3e09186a3ab1b9520f06d215502b651fd910"}, ] +[package.extras] +doc = ["furo", "sphinx"] +test = ["pytest", "ruff"] + [[package]] name = "websocket-client" version = "1.9.0" @@ -4165,14 +4743,14 @@ test = ["pytest", "websockets"] [[package]] name = "widgetsnbextension" -version = "4.0.14" +version = "4.0.15" description = "Jupyter interactive widgets for Jupyter Notebook" optional = false python-versions = ">=3.7" groups = ["dev"] files = [ - {file = "widgetsnbextension-4.0.14-py3-none-any.whl", hash = "sha256:4875a9eaf72fbf5079dc372a51a9f268fc38d46f767cbf85c43a36da5cb9b575"}, - {file = "widgetsnbextension-4.0.14.tar.gz", hash = "sha256:a3629b04e3edb893212df862038c7232f62973373869db5084aed739b437b5af"}, + {file = "widgetsnbextension-4.0.15-py3-none-any.whl", hash = "sha256:8156704e4346a571d9ce73b84bee86a29906c9abfd7223b7228a28899ccf3366"}, + {file = "widgetsnbextension-4.0.15.tar.gz", hash = "sha256:de8610639996f1567952d763a5a41af8af37f2575a41f9852a38f947eb82a3b9"}, ] [extras]