From fa134a563acb2e46a27c32c434d4b290d042f650 Mon Sep 17 00:00:00 2001 From: korevaarzer Date: Mon, 22 Dec 2025 10:21:31 +0100 Subject: [PATCH 1/4] Run ruff formatter in src directory --- src/geoloop/axisym/AxisymetricEL.py | 1 - src/geoloop/bin/Flowdatamain.py | 4 +- src/geoloop/bin/Plotmain.py | 20 ++++++-- src/geoloop/bin/Runbatch.py | 3 +- src/geoloop/bin/Runmain.py | 11 +++- src/geoloop/bin/SingleRunSim.py | 14 +++-- src/geoloop/cli/batch.py | 17 +++---- src/geoloop/cli/main.py | 59 ++++++++++++++++------ src/geoloop/configuration.py | 45 ++++++++++------- src/geoloop/geoloopcore/soilproperties.py | 1 - src/geoloop/lithology/process_lithology.py | 32 +++++++----- src/geoloop/loadflowdata/flow_data.py | 11 +++- src/geoloop/loadflowdata/loadprofile.py | 4 +- src/geoloop/plotting/create_plots.py | 13 +++-- src/geoloop/utils/RunManager.py | 14 ++--- src/geoloop/utils/helpers.py | 12 +++-- 16 files changed, 170 insertions(+), 91 deletions(-) diff --git a/src/geoloop/axisym/AxisymetricEL.py b/src/geoloop/axisym/AxisymetricEL.py index 4ce1672..5fab084 100644 --- a/src/geoloop/axisym/AxisymetricEL.py +++ b/src/geoloop/axisym/AxisymetricEL.py @@ -750,4 +750,3 @@ def thomas_heatloop( res2 = result.reshape(len(time), grid.nx, grid.ny, grid.nz) return res2 - diff --git a/src/geoloop/bin/Flowdatamain.py b/src/geoloop/bin/Flowdatamain.py index d533bf5..b9f5b9a 100644 --- a/src/geoloop/bin/Flowdatamain.py +++ b/src/geoloop/bin/Flowdatamain.py @@ -34,7 +34,7 @@ def main_flow_data(config_path: str | Path): flow = FlowData.from_config(config) # 2. Simulation time setup (1 hour step) - dt = 3600.0 # seconds + dt = 3600.0 # seconds tmax = 8760.0 * 3600 # one year in seconds Nt = int(np.ceil(tmax / dt)) @@ -54,7 +54,7 @@ def main_flow_data(config_path: str | Path): ax1.set_title("Instantaneous Flow Rate") # Cumulative flow (kg) - Qcum = np.cumsum(Q_flow) * dt # dt is seconds → sum(kg/s * s) = kg + Qcum = np.cumsum(Q_flow) * dt # dt is seconds → sum(kg/s * s) = kg ax2.set_xlabel(r"$t$ [hours]") ax2.set_ylabel(r"Cumulative flow [kg]") ax2.plot(hours, Qcum) diff --git a/src/geoloop/bin/Plotmain.py b/src/geoloop/bin/Plotmain.py index 35b4c62..13ce00f 100644 --- a/src/geoloop/bin/Plotmain.py +++ b/src/geoloop/bin/Plotmain.py @@ -4,7 +4,13 @@ import time import pandas as pd -from geoloop.configuration import load_single_config, load_nested_config, PlotInputConfig, SingleRunConfig, LithologyConfig +from geoloop.configuration import ( + load_single_config, + load_nested_config, + PlotInputConfig, + SingleRunConfig, + LithologyConfig, +) from geoloop.bin.SingleRunSim import SingleRun from geoloop.lithology.process_lithology import ProcessLithologyToThermalConductivity from geoloop.plotting.create_plots import PlotResults @@ -82,7 +88,13 @@ def main_plotmain(config_path: str | Path) -> None: run_name = plotinput.run_names[i] runjson = run_name + ".json" keysneeded = [] - keysoptional = ["litho_k_param", "loadprofile", "borefield", "variables_config", "flow_data"] + keysoptional = [ + "litho_k_param", + "loadprofile", + "borefield", + "variables_config", + "flow_data", + ] config_sim = load_nested_config( runjson, keysneeded, keysoptional ) @@ -94,7 +106,9 @@ def main_plotmain(config_path: str | Path) -> None: # in a single run always set the base case to True run_config.litho_k_param["basecase"] = True lithology_to_k = ( - ProcessLithologyToThermalConductivity.from_config(LithologyConfig(**run_config.litho_k_param)) + ProcessLithologyToThermalConductivity.from_config( + LithologyConfig(**run_config.litho_k_param) + ) ) lithology_to_k.create_multi_thermcon_profiles() run_config.lithology_to_k = lithology_to_k diff --git a/src/geoloop/bin/Runbatch.py b/src/geoloop/bin/Runbatch.py index a8b642a..e6e2787 100644 --- a/src/geoloop/bin/Runbatch.py +++ b/src/geoloop/bin/Runbatch.py @@ -15,9 +15,10 @@ command_dict = { "Plotmain": main_plotmain, "Loadprofile": main_load_profile, "Lithology": main_lithology, - "FlowData": main_flow_data + "FlowData": main_flow_data, } + def run_batch_from_json(config_file: str) -> None: """ Execute internal registered command functions defined in a JSON batch file. diff --git a/src/geoloop/bin/Runmain.py b/src/geoloop/bin/Runmain.py index 8281ca9..7385827 100644 --- a/src/geoloop/bin/Runmain.py +++ b/src/geoloop/bin/Runmain.py @@ -2,7 +2,12 @@ import sys import time from pathlib import Path -from geoloop.configuration import load_nested_config, SingleRunConfig, LithologyConfig, StochasticRunConfig +from geoloop.configuration import ( + load_nested_config, + SingleRunConfig, + LithologyConfig, + StochasticRunConfig, +) from geoloop.utils.helpers import save_MCrun_results from geoloop.utils.RunManager import run_models from geoloop.lithology.process_lithology import ProcessLithologyToThermalConductivity @@ -45,7 +50,9 @@ def main_runmain(config_file_path: str | Path) -> None: # Optional lithology-based thermal conductivity sample generation config.lithology_to_k = None if config.litho_k_param: - lithology_to_k = ProcessLithologyToThermalConductivity.from_config(LithologyConfig(**config.litho_k_param)) + lithology_to_k = ProcessLithologyToThermalConductivity.from_config( + LithologyConfig(**config.litho_k_param) + ) lithology_to_k.create_multi_thermcon_profiles() config.lithology_to_k = lithology_to_k diff --git a/src/geoloop/bin/SingleRunSim.py b/src/geoloop/bin/SingleRunSim.py index 7745369..3b1e0e1 100644 --- a/src/geoloop/bin/SingleRunSim.py +++ b/src/geoloop/bin/SingleRunSim.py @@ -177,8 +177,6 @@ def Jfunc( return -retval[-1] - - class SingleRunResult: """ Container class holding the results of a single BHE simulation run. @@ -840,7 +838,13 @@ def main_single_run_sim(config_file_path: Path | str) -> None: # Load configuration keysneeded = [] - keysoptional = ["litho_k_param", "loadprofile", "borefield", "flow_data", "variables_config"] + keysoptional = [ + "litho_k_param", + "loadprofile", + "borefield", + "flow_data", + "variables_config", + ] config_dict = load_nested_config(config_file_path, keysneeded, keysoptional) config = SingleRunConfig(**config_dict) # validated Pydantic object @@ -850,7 +854,9 @@ def main_single_run_sim(config_file_path: Path | str) -> None: if config.litho_k_param: # in a single run always set the base case to True config.litho_k_param["basecase"] = True - lithology_to_k = ProcessLithologyToThermalConductivity.from_config(LithologyConfig(**config.litho_k_param)) + lithology_to_k = ProcessLithologyToThermalConductivity.from_config( + LithologyConfig(**config.litho_k_param) + ) lithology_to_k.create_multi_thermcon_profiles() config.lithology_to_k = lithology_to_k diff --git a/src/geoloop/cli/batch.py b/src/geoloop/cli/batch.py index 222cc85..ebacbdf 100644 --- a/src/geoloop/cli/batch.py +++ b/src/geoloop/cli/batch.py @@ -8,9 +8,7 @@ batch_app = typer.Typer(help="Batch processing commands for geoloop.") @batch_app.command("run") -def batch_run( - batchfile: Path = typer.Argument(..., help="Path to batch JSON file.") -): +def batch_run(batchfile: Path = typer.Argument(..., help="Path to batch JSON file.")): """Run a batch JSON file.""" run_batch_from_json(str(batchfile)) @@ -21,7 +19,9 @@ def batch_create( stochastic_run: list[str] = typer.Option([], help="Runmain config files."), single_run: list[str] = typer.Option([], help="SingleRunSim config files."), process_lithology: list[str] = typer.Option([], help="Lithology config files."), - calculate_loadprofile: list[str] = typer.Option([], help="Loadprofile config files."), + calculate_loadprofile: list[str] = typer.Option( + [], help="Loadprofile config files." + ), calculate_flowdata: list[str] = typer.Option([], help="FlowData config files."), plot: list[str] = typer.Option([], help="Plotmain config files."), ): @@ -72,7 +72,7 @@ def batch_wizard(): typer.echo("\nSelect command to add:") choice = typer.prompt( "Options: stochastic-run, single-run, process-lithology, calculate-loadprofile, calculate-flowdata, plot, done", - type=str + type=str, ) if choice.lower() == "done": @@ -84,7 +84,7 @@ def batch_wizard(): "process-lithology": "Lithology", "calculate-loadprofile": "Loadprofile", "calculate-flowdata": "FlowData", - "plot": "Plotmain" + "plot": "Plotmain", } if choice.lower() not in valid: @@ -93,10 +93,7 @@ def batch_wizard(): filepath = typer.prompt("Enter path to the config JSON file:") - commands.append({ - "command": valid[choice.lower()], - "args": filepath - }) + commands.append({"command": valid[choice.lower()], "args": filepath}) typer.secho("Command added!\n", fg=typer.colors.GREEN) diff --git a/src/geoloop/cli/main.py b/src/geoloop/cli/main.py index 7395eeb..c6a43c6 100644 --- a/src/geoloop/cli/main.py +++ b/src/geoloop/cli/main.py @@ -16,8 +16,12 @@ simulation.add_typer(batch_app, name="batch") @simulation.command(name="batch-run") -def batch_run(config_file_path: str = typer.Argument(..., - help="Path to the Json file with a sequence of the command scripts and configuration arguments")) -> None: +def batch_run( + config_file_path: str = typer.Argument( + ..., + help="Path to the Json file with a sequence of the command scripts and configuration arguments", + ), +) -> None: """ Run a batch of scripts, in sequence, for BHE simulation. """ @@ -25,55 +29,78 @@ def batch_run(config_file_path: str = typer.Argument(..., @simulation.command(name="single-run") -def single_run(config_file_path: str = typer.Argument(..., - help="Path to the Json file with the main model configuration parameters")) -> None: +def single_run( + config_file_path: str = typer.Argument( + ..., help="Path to the Json file with the main model configuration parameters" + ), +) -> None: """ Run main script for a single BHE simulation. """ main_single_run_sim(config_file_path) + @simulation.command(name="stochastic-run") -def stochastic_run(config_file_path: str = typer.Argument(..., - help="Path to the Json file with the main model configuration parameters")) -> None: +def stochastic_run( + config_file_path: str = typer.Argument( + ..., help="Path to the Json file with the main model configuration parameters" + ), +) -> None: """ Run main script for a stochastic BHE simulation. """ main_runmain(config_file_path) + @simulation.command(name="process-lithology") -def process_lithology(config_file_path: str = typer.Argument(..., - help="Path to the Json file with the subsurface model configuration parameters")) -> None: +def process_lithology( + config_file_path: str = typer.Argument( + ..., + help="Path to the Json file with the subsurface model configuration parameters", + ), +) -> None: """ Run main script for calculating and plotting subsurface thermal properties. """ main_lithology(config_file_path) + @simulation.command(name="calculate-loadprofile") -def calculate_loadprofile(config_file_path: str = typer.Argument(..., - help="Path to the Json file with the subsurface model configuration parameters")) -> None: +def calculate_loadprofile( + config_file_path: str = typer.Argument( + ..., + help="Path to the Json file with the subsurface model configuration parameters", + ), +) -> None: """ Run main script for calculating a time-profile of heat load. """ main_load_profile(config_file_path) + @simulation.command(name="calculate-flowdata") -def calculate_flowdata(config_file_path: str = typer.Argument(..., - help="Path to the Json file with the flow data configuration parameters")) -> None: +def calculate_flowdata( + config_file_path: str = typer.Argument( + ..., help="Path to the Json file with the flow data configuration parameters" + ), +) -> None: """ Run main script for calculating a time-profile of flow rate. """ main_flow_data(config_file_path) + @simulation.command(name="plot") -def plot_results(config_file_path: str = typer.Argument(..., - help="Path to the Json file with the plotting configuration parameters")) -> None: +def plot_results( + config_file_path: str = typer.Argument( + ..., help="Path to the Json file with the plotting configuration parameters" + ), +) -> None: """ Run main script for plotting the simulation results. """ main_plotmain(config_file_path) - if __name__ == "__main__": simulation() - diff --git a/src/geoloop/configuration.py b/src/geoloop/configuration.py index 62c7a1b..d3d286a 100644 --- a/src/geoloop/configuration.py +++ b/src/geoloop/configuration.py @@ -44,6 +44,7 @@ class LithologyConfig(BaseModel): n_samples : int Number of stochastic realizations to generate. """ + config_file_path: str | Path out_dir_lithology: str | Path input_dir_lithology: str | Path @@ -80,7 +81,9 @@ class LithologyConfig(BaseModel): self.borehole_lithology_path = Path(self.borehole_lithology_path) if not self.borehole_lithology_path.is_absolute(): self.borehole_lithology_path = ( - base_dir_lithology / Path(self.input_dir_lithology) / self.borehole_lithology_path + base_dir_lithology + / Path(self.input_dir_lithology) + / self.borehole_lithology_path ).resolve() if not isinstance(self.out_dir_lithology, Path): @@ -125,6 +128,7 @@ class LoadProfileConfig(BaseModel): lp_minQ : float or int, optional Minimum heat load constraint if type is FROMFILE. """ + config_file_path: str | Path lp_outdir: str | Path | None = None lp_inputdir: str | Path | None = None @@ -263,6 +267,7 @@ class FlowDataConfig(BaseModel): fp_smoothing : str, optional Smoothing method applied to the flow profile, if type is FROMFILE. """ + config_file_path: str | Path fp_type: Literal["CONSTANT", "VARIABLE", "FROMFILE"] fp_outdir: str | Path | None = None @@ -324,7 +329,6 @@ class FlowDataConfig(BaseModel): ) return self - @model_validator(mode="after") def process_config_paths(self): """ @@ -359,7 +363,7 @@ class FlowDataConfig(BaseModel): return self -class SingleRunConfig(BaseModel, extra='allow'): +class SingleRunConfig(BaseModel, extra="allow"): """ Configuration object for a single geothermal borehole simulation run. @@ -467,6 +471,7 @@ class SingleRunConfig(BaseModel, extra='allow'): flow_data : dict, optional FlowData module configuration. """ + # Path to the configuration json config_file_path: Path = None @@ -476,7 +481,7 @@ class SingleRunConfig(BaseModel, extra='allow'): # Borehole design # Required Parameters - type: Literal["UTUBE" , "COAXIAL"] + type: Literal["UTUBE", "COAXIAL"] H: float | int D: float | int r_b: float @@ -485,13 +490,13 @@ class SingleRunConfig(BaseModel, extra='allow'): k_p: float k_g: float | list[float] - fluid_str: Literal['water', 'MEG', 'MPG', 'MEA', 'MMA'] + fluid_str: Literal["water", "MEG", "MPG", "MEA", "MMA"] fluid_percent: float | int m_flow: float epsilon: float # Optional / Conditional for borehole - r_in: list[float] | None = None + r_in: list[float] | None = None pos: list[list[float]] = None nInlets: int = None @@ -662,7 +667,9 @@ class SingleRunConfig(BaseModel, extra='allow'): if not base_dir_path.is_absolute(): if self.config_file_path is None: - raise ValueError("Cannot resolve relative base_dir: config_path not set") + raise ValueError( + "Cannot resolve relative base_dir: config_path not set" + ) elif isinstance(self.config_file_path, str): self.config_file_path = Path(self.config_file_path) base_dir_path = self.config_file_path.parent / base_dir_path @@ -705,6 +712,7 @@ class StochasticRunConfig(BaseModel): elif dist_name == "triangular": min, peak, max = dist[1], dist[2], dist[3] """ + n_samples: int | None = None k_s_scale: tuple[str, float, float] = None k_p: tuple[str, float, float] = None @@ -776,14 +784,15 @@ class PlotInputConfig(BaseModel): Flag that determines whether to create crossplots and barplots. Only compatible with stochastic simulations newplot : bool - Flag to plot the simulation(s) listed in run_names seperately or together. - Only simulations with the same run_modes can be plot together + Flag to plot the simulation(s) listed in run_names seperately or together. + Only simulations with the same run_modes can be plot together crossplot_vars : list of str - Variable input parameters and results to target in crossplots and tornado plots. - Only used if plot_crossplot_barplot is true + Variable input parameters and results to target in crossplots and tornado plots. + Only used if plot_crossplot_barplot is true plot_temperature_field : bool Flag that determines whether to plot full 3D temperature fields. Only used if model_type is FINVOL. """ + config_file_path: Path = None base_dir: str | Path @@ -826,7 +835,9 @@ class PlotInputConfig(BaseModel): if not base_dir_path.is_absolute(): if self.config_file_path is None: - raise ValueError("Cannot resolve relative base_dir: config_path not set") + raise ValueError( + "Cannot resolve relative base_dir: config_path not set" + ) elif isinstance(self.config_file_path, str): self.config_file_path = Path(self.config_file_path) base_dir_path = self.config_file_path.parent / base_dir_path @@ -856,6 +867,7 @@ def load_json(path: str | Path) -> dict: with open(path) as f: return json.load(f) + def load_single_config(main_config_path: str | Path) -> dict: """ Load main JSON as dictionary. @@ -879,10 +891,9 @@ def load_single_config(main_config_path: str | Path) -> dict: return config + def load_nested_config( - main_config_path: str, - keys_needed: list[str] = [], - keys_optional: list[str] = [] + main_config_path: str, keys_needed: list[str] = [], keys_optional: list[str] = [] ) -> dict: """ Load main JSON and inject referenced sub-configs as nested dictionaries. @@ -928,8 +939,8 @@ def load_nested_config( try: subconfig = load_json(subpath) subconfig["config_file_path"] = subpath - config[key] = subconfig # replace path with nested dict + config[key] = subconfig # replace path with nested dict except FileNotFoundError: print(f"Optional config file not found: {subpath}, skipping.") - return config \ No newline at end of file + return config diff --git a/src/geoloop/geoloopcore/soilproperties.py b/src/geoloop/geoloopcore/soilproperties.py index 71d7042..82f69d7 100644 --- a/src/geoloop/geoloopcore/soilproperties.py +++ b/src/geoloop/geoloopcore/soilproperties.py @@ -5,7 +5,6 @@ from geoloop.geoloopcore.strat_interpolator import StratInterpolator, TgInterpol from geoloop.lithology.process_lithology import ProcessLithologyToThermalConductivity - class SoilProperties: """ Store soil thermal properties, including geotherm (temperature vs. depth) diff --git a/src/geoloop/lithology/process_lithology.py b/src/geoloop/lithology/process_lithology.py index a0ee552..470fdc6 100644 --- a/src/geoloop/lithology/process_lithology.py +++ b/src/geoloop/lithology/process_lithology.py @@ -370,7 +370,9 @@ class ProcessLithologyToThermalConductivity: return borehole_lithology_ab @classmethod - def from_config(cls, config: LithologyConfig) -> "ProcessLithologyToThermalConductivity": + def from_config( + cls, config: LithologyConfig + ) -> "ProcessLithologyToThermalConductivity": """ Create a ProcessLithologyToThermalConductivity instance from a configuration dict. @@ -386,21 +388,23 @@ class ProcessLithologyToThermalConductivity: """ borehole_path = config.borehole_lithology_path - borehole_df = pd.read_excel(borehole_path, sheet_name=config.borehole_lithology_sheetname) + borehole_df = pd.read_excel( + borehole_path, sheet_name=config.borehole_lithology_sheetname + ) return cls( - borehole_df = borehole_df, - Tg = config.Tg, - Tgrad = config.Tgrad, - z_Tg = config.z_Tg, - phi_scale = config.phi_scale, - lithology_scale = config.lithology_scale, - lithology_error = config.lithology_error, - nsamples = config.n_samples, - basecase = config.basecase, - out_dir = config.out_dir_lithology, - out_table = config.out_table, - read_from_table = config.read_from_table, + borehole_df=borehole_df, + Tg=config.Tg, + Tgrad=config.Tgrad, + z_Tg=config.z_Tg, + phi_scale=config.phi_scale, + lithology_scale=config.lithology_scale, + lithology_error=config.lithology_error, + nsamples=config.n_samples, + basecase=config.basecase, + out_dir=config.out_dir_lithology, + out_table=config.out_table, + read_from_table=config.read_from_table, ) def create_single_thermcon_profile( diff --git a/src/geoloop/loadflowdata/flow_data.py b/src/geoloop/loadflowdata/flow_data.py index 5ae7c29..9ecf082 100644 --- a/src/geoloop/loadflowdata/flow_data.py +++ b/src/geoloop/loadflowdata/flow_data.py @@ -135,10 +135,17 @@ class FlowData: Initialized FlowData object. """ if config.fp_type == "CONSTANT": - return cls(config.fp_type, peak_flow=config.fp_peak, outdir=config.fp_outdir) + return cls( + config.fp_type, peak_flow=config.fp_peak, outdir=config.fp_outdir + ) elif config.fp_type == "VARIABLE": - return cls(config.fp_type, base_flow=config.fp_base, peak_flow=config.fp_peak, outdir=config.fp_outdir) + return cls( + config.fp_type, + base_flow=config.fp_base, + peak_flow=config.fp_peak, + outdir=config.fp_outdir, + ) elif config.fp_type == "FROMFILE": return cls( diff --git a/src/geoloop/loadflowdata/loadprofile.py b/src/geoloop/loadflowdata/loadprofile.py index 98643f0..9b7f823 100644 --- a/src/geoloop/loadflowdata/loadprofile.py +++ b/src/geoloop/loadflowdata/loadprofile.py @@ -303,7 +303,7 @@ class LoadProfile: base=config.lp_base, peak=config.lp_peak, minscaleflow=config.lp_minscaleflow, - outdir=config.lp_outdir + outdir=config.lp_outdir, ) elif config.lp_type == LoadProfile.FROMFILE: @@ -318,7 +318,7 @@ class LoadProfile: minQ=config.lp_minQ, minscaleflow=config.lp_minscaleflow, inputcolumn=inputcolumn, - smoothing=smoothing + smoothing=smoothing, ) else: diff --git a/src/geoloop/plotting/create_plots.py b/src/geoloop/plotting/create_plots.py index af83f61..c9eda99 100644 --- a/src/geoloop/plotting/create_plots.py +++ b/src/geoloop/plotting/create_plots.py @@ -821,9 +821,16 @@ class PlotResults: plt.gca().set_aspect("equal", adjustable="box") gt.utilities._format_axes(ax) - levels = np.linspace(np.nanmin(temperature), np.nanmax(temperature), 10) - cs = plt.contourf(X, Y, temperature.reshape((N_xy, N_xy)), - levels=levels, cmap='viridis') + levels = np.linspace( + np.nanmin(temperature), np.nanmax(temperature), 10 + ) + cs = plt.contourf( + X, + Y, + temperature.reshape((N_xy, N_xy)), + levels=levels, + cmap="viridis", + ) cbar = fig.colorbar(cs) # Borehole wall outline diff --git a/src/geoloop/utils/RunManager.py b/src/geoloop/utils/RunManager.py index 3eb4317..53557b4 100644 --- a/src/geoloop/utils/RunManager.py +++ b/src/geoloop/utils/RunManager.py @@ -47,24 +47,18 @@ def sample_parameter_space(config: SingleRunConfig) -> tuple[dict, list[str]]: varying_parameters = [] for param_name in variable_param_names: - dist = getattr(variables_config, param_name) if isinstance(dist, tuple): - dist_name = dist[0].lower() varying_parameters.append(param_name) if dist_name == "normal": mean, std_dev = dist[1], dist[2] - samples = norm(loc=mean, scale=std_dev).rvs( - size=n_samples - ) + samples = norm(loc=mean, scale=std_dev).rvs(size=n_samples) elif dist_name == "uniform": min, max = dist[1], dist[2] - samples = uniform(loc=min, scale=max - min).rvs( - size=n_samples - ) + samples = uniform(loc=min, scale=max - min).rvs(size=n_samples) elif dist_name == "lognormal": mu, sigma = dist[1], dist[2] @@ -88,7 +82,9 @@ def sample_parameter_space(config: SingleRunConfig) -> tuple[dict, list[str]]: # broadcast locked (non-varying) parameters for param_name in locked_param_names: - sample_space[param_name] = [getattr(config, param_name) for _ in range(n_samples)] + sample_space[param_name] = [ + getattr(config, param_name) for _ in range(n_samples) + ] return sample_space, varying_parameters diff --git a/src/geoloop/utils/helpers.py b/src/geoloop/utils/helpers.py index c245381..6fc93ec 100644 --- a/src/geoloop/utils/helpers.py +++ b/src/geoloop/utils/helpers.py @@ -8,7 +8,9 @@ import xarray as xr from geoloop.configuration import SingleRunConfig, StochasticRunConfig -def get_param_names(config: SingleRunConfig | StochasticRunConfig | None = None) -> tuple[list[str], list[str]]: +def get_param_names( + config: SingleRunConfig | StochasticRunConfig | None = None, +) -> tuple[list[str], list[str]]: """ Identify locked and variable parameter names from a configuration dictionary for Monte Carlo simulations. @@ -246,9 +248,11 @@ def save_singlerun_results(config: SingleRunConfig, result: Any, outpath: Path) # Create dictionary of input parameters param_dict = { - key: ([getattr(config, key)] - if isinstance(getattr(config, key), np.ndarray) - else getattr(config, key)) + key: ( + [getattr(config, key)] + if isinstance(getattr(config, key), np.ndarray) + else getattr(config, key) + ) for key in param_names } -- GitLab From abc1d35863b787071299b76ae0b0a2d0bb917733 Mon Sep 17 00:00:00 2001 From: korevaarzer Date: Mon, 22 Dec 2025 10:24:56 +0100 Subject: [PATCH 2/4] Run ruff linter in src directory (linting errors remaining) --- src/geoloop/axisym/AxisymetricEL.py | 1 - src/geoloop/bin/Flowdatamain.py | 2 +- src/geoloop/bin/Lithologymain.py | 5 +++-- src/geoloop/bin/Loadprofilemain.py | 2 +- src/geoloop/bin/Plotmain.py | 10 +++++----- src/geoloop/bin/Runbatch.py | 2 +- src/geoloop/bin/Runmain.py | 6 +++--- src/geoloop/bin/SingleRunSim.py | 4 ++-- src/geoloop/cli/batch.py | 1 + src/geoloop/cli/main.py | 7 +++---- src/geoloop/configuration.py | 4 ++-- src/geoloop/geoloopcore/getloaddata.py | 2 +- src/geoloop/lithology/process_lithology.py | 2 +- src/geoloop/plotting/create_plots.py | 2 +- src/geoloop/utils/RunManager.py | 4 ++-- 15 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/geoloop/axisym/AxisymetricEL.py b/src/geoloop/axisym/AxisymetricEL.py index 5fab084..e5412b6 100644 --- a/src/geoloop/axisym/AxisymetricEL.py +++ b/src/geoloop/axisym/AxisymetricEL.py @@ -1,6 +1,5 @@ import matplotlib.pyplot as plt import numpy as np -import pandas as pd def check_asarray(rmin: float | np.ndarray, nr: int) -> np.ndarray: diff --git a/src/geoloop/bin/Flowdatamain.py b/src/geoloop/bin/Flowdatamain.py index b9f5b9a..cfa81ff 100644 --- a/src/geoloop/bin/Flowdatamain.py +++ b/src/geoloop/bin/Flowdatamain.py @@ -4,7 +4,7 @@ from pathlib import Path import matplotlib.pyplot as plt import numpy as np -from geoloop.configuration import load_single_config, FlowDataConfig +from geoloop.configuration import FlowDataConfig, load_single_config from geoloop.loadflowdata.flow_data import FlowData diff --git a/src/geoloop/bin/Lithologymain.py b/src/geoloop/bin/Lithologymain.py index cf36fa3..28a6680 100644 --- a/src/geoloop/bin/Lithologymain.py +++ b/src/geoloop/bin/Lithologymain.py @@ -1,11 +1,12 @@ +from pathlib import Path + import numpy as np import xarray as xr -from pathlib import Path +from geoloop.configuration import LithologyConfig, load_single_config from geoloop.geoloopcore.strat_interpolator import StratInterpolator from geoloop.lithology.plot_lithology import plot_lithology_and_thermcon from geoloop.lithology.process_lithology import ProcessLithologyToThermalConductivity -from geoloop.configuration import load_single_config, LithologyConfig def main_lithology(config_path: str | Path) -> None: diff --git a/src/geoloop/bin/Loadprofilemain.py b/src/geoloop/bin/Loadprofilemain.py index b0f7c95..dfd4a37 100644 --- a/src/geoloop/bin/Loadprofilemain.py +++ b/src/geoloop/bin/Loadprofilemain.py @@ -3,7 +3,7 @@ from pathlib import Path import matplotlib.pyplot as plt import numpy as np -from geoloop.configuration import load_single_config, LoadProfileConfig +from geoloop.configuration import LoadProfileConfig, load_single_config from geoloop.loadflowdata.loadprofile import LoadProfile diff --git a/src/geoloop/bin/Plotmain.py b/src/geoloop/bin/Plotmain.py index 13ce00f..e6bc013 100644 --- a/src/geoloop/bin/Plotmain.py +++ b/src/geoloop/bin/Plotmain.py @@ -1,17 +1,17 @@ -from pathlib import Path import sys import time +from pathlib import Path import pandas as pd +from geoloop.bin.SingleRunSim import SingleRun from geoloop.configuration import ( - load_single_config, - load_nested_config, + LithologyConfig, PlotInputConfig, SingleRunConfig, - LithologyConfig, + load_nested_config, + load_single_config, ) -from geoloop.bin.SingleRunSim import SingleRun from geoloop.lithology.process_lithology import ProcessLithologyToThermalConductivity from geoloop.plotting.create_plots import PlotResults from geoloop.plotting.load_data import DataSelection, DataTotal, PlotInput diff --git a/src/geoloop/bin/Runbatch.py b/src/geoloop/bin/Runbatch.py index e6e2787..3496387 100644 --- a/src/geoloop/bin/Runbatch.py +++ b/src/geoloop/bin/Runbatch.py @@ -2,12 +2,12 @@ import json import sys from pathlib import Path +from geoloop.bin.Flowdatamain import main_flow_data from geoloop.bin.Lithologymain import main_lithology from geoloop.bin.Loadprofilemain import main_load_profile from geoloop.bin.Plotmain import main_plotmain from geoloop.bin.Runmain import main_runmain from geoloop.bin.SingleRunSim import main_single_run_sim -from geoloop.bin.Flowdatamain import main_flow_data command_dict = { "SingleRunSim": main_single_run_sim, diff --git a/src/geoloop/bin/Runmain.py b/src/geoloop/bin/Runmain.py index 7385827..ee0b4e2 100644 --- a/src/geoloop/bin/Runmain.py +++ b/src/geoloop/bin/Runmain.py @@ -3,14 +3,14 @@ import time from pathlib import Path from geoloop.configuration import ( - load_nested_config, - SingleRunConfig, LithologyConfig, + SingleRunConfig, StochasticRunConfig, + load_nested_config, ) +from geoloop.lithology.process_lithology import ProcessLithologyToThermalConductivity from geoloop.utils.helpers import save_MCrun_results from geoloop.utils.RunManager import run_models -from geoloop.lithology.process_lithology import ProcessLithologyToThermalConductivity def main_runmain(config_file_path: str | Path) -> None: diff --git a/src/geoloop/bin/SingleRunSim.py b/src/geoloop/bin/SingleRunSim.py index 3b1e0e1..a230387 100644 --- a/src/geoloop/bin/SingleRunSim.py +++ b/src/geoloop/bin/SingleRunSim.py @@ -9,8 +9,7 @@ import xarray as xr from numpy.typing import NDArray from scipy.optimize import minimize -from geoloop.configuration import load_nested_config, SingleRunConfig, LithologyConfig -from geoloop.utils.helpers import save_singlerun_results +from geoloop.configuration import LithologyConfig, SingleRunConfig, load_nested_config from geoloop.geoloopcore.b2g import B2G from geoloop.geoloopcore.b2g_ana import B2G_ana from geoloop.geoloopcore.boreholedesign import BoreholeDesign @@ -23,6 +22,7 @@ from geoloop.geoloopcore.pygfield_ana import ( from geoloop.geoloopcore.simulationparameters import SimulationParameters from geoloop.geoloopcore.soilproperties import SoilProperties from geoloop.lithology.process_lithology import ProcessLithologyToThermalConductivity +from geoloop.utils.helpers import save_singlerun_results def optimize_forkeys( diff --git a/src/geoloop/cli/batch.py b/src/geoloop/cli/batch.py index ebacbdf..044b381 100644 --- a/src/geoloop/cli/batch.py +++ b/src/geoloop/cli/batch.py @@ -1,5 +1,6 @@ import json from pathlib import Path + import typer from geoloop.bin.Runbatch import run_batch_from_json diff --git a/src/geoloop/cli/main.py b/src/geoloop/cli/main.py index c6a43c6..80b0a1a 100644 --- a/src/geoloop/cli/main.py +++ b/src/geoloop/cli/main.py @@ -1,13 +1,12 @@ import typer -from geoloop.bin.SingleRunSim import main_single_run_sim +from geoloop.bin.Flowdatamain import main_flow_data from geoloop.bin.Lithologymain import main_lithology from geoloop.bin.Loadprofilemain import main_load_profile from geoloop.bin.Plotmain import main_plotmain -from geoloop.bin.Runmain import main_runmain from geoloop.bin.Runbatch import run_batch_from_json -from geoloop.bin.Flowdatamain import main_flow_data - +from geoloop.bin.Runmain import main_runmain +from geoloop.bin.SingleRunSim import main_single_run_sim from geoloop.cli.batch import batch_app # Set up the main app diff --git a/src/geoloop/configuration.py b/src/geoloop/configuration.py index d3d286a..fec5dd2 100644 --- a/src/geoloop/configuration.py +++ b/src/geoloop/configuration.py @@ -1,9 +1,9 @@ import json from pathlib import Path -from pydantic import BaseModel, model_validator - from typing import Literal +from pydantic import BaseModel, model_validator + class LithologyConfig(BaseModel): """ diff --git a/src/geoloop/geoloopcore/getloaddata.py b/src/geoloop/geoloopcore/getloaddata.py index f53e150..ec96aa3 100644 --- a/src/geoloop/geoloopcore/getloaddata.py +++ b/src/geoloop/geoloopcore/getloaddata.py @@ -1,6 +1,6 @@ import numpy as np -from geoloop.configuration import SingleRunConfig, LoadProfileConfig, FlowDataConfig +from geoloop.configuration import FlowDataConfig, LoadProfileConfig, SingleRunConfig from geoloop.loadflowdata.flow_data import FlowData from geoloop.loadflowdata.loadprofile import LoadProfile diff --git a/src/geoloop/lithology/process_lithology.py b/src/geoloop/lithology/process_lithology.py index 470fdc6..c2779c3 100644 --- a/src/geoloop/lithology/process_lithology.py +++ b/src/geoloop/lithology/process_lithology.py @@ -5,9 +5,9 @@ import numpy as np import pandas as pd import xarray as xr +from geoloop.configuration import LithologyConfig from geoloop.constants import lithology_properties_xlsx from geoloop.geoloopcore.strat_interpolator import TgInterpolator -from geoloop.configuration import LithologyConfig # TODO: save the config paramters (error and scaling factors) in the thermcon h5 file that now only stores the results diff --git a/src/geoloop/plotting/create_plots.py b/src/geoloop/plotting/create_plots.py index c9eda99..bb7ad17 100644 --- a/src/geoloop/plotting/create_plots.py +++ b/src/geoloop/plotting/create_plots.py @@ -10,10 +10,10 @@ import seaborn as sns import xarray as xr from PIL import Image -from geoloop.utils.helpers import get_param_names from geoloop.bin.SingleRunSim import SingleRun from geoloop.constants import format_dict, units_dict from geoloop.geoloopcore.strat_interpolator import StratInterpolator +from geoloop.utils.helpers import get_param_names class PlotResults: diff --git a/src/geoloop/utils/RunManager.py b/src/geoloop/utils/RunManager.py index 53557b4..d218991 100644 --- a/src/geoloop/utils/RunManager.py +++ b/src/geoloop/utils/RunManager.py @@ -4,10 +4,10 @@ import numpy as np from scipy.stats import lognorm, norm, triang, uniform from tqdm import tqdm -from geoloop.configuration import SingleRunConfig -from geoloop.utils.helpers import get_param_names from geoloop.bin.SingleRunSim import SingleRun, optimize_forkeys +from geoloop.configuration import SingleRunConfig from geoloop.geoloopcore.simulationparameters import SimulationParameters +from geoloop.utils.helpers import get_param_names def sample_parameter_space(config: SingleRunConfig) -> tuple[dict, list[str]]: -- GitLab From 345c3dc270d615a0ab4f8eda00847a4cc32e554e Mon Sep 17 00:00:00 2001 From: korevaarzer Date: Mon, 22 Dec 2025 10:25:38 +0100 Subject: [PATCH 3/4] Add package building dependencies to venv and dev dependencies group --- pyproject.toml | 6 +- uv.lock | 330 +++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 324 insertions(+), 12 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index b079eac..097470d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,7 +36,7 @@ dependencies = [ "typer>=0.20.0", ] -[project.optional-dependencies] +[dependency-groups] dev = [ "ruff>=0.14.6", "black", @@ -47,6 +47,10 @@ dev = [ "mike>=2.1.3,<3", "mkdocstrings>=0.30.1", "mkdocstrings-python>=1.18.2", + "build>=1.3.0", + "twine>=6.2.0", + "wheel>=0.45.1", + "setuptools>=80.9.0", ] [tool.setuptools.packages.find] diff --git a/uv.lock b/uv.lock index 64df28b..e4e9a41 100644 --- a/uv.lock +++ b/uv.lock @@ -60,6 +60,20 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/68/11/21331aed19145a952ad28fca2756a1433ee9308079bd03bd898e903a2e53/black-25.12.0-py3-none-any.whl", hash = "sha256:48ceb36c16dbc84062740049eef990bb2ce07598272e673c17d1a7720c71c828", size = 206191, upload-time = "2025-12-08T01:40:50.963Z" }, ] +[[package]] +name = "build" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "os_name == 'nt'" }, + { name = "packaging" }, + { name = "pyproject-hooks" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/25/1c/23e33405a7c9eac261dff640926b8b5adaed6a6eb3e1767d441ed611d0c0/build-1.3.0.tar.gz", hash = "sha256:698edd0ea270bde950f53aed21f3a0135672206f3911e0176261a31e0e07b397", size = 48544, upload-time = "2025-08-01T21:27:09.268Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/8c/2b30c12155ad8de0cf641d76a8b396a16d2c36bc6d50b621a62b7c4567c1/build-1.3.0-py3-none-any.whl", hash = "sha256:7145f0b5061ba90a1500d60bd1b13ca0a8a4cebdd0cc16ed8adf1c0e739f43b4", size = 23382, upload-time = "2025-08-01T21:27:07.844Z" }, +] + [[package]] name = "certifi" version = "2025.11.12" @@ -69,6 +83,31 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/70/7d/9bc192684cea499815ff478dfcdc13835ddf401365057044fb721ec6bddb/certifi-2025.11.12-py3-none-any.whl", hash = "sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b", size = 159438, upload-time = "2025-11-12T02:54:49.735Z" }, ] +[[package]] +name = "cffi" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ff/df/a4f0fbd47331ceeba3d37c2e51e9dfc9722498becbeec2bd8bc856c9538a/cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe", size = 212529, upload-time = "2025-09-08T23:22:47.349Z" }, + { url = "https://files.pythonhosted.org/packages/d5/72/12b5f8d3865bf0f87cf1404d8c374e7487dcf097a1c91c436e72e6badd83/cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062", size = 220097, upload-time = "2025-09-08T23:22:48.677Z" }, + { url = "https://files.pythonhosted.org/packages/c2/95/7a135d52a50dfa7c882ab0ac17e8dc11cec9d55d2c18dda414c051c5e69e/cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e", size = 207983, upload-time = "2025-09-08T23:22:50.06Z" }, + { url = "https://files.pythonhosted.org/packages/3a/c8/15cb9ada8895957ea171c62dc78ff3e99159ee7adb13c0123c001a2546c1/cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037", size = 206519, upload-time = "2025-09-08T23:22:51.364Z" }, + { url = "https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba", size = 219572, upload-time = "2025-09-08T23:22:52.902Z" }, + { url = "https://files.pythonhosted.org/packages/07/e0/267e57e387b4ca276b90f0434ff88b2c2241ad72b16d31836adddfd6031b/cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94", size = 222963, upload-time = "2025-09-08T23:22:54.518Z" }, + { url = "https://files.pythonhosted.org/packages/b6/75/1f2747525e06f53efbd878f4d03bac5b859cbc11c633d0fb81432d98a795/cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187", size = 221361, upload-time = "2025-09-08T23:22:55.867Z" }, + { url = "https://files.pythonhosted.org/packages/b0/1e/d22cc63332bd59b06481ceaac49d6c507598642e2230f201649058a7e704/cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b", size = 212446, upload-time = "2025-09-08T23:23:03.472Z" }, + { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", size = 220101, upload-time = "2025-09-08T23:23:04.792Z" }, + { url = "https://files.pythonhosted.org/packages/f2/7f/e6647792fc5850d634695bc0e6ab4111ae88e89981d35ac269956605feba/cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2", size = 207948, upload-time = "2025-09-08T23:23:06.127Z" }, + { url = "https://files.pythonhosted.org/packages/cb/1e/a5a1bd6f1fb30f22573f76533de12a00bf274abcdc55c8edab639078abb6/cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3", size = 206422, upload-time = "2025-09-08T23:23:07.753Z" }, + { url = "https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26", size = 219499, upload-time = "2025-09-08T23:23:09.648Z" }, + { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", size = 222928, upload-time = "2025-09-08T23:23:10.928Z" }, + { url = "https://files.pythonhosted.org/packages/36/54/0362578dd2c9e557a28ac77698ed67323ed5b9775ca9d3fe73fe191bb5d8/cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b", size = 221302, upload-time = "2025-09-08T23:23:12.42Z" }, +] + [[package]] name = "cftime" version = "1.6.5" @@ -198,6 +237,39 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/80/99/2adc7d8ffead633234817ef8e9a87115c8a11927a94478f6bb3d3f4d4f7d/contourpy-1.3.3-cp313-cp313t-win_arm64.whl", hash = "sha256:3c30273eb2a55024ff31ba7d052dde990d7d8e5450f4bbb6e913558b3d6c2301", size = 199713, upload-time = "2025-07-26T12:02:14.4Z" }, ] +[[package]] +name = "cryptography" +version = "46.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9f/33/c00162f49c0e2fe8064a62cb92b93e50c74a72bc370ab92f86112b33ff62/cryptography-46.0.3.tar.gz", hash = "sha256:a8b17438104fed022ce745b362294d9ce35b4c2e45c1d958ad4a4b019285f4a1", size = 749258, upload-time = "2025-10-15T23:18:31.74Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1c/67/38769ca6b65f07461eb200e85fc1639b438bdc667be02cf7f2cd6a64601c/cryptography-46.0.3-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:09859af8466b69bc3c27bdf4f5d84a665e0f7ab5088412e9e2ec49758eca5cbc", size = 4296667, upload-time = "2025-10-15T23:16:54.369Z" }, + { url = "https://files.pythonhosted.org/packages/5c/49/498c86566a1d80e978b42f0d702795f69887005548c041636df6ae1ca64c/cryptography-46.0.3-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:01ca9ff2885f3acc98c29f1860552e37f6d7c7d013d7334ff2a9de43a449315d", size = 4450807, upload-time = "2025-10-15T23:16:56.414Z" }, + { url = "https://files.pythonhosted.org/packages/4b/0a/863a3604112174c8624a2ac3c038662d9e59970c7f926acdcfaed8d61142/cryptography-46.0.3-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:6eae65d4c3d33da080cff9c4ab1f711b15c1d9760809dad6ea763f3812d254cb", size = 4299615, upload-time = "2025-10-15T23:16:58.442Z" }, + { url = "https://files.pythonhosted.org/packages/64/02/b73a533f6b64a69f3cd3872acb6ebc12aef924d8d103133bb3ea750dc703/cryptography-46.0.3-cp311-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5bf0ed4490068a2e72ac03d786693adeb909981cc596425d09032d372bcc849", size = 4016800, upload-time = "2025-10-15T23:17:00.378Z" }, + { url = "https://files.pythonhosted.org/packages/25/d5/16e41afbfa450cde85a3b7ec599bebefaef16b5c6ba4ec49a3532336ed72/cryptography-46.0.3-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:5ecfccd2329e37e9b7112a888e76d9feca2347f12f37918facbb893d7bb88ee8", size = 4984707, upload-time = "2025-10-15T23:17:01.98Z" }, + { url = "https://files.pythonhosted.org/packages/c9/56/e7e69b427c3878352c2fb9b450bd0e19ed552753491d39d7d0a2f5226d41/cryptography-46.0.3-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:a2c0cd47381a3229c403062f764160d57d4d175e022c1df84e168c6251a22eec", size = 4482541, upload-time = "2025-10-15T23:17:04.078Z" }, + { url = "https://files.pythonhosted.org/packages/78/f6/50736d40d97e8483172f1bb6e698895b92a223dba513b0ca6f06b2365339/cryptography-46.0.3-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:549e234ff32571b1f4076ac269fcce7a808d3bf98b76c8dd560e42dbc66d7d91", size = 4299464, upload-time = "2025-10-15T23:17:05.483Z" }, + { url = "https://files.pythonhosted.org/packages/00/de/d8e26b1a855f19d9994a19c702fa2e93b0456beccbcfe437eda00e0701f2/cryptography-46.0.3-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:c0a7bb1a68a5d3471880e264621346c48665b3bf1c3759d682fc0864c540bd9e", size = 4950838, upload-time = "2025-10-15T23:17:07.425Z" }, + { url = "https://files.pythonhosted.org/packages/8f/29/798fc4ec461a1c9e9f735f2fc58741b0daae30688f41b2497dcbc9ed1355/cryptography-46.0.3-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:10b01676fc208c3e6feeb25a8b83d81767e8059e1fe86e1dc62d10a3018fa926", size = 4481596, upload-time = "2025-10-15T23:17:09.343Z" }, + { url = "https://files.pythonhosted.org/packages/15/8d/03cd48b20a573adfff7652b76271078e3045b9f49387920e7f1f631d125e/cryptography-46.0.3-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0abf1ffd6e57c67e92af68330d05760b7b7efb243aab8377e583284dbab72c71", size = 4426782, upload-time = "2025-10-15T23:17:11.22Z" }, + { url = "https://files.pythonhosted.org/packages/fa/b1/ebacbfe53317d55cf33165bda24c86523497a6881f339f9aae5c2e13e57b/cryptography-46.0.3-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a04bee9ab6a4da801eb9b51f1b708a1b5b5c9eb48c03f74198464c66f0d344ac", size = 4698381, upload-time = "2025-10-15T23:17:12.829Z" }, + { url = "https://files.pythonhosted.org/packages/27/32/b68d27471372737054cbd34c84981f9edbc24fe67ca225d389799614e27f/cryptography-46.0.3-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4b7387121ac7d15e550f5cb4a43aef2559ed759c35df7336c402bb8275ac9683", size = 4294089, upload-time = "2025-10-15T23:17:48.269Z" }, + { url = "https://files.pythonhosted.org/packages/26/42/fa8389d4478368743e24e61eea78846a0006caffaf72ea24a15159215a14/cryptography-46.0.3-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:15ab9b093e8f09daab0f2159bb7e47532596075139dd74365da52ecc9cb46c5d", size = 4440029, upload-time = "2025-10-15T23:17:49.837Z" }, + { url = "https://files.pythonhosted.org/packages/5f/eb/f483db0ec5ac040824f269e93dd2bd8a21ecd1027e77ad7bdf6914f2fd80/cryptography-46.0.3-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:46acf53b40ea38f9c6c229599a4a13f0d46a6c3fa9ef19fc1a124d62e338dfa0", size = 4297222, upload-time = "2025-10-15T23:17:51.357Z" }, + { url = "https://files.pythonhosted.org/packages/fd/cf/da9502c4e1912cb1da3807ea3618a6829bee8207456fbbeebc361ec38ba3/cryptography-46.0.3-cp38-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:10ca84c4668d066a9878890047f03546f3ae0a6b8b39b697457b7757aaf18dbc", size = 4012280, upload-time = "2025-10-15T23:17:52.964Z" }, + { url = "https://files.pythonhosted.org/packages/6b/8f/9adb86b93330e0df8b3dcf03eae67c33ba89958fc2e03862ef1ac2b42465/cryptography-46.0.3-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:36e627112085bb3b81b19fed209c05ce2a52ee8b15d161b7c643a7d5a88491f3", size = 4978958, upload-time = "2025-10-15T23:17:54.965Z" }, + { url = "https://files.pythonhosted.org/packages/d1/a0/5fa77988289c34bdb9f913f5606ecc9ada1adb5ae870bd0d1054a7021cc4/cryptography-46.0.3-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:1000713389b75c449a6e979ffc7dcc8ac90b437048766cef052d4d30b8220971", size = 4473714, upload-time = "2025-10-15T23:17:56.754Z" }, + { url = "https://files.pythonhosted.org/packages/14/e5/fc82d72a58d41c393697aa18c9abe5ae1214ff6f2a5c18ac470f92777895/cryptography-46.0.3-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:b02cf04496f6576afffef5ddd04a0cb7d49cf6be16a9059d793a30b035f6b6ac", size = 4296970, upload-time = "2025-10-15T23:17:58.588Z" }, + { url = "https://files.pythonhosted.org/packages/78/06/5663ed35438d0b09056973994f1aec467492b33bd31da36e468b01ec1097/cryptography-46.0.3-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:71e842ec9bc7abf543b47cf86b9a743baa95f4677d22baa4c7d5c69e49e9bc04", size = 4940236, upload-time = "2025-10-15T23:18:00.897Z" }, + { url = "https://files.pythonhosted.org/packages/fc/59/873633f3f2dcd8a053b8dd1d38f783043b5fce589c0f6988bf55ef57e43e/cryptography-46.0.3-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:402b58fc32614f00980b66d6e56a5b4118e6cb362ae8f3fda141ba4689bd4506", size = 4472642, upload-time = "2025-10-15T23:18:02.749Z" }, + { url = "https://files.pythonhosted.org/packages/3d/39/8e71f3930e40f6877737d6f69248cf74d4e34b886a3967d32f919cc50d3b/cryptography-46.0.3-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ef639cb3372f69ec44915fafcd6698b6cc78fbe0c2ea41be867f6ed612811963", size = 4423126, upload-time = "2025-10-15T23:18:04.85Z" }, + { url = "https://files.pythonhosted.org/packages/cd/c7/f65027c2810e14c3e7268353b1681932b87e5a48e65505d8cc17c99e36ae/cryptography-46.0.3-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3b51b8ca4f1c6453d8829e1eb7299499ca7f313900dd4d89a24b8b87c0a780d4", size = 4686573, upload-time = "2025-10-15T23:18:06.908Z" }, +] + [[package]] name = "cycler" version = "0.12.1" @@ -207,6 +279,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321, upload-time = "2023-10-07T05:32:16.783Z" }, ] +[[package]] +name = "docutils" +version = "0.22.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ae/b6/03bb70946330e88ffec97aefd3ea75ba575cb2e762061e0e62a213befee8/docutils-0.22.4.tar.gz", hash = "sha256:4db53b1fde9abecbb74d91230d32ab626d94f6badfc575d6db9194a49df29968", size = 2291750, upload-time = "2025-12-18T19:00:26.443Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl", hash = "sha256:d0013f540772d1420576855455d050a2180186c91c15779301ac2ccb3eeb68de", size = 633196, upload-time = "2025-12-18T19:00:18.077Z" }, +] + [[package]] name = "et-xmlfile" version = "2.0.0" @@ -278,9 +359,10 @@ dependencies = [ { name = "xarray" }, ] -[package.optional-dependencies] +[package.dev-dependencies] dev = [ { name = "black" }, + { name = "build" }, { name = "flake8" }, { name = "mike" }, { name = "mkdocs" }, @@ -289,20 +371,16 @@ dev = [ { name = "mkdocstrings-python" }, { name = "pytest" }, { name = "ruff" }, + { name = "setuptools" }, + { name = "twine" }, + { name = "wheel" }, ] [package.metadata] requires-dist = [ - { name = "black", marker = "extra == 'dev'" }, - { name = "flake8", marker = "extra == 'dev'" }, { name = "h5netcdf", specifier = ">=1.7.3" }, { name = "h5py", specifier = ">=3.4.0" }, { name = "matplotlib", specifier = ">=3.10.1" }, - { name = "mike", marker = "extra == 'dev'", specifier = ">=2.1.3,<3" }, - { name = "mkdocs", marker = "extra == 'dev'", specifier = ">=1.6.1" }, - { name = "mkdocs-material", marker = "extra == 'dev'", specifier = ">=9.6.23" }, - { name = "mkdocstrings", marker = "extra == 'dev'", specifier = ">=0.30.1" }, - { name = "mkdocstrings-python", marker = "extra == 'dev'", specifier = ">=1.18.2" }, { name = "netcdf4", specifier = ">=1.7.2" }, { name = "numpy", specifier = ">=2.2.4" }, { name = "openpyxl", specifier = ">=3.1.5" }, @@ -310,8 +388,6 @@ requires-dist = [ { name = "pathlib", specifier = ">=1.0.1" }, { name = "pydantic", specifier = ">=2.12.4" }, { name = "pygfunction", specifier = ">=2.2.2" }, - { name = "pytest", marker = "extra == 'dev'", specifier = ">=8.4.2" }, - { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.14.6" }, { name = "scipy", specifier = ">=1.7.3" }, { name = "seaborn", specifier = ">=0.13.2" }, { name = "secondarycoolantprops", specifier = ">=1.3" }, @@ -319,7 +395,23 @@ requires-dist = [ { name = "typer", specifier = ">=0.20.0" }, { name = "xarray", specifier = ">=2025.3.1" }, ] -provides-extras = ["dev"] + +[package.metadata.requires-dev] +dev = [ + { name = "black" }, + { name = "build", specifier = ">=1.3.0" }, + { name = "flake8" }, + { name = "mike", specifier = ">=2.1.3,<3" }, + { name = "mkdocs", specifier = ">=1.6.1" }, + { name = "mkdocs-material", specifier = ">=9.6.23" }, + { name = "mkdocstrings", specifier = ">=0.30.1" }, + { name = "mkdocstrings-python", specifier = ">=1.18.2" }, + { name = "pytest", specifier = ">=8.4.2" }, + { name = "ruff", specifier = ">=0.14.6" }, + { name = "setuptools", specifier = ">=80.9.0" }, + { name = "twine", specifier = ">=6.2.0" }, + { name = "wheel", specifier = ">=0.45.1" }, +] [[package]] name = "ghp-import" @@ -385,6 +477,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/5d/c9/35021cc9cd2b2915a7da3026e3d77a05bed1144a414ff840953b33937fb9/h5py-3.15.1-cp313-cp313-win_arm64.whl", hash = "sha256:c256254a8a81e2bddc0d376e23e2a6d2dc8a1e8a2261835ed8c1281a0744cd97", size = 2449570, upload-time = "2025-10-16T10:35:00.473Z" }, ] +[[package]] +name = "id" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/22/11/102da08f88412d875fa2f1a9a469ff7ad4c874b0ca6fed0048fe385bdb3d/id-1.5.0.tar.gz", hash = "sha256:292cb8a49eacbbdbce97244f47a97b4c62540169c976552e497fd57df0734c1d", size = 15237, upload-time = "2024-12-04T19:53:05.575Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9f/cb/18326d2d89ad3b0dd143da971e77afd1e6ca6674f1b1c3df4b6bec6279fc/id-1.5.0-py3-none-any.whl", hash = "sha256:f1434e1cef91f2cbb8a4ec64663d5a23b9ed43ef44c4c957d02583d61714c658", size = 13611, upload-time = "2024-12-04T19:53:03.02Z" }, +] + [[package]] name = "idna" version = "3.11" @@ -424,6 +528,48 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, ] +[[package]] +name = "jaraco-classes" +version = "3.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "more-itertools" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/c0/ed4a27bc5571b99e3cff68f8a9fa5b56ff7df1c2251cc715a652ddd26402/jaraco.classes-3.4.0.tar.gz", hash = "sha256:47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd", size = 11780, upload-time = "2024-03-31T07:27:36.643Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl", hash = "sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790", size = 6777, upload-time = "2024-03-31T07:27:34.792Z" }, +] + +[[package]] +name = "jaraco-context" +version = "6.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/df/ad/f3777b81bf0b6e7bc7514a1656d3e637b2e8e15fab2ce3235730b3e7a4e6/jaraco_context-6.0.1.tar.gz", hash = "sha256:9bae4ea555cf0b14938dc0aee7c9f32ed303aa20a3b73e7dc80111628792d1b3", size = 13912, upload-time = "2024-08-20T03:39:27.358Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl", hash = "sha256:f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4", size = 6825, upload-time = "2024-08-20T03:39:25.966Z" }, +] + +[[package]] +name = "jaraco-functools" +version = "4.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "more-itertools" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0f/27/056e0638a86749374d6f57d0b0db39f29509cce9313cf91bdc0ac4d91084/jaraco_functools-4.4.0.tar.gz", hash = "sha256:da21933b0417b89515562656547a77b4931f98176eb173644c0d35032a33d6bb", size = 19943, upload-time = "2025-12-21T09:29:43.6Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/c4/813bb09f0985cb21e959f21f2464169eca882656849adf727ac7bb7e1767/jaraco_functools-4.4.0-py3-none-any.whl", hash = "sha256:9eec1e36f45c818d9bf307c8948eb03b2b56cd44087b3cdc989abca1f20b9176", size = 10481, upload-time = "2025-12-21T09:29:42.27Z" }, +] + +[[package]] +name = "jeepney" +version = "0.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7b/6f/357efd7602486741aa73ffc0617fb310a29b588ed0fd69c2399acbb85b0c/jeepney-0.9.0.tar.gz", hash = "sha256:cf0e9e845622b81e4a28df94c40345400256ec608d0e55bb8a3feaa9163f5732", size = 106758, upload-time = "2025-02-27T18:51:01.684Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b2/a3/e137168c9c44d18eff0376253da9f1e9234d0239e0ee230d2fee6cea8e55/jeepney-0.9.0-py3-none-any.whl", hash = "sha256:97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683", size = 49010, upload-time = "2025-02-27T18:51:00.104Z" }, +] + [[package]] name = "jinja2" version = "3.1.6" @@ -436,6 +582,23 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, ] +[[package]] +name = "keyring" +version = "25.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jaraco-classes" }, + { name = "jaraco-context" }, + { name = "jaraco-functools" }, + { name = "jeepney", marker = "sys_platform == 'linux'" }, + { name = "pywin32-ctypes", marker = "sys_platform == 'win32'" }, + { name = "secretstorage", marker = "sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/43/4b/674af6ef2f97d56f0ab5153bf0bfa28ccb6c3ed4d1babf4305449668807b/keyring-25.7.0.tar.gz", hash = "sha256:fe01bd85eb3f8fb3dd0405defdeac9a5b4f6f0439edbb3149577f244a2e8245b", size = 63516, upload-time = "2025-11-16T16:26:09.482Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/db/e655086b7f3a705df045bf0933bdd9c2f79bb3c97bfef1384598bb79a217/keyring-25.7.0-py3-none-any.whl", hash = "sha256:be4a0b195f149690c166e850609a477c532ddbfbaed96a404d4e43f8d5e2689f", size = 39160, upload-time = "2025-11-16T16:26:08.402Z" }, +] + [[package]] name = "kiwisolver" version = "1.4.9" @@ -744,6 +907,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/81/06/c5f8deba7d2cbdfa7967a716ae801aa9ca5f734b8f54fd473ef77a088dbe/mkdocstrings_python-2.0.1-py3-none-any.whl", hash = "sha256:66ecff45c5f8b71bf174e11d49afc845c2dfc7fc0ab17a86b6b337e0f24d8d90", size = 105055, upload-time = "2025-12-03T14:26:10.184Z" }, ] +[[package]] +name = "more-itertools" +version = "10.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ea/5d/38b681d3fce7a266dd9ab73c66959406d565b3e85f21d5e66e1181d93721/more_itertools-10.8.0.tar.gz", hash = "sha256:f638ddf8a1a0d134181275fb5d58b086ead7c6a72429ad725c67503f13ba30bd", size = 137431, upload-time = "2025-09-02T15:23:11.018Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl", hash = "sha256:52d4362373dcf7c52546bc4af9a86ee7c4579df9a8dc268be0a2f949d376cc9b", size = 69667, upload-time = "2025-09-02T15:23:09.635Z" }, +] + [[package]] name = "mypy-extensions" version = "1.1.0" @@ -771,6 +943,29 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/2a/f8/a5509bc46faedae2b71df29c57e6525b7eb47aee44000fd43e2927a9a3a9/netcdf4-1.7.3-cp311-abi3-win_amd64.whl", hash = "sha256:1b6c646fa179fb1e5e8d6e8231bc78cc0311eceaa1241256b5a853f1d04055b9", size = 7149328, upload-time = "2025-10-13T18:37:59.242Z" }, ] +[[package]] +name = "nh3" +version = "0.3.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ca/a5/34c26015d3a434409f4d2a1cd8821a06c05238703f49283ffeb937bef093/nh3-0.3.2.tar.gz", hash = "sha256:f394759a06df8b685a4ebfb1874fb67a9cbfd58c64fc5ed587a663c0e63ec376", size = 19288, upload-time = "2025-10-30T11:17:45.948Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b6/3e/f5a5cc2885c24be13e9b937441bd16a012ac34a657fe05e58927e8af8b7a/nh3-0.3.2-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:7064ccf5ace75825bd7bf57859daaaf16ed28660c1c6b306b649a9eda4b54b1e", size = 1431980, upload-time = "2025-10-30T11:17:25.457Z" }, + { url = "https://files.pythonhosted.org/packages/7f/f7/529a99324d7ef055de88b690858f4189379708abae92ace799365a797b7f/nh3-0.3.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8745454cdd28bbbc90861b80a0111a195b0e3961b9fa2e672be89eb199fa5d8", size = 820805, upload-time = "2025-10-30T11:17:26.98Z" }, + { url = "https://files.pythonhosted.org/packages/3d/62/19b7c50ccd1fa7d0764822d2cea8f2a320f2fd77474c7a1805cb22cf69b0/nh3-0.3.2-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:72d67c25a84579f4a432c065e8b4274e53b7cf1df8f792cf846abfe2c3090866", size = 803527, upload-time = "2025-10-30T11:17:28.284Z" }, + { url = "https://files.pythonhosted.org/packages/4a/ca/f022273bab5440abff6302731a49410c5ef66b1a9502ba3fbb2df998d9ff/nh3-0.3.2-cp38-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:13398e676a14d6233f372c75f52d5ae74f98210172991f7a3142a736bd92b131", size = 1051674, upload-time = "2025-10-30T11:17:29.909Z" }, + { url = "https://files.pythonhosted.org/packages/fa/f7/5728e3b32a11daf5bd21cf71d91c463f74305938bc3eb9e0ac1ce141646e/nh3-0.3.2-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:03d617e5c8aa7331bd2659c654e021caf9bba704b109e7b2b28b039a00949fe5", size = 1004737, upload-time = "2025-10-30T11:17:31.205Z" }, + { url = "https://files.pythonhosted.org/packages/53/7f/f17e0dba0a99cee29e6cee6d4d52340ef9cb1f8a06946d3a01eb7ec2fb01/nh3-0.3.2-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2f55c4d2d5a207e74eefe4d828067bbb01300e06e2a7436142f915c5928de07", size = 911745, upload-time = "2025-10-30T11:17:32.945Z" }, + { url = "https://files.pythonhosted.org/packages/42/0f/c76bf3dba22c73c38e9b1113b017cf163f7696f50e003404ec5ecdb1e8a6/nh3-0.3.2-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bb18403f02b655a1bbe4e3a4696c2ae1d6ae8f5991f7cacb684b1ae27e6c9f7", size = 797184, upload-time = "2025-10-30T11:17:34.226Z" }, + { url = "https://files.pythonhosted.org/packages/08/a1/73d8250f888fb0ddf1b119b139c382f8903d8bb0c5bd1f64afc7e38dad1d/nh3-0.3.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6d66f41672eb4060cf87c037f760bdbc6847852ca9ef8e9c5a5da18f090abf87", size = 838556, upload-time = "2025-10-30T11:17:35.875Z" }, + { url = "https://files.pythonhosted.org/packages/d1/09/deb57f1fb656a7a5192497f4a287b0ade5a2ff6b5d5de4736d13ef6d2c1f/nh3-0.3.2-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:f97f8b25cb2681d25e2338148159447e4d689aafdccfcf19e61ff7db3905768a", size = 1006695, upload-time = "2025-10-30T11:17:37.071Z" }, + { url = "https://files.pythonhosted.org/packages/b6/61/8f4d41c4ccdac30e4b1a4fa7be4b0f9914d8314a5058472f84c8e101a418/nh3-0.3.2-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:2ab70e8c6c7d2ce953d2a58102eefa90c2d0a5ed7aa40c7e29a487bc5e613131", size = 1075471, upload-time = "2025-10-30T11:17:38.225Z" }, + { url = "https://files.pythonhosted.org/packages/b0/c6/966aec0cb4705e69f6c3580422c239205d5d4d0e50fac380b21e87b6cf1b/nh3-0.3.2-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:1710f3901cd6440ca92494ba2eb6dc260f829fa8d9196b659fa10de825610ce0", size = 1002439, upload-time = "2025-10-30T11:17:39.553Z" }, + { url = "https://files.pythonhosted.org/packages/e2/c8/97a2d5f7a314cce2c5c49f30c6f161b7f3617960ade4bfc2fd1ee092cb20/nh3-0.3.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:91e9b001101fb4500a2aafe3e7c92928d85242d38bf5ac0aba0b7480da0a4cd6", size = 987439, upload-time = "2025-10-30T11:17:40.81Z" }, + { url = "https://files.pythonhosted.org/packages/0d/95/2d6fc6461687d7a171f087995247dec33e8749a562bfadd85fb5dbf37a11/nh3-0.3.2-cp38-abi3-win32.whl", hash = "sha256:169db03df90da63286e0560ea0efa9b6f3b59844a9735514a1d47e6bb2c8c61b", size = 589826, upload-time = "2025-10-30T11:17:42.239Z" }, + { url = "https://files.pythonhosted.org/packages/64/9a/1a1c154f10a575d20dd634e5697805e589bbdb7673a0ad00e8da90044ba7/nh3-0.3.2-cp38-abi3-win_amd64.whl", hash = "sha256:562da3dca7a17f9077593214a9781a94b8d76de4f158f8c895e62f09573945fe", size = 596406, upload-time = "2025-10-30T11:17:43.773Z" }, + { url = "https://files.pythonhosted.org/packages/9e/7e/a96255f63b7aef032cbee8fc4d6e37def72e3aaedc1f72759235e8f13cb1/nh3-0.3.2-cp38-abi3-win_arm64.whl", hash = "sha256:cf5964d54edd405e68583114a7cba929468bcd7db5e676ae38ee954de1cfc104", size = 584162, upload-time = "2025-10-30T11:17:44.96Z" }, +] + [[package]] name = "numpy" version = "2.3.5" @@ -965,6 +1160,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl", hash = "sha256:dd6bf7cb4ee77f8e016f9c8e74a35ddd9f67e1d5fd4184d86c3b98e07099f42d", size = 31594, upload-time = "2025-06-20T18:49:47.491Z" }, ] +[[package]] +name = "pycparser" +version = "2.23" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/cf/d2d3b9f5699fb1e4615c8e32ff220203e43b248e1dfcc6736ad9057731ca/pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2", size = 173734, upload-time = "2025-09-09T13:23:47.91Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934", size = 118140, upload-time = "2025-09-09T13:23:46.651Z" }, +] + [[package]] name = "pydantic" version = "2.12.5" @@ -1078,6 +1282,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/10/5e/1aa9a93198c6b64513c9d7752de7422c06402de6600a8767da1524f9570b/pyparsing-3.2.5-py3-none-any.whl", hash = "sha256:e38a4f02064cf41fe6593d328d0512495ad1f3d8a91c4f73fc401b3079a59a5e", size = 113890, upload-time = "2025-09-21T04:11:04.117Z" }, ] +[[package]] +name = "pyproject-hooks" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/82/28175b2414effca1cdac8dc99f76d660e7a4fb0ceefa4b4ab8f5f6742925/pyproject_hooks-1.2.0.tar.gz", hash = "sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8", size = 19228, upload-time = "2024-09-29T09:24:13.293Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl", hash = "sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913", size = 10216, upload-time = "2024-09-29T09:24:11.978Z" }, +] + [[package]] name = "pytest" version = "9.0.2" @@ -1124,6 +1337,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225, upload-time = "2025-03-25T02:24:58.468Z" }, ] +[[package]] +name = "pywin32-ctypes" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/85/9f/01a1a99704853cb63f253eea009390c88e7131c67e66a0a02099a8c917cb/pywin32-ctypes-0.2.3.tar.gz", hash = "sha256:d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755", size = 29471, upload-time = "2024-08-14T10:15:34.626Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl", hash = "sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8", size = 30756, upload-time = "2024-08-14T10:15:33.187Z" }, +] + [[package]] name = "pyyaml" version = "6.0.3" @@ -1164,6 +1386,20 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl", hash = "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04", size = 4722, upload-time = "2025-05-13T15:23:59.629Z" }, ] +[[package]] +name = "readme-renderer" +version = "44.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "docutils" }, + { name = "nh3" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5a/a9/104ec9234c8448c4379768221ea6df01260cd6c2ce13182d4eac531c8342/readme_renderer-44.0.tar.gz", hash = "sha256:8712034eabbfa6805cacf1402b4eeb2a73028f72d1166d6f5cb7f9c047c5d1e1", size = 32056, upload-time = "2024-07-08T15:00:57.805Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/67/921ec3024056483db83953ae8e48079ad62b92db7880013ca77632921dd0/readme_renderer-44.0-py3-none-any.whl", hash = "sha256:2fbca89b81a08526aadf1357a8c2ae889ec05fb03f5da67f9769c9a592166151", size = 13310, upload-time = "2024-07-08T15:00:56.577Z" }, +] + [[package]] name = "requests" version = "2.32.5" @@ -1179,6 +1415,27 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738, upload-time = "2025-08-18T20:46:00.542Z" }, ] +[[package]] +name = "requests-toolbelt" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f3/61/d7545dafb7ac2230c70d38d31cbfe4cc64f7144dc41f6e4e4b78ecd9f5bb/requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", size = 206888, upload-time = "2023-05-01T04:11:33.229Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06", size = 54481, upload-time = "2023-05-01T04:11:28.427Z" }, +] + +[[package]] +name = "rfc3986" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/85/40/1520d68bfa07ab5a6f065a186815fb6610c86fe957bc065754e47f7b0840/rfc3986-2.0.0.tar.gz", hash = "sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c", size = 49026, upload-time = "2022-01-10T00:52:30.832Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl", hash = "sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd", size = 31326, upload-time = "2022-01-10T00:52:29.594Z" }, +] + [[package]] name = "rich" version = "14.2.0" @@ -1285,6 +1542,28 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0b/68/4cc6d36beeaabb532d15ead8ed635fb34bf0b2c7ee02de3f79e9b1ba5ebc/secondarycoolantprops-1.3-py3-none-any.whl", hash = "sha256:10e10e276f946009f7c6730e17d5c92652db7ab256502d2ad1591664b4462d76", size = 13386, upload-time = "2025-01-21T20:04:16.001Z" }, ] +[[package]] +name = "secretstorage" +version = "3.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography" }, + { name = "jeepney" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1c/03/e834bcd866f2f8a49a85eaff47340affa3bfa391ee9912a952a1faa68c7b/secretstorage-3.5.0.tar.gz", hash = "sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be", size = 19884, upload-time = "2025-11-23T19:02:53.191Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/46/f5af3402b579fd5e11573ce652019a67074317e18c1935cc0b4ba9b35552/secretstorage-3.5.0-py3-none-any.whl", hash = "sha256:0ce65888c0725fcb2c5bc0fdb8e5438eece02c523557ea40ce0703c266248137", size = 15554, upload-time = "2025-11-23T19:02:51.545Z" }, +] + +[[package]] +name = "setuptools" +version = "80.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/18/5d/3bf57dcd21979b887f014ea83c24ae194cfcd12b9e0fda66b957c69d1fca/setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c", size = 1319958, upload-time = "2025-05-27T00:56:51.443Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922", size = 1201486, upload-time = "2025-05-27T00:56:49.664Z" }, +] + [[package]] name = "shellingham" version = "1.5.4" @@ -1315,6 +1594,26 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540, upload-time = "2024-11-24T20:12:19.698Z" }, ] +[[package]] +name = "twine" +version = "6.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "id" }, + { name = "keyring", marker = "platform_machine != 'ppc64le' and platform_machine != 's390x'" }, + { name = "packaging" }, + { name = "readme-renderer" }, + { name = "requests" }, + { name = "requests-toolbelt" }, + { name = "rfc3986" }, + { name = "rich" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e0/a8/949edebe3a82774c1ec34f637f5dd82d1cf22c25e963b7d63771083bbee5/twine-6.2.0.tar.gz", hash = "sha256:e5ed0d2fd70c9959770dce51c8f39c8945c574e18173a7b81802dab51b4b75cf", size = 172262, upload-time = "2025-09-04T15:43:17.255Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl", hash = "sha256:418ebf08ccda9a8caaebe414433b0ba5e25eb5e4a927667122fbe8f829f985d8", size = 42727, upload-time = "2025-09-04T15:43:15.994Z" }, +] + [[package]] name = "typer" version = "0.20.0" @@ -1402,6 +1701,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/33/e8/e40370e6d74ddba47f002a32919d91310d6074130fe4e17dabcafc15cbf1/watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f", size = 79067, upload-time = "2024-11-01T14:07:11.845Z" }, ] +[[package]] +name = "wheel" +version = "0.45.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8a/98/2d9906746cdc6a6ef809ae6338005b3f21bb568bea3165cfc6a243fdc25c/wheel-0.45.1.tar.gz", hash = "sha256:661e1abd9198507b1409a20c02106d9670b2576e916d58f520316666abca6729", size = 107545, upload-time = "2024-11-23T00:18:23.513Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/2c/87f3254fd8ffd29e4c02732eee68a83a1d3c346ae39bc6822dcbcb697f2b/wheel-0.45.1-py3-none-any.whl", hash = "sha256:708e7481cc80179af0e556bbf0cc00b8444c7321e2700b8d8580231d13017248", size = 72494, upload-time = "2024-11-23T00:18:21.207Z" }, +] + [[package]] name = "xarray" version = "2025.12.0" -- GitLab From 902bd6377691c4160f2dfde9251a16833885d346 Mon Sep 17 00:00:00 2001 From: korevaarzer Date: Mon, 22 Dec 2025 10:25:38 +0100 Subject: [PATCH 4/4] Add package building dependencies to venv and dev dependencies group --- .gitlab-ci.yml | 2 +- pyproject.toml | 6 +- uv.lock | 330 +++++++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 325 insertions(+), 13 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 859bdd7..7dc3c64 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -8,7 +8,7 @@ Run tests: before_script: - pip install uv - uv venv - - uv sync --extra dev + - uv sync --group dev - uv pip install -e . script: - uv run pytest -vv diff --git a/pyproject.toml b/pyproject.toml index b079eac..097470d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,7 +36,7 @@ dependencies = [ "typer>=0.20.0", ] -[project.optional-dependencies] +[dependency-groups] dev = [ "ruff>=0.14.6", "black", @@ -47,6 +47,10 @@ dev = [ "mike>=2.1.3,<3", "mkdocstrings>=0.30.1", "mkdocstrings-python>=1.18.2", + "build>=1.3.0", + "twine>=6.2.0", + "wheel>=0.45.1", + "setuptools>=80.9.0", ] [tool.setuptools.packages.find] diff --git a/uv.lock b/uv.lock index 64df28b..e4e9a41 100644 --- a/uv.lock +++ b/uv.lock @@ -60,6 +60,20 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/68/11/21331aed19145a952ad28fca2756a1433ee9308079bd03bd898e903a2e53/black-25.12.0-py3-none-any.whl", hash = "sha256:48ceb36c16dbc84062740049eef990bb2ce07598272e673c17d1a7720c71c828", size = 206191, upload-time = "2025-12-08T01:40:50.963Z" }, ] +[[package]] +name = "build" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "os_name == 'nt'" }, + { name = "packaging" }, + { name = "pyproject-hooks" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/25/1c/23e33405a7c9eac261dff640926b8b5adaed6a6eb3e1767d441ed611d0c0/build-1.3.0.tar.gz", hash = "sha256:698edd0ea270bde950f53aed21f3a0135672206f3911e0176261a31e0e07b397", size = 48544, upload-time = "2025-08-01T21:27:09.268Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/8c/2b30c12155ad8de0cf641d76a8b396a16d2c36bc6d50b621a62b7c4567c1/build-1.3.0-py3-none-any.whl", hash = "sha256:7145f0b5061ba90a1500d60bd1b13ca0a8a4cebdd0cc16ed8adf1c0e739f43b4", size = 23382, upload-time = "2025-08-01T21:27:07.844Z" }, +] + [[package]] name = "certifi" version = "2025.11.12" @@ -69,6 +83,31 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/70/7d/9bc192684cea499815ff478dfcdc13835ddf401365057044fb721ec6bddb/certifi-2025.11.12-py3-none-any.whl", hash = "sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b", size = 159438, upload-time = "2025-11-12T02:54:49.735Z" }, ] +[[package]] +name = "cffi" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ff/df/a4f0fbd47331ceeba3d37c2e51e9dfc9722498becbeec2bd8bc856c9538a/cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe", size = 212529, upload-time = "2025-09-08T23:22:47.349Z" }, + { url = "https://files.pythonhosted.org/packages/d5/72/12b5f8d3865bf0f87cf1404d8c374e7487dcf097a1c91c436e72e6badd83/cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062", size = 220097, upload-time = "2025-09-08T23:22:48.677Z" }, + { url = "https://files.pythonhosted.org/packages/c2/95/7a135d52a50dfa7c882ab0ac17e8dc11cec9d55d2c18dda414c051c5e69e/cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e", size = 207983, upload-time = "2025-09-08T23:22:50.06Z" }, + { url = "https://files.pythonhosted.org/packages/3a/c8/15cb9ada8895957ea171c62dc78ff3e99159ee7adb13c0123c001a2546c1/cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037", size = 206519, upload-time = "2025-09-08T23:22:51.364Z" }, + { url = "https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba", size = 219572, upload-time = "2025-09-08T23:22:52.902Z" }, + { url = "https://files.pythonhosted.org/packages/07/e0/267e57e387b4ca276b90f0434ff88b2c2241ad72b16d31836adddfd6031b/cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94", size = 222963, upload-time = "2025-09-08T23:22:54.518Z" }, + { url = "https://files.pythonhosted.org/packages/b6/75/1f2747525e06f53efbd878f4d03bac5b859cbc11c633d0fb81432d98a795/cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187", size = 221361, upload-time = "2025-09-08T23:22:55.867Z" }, + { url = "https://files.pythonhosted.org/packages/b0/1e/d22cc63332bd59b06481ceaac49d6c507598642e2230f201649058a7e704/cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b", size = 212446, upload-time = "2025-09-08T23:23:03.472Z" }, + { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", size = 220101, upload-time = "2025-09-08T23:23:04.792Z" }, + { url = "https://files.pythonhosted.org/packages/f2/7f/e6647792fc5850d634695bc0e6ab4111ae88e89981d35ac269956605feba/cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2", size = 207948, upload-time = "2025-09-08T23:23:06.127Z" }, + { url = "https://files.pythonhosted.org/packages/cb/1e/a5a1bd6f1fb30f22573f76533de12a00bf274abcdc55c8edab639078abb6/cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3", size = 206422, upload-time = "2025-09-08T23:23:07.753Z" }, + { url = "https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26", size = 219499, upload-time = "2025-09-08T23:23:09.648Z" }, + { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", size = 222928, upload-time = "2025-09-08T23:23:10.928Z" }, + { url = "https://files.pythonhosted.org/packages/36/54/0362578dd2c9e557a28ac77698ed67323ed5b9775ca9d3fe73fe191bb5d8/cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b", size = 221302, upload-time = "2025-09-08T23:23:12.42Z" }, +] + [[package]] name = "cftime" version = "1.6.5" @@ -198,6 +237,39 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/80/99/2adc7d8ffead633234817ef8e9a87115c8a11927a94478f6bb3d3f4d4f7d/contourpy-1.3.3-cp313-cp313t-win_arm64.whl", hash = "sha256:3c30273eb2a55024ff31ba7d052dde990d7d8e5450f4bbb6e913558b3d6c2301", size = 199713, upload-time = "2025-07-26T12:02:14.4Z" }, ] +[[package]] +name = "cryptography" +version = "46.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9f/33/c00162f49c0e2fe8064a62cb92b93e50c74a72bc370ab92f86112b33ff62/cryptography-46.0.3.tar.gz", hash = "sha256:a8b17438104fed022ce745b362294d9ce35b4c2e45c1d958ad4a4b019285f4a1", size = 749258, upload-time = "2025-10-15T23:18:31.74Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1c/67/38769ca6b65f07461eb200e85fc1639b438bdc667be02cf7f2cd6a64601c/cryptography-46.0.3-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:09859af8466b69bc3c27bdf4f5d84a665e0f7ab5088412e9e2ec49758eca5cbc", size = 4296667, upload-time = "2025-10-15T23:16:54.369Z" }, + { url = "https://files.pythonhosted.org/packages/5c/49/498c86566a1d80e978b42f0d702795f69887005548c041636df6ae1ca64c/cryptography-46.0.3-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:01ca9ff2885f3acc98c29f1860552e37f6d7c7d013d7334ff2a9de43a449315d", size = 4450807, upload-time = "2025-10-15T23:16:56.414Z" }, + { url = "https://files.pythonhosted.org/packages/4b/0a/863a3604112174c8624a2ac3c038662d9e59970c7f926acdcfaed8d61142/cryptography-46.0.3-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:6eae65d4c3d33da080cff9c4ab1f711b15c1d9760809dad6ea763f3812d254cb", size = 4299615, upload-time = "2025-10-15T23:16:58.442Z" }, + { url = "https://files.pythonhosted.org/packages/64/02/b73a533f6b64a69f3cd3872acb6ebc12aef924d8d103133bb3ea750dc703/cryptography-46.0.3-cp311-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5bf0ed4490068a2e72ac03d786693adeb909981cc596425d09032d372bcc849", size = 4016800, upload-time = "2025-10-15T23:17:00.378Z" }, + { url = "https://files.pythonhosted.org/packages/25/d5/16e41afbfa450cde85a3b7ec599bebefaef16b5c6ba4ec49a3532336ed72/cryptography-46.0.3-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:5ecfccd2329e37e9b7112a888e76d9feca2347f12f37918facbb893d7bb88ee8", size = 4984707, upload-time = "2025-10-15T23:17:01.98Z" }, + { url = "https://files.pythonhosted.org/packages/c9/56/e7e69b427c3878352c2fb9b450bd0e19ed552753491d39d7d0a2f5226d41/cryptography-46.0.3-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:a2c0cd47381a3229c403062f764160d57d4d175e022c1df84e168c6251a22eec", size = 4482541, upload-time = "2025-10-15T23:17:04.078Z" }, + { url = "https://files.pythonhosted.org/packages/78/f6/50736d40d97e8483172f1bb6e698895b92a223dba513b0ca6f06b2365339/cryptography-46.0.3-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:549e234ff32571b1f4076ac269fcce7a808d3bf98b76c8dd560e42dbc66d7d91", size = 4299464, upload-time = "2025-10-15T23:17:05.483Z" }, + { url = "https://files.pythonhosted.org/packages/00/de/d8e26b1a855f19d9994a19c702fa2e93b0456beccbcfe437eda00e0701f2/cryptography-46.0.3-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:c0a7bb1a68a5d3471880e264621346c48665b3bf1c3759d682fc0864c540bd9e", size = 4950838, upload-time = "2025-10-15T23:17:07.425Z" }, + { url = "https://files.pythonhosted.org/packages/8f/29/798fc4ec461a1c9e9f735f2fc58741b0daae30688f41b2497dcbc9ed1355/cryptography-46.0.3-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:10b01676fc208c3e6feeb25a8b83d81767e8059e1fe86e1dc62d10a3018fa926", size = 4481596, upload-time = "2025-10-15T23:17:09.343Z" }, + { url = "https://files.pythonhosted.org/packages/15/8d/03cd48b20a573adfff7652b76271078e3045b9f49387920e7f1f631d125e/cryptography-46.0.3-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0abf1ffd6e57c67e92af68330d05760b7b7efb243aab8377e583284dbab72c71", size = 4426782, upload-time = "2025-10-15T23:17:11.22Z" }, + { url = "https://files.pythonhosted.org/packages/fa/b1/ebacbfe53317d55cf33165bda24c86523497a6881f339f9aae5c2e13e57b/cryptography-46.0.3-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a04bee9ab6a4da801eb9b51f1b708a1b5b5c9eb48c03f74198464c66f0d344ac", size = 4698381, upload-time = "2025-10-15T23:17:12.829Z" }, + { url = "https://files.pythonhosted.org/packages/27/32/b68d27471372737054cbd34c84981f9edbc24fe67ca225d389799614e27f/cryptography-46.0.3-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4b7387121ac7d15e550f5cb4a43aef2559ed759c35df7336c402bb8275ac9683", size = 4294089, upload-time = "2025-10-15T23:17:48.269Z" }, + { url = "https://files.pythonhosted.org/packages/26/42/fa8389d4478368743e24e61eea78846a0006caffaf72ea24a15159215a14/cryptography-46.0.3-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:15ab9b093e8f09daab0f2159bb7e47532596075139dd74365da52ecc9cb46c5d", size = 4440029, upload-time = "2025-10-15T23:17:49.837Z" }, + { url = "https://files.pythonhosted.org/packages/5f/eb/f483db0ec5ac040824f269e93dd2bd8a21ecd1027e77ad7bdf6914f2fd80/cryptography-46.0.3-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:46acf53b40ea38f9c6c229599a4a13f0d46a6c3fa9ef19fc1a124d62e338dfa0", size = 4297222, upload-time = "2025-10-15T23:17:51.357Z" }, + { url = "https://files.pythonhosted.org/packages/fd/cf/da9502c4e1912cb1da3807ea3618a6829bee8207456fbbeebc361ec38ba3/cryptography-46.0.3-cp38-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:10ca84c4668d066a9878890047f03546f3ae0a6b8b39b697457b7757aaf18dbc", size = 4012280, upload-time = "2025-10-15T23:17:52.964Z" }, + { url = "https://files.pythonhosted.org/packages/6b/8f/9adb86b93330e0df8b3dcf03eae67c33ba89958fc2e03862ef1ac2b42465/cryptography-46.0.3-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:36e627112085bb3b81b19fed209c05ce2a52ee8b15d161b7c643a7d5a88491f3", size = 4978958, upload-time = "2025-10-15T23:17:54.965Z" }, + { url = "https://files.pythonhosted.org/packages/d1/a0/5fa77988289c34bdb9f913f5606ecc9ada1adb5ae870bd0d1054a7021cc4/cryptography-46.0.3-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:1000713389b75c449a6e979ffc7dcc8ac90b437048766cef052d4d30b8220971", size = 4473714, upload-time = "2025-10-15T23:17:56.754Z" }, + { url = "https://files.pythonhosted.org/packages/14/e5/fc82d72a58d41c393697aa18c9abe5ae1214ff6f2a5c18ac470f92777895/cryptography-46.0.3-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:b02cf04496f6576afffef5ddd04a0cb7d49cf6be16a9059d793a30b035f6b6ac", size = 4296970, upload-time = "2025-10-15T23:17:58.588Z" }, + { url = "https://files.pythonhosted.org/packages/78/06/5663ed35438d0b09056973994f1aec467492b33bd31da36e468b01ec1097/cryptography-46.0.3-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:71e842ec9bc7abf543b47cf86b9a743baa95f4677d22baa4c7d5c69e49e9bc04", size = 4940236, upload-time = "2025-10-15T23:18:00.897Z" }, + { url = "https://files.pythonhosted.org/packages/fc/59/873633f3f2dcd8a053b8dd1d38f783043b5fce589c0f6988bf55ef57e43e/cryptography-46.0.3-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:402b58fc32614f00980b66d6e56a5b4118e6cb362ae8f3fda141ba4689bd4506", size = 4472642, upload-time = "2025-10-15T23:18:02.749Z" }, + { url = "https://files.pythonhosted.org/packages/3d/39/8e71f3930e40f6877737d6f69248cf74d4e34b886a3967d32f919cc50d3b/cryptography-46.0.3-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ef639cb3372f69ec44915fafcd6698b6cc78fbe0c2ea41be867f6ed612811963", size = 4423126, upload-time = "2025-10-15T23:18:04.85Z" }, + { url = "https://files.pythonhosted.org/packages/cd/c7/f65027c2810e14c3e7268353b1681932b87e5a48e65505d8cc17c99e36ae/cryptography-46.0.3-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3b51b8ca4f1c6453d8829e1eb7299499ca7f313900dd4d89a24b8b87c0a780d4", size = 4686573, upload-time = "2025-10-15T23:18:06.908Z" }, +] + [[package]] name = "cycler" version = "0.12.1" @@ -207,6 +279,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321, upload-time = "2023-10-07T05:32:16.783Z" }, ] +[[package]] +name = "docutils" +version = "0.22.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ae/b6/03bb70946330e88ffec97aefd3ea75ba575cb2e762061e0e62a213befee8/docutils-0.22.4.tar.gz", hash = "sha256:4db53b1fde9abecbb74d91230d32ab626d94f6badfc575d6db9194a49df29968", size = 2291750, upload-time = "2025-12-18T19:00:26.443Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl", hash = "sha256:d0013f540772d1420576855455d050a2180186c91c15779301ac2ccb3eeb68de", size = 633196, upload-time = "2025-12-18T19:00:18.077Z" }, +] + [[package]] name = "et-xmlfile" version = "2.0.0" @@ -278,9 +359,10 @@ dependencies = [ { name = "xarray" }, ] -[package.optional-dependencies] +[package.dev-dependencies] dev = [ { name = "black" }, + { name = "build" }, { name = "flake8" }, { name = "mike" }, { name = "mkdocs" }, @@ -289,20 +371,16 @@ dev = [ { name = "mkdocstrings-python" }, { name = "pytest" }, { name = "ruff" }, + { name = "setuptools" }, + { name = "twine" }, + { name = "wheel" }, ] [package.metadata] requires-dist = [ - { name = "black", marker = "extra == 'dev'" }, - { name = "flake8", marker = "extra == 'dev'" }, { name = "h5netcdf", specifier = ">=1.7.3" }, { name = "h5py", specifier = ">=3.4.0" }, { name = "matplotlib", specifier = ">=3.10.1" }, - { name = "mike", marker = "extra == 'dev'", specifier = ">=2.1.3,<3" }, - { name = "mkdocs", marker = "extra == 'dev'", specifier = ">=1.6.1" }, - { name = "mkdocs-material", marker = "extra == 'dev'", specifier = ">=9.6.23" }, - { name = "mkdocstrings", marker = "extra == 'dev'", specifier = ">=0.30.1" }, - { name = "mkdocstrings-python", marker = "extra == 'dev'", specifier = ">=1.18.2" }, { name = "netcdf4", specifier = ">=1.7.2" }, { name = "numpy", specifier = ">=2.2.4" }, { name = "openpyxl", specifier = ">=3.1.5" }, @@ -310,8 +388,6 @@ requires-dist = [ { name = "pathlib", specifier = ">=1.0.1" }, { name = "pydantic", specifier = ">=2.12.4" }, { name = "pygfunction", specifier = ">=2.2.2" }, - { name = "pytest", marker = "extra == 'dev'", specifier = ">=8.4.2" }, - { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.14.6" }, { name = "scipy", specifier = ">=1.7.3" }, { name = "seaborn", specifier = ">=0.13.2" }, { name = "secondarycoolantprops", specifier = ">=1.3" }, @@ -319,7 +395,23 @@ requires-dist = [ { name = "typer", specifier = ">=0.20.0" }, { name = "xarray", specifier = ">=2025.3.1" }, ] -provides-extras = ["dev"] + +[package.metadata.requires-dev] +dev = [ + { name = "black" }, + { name = "build", specifier = ">=1.3.0" }, + { name = "flake8" }, + { name = "mike", specifier = ">=2.1.3,<3" }, + { name = "mkdocs", specifier = ">=1.6.1" }, + { name = "mkdocs-material", specifier = ">=9.6.23" }, + { name = "mkdocstrings", specifier = ">=0.30.1" }, + { name = "mkdocstrings-python", specifier = ">=1.18.2" }, + { name = "pytest", specifier = ">=8.4.2" }, + { name = "ruff", specifier = ">=0.14.6" }, + { name = "setuptools", specifier = ">=80.9.0" }, + { name = "twine", specifier = ">=6.2.0" }, + { name = "wheel", specifier = ">=0.45.1" }, +] [[package]] name = "ghp-import" @@ -385,6 +477,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/5d/c9/35021cc9cd2b2915a7da3026e3d77a05bed1144a414ff840953b33937fb9/h5py-3.15.1-cp313-cp313-win_arm64.whl", hash = "sha256:c256254a8a81e2bddc0d376e23e2a6d2dc8a1e8a2261835ed8c1281a0744cd97", size = 2449570, upload-time = "2025-10-16T10:35:00.473Z" }, ] +[[package]] +name = "id" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/22/11/102da08f88412d875fa2f1a9a469ff7ad4c874b0ca6fed0048fe385bdb3d/id-1.5.0.tar.gz", hash = "sha256:292cb8a49eacbbdbce97244f47a97b4c62540169c976552e497fd57df0734c1d", size = 15237, upload-time = "2024-12-04T19:53:05.575Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9f/cb/18326d2d89ad3b0dd143da971e77afd1e6ca6674f1b1c3df4b6bec6279fc/id-1.5.0-py3-none-any.whl", hash = "sha256:f1434e1cef91f2cbb8a4ec64663d5a23b9ed43ef44c4c957d02583d61714c658", size = 13611, upload-time = "2024-12-04T19:53:03.02Z" }, +] + [[package]] name = "idna" version = "3.11" @@ -424,6 +528,48 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, ] +[[package]] +name = "jaraco-classes" +version = "3.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "more-itertools" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/c0/ed4a27bc5571b99e3cff68f8a9fa5b56ff7df1c2251cc715a652ddd26402/jaraco.classes-3.4.0.tar.gz", hash = "sha256:47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd", size = 11780, upload-time = "2024-03-31T07:27:36.643Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl", hash = "sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790", size = 6777, upload-time = "2024-03-31T07:27:34.792Z" }, +] + +[[package]] +name = "jaraco-context" +version = "6.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/df/ad/f3777b81bf0b6e7bc7514a1656d3e637b2e8e15fab2ce3235730b3e7a4e6/jaraco_context-6.0.1.tar.gz", hash = "sha256:9bae4ea555cf0b14938dc0aee7c9f32ed303aa20a3b73e7dc80111628792d1b3", size = 13912, upload-time = "2024-08-20T03:39:27.358Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl", hash = "sha256:f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4", size = 6825, upload-time = "2024-08-20T03:39:25.966Z" }, +] + +[[package]] +name = "jaraco-functools" +version = "4.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "more-itertools" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0f/27/056e0638a86749374d6f57d0b0db39f29509cce9313cf91bdc0ac4d91084/jaraco_functools-4.4.0.tar.gz", hash = "sha256:da21933b0417b89515562656547a77b4931f98176eb173644c0d35032a33d6bb", size = 19943, upload-time = "2025-12-21T09:29:43.6Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/c4/813bb09f0985cb21e959f21f2464169eca882656849adf727ac7bb7e1767/jaraco_functools-4.4.0-py3-none-any.whl", hash = "sha256:9eec1e36f45c818d9bf307c8948eb03b2b56cd44087b3cdc989abca1f20b9176", size = 10481, upload-time = "2025-12-21T09:29:42.27Z" }, +] + +[[package]] +name = "jeepney" +version = "0.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7b/6f/357efd7602486741aa73ffc0617fb310a29b588ed0fd69c2399acbb85b0c/jeepney-0.9.0.tar.gz", hash = "sha256:cf0e9e845622b81e4a28df94c40345400256ec608d0e55bb8a3feaa9163f5732", size = 106758, upload-time = "2025-02-27T18:51:01.684Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b2/a3/e137168c9c44d18eff0376253da9f1e9234d0239e0ee230d2fee6cea8e55/jeepney-0.9.0-py3-none-any.whl", hash = "sha256:97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683", size = 49010, upload-time = "2025-02-27T18:51:00.104Z" }, +] + [[package]] name = "jinja2" version = "3.1.6" @@ -436,6 +582,23 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, ] +[[package]] +name = "keyring" +version = "25.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jaraco-classes" }, + { name = "jaraco-context" }, + { name = "jaraco-functools" }, + { name = "jeepney", marker = "sys_platform == 'linux'" }, + { name = "pywin32-ctypes", marker = "sys_platform == 'win32'" }, + { name = "secretstorage", marker = "sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/43/4b/674af6ef2f97d56f0ab5153bf0bfa28ccb6c3ed4d1babf4305449668807b/keyring-25.7.0.tar.gz", hash = "sha256:fe01bd85eb3f8fb3dd0405defdeac9a5b4f6f0439edbb3149577f244a2e8245b", size = 63516, upload-time = "2025-11-16T16:26:09.482Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/db/e655086b7f3a705df045bf0933bdd9c2f79bb3c97bfef1384598bb79a217/keyring-25.7.0-py3-none-any.whl", hash = "sha256:be4a0b195f149690c166e850609a477c532ddbfbaed96a404d4e43f8d5e2689f", size = 39160, upload-time = "2025-11-16T16:26:08.402Z" }, +] + [[package]] name = "kiwisolver" version = "1.4.9" @@ -744,6 +907,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/81/06/c5f8deba7d2cbdfa7967a716ae801aa9ca5f734b8f54fd473ef77a088dbe/mkdocstrings_python-2.0.1-py3-none-any.whl", hash = "sha256:66ecff45c5f8b71bf174e11d49afc845c2dfc7fc0ab17a86b6b337e0f24d8d90", size = 105055, upload-time = "2025-12-03T14:26:10.184Z" }, ] +[[package]] +name = "more-itertools" +version = "10.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ea/5d/38b681d3fce7a266dd9ab73c66959406d565b3e85f21d5e66e1181d93721/more_itertools-10.8.0.tar.gz", hash = "sha256:f638ddf8a1a0d134181275fb5d58b086ead7c6a72429ad725c67503f13ba30bd", size = 137431, upload-time = "2025-09-02T15:23:11.018Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl", hash = "sha256:52d4362373dcf7c52546bc4af9a86ee7c4579df9a8dc268be0a2f949d376cc9b", size = 69667, upload-time = "2025-09-02T15:23:09.635Z" }, +] + [[package]] name = "mypy-extensions" version = "1.1.0" @@ -771,6 +943,29 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/2a/f8/a5509bc46faedae2b71df29c57e6525b7eb47aee44000fd43e2927a9a3a9/netcdf4-1.7.3-cp311-abi3-win_amd64.whl", hash = "sha256:1b6c646fa179fb1e5e8d6e8231bc78cc0311eceaa1241256b5a853f1d04055b9", size = 7149328, upload-time = "2025-10-13T18:37:59.242Z" }, ] +[[package]] +name = "nh3" +version = "0.3.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ca/a5/34c26015d3a434409f4d2a1cd8821a06c05238703f49283ffeb937bef093/nh3-0.3.2.tar.gz", hash = "sha256:f394759a06df8b685a4ebfb1874fb67a9cbfd58c64fc5ed587a663c0e63ec376", size = 19288, upload-time = "2025-10-30T11:17:45.948Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b6/3e/f5a5cc2885c24be13e9b937441bd16a012ac34a657fe05e58927e8af8b7a/nh3-0.3.2-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:7064ccf5ace75825bd7bf57859daaaf16ed28660c1c6b306b649a9eda4b54b1e", size = 1431980, upload-time = "2025-10-30T11:17:25.457Z" }, + { url = "https://files.pythonhosted.org/packages/7f/f7/529a99324d7ef055de88b690858f4189379708abae92ace799365a797b7f/nh3-0.3.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8745454cdd28bbbc90861b80a0111a195b0e3961b9fa2e672be89eb199fa5d8", size = 820805, upload-time = "2025-10-30T11:17:26.98Z" }, + { url = "https://files.pythonhosted.org/packages/3d/62/19b7c50ccd1fa7d0764822d2cea8f2a320f2fd77474c7a1805cb22cf69b0/nh3-0.3.2-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:72d67c25a84579f4a432c065e8b4274e53b7cf1df8f792cf846abfe2c3090866", size = 803527, upload-time = "2025-10-30T11:17:28.284Z" }, + { url = "https://files.pythonhosted.org/packages/4a/ca/f022273bab5440abff6302731a49410c5ef66b1a9502ba3fbb2df998d9ff/nh3-0.3.2-cp38-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:13398e676a14d6233f372c75f52d5ae74f98210172991f7a3142a736bd92b131", size = 1051674, upload-time = "2025-10-30T11:17:29.909Z" }, + { url = "https://files.pythonhosted.org/packages/fa/f7/5728e3b32a11daf5bd21cf71d91c463f74305938bc3eb9e0ac1ce141646e/nh3-0.3.2-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:03d617e5c8aa7331bd2659c654e021caf9bba704b109e7b2b28b039a00949fe5", size = 1004737, upload-time = "2025-10-30T11:17:31.205Z" }, + { url = "https://files.pythonhosted.org/packages/53/7f/f17e0dba0a99cee29e6cee6d4d52340ef9cb1f8a06946d3a01eb7ec2fb01/nh3-0.3.2-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2f55c4d2d5a207e74eefe4d828067bbb01300e06e2a7436142f915c5928de07", size = 911745, upload-time = "2025-10-30T11:17:32.945Z" }, + { url = "https://files.pythonhosted.org/packages/42/0f/c76bf3dba22c73c38e9b1113b017cf163f7696f50e003404ec5ecdb1e8a6/nh3-0.3.2-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bb18403f02b655a1bbe4e3a4696c2ae1d6ae8f5991f7cacb684b1ae27e6c9f7", size = 797184, upload-time = "2025-10-30T11:17:34.226Z" }, + { url = "https://files.pythonhosted.org/packages/08/a1/73d8250f888fb0ddf1b119b139c382f8903d8bb0c5bd1f64afc7e38dad1d/nh3-0.3.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6d66f41672eb4060cf87c037f760bdbc6847852ca9ef8e9c5a5da18f090abf87", size = 838556, upload-time = "2025-10-30T11:17:35.875Z" }, + { url = "https://files.pythonhosted.org/packages/d1/09/deb57f1fb656a7a5192497f4a287b0ade5a2ff6b5d5de4736d13ef6d2c1f/nh3-0.3.2-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:f97f8b25cb2681d25e2338148159447e4d689aafdccfcf19e61ff7db3905768a", size = 1006695, upload-time = "2025-10-30T11:17:37.071Z" }, + { url = "https://files.pythonhosted.org/packages/b6/61/8f4d41c4ccdac30e4b1a4fa7be4b0f9914d8314a5058472f84c8e101a418/nh3-0.3.2-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:2ab70e8c6c7d2ce953d2a58102eefa90c2d0a5ed7aa40c7e29a487bc5e613131", size = 1075471, upload-time = "2025-10-30T11:17:38.225Z" }, + { url = "https://files.pythonhosted.org/packages/b0/c6/966aec0cb4705e69f6c3580422c239205d5d4d0e50fac380b21e87b6cf1b/nh3-0.3.2-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:1710f3901cd6440ca92494ba2eb6dc260f829fa8d9196b659fa10de825610ce0", size = 1002439, upload-time = "2025-10-30T11:17:39.553Z" }, + { url = "https://files.pythonhosted.org/packages/e2/c8/97a2d5f7a314cce2c5c49f30c6f161b7f3617960ade4bfc2fd1ee092cb20/nh3-0.3.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:91e9b001101fb4500a2aafe3e7c92928d85242d38bf5ac0aba0b7480da0a4cd6", size = 987439, upload-time = "2025-10-30T11:17:40.81Z" }, + { url = "https://files.pythonhosted.org/packages/0d/95/2d6fc6461687d7a171f087995247dec33e8749a562bfadd85fb5dbf37a11/nh3-0.3.2-cp38-abi3-win32.whl", hash = "sha256:169db03df90da63286e0560ea0efa9b6f3b59844a9735514a1d47e6bb2c8c61b", size = 589826, upload-time = "2025-10-30T11:17:42.239Z" }, + { url = "https://files.pythonhosted.org/packages/64/9a/1a1c154f10a575d20dd634e5697805e589bbdb7673a0ad00e8da90044ba7/nh3-0.3.2-cp38-abi3-win_amd64.whl", hash = "sha256:562da3dca7a17f9077593214a9781a94b8d76de4f158f8c895e62f09573945fe", size = 596406, upload-time = "2025-10-30T11:17:43.773Z" }, + { url = "https://files.pythonhosted.org/packages/9e/7e/a96255f63b7aef032cbee8fc4d6e37def72e3aaedc1f72759235e8f13cb1/nh3-0.3.2-cp38-abi3-win_arm64.whl", hash = "sha256:cf5964d54edd405e68583114a7cba929468bcd7db5e676ae38ee954de1cfc104", size = 584162, upload-time = "2025-10-30T11:17:44.96Z" }, +] + [[package]] name = "numpy" version = "2.3.5" @@ -965,6 +1160,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl", hash = "sha256:dd6bf7cb4ee77f8e016f9c8e74a35ddd9f67e1d5fd4184d86c3b98e07099f42d", size = 31594, upload-time = "2025-06-20T18:49:47.491Z" }, ] +[[package]] +name = "pycparser" +version = "2.23" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/cf/d2d3b9f5699fb1e4615c8e32ff220203e43b248e1dfcc6736ad9057731ca/pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2", size = 173734, upload-time = "2025-09-09T13:23:47.91Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934", size = 118140, upload-time = "2025-09-09T13:23:46.651Z" }, +] + [[package]] name = "pydantic" version = "2.12.5" @@ -1078,6 +1282,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/10/5e/1aa9a93198c6b64513c9d7752de7422c06402de6600a8767da1524f9570b/pyparsing-3.2.5-py3-none-any.whl", hash = "sha256:e38a4f02064cf41fe6593d328d0512495ad1f3d8a91c4f73fc401b3079a59a5e", size = 113890, upload-time = "2025-09-21T04:11:04.117Z" }, ] +[[package]] +name = "pyproject-hooks" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/82/28175b2414effca1cdac8dc99f76d660e7a4fb0ceefa4b4ab8f5f6742925/pyproject_hooks-1.2.0.tar.gz", hash = "sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8", size = 19228, upload-time = "2024-09-29T09:24:13.293Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl", hash = "sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913", size = 10216, upload-time = "2024-09-29T09:24:11.978Z" }, +] + [[package]] name = "pytest" version = "9.0.2" @@ -1124,6 +1337,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225, upload-time = "2025-03-25T02:24:58.468Z" }, ] +[[package]] +name = "pywin32-ctypes" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/85/9f/01a1a99704853cb63f253eea009390c88e7131c67e66a0a02099a8c917cb/pywin32-ctypes-0.2.3.tar.gz", hash = "sha256:d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755", size = 29471, upload-time = "2024-08-14T10:15:34.626Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl", hash = "sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8", size = 30756, upload-time = "2024-08-14T10:15:33.187Z" }, +] + [[package]] name = "pyyaml" version = "6.0.3" @@ -1164,6 +1386,20 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl", hash = "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04", size = 4722, upload-time = "2025-05-13T15:23:59.629Z" }, ] +[[package]] +name = "readme-renderer" +version = "44.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "docutils" }, + { name = "nh3" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5a/a9/104ec9234c8448c4379768221ea6df01260cd6c2ce13182d4eac531c8342/readme_renderer-44.0.tar.gz", hash = "sha256:8712034eabbfa6805cacf1402b4eeb2a73028f72d1166d6f5cb7f9c047c5d1e1", size = 32056, upload-time = "2024-07-08T15:00:57.805Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/67/921ec3024056483db83953ae8e48079ad62b92db7880013ca77632921dd0/readme_renderer-44.0-py3-none-any.whl", hash = "sha256:2fbca89b81a08526aadf1357a8c2ae889ec05fb03f5da67f9769c9a592166151", size = 13310, upload-time = "2024-07-08T15:00:56.577Z" }, +] + [[package]] name = "requests" version = "2.32.5" @@ -1179,6 +1415,27 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738, upload-time = "2025-08-18T20:46:00.542Z" }, ] +[[package]] +name = "requests-toolbelt" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f3/61/d7545dafb7ac2230c70d38d31cbfe4cc64f7144dc41f6e4e4b78ecd9f5bb/requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", size = 206888, upload-time = "2023-05-01T04:11:33.229Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06", size = 54481, upload-time = "2023-05-01T04:11:28.427Z" }, +] + +[[package]] +name = "rfc3986" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/85/40/1520d68bfa07ab5a6f065a186815fb6610c86fe957bc065754e47f7b0840/rfc3986-2.0.0.tar.gz", hash = "sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c", size = 49026, upload-time = "2022-01-10T00:52:30.832Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl", hash = "sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd", size = 31326, upload-time = "2022-01-10T00:52:29.594Z" }, +] + [[package]] name = "rich" version = "14.2.0" @@ -1285,6 +1542,28 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0b/68/4cc6d36beeaabb532d15ead8ed635fb34bf0b2c7ee02de3f79e9b1ba5ebc/secondarycoolantprops-1.3-py3-none-any.whl", hash = "sha256:10e10e276f946009f7c6730e17d5c92652db7ab256502d2ad1591664b4462d76", size = 13386, upload-time = "2025-01-21T20:04:16.001Z" }, ] +[[package]] +name = "secretstorage" +version = "3.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography" }, + { name = "jeepney" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1c/03/e834bcd866f2f8a49a85eaff47340affa3bfa391ee9912a952a1faa68c7b/secretstorage-3.5.0.tar.gz", hash = "sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be", size = 19884, upload-time = "2025-11-23T19:02:53.191Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/46/f5af3402b579fd5e11573ce652019a67074317e18c1935cc0b4ba9b35552/secretstorage-3.5.0-py3-none-any.whl", hash = "sha256:0ce65888c0725fcb2c5bc0fdb8e5438eece02c523557ea40ce0703c266248137", size = 15554, upload-time = "2025-11-23T19:02:51.545Z" }, +] + +[[package]] +name = "setuptools" +version = "80.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/18/5d/3bf57dcd21979b887f014ea83c24ae194cfcd12b9e0fda66b957c69d1fca/setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c", size = 1319958, upload-time = "2025-05-27T00:56:51.443Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922", size = 1201486, upload-time = "2025-05-27T00:56:49.664Z" }, +] + [[package]] name = "shellingham" version = "1.5.4" @@ -1315,6 +1594,26 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540, upload-time = "2024-11-24T20:12:19.698Z" }, ] +[[package]] +name = "twine" +version = "6.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "id" }, + { name = "keyring", marker = "platform_machine != 'ppc64le' and platform_machine != 's390x'" }, + { name = "packaging" }, + { name = "readme-renderer" }, + { name = "requests" }, + { name = "requests-toolbelt" }, + { name = "rfc3986" }, + { name = "rich" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e0/a8/949edebe3a82774c1ec34f637f5dd82d1cf22c25e963b7d63771083bbee5/twine-6.2.0.tar.gz", hash = "sha256:e5ed0d2fd70c9959770dce51c8f39c8945c574e18173a7b81802dab51b4b75cf", size = 172262, upload-time = "2025-09-04T15:43:17.255Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl", hash = "sha256:418ebf08ccda9a8caaebe414433b0ba5e25eb5e4a927667122fbe8f829f985d8", size = 42727, upload-time = "2025-09-04T15:43:15.994Z" }, +] + [[package]] name = "typer" version = "0.20.0" @@ -1402,6 +1701,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/33/e8/e40370e6d74ddba47f002a32919d91310d6074130fe4e17dabcafc15cbf1/watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f", size = 79067, upload-time = "2024-11-01T14:07:11.845Z" }, ] +[[package]] +name = "wheel" +version = "0.45.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8a/98/2d9906746cdc6a6ef809ae6338005b3f21bb568bea3165cfc6a243fdc25c/wheel-0.45.1.tar.gz", hash = "sha256:661e1abd9198507b1409a20c02106d9670b2576e916d58f520316666abca6729", size = 107545, upload-time = "2024-11-23T00:18:23.513Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/2c/87f3254fd8ffd29e4c02732eee68a83a1d3c346ae39bc6822dcbcb697f2b/wheel-0.45.1-py3-none-any.whl", hash = "sha256:708e7481cc80179af0e556bbf0cc00b8444c7321e2700b8d8580231d13017248", size = 72494, upload-time = "2024-11-23T00:18:21.207Z" }, +] + [[package]] name = "xarray" version = "2025.12.0" -- GitLab