From 6ea6c2937161e0815e48fcfd1782aded9eafd121 Mon Sep 17 00:00:00 2001 From: Carson Farmer <59753859+cfarm6@users.noreply.github.com> Date: Thu, 19 Mar 2026 12:10:55 -0400 Subject: [PATCH 1/4] Added Tests for Torch-sim Calculator --- CONTRIBUTING.md | 25 +- Makefile | 2 +- aimnet/calculators/__init__.py | 5 + aimnet/calculators/aimnet2torchsim.py | 146 ++++++ examples/1119028.cif | 93 ++++ examples/1119028.h5 | Bin 0 -> 5200 bytes examples/1119028.trj | Bin 0 -> 29777 bytes examples/2019828.h5 | Bin 0 -> 79899 bytes examples/2019828.trj | Bin 0 -> 28640 bytes examples/ase_opt.py | 2 +- examples/ts_opt.py | 41 ++ examples/ts_opt_pbc.py | 49 ++ pyproject.toml | 8 +- tests/test_ase.py | 2 +- tests/test_torchsim.py | 235 ++++++++++ uv.lock | 613 +++++++++----------------- 16 files changed, 797 insertions(+), 424 deletions(-) create mode 100644 aimnet/calculators/aimnet2torchsim.py create mode 100644 examples/1119028.cif create mode 100644 examples/1119028.h5 create mode 100644 examples/1119028.trj create mode 100644 examples/2019828.h5 create mode 100644 examples/2019828.trj create mode 100644 examples/ts_opt.py create mode 100644 examples/ts_opt_pbc.py create mode 100644 tests/test_torchsim.py diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a7b4919..c1ff73d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -8,7 +8,7 @@ You can contribute in many ways: ## Report Bugs -Report bugs at https://github.com/isayevlab/aimnetcentral/issues +Report bugs at [https://github.com/isayevlab/aimnetcentral/issues](https://github.com/isayevlab/aimnetcentral/issues) If you are reporting a bug, please include: @@ -30,7 +30,7 @@ AIMNet2 could always use more documentation, whether as part of the official doc ## Submit Feedback -The best way to send feedback is to file an issue at https://github.com/isayevlab/aimnetcentral/issues. +The best way to send feedback is to file an issue at [https://github.com/isayevlab/aimnetcentral/issues](https://github.com/isayevlab/aimnetcentral/issues). If you are proposing a new feature: @@ -43,7 +43,6 @@ If you are proposing a new feature: Ready to contribute? Here's how to set up `aimnetcentral` for local development. Please note this documentation assumes you already have `uv` and `Git` installed and ready to go. 1. Fork the `aimnetcentral` repo on GitHub. - 2. Clone your fork locally: ```bash @@ -51,10 +50,10 @@ cd git clone git@github.com:YOUR_NAME/aimnetcentral.git ``` -3. Now we need to install the environment. Navigate into the directory +1. Now we need to install the environment. Navigate into the directory ```bash -cd aimnetcentral +cd aimnetcentral2 ``` Then, install the development environment with: @@ -64,7 +63,7 @@ make install source .venv/bin/activate ``` -4. Pre-commit (required) +1. Pre-commit (required) We require `pre-commit` for all contributions. Install hooks once: @@ -72,7 +71,7 @@ We require `pre-commit` for all contributions. Install hooks once: uv run pre-commit install ``` -5. Create a branch for local development: +1. Create a branch for local development: ```bash git checkout -b name-of-your-bugfix-or-feature @@ -80,9 +79,8 @@ git checkout -b name-of-your-bugfix-or-feature Now you can make your changes locally. -6. Don't forget to add test cases for your added functionality to the `tests` directory. - -7. When you're done making changes, check that your changes pass the formatting tests. +1. Don't forget to add test cases for your added functionality to the `tests` directory. +2. When you're done making changes, check that your changes pass the formatting tests. ```bash make check @@ -94,14 +92,14 @@ Now, validate that all unit tests are passing: make test ``` -9. CI notes +1. CI notes CI runs tests in separate jobs: - Core tests on a minimal install - Optional extras tests (`ase`, `pysis`, `train`) in dedicated jobs -10. Commit your changes and push your branch to GitHub: +1. Commit your changes and push your branch to GitHub: ```bash git add . @@ -109,12 +107,11 @@ git commit -m "Your detailed description of your changes." git push origin name-of-your-bugfix-or-feature ``` -11. Submit a pull request through the GitHub website. +1. Submit a pull request through the GitHub website. # Pull Request Guidelines Before you submit a pull request, check that it meets these guidelines: 1. The pull request should include tests. - 2. If the pull request adds functionality, the docs should be updated. Put your new functionality into a function with a docstring, and add the feature to the list in `README.md`. diff --git a/Makefile b/Makefile index e2e72dd..63dc680 100644 --- a/Makefile +++ b/Makefile @@ -15,7 +15,7 @@ check: ## Run code quality tools. .PHONY: test test: ## Test the code with pytest (parallel execution) @echo "🚀 Testing code: Running pytest" - @uv run pytest -n auto --cov --cov-config=pyproject.toml --cov-report=xml + @uv run pytest -n 2 --cov --cov-config=pyproject.toml --cov-report=xml .PHONY: typecheck typecheck: ## Run mypy type checking (not in CI) diff --git a/aimnet/calculators/__init__.py b/aimnet/calculators/__init__.py index 5c6f6b3..27b54af 100644 --- a/aimnet/calculators/__init__.py +++ b/aimnet/calculators/__init__.py @@ -13,3 +13,8 @@ from .aimnet2pysis import AIMNet2Pysis # noqa: F401 __all__.append("AIMNet2Pysis") + +if importlib.util.find_spec("torch_sim") is not None: + from .aimnet2torchsim import AIMNet2TorchSim # noqa: F401 + + __all__.append("AIMNet2TorchSim") diff --git a/aimnet/calculators/aimnet2torchsim.py b/aimnet/calculators/aimnet2torchsim.py new file mode 100644 index 0000000..4ff4a88 --- /dev/null +++ b/aimnet/calculators/aimnet2torchsim.py @@ -0,0 +1,146 @@ +"""torch-sim ModelInterface wrapper for AimNet2. + +This module provides a TorchSim wrapper of the AimNet2 model for computing +energies, forces, and stresses for atomistic systems. +""" + +from collections.abc import Callable +from pathlib import Path + +import torch + +from .calculator import AIMNet2Calculator + +try: + import torch_sim as ts + from torch_sim.models.interface import ModelInterface, SimState, StateDict +except ImportError: + raise ImportError("torch-sim is not installed. Please install it using `pip install torch-sim-atomistic`.") # noqa: B904 + + +def state_to_aimnet2_data(state: ts.SimState) -> dict[str, torch.Tensor]: + positions = state.positions + cell = state.row_vector_cell + z = state.atomic_numbers.long() + charge = state.charge + spin = state.spin + mol_idx = state.system_idx + data = { + "coord": positions, + "numbers": z, + "charge": charge, + "spin": spin, + "mol_idx": mol_idx, + } + # Handle periodic cells: + # - If cell is all zeros, treat as non-periodic and omit "cell" + # - If all batched cells are identical, use a single (3, 3) cell + # - Otherwise, keep the batched (B, 3, 3) cell so each system can have its own box + # Ensure we are working with a tensor (torch-sim may return None for non-periodic systems) + # Keep the cell tensor rank consistent with the incoming state to avoid + # downstream shape differences (e.g. stress rank changes) across chunks. + if isinstance(cell, torch.Tensor) and not torch.allclose(cell, torch.zeros_like(cell)): + data["cell"] = cell.contiguous() + return data + + +def state_dict_to_aimnet2_data(state: StateDict) -> dict[str, torch.Tensor]: + data: dict[str, torch.Tensor] = {} + if "positions" in state: + data["coord"] = state["positions"] + if "cell" in state: + data["cell"] = state["cell"] + if "atomic_numbers" in state: + data["numbers"] = state["atomic_numbers"] + if "charge" in state: + data["charge"] = state["charge"] + if "mol_idx" in state: + data["mol_idx"] = state["system_idx"] + cell = state["cell"] + if isinstance(cell, torch.Tensor) and not torch.allclose(cell, torch.zeros_like(cell)): + data["cell"] = cell.contiguous() + return data + + +class AIMNet2TorchSim(ModelInterface): + """Computes energies, forces, and stresses for atomistic systems using the AIMNet2 model. + + Attributes + ---------- + model : nn.Module + The loaded AIMNet2 model. + _device : str + Device the model is running on ("cuda" or "cpu"). + _dtype: torch.dtype + _compute_stress: bool + implemented_properties: list[str] + + """ + + def __init__( + self, + base_calc: AIMNet2Calculator, + neighbor_list_fn: Callable | None = None, + *, + model_cache_dir: str | Path | None = None, + device: torch.device | None = None, + dtype: torch.dtype | None = None, + compute_stress: bool = False, + ): + """Initial the AIMNet2TorchSim model. + + Args: + base_calc: AIMNet2Calculator + The AIMNet2 calculator to use. + """ + super().__init__() + self.model = base_calc + self._device = base_calc.device + self._dtype = dtype or torch.float32 + self._compute_stress = compute_stress + self._compute_forces = True + self._memory_scales_with = "n_atoms_x_density" + if neighbor_list_fn is not None: + raise NotImplementedError("Custom neighbor list is not supported for the AIMNet2 Model.") + self.predictor = base_calc.eval + self.implemented_properties = ["energy", "forces", "charges"] + if base_calc.is_nse: + self.implemented_properties.append("spin_charges") + if self._compute_stress: + self.implemented_properties.append("stress") + + @property + def dtype(self) -> torch.dtype: + return self._dtype + + @property + def device(self) -> torch.device: + return self._device + + def forward(self, state: SimState | StateDict, **kwargs) -> dict[str, torch.Tensor]: + """Compute energies, forces, and other properties. + + Args: + state (SimState): State object containing positions, cells, atomic numbers, + and other system information. + **_kwargs: Unused; accepted for interface compatibility. + + Returns: + dict: Dictionary of model predictions, which may include: + - energy (torch.Tensor): Energy with shape [batch_size] + - forces (torch.Tensor): Forces with shape [n_atoms, 3] + - stress (torch.Tensor): Stress tensor with shape [batch_size, 3, 3] + """ + if isinstance(state, SimState): + if state.device != self._device: + state = state.to(self._device) + data = state_to_aimnet2_data(state) + # Ensure system_idx has integer dtype + if state.system_idx.dtype != torch.int64: + data["mol_idx"] = data["mol_idx"].to(torch.int64) + elif isinstance(state, StateDict): + data = state_dict_to_aimnet2_data(state) + + results = self.model(data, forces=True, stress=self._compute_stress) + + return results diff --git a/examples/1119028.cif b/examples/1119028.cif new file mode 100644 index 0000000..398c8e6 --- /dev/null +++ b/examples/1119028.cif @@ -0,0 +1,93 @@ +####################################################################### +# +# This file contains crystal structure data downloaded from the +# Cambridge Structural Database (CSD) hosted by the Cambridge +# Crystallographic Data Centre (CCDC). +# +# Full information about CCDC data access policies and citation +# guidelines are available at http://www.ccdc.cam.ac.uk/access/V1 +# +# Audit and citation data items may have been added by the CCDC. +# Please retain this information to preserve the provenance of +# this file and to allow appropriate attribution of the data. +# +####################################################################### + +data_CAFINE +#This CIF has been generated from an entry in the Cambridge Structural Database +_database_code_depnum_ccdc_archive 'CCDC 1119028' +_database_code_CSD CAFINE +loop_ +_citation_id +_citation_doi +_citation_year +1 10.1107/S0365110X58001286 1958 +_audit_creation_method 'Created from the CSD' +_audit_update_record +; +2026-03-06 downloaded from the CCDC. +; +_database_code_NBS 504758 +_chemical_name_common 'Caffeine monohydrate' +_chemical_formula_moiety 'C8 H10 N4 O2,H2 O1' +_chemical_name_systematic '1,3,7-Trimethyl-purine-2,6-dione monohydrate' +_chemical_properties_biological 'stimulant which increases CNS activity' +_chemical_absolute_configuration unk +_diffrn_ambient_temperature 295 +_exptl_crystal_density_diffrn 1.447 +#These two values have been output from a single CSD field. +_refine_ls_R_factor_gt 0.146 +_refine_ls_wR_factor_gt 0.146 +_diffrn_radiation_probe x-ray +_symmetry_cell_setting monoclinic +_symmetry_space_group_name_H-M 'P 21/a' +_symmetry_Int_Tables_number 14 +_space_group_name_Hall '-P 2yab' +loop_ +_symmetry_equiv_pos_site_id +_symmetry_equiv_pos_as_xyz +1 x,y,z +2 1/2-x,1/2+y,-z +3 -x,-y,-z +4 1/2+x,1/2-y,z +_cell_length_a 14.8(1) +_cell_length_b 16.7(1) +_cell_length_c 3.97(3) +_cell_angle_alpha 90 +_cell_angle_beta 97.0(5) +_cell_angle_gamma 90 +_cell_volume 973.911 +_cell_formula_units_Z 4 +loop_ +_atom_site_label +_atom_site_type_symbol +_atom_site_fract_x +_atom_site_fract_y +_atom_site_fract_z +C1 C 0.24140 0.22250 -0.09980 +C2 C 0.10030 0.25330 0.12950 +C3 C 0.08410 0.17590 0.19440 +C4 C 0.14630 0.11430 0.11550 +C5 C -0.01990 0.25200 0.36380 +C6 C 0.28910 0.08320 -0.12100 +C7 C 0.19590 0.36380 -0.07910 +C8 C -0.04640 0.10530 0.45840 +N1 N 0.21960 0.14150 -0.02650 +N2 N 0.18010 0.27690 -0.01520 +N3 N 0.00200 0.17490 0.33760 +N4 N 0.04030 0.30080 0.24400 +O1 O 0.30630 0.24000 -0.23860 +O2 O 0.13630 0.04040 0.16160 +H1 H -0.08700 0.26100 0.47400 +H2 H -0.01300 0.06200 0.59900 +H3 H -0.06500 0.06300 0.27800 +H4 H -0.10500 0.13700 0.51000 +H5 H 0.26300 0.36200 -0.14300 +H6 H 0.22800 0.39600 0.10500 +H7 H 0.14200 0.37700 -0.21700 +H8 H 0.34800 0.10000 -0.22800 +H9 H 0.30000 0.03300 0.02200 +H10 H 0.25700 0.06000 -0.32400 +O3 O 0.01840 0.47050 0.27050 + +#END diff --git a/examples/1119028.h5 b/examples/1119028.h5 new file mode 100644 index 0000000000000000000000000000000000000000..3f2b5f66bb5b6349947b96703145bb6ffd399a9f GIT binary patch literal 5200 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̖d8T$FljEFDHe+bpt(N%Uj`Rdti&CIN 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%0DO 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.5.2,<0.6.0" +] + # Training dependencies train = [ "omegaconf>=2.3.0", @@ -187,6 +192,7 @@ disable_error_code = ["import-untyped"] [tool.pytest.ini_options] testpaths = ["tests"] markers = [ + "torch_sim: marks tests that require TorchSim (deselect with: -m 'not torch_sim')", "ase: marks tests that require ASE (deselect with: -m 'not ase')", "gpu: marks tests that require GPU/CUDA (deselect with: -m 'not gpu')", "pysis: marks tests that require PySisyphus (deselect with: -m 'not pysis')", diff --git a/tests/test_ase.py b/tests/test_ase.py index cb88a34..6f978bb 100644 --- a/tests/test_ase.py +++ b/tests/test_ase.py @@ -9,7 +9,7 @@ # All tests in this module require ASE pytestmark = pytest.mark.ase -MODELS = ("aimnet2", "aimnet2_b973c") +MODELS = ("aimnet2", "aimnet2_2025") NSE_MODEL = "aimnet2nse" diff --git a/tests/test_torchsim.py b/tests/test_torchsim.py new file mode 100644 index 0000000..0406f17 --- /dev/null +++ b/tests/test_torchsim.py @@ -0,0 +1,235 @@ +"""Tests for TorchSim Calculator Interface.""" + +import warnings + +import numpy as np +import pytest +from conftest import CAFFEINE_FILE, CIF_SPIRO + +# All tests in this module require TorchSim +pytestmark = [pytest.mark.torch_sim, pytest.mark.ase] + +MODELS = ("aimnet2", "aimnet2_2025") +NSE_MODEL = "aimnet2nse" + + +class TestBasicCalculator: + """Basic TorchSim calculator tests.""" + + def test_energy_calculation(self): + """Test that energy calculation works.""" + pytest.importorskip("torch_sim", reason="torch_sim not installed") + pytest.importorskip("ase", reason="ASE not installed") + import torch_sim as ts + from ase.io import read + + from aimnet.calculators import AIMNet2Calculator, AIMNet2TorchSim + + for model in MODELS: + atoms = read(CAFFEINE_FILE) + base_calc = AIMNet2Calculator(model) + state = ts.static(system=atoms, model=AIMNet2TorchSim(base_calc)) + e = state[0]["potential_energy"].item() + assert isinstance(e, float) + assert np.isfinite(e) + + +class TestForces: + """Tests for force calculations.""" + + def test_forces_shape(self): + """Test that forces have correct shape.""" + pytest.importorskip("ase", reason="ASE not installed") + pytest.importorskip("torch_sim", reason="torch_sim not installed") + import torch_sim as ts + from ase.io import read + + from aimnet.calculators import AIMNet2Calculator, AIMNet2TorchSim + + atoms = read(CAFFEINE_FILE) + base_calc = AIMNet2Calculator("aimnet2") + state = ts.static(system=atoms, model=AIMNet2TorchSim(base_calc)) + + f = state[0]["forces"].cpu().numpy() + assert f.shape == (len(atoms), 3) + assert np.isfinite(f).all() + + def test_forces_sum_nearly_zero(self): + """Test that total force is nearly zero (Newton's third law).""" + pytest.importorskip("ase", reason="ASE not installed") + pytest.importorskip("torch_sim", reason="torch_sim not installed") + import torch_sim as ts + from ase.io import read + + from aimnet.calculators import AIMNet2Calculator, AIMNet2TorchSim + + atoms = read(CAFFEINE_FILE) + base_calc = AIMNet2Calculator("aimnet2") + state = ts.static(system=atoms, model=AIMNet2TorchSim(base_calc)) + + f = state[0]["forces"].cpu().numpy() + total_force = np.sum(f, axis=0) + # Total force should be nearly zero + assert np.allclose(total_force, 0, atol=1e-4) + + +class TestPBC: + """Tests for periodic boundary conditions.""" + + def test_pbc_energy(self): + """Test energy calculation for periodic system.""" + pytest.importorskip("ase", reason="ASE not installed") + pytest.importorskip("torch_sim", reason="torch_sim not installed") + import torch_sim as ts + from ase.io import read + + from aimnet.calculators import AIMNet2Calculator, AIMNet2TorchSim + + with warnings.catch_warnings(): + warnings.filterwarnings("ignore", message="crystal system.*monoclinic", category=UserWarning) + atoms = read(CIF_SPIRO) + + base_calc = AIMNet2Calculator("aimnet2") + state = ts.static(system=atoms, model=AIMNet2TorchSim(base_calc)) + + with warnings.catch_warnings(): + warnings.filterwarnings("ignore", message="Switching to DSF Coulomb", category=UserWarning) + warnings.filterwarnings("ignore", message="Model has embedded Coulomb module", category=UserWarning) + e = state[0]["potential_energy"].item() + assert isinstance(e, float) + assert np.isfinite(e) + + def test_pbc_forces(self): + """Test force calculation for periodic system.""" + pytest.importorskip("ase", reason="ASE not installed") + pytest.importorskip("torch_sim", reason="torch_sim not installed") + import torch_sim as ts + from ase.io import read + + from aimnet.calculators import AIMNet2Calculator, AIMNet2TorchSim + + with warnings.catch_warnings(): + warnings.filterwarnings("ignore", message="crystal system.*monoclinic", category=UserWarning) + atoms = read(CIF_SPIRO) + base_calc = AIMNet2Calculator("aimnet2") + state = ts.static(system=atoms, model=AIMNet2TorchSim(base_calc)) + + with warnings.catch_warnings(): + warnings.filterwarnings("ignore", message="Switching to DSF Coulomb", category=UserWarning) + warnings.filterwarnings("ignore", message="Model has embedded Coulomb module", category=UserWarning) + f = state[0]["forces"] + assert f.shape == (len(atoms), 3) + assert np.isfinite(f.cpu().numpy()).all() + + def test_pbc_stress_tensor(self): + """Test stress tensor calculation for periodic system.""" + pytest.importorskip("ase", reason="ASE not installed") + pytest.importorskip("torch_sim", reason="torch_sim not installed") + import torch_sim as ts + from ase.io import read + + from aimnet.calculators import AIMNet2Calculator, AIMNet2TorchSim + + with warnings.catch_warnings(): + warnings.filterwarnings("ignore", message="crystal system.*monoclinic", category=UserWarning) + atoms = read(CIF_SPIRO) + base_calc = AIMNet2Calculator("aimnet2") + state = ts.static(system=atoms, model=AIMNet2TorchSim(base_calc, compute_stress=True)) + + # Get stress tensor (Voigt notation: xx, yy, zz, yz, xz, xy) + with warnings.catch_warnings(): + warnings.filterwarnings("ignore", message="Switching to DSF Coulomb", category=UserWarning) + warnings.filterwarnings("ignore", message="Model has embedded Coulomb module", category=UserWarning) + stress = state[0]["stress"].cpu().numpy() + assert stress.shape == (1, 3, 3) + assert np.isfinite(stress).all() + + def test_pbc_stress_volume_normalized(self): + """Test that stress is volume normalized (units are pressure).""" + pytest.importorskip("ase", reason="ASE not installed") + pytest.importorskip("torch_sim", reason="torch_sim not installed") + import torch_sim as ts + from ase.io import read + + from aimnet.calculators import AIMNet2Calculator, AIMNet2TorchSim + + with warnings.catch_warnings(): + warnings.filterwarnings("ignore", message="crystal system.*monoclinic", category=UserWarning) + atoms = read(CIF_SPIRO) + base_calc = AIMNet2Calculator("aimnet2") + state = ts.static(system=atoms, model=AIMNet2TorchSim(base_calc, compute_stress=True)) + + with warnings.catch_warnings(): + warnings.filterwarnings("ignore", message="Switching to DSF Coulomb", category=UserWarning) + warnings.filterwarnings("ignore", message="Model has embedded Coulomb module", category=UserWarning) + stress = state[0]["stress"] + # Stress values should be reasonable (not extremely large) + # Typical stress values are in GPa range (1e-4 to 1e-1 eV/ų) + assert np.abs(stress.cpu().numpy()).max() < 10.0 # Sanity check + + +class TestOptimization: + """Tests for geometry optimization.""" + + def test_energy_decreases_on_optimization(self): + """Test that energy decreases during optimization.""" + pytest.importorskip("ase", reason="ASE not installed") + pytest.importorskip("torch_sim", reason="torch_sim not installed") + import torch_sim as ts + from ase.io import read + + from aimnet.calculators import AIMNet2Calculator, AIMNet2TorchSim + + atoms = read(CAFFEINE_FILE) + # Add small random displacement + atoms.positions += np.random.randn(*atoms.positions.shape) * 0.1 + base_calc = AIMNet2Calculator("aimnet2") + state = ts.static(system=atoms, model=AIMNet2TorchSim(base_calc)) + e_initial = state[0]["potential_energy"].item() + + # Run a few optimization steps + final_state = ts.optimize( + system=atoms, model=AIMNet2TorchSim(base_calc), optimizer=ts.Optimizer.fire, pbar=True, max_steps=5 + ) + + e_final = final_state.energy.detach().cpu().numpy() + # Energy should decrease (or stay same if already at minimum) + assert e_final <= e_initial + 1e-3 + + +class TestMultipleModels: + """Tests for multiple model support.""" + + @pytest.mark.parametrize("model", MODELS) + def test_model_gives_finite_energy(self, model): + """Test each model gives finite energy.""" + pytest.importorskip("ase", reason="ASE not installed") + pytest.importorskip("torch_sim", reason="torch_sim not installed") + import torch_sim as ts + from ase.io import read + + from aimnet.calculators import AIMNet2Calculator, AIMNet2TorchSim + + atoms = read(CAFFEINE_FILE) + base_calc = AIMNet2Calculator(model) + state = ts.static(system=atoms, model=AIMNet2TorchSim(base_calc)) + + e = state[0]["potential_energy"].detach().cpu().numpy() + assert np.isfinite(e) + + @pytest.mark.parametrize("model", MODELS) + def test_model_gives_finite_forces(self, model): + """Test each model gives finite forces.""" + pytest.importorskip("ase", reason="ASE not installed") + pytest.importorskip("torch_sim", reason="torch_sim not installed") + import torch_sim as ts + from ase.io import read + + from aimnet.calculators import AIMNet2Calculator, AIMNet2TorchSim + + atoms = read(CAFFEINE_FILE) + base_calc = AIMNet2Calculator(model) + state = ts.static(system=atoms, model=AIMNet2TorchSim(base_calc)) + + f = state[0]["forces"].cpu().numpy() + assert np.isfinite(f).all() diff --git a/uv.lock b/uv.lock index 9ba0fde..ef00eee 100644 --- a/uv.lock +++ b/uv.lock @@ -1,13 +1,11 @@ version = 1 revision = 3 -requires-python = ">=3.11" +requires-python = ">=3.12" resolution-markers = [ "python_full_version >= '3.13' and sys_platform == 'linux'", - "python_full_version == '3.12.*' and sys_platform == 'linux'", + "python_full_version < '3.13' and sys_platform == 'linux'", "python_full_version >= '3.13' and sys_platform != 'linux'", - "python_full_version == '3.12.*' and sys_platform != 'linux'", - "python_full_version < '3.12' and sys_platform == 'linux'", - "python_full_version < '3.12' and sys_platform != 'linux'", + "python_full_version < '3.13' and sys_platform != 'linux'", ] [[package]] @@ -32,6 +30,9 @@ ase = [ pysis = [ { name = "pysisyphus" }, ] +torchsim = [ + { name = "torch-sim-atomistic" }, +] train = [ { name = "omegaconf" }, { name = "pytorch-ignite" }, @@ -73,10 +74,11 @@ requires-dist = [ { name = "pyyaml", specifier = ">=6.0.2" }, { name = "requests", specifier = ">=2.32.3" }, { name = "torch", specifier = ">=2.4" }, + { name = "torch-sim-atomistic", marker = "extra == 'torchsim'", specifier = ">=0.5.2,<0.6.0" }, { name = "wandb", marker = "extra == 'train'", specifier = ">=0.18.5" }, { name = "warp-lang", specifier = ">=1.11" }, ] -provides-extras = ["ase", "pysis", "train"] +provides-extras = ["ase", "pysis", "torchsim", "train"] [package.metadata.requires-dev] dev = [ @@ -241,10 +243,41 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c0/f6/688d2cd64bfd0b14d805ddb8a565e11ca1fb0fd6817175d58b10052b6d88/bcrypt-5.0.0-cp39-abi3-win32.whl", hash = "sha256:64d7ce196203e468c457c37ec22390f1a61c85c6f0b8160fd752940ccfb3a683", size = 153725, upload-time = "2025-09-25T19:50:34.384Z" }, { url = "https://files.pythonhosted.org/packages/9f/b9/9d9a641194a730bda138b3dfe53f584d61c58cd5230e37566e83ec2ffa0d/bcrypt-5.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:64ee8434b0da054d830fa8e89e1c8bf30061d539044a39524ff7dec90481e5c2", size = 150912, upload-time = "2025-09-25T19:50:35.69Z" }, { url = "https://files.pythonhosted.org/packages/27/44/d2ef5e87509158ad2187f4dd0852df80695bb1ee0cfe0a684727b01a69e0/bcrypt-5.0.0-cp39-abi3-win_arm64.whl", hash = "sha256:f2347d3534e76bf50bca5500989d6c1d05ed64b440408057a37673282c654927", size = 144953, upload-time = "2025-09-25T19:50:37.32Z" }, - { url = "https://files.pythonhosted.org/packages/8a/75/4aa9f5a4d40d762892066ba1046000b329c7cd58e888a6db878019b282dc/bcrypt-5.0.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7edda91d5ab52b15636d9c30da87d2cc84f426c72b9dba7a9b4fe142ba11f534", size = 271180, upload-time = "2025-09-25T19:50:38.575Z" }, - { url = "https://files.pythonhosted.org/packages/54/79/875f9558179573d40a9cc743038ac2bf67dfb79cecb1e8b5d70e88c94c3d/bcrypt-5.0.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:046ad6db88edb3c5ece4369af997938fb1c19d6a699b9c1b27b0db432faae4c4", size = 273791, upload-time = "2025-09-25T19:50:39.913Z" }, - { url = "https://files.pythonhosted.org/packages/bc/fe/975adb8c216174bf70fc17535f75e85ac06ed5252ea077be10d9cff5ce24/bcrypt-5.0.0-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:dcd58e2b3a908b5ecc9b9df2f0085592506ac2d5110786018ee5e160f28e0911", size = 270746, upload-time = "2025-09-25T19:50:43.306Z" }, - { url = "https://files.pythonhosted.org/packages/e4/f8/972c96f5a2b6c4b3deca57009d93e946bbdbe2241dca9806d502f29dd3ee/bcrypt-5.0.0-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:6b8f520b61e8781efee73cba14e3e8c9556ccfb375623f4f97429544734545b4", size = 273375, upload-time = "2025-09-25T19:50:45.43Z" }, +] + +[[package]] +name = "blosc2" +version = "4.1.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "msgpack" }, + { name = "ndindex" }, + { name = "numexpr", marker = "platform_machine != 'wasm32'" }, + { name = "numpy" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f8/fa/d72f624903dad1f2e95cb97d4e3777284f7eb398792f0d3380fdd73c1fc4/blosc2-4.1.2.tar.gz", hash = "sha256:c127342d976de44fee242137e83660097e0b072779f4164a34e149ac9f693c8a", size = 4341120, upload-time = "2026-03-03T11:05:14.496Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/74/ef2f1cea5239062be872fe7db384fcb5f7532257efcec11c960a15a5134f/blosc2-4.1.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2f39bc24bfde0ba2938f23b3ecd6a69f7788c9e775c88e0be37a3b4680bc84c8", size = 4686887, upload-time = "2026-03-03T11:04:43.857Z" }, + { url = "https://files.pythonhosted.org/packages/d2/87/834a234879ae8bcb61be4bf88855e29f62d06da0b5b45a01f6e7898e9d5f/blosc2-4.1.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e0bd7e752f636cde649f92acb735d58e23d0813ed9b24fb02f65eaaa7a415cdd", size = 4117160, upload-time = "2026-03-03T11:04:45.11Z" }, + { url = "https://files.pythonhosted.org/packages/dd/d0/84d10472414a605bac9e794e03ff53ce464e22fe83edc365dc88b6833c14/blosc2-4.1.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ceb440269004619a416813b7c36abef94b028fd702dd8209b5d41311b6ce39c4", size = 5071905, upload-time = "2026-03-03T11:04:47.327Z" }, + { url = "https://files.pythonhosted.org/packages/96/c6/6c98cb75da1ef26cb27fedb3edb4b3cdd1b3aa2f1056bdd9de0823effed9/blosc2-4.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:830addc8d8722348421e5d99d719c53a36ff34a468980a7af05938ddb336cf4f", size = 5208010, upload-time = "2026-03-03T11:04:48.542Z" }, + { url = "https://files.pythonhosted.org/packages/fe/d7/d4988cd88c070b2a24b446bf780fc43a7cb73a4af1e092b11edc832f616c/blosc2-4.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:9abc9432f7aa9335c87eb7b3cec72ac7bf3b764518e775b4f60159617e0817bf", size = 3147758, upload-time = "2026-03-03T11:04:49.789Z" }, + { url = "https://files.pythonhosted.org/packages/c4/b2/3d0a6711f9376ed2e84e420c3c74656e51803420ed2d0df997b027b6fd2d/blosc2-4.1.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:572fda198a250ee5e2c6b52d0067805ffa0d46d7e22213fcc23917164c33b8e5", size = 4686973, upload-time = "2026-03-03T11:04:51.321Z" }, + { url = "https://files.pythonhosted.org/packages/f7/5d/caa4c7eeac59664dcce968c69823e2416bf4f184af0b89507f52c085a98e/blosc2-4.1.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:192f3508522ce8867cd9aee70782450eeb89eb2de882f16d563320362ddf145a", size = 4116819, upload-time = "2026-03-03T11:04:52.66Z" }, + { url = "https://files.pythonhosted.org/packages/d3/ba/e038eec32caaf498f8d95e276c9a294895bf18419ba2504cee77bfec0008/blosc2-4.1.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:45075f00eb92e8d1abed1ea89038c9827ebd846d47e53c5c9988e22f7044f01f", size = 5071700, upload-time = "2026-03-03T11:04:53.856Z" }, + { url = "https://files.pythonhosted.org/packages/59/74/394d53ac3b3583163f7cc5b43d59d457e6398d8f1b51b85bc9f7bd7cf430/blosc2-4.1.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8f453b76764753c7c0ba3ce13ffcf0cefa191b0668adb28979f88cb9093ad7ae", size = 5208120, upload-time = "2026-03-03T11:04:55.413Z" }, + { url = "https://files.pythonhosted.org/packages/6e/e2/d5b09cec0383381026c41fd071ae6a9342dfd70d0584aeae672e77dda82f/blosc2-4.1.2-cp313-cp313-win_amd64.whl", hash = "sha256:a72cc1fdc74744723092ccb63d03cf49c64f911450d2c9296182ce7bcda45d04", size = 3147727, upload-time = "2026-03-03T11:04:57.506Z" }, + { url = "https://files.pythonhosted.org/packages/02/bf/20bc86e3eef536cf077be84c2b52583620ac877852962cf2d6c0281052ed/blosc2-4.1.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:1d8b7c45d537bfeb4b4c6d93c042ae4c07fe5aa6ce47d1acccb028802b2091d7", size = 4689092, upload-time = "2026-03-03T11:04:59.094Z" }, + { url = "https://files.pythonhosted.org/packages/04/f6/c0e9a30bdd151294203c933a2d612559548bdbd21e3ebfc4671982117f3d/blosc2-4.1.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:9303b3e4a503a15cb4c42eb9c194a75a41603b879d89945967d72b5606857395", size = 4119002, upload-time = "2026-03-03T11:05:00.573Z" }, + { url = "https://files.pythonhosted.org/packages/37/75/59a2b35ae875198528b2bd89015fc4f143e40f859749735395877d7fdf96/blosc2-4.1.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0dcd142b6ec74b69f9ccfc006a98ea3e91617b245c0455f894a41a03cd88bd73", size = 5076726, upload-time = "2026-03-03T11:05:02.189Z" }, + { url = "https://files.pythonhosted.org/packages/24/98/c8c1e711d65e45c7109cd1ea90dd98d30dd2bc5d1c8d670fa91a5c563137/blosc2-4.1.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:05551c7111e96095b88f7070ec36dacb892a7f8c52c7550c019c93f892c511a9", size = 5209021, upload-time = "2026-03-03T11:05:03.813Z" }, + { url = "https://files.pythonhosted.org/packages/a9/85/4457050893f21c0b3237ce2c279a63f7e6cbf9b86126a42f17f5b83cafe6/blosc2-4.1.2-cp314-cp314-win_amd64.whl", hash = "sha256:68d04c8ea0ed1798baf0921b34434b564197c8a11569f5c64d9bea195329987c", size = 3220427, upload-time = "2026-03-03T11:05:05.689Z" }, + { url = "https://files.pythonhosted.org/packages/85/1c/18c47a98ba38a618f0cd3a1872d71b3db8553ce5466e7b5fd74b03dbe377/blosc2-4.1.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:52f69fd854cf2d9ce83cb0f6f214c6c9fb7f9149c24bd9af929482cbe95d3ff1", size = 4705783, upload-time = "2026-03-03T11:05:07.2Z" }, + { url = "https://files.pythonhosted.org/packages/8a/97/72ddd8146f8bd77026c1c28813e113c6b8a40b4f9bd4fe064f3618cebcd8/blosc2-4.1.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:cdfb208850c082e629dbed2aa8ff0328b64bfca691fcfdd89141af20f5fcc908", size = 4141025, upload-time = "2026-03-03T11:05:08.781Z" }, + { url = "https://files.pythonhosted.org/packages/cc/43/537635bf12f258db17a1a80e56c39bfefce218e1baab5459c05a4ff9739f/blosc2-4.1.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:df3e78642af359f3bdc46f4446f0517f2deca2b3d4c9c92caf49d4abf6ce2a9c", size = 5061103, upload-time = "2026-03-03T11:05:10.475Z" }, + { url = "https://files.pythonhosted.org/packages/36/e3/ad7dff6eaf0e36a0959865ebd5a16026929f5a919cf0158858c307d6971d/blosc2-4.1.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:482e2f1447d47241af1952a563573cf12f67fcb86a2d87227dc28e427b29f865", size = 5195395, upload-time = "2026-03-03T11:05:11.768Z" }, + { url = "https://files.pythonhosted.org/packages/a6/9e/b028eed46dfa45def2ca9c3e66aa3b8a3188a8a4998d017c699caf2bf0d9/blosc2-4.1.2-cp314-cp314t-win_amd64.whl", hash = "sha256:9ee2217b03ecca4e823ff22701f423b7630f2b0a44773e0486ddbaa953ed39e9", size = 3243706, upload-time = "2026-03-03T11:05:13.294Z" }, ] [[package]] @@ -265,19 +298,6 @@ dependencies = [ ] 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/12/4a/3dfd5f7850cbf0d06dc84ba9aa00db766b52ca38d8b86e3a38314d52498c/cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe", size = 184344, upload-time = "2025-09-08T23:22:26.456Z" }, - { url = "https://files.pythonhosted.org/packages/4f/8b/f0e4c441227ba756aafbe78f117485b25bb26b1c059d01f137fa6d14896b/cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c", size = 180560, upload-time = "2025-09-08T23:22:28.197Z" }, - { url = "https://files.pythonhosted.org/packages/b1/b7/1200d354378ef52ec227395d95c2576330fd22a869f7a70e88e1447eb234/cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92", size = 209613, upload-time = "2025-09-08T23:22:29.475Z" }, - { url = "https://files.pythonhosted.org/packages/b8/56/6033f5e86e8cc9bb629f0077ba71679508bdf54a9a5e112a3c0b91870332/cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93", size = 216476, upload-time = "2025-09-08T23:22:31.063Z" }, - { url = "https://files.pythonhosted.org/packages/dc/7f/55fecd70f7ece178db2f26128ec41430d8720f2d12ca97bf8f0a628207d5/cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5", size = 203374, upload-time = "2025-09-08T23:22:32.507Z" }, - { url = "https://files.pythonhosted.org/packages/84/ef/a7b77c8bdc0f77adc3b46888f1ad54be8f3b7821697a7b89126e829e676a/cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664", size = 202597, upload-time = "2025-09-08T23:22:34.132Z" }, - { url = "https://files.pythonhosted.org/packages/d7/91/500d892b2bf36529a75b77958edfcd5ad8e2ce4064ce2ecfeab2125d72d1/cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26", size = 215574, upload-time = "2025-09-08T23:22:35.443Z" }, - { url = "https://files.pythonhosted.org/packages/44/64/58f6255b62b101093d5df22dcb752596066c7e89dd725e0afaed242a61be/cffi-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9", size = 218971, upload-time = "2025-09-08T23:22:36.805Z" }, - { url = "https://files.pythonhosted.org/packages/ab/49/fa72cebe2fd8a55fbe14956f9970fe8eb1ac59e5df042f603ef7c8ba0adc/cffi-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414", size = 211972, upload-time = "2025-09-08T23:22:38.436Z" }, - { url = "https://files.pythonhosted.org/packages/0b/28/dd0967a76aab36731b6ebfe64dec4e981aff7e0608f60c2d46b46982607d/cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743", size = 217078, upload-time = "2025-09-08T23:22:39.776Z" }, - { url = "https://files.pythonhosted.org/packages/2b/c0/015b25184413d7ab0a410775fdb4a50fca20f5589b5dab1dbbfa3baad8ce/cffi-2.0.0-cp311-cp311-win32.whl", hash = "sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5", size = 172076, upload-time = "2025-09-08T23:22:40.95Z" }, - { url = "https://files.pythonhosted.org/packages/ae/8f/dc5531155e7070361eb1b7e4c1a9d896d0cb21c49f807a6c03fd63fc877e/cffi-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5", size = 182820, upload-time = "2025-09-08T23:22:42.463Z" }, - { url = "https://files.pythonhosted.org/packages/95/5c/1b493356429f9aecfd56bc171285a4c4ac8697f76e9bbbbb105e537853a1/cffi-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d", size = 177635, upload-time = "2025-09-08T23:22:43.623Z" }, { url = "https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d", size = 185271, upload-time = "2025-09-08T23:22:44.795Z" }, { url = "https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c", size = 181048, upload-time = "2025-09-08T23:22:45.938Z" }, { 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" }, @@ -341,22 +361,6 @@ version = "3.4.4" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/13/69/33ddede1939fdd074bce5434295f38fae7136463422fe4fd3e0e89b98062/charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a", size = 129418, upload-time = "2025-10-14T04:42:32.879Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ed/27/c6491ff4954e58a10f69ad90aca8a1b6fe9c5d3c6f380907af3c37435b59/charset_normalizer-3.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8", size = 206988, upload-time = "2025-10-14T04:40:33.79Z" }, - { url = "https://files.pythonhosted.org/packages/94/59/2e87300fe67ab820b5428580a53cad894272dbb97f38a7a814a2a1ac1011/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0", size = 147324, upload-time = "2025-10-14T04:40:34.961Z" }, - { url = "https://files.pythonhosted.org/packages/07/fb/0cf61dc84b2b088391830f6274cb57c82e4da8bbc2efeac8c025edb88772/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3", size = 142742, upload-time = "2025-10-14T04:40:36.105Z" }, - { url = "https://files.pythonhosted.org/packages/62/8b/171935adf2312cd745d290ed93cf16cf0dfe320863ab7cbeeae1dcd6535f/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc", size = 160863, upload-time = "2025-10-14T04:40:37.188Z" }, - { url = "https://files.pythonhosted.org/packages/09/73/ad875b192bda14f2173bfc1bc9a55e009808484a4b256748d931b6948442/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897", size = 157837, upload-time = "2025-10-14T04:40:38.435Z" }, - { url = "https://files.pythonhosted.org/packages/6d/fc/de9cce525b2c5b94b47c70a4b4fb19f871b24995c728e957ee68ab1671ea/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381", size = 151550, upload-time = "2025-10-14T04:40:40.053Z" }, - { url = "https://files.pythonhosted.org/packages/55/c2/43edd615fdfba8c6f2dfbd459b25a6b3b551f24ea21981e23fb768503ce1/charset_normalizer-3.4.4-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815", size = 149162, upload-time = "2025-10-14T04:40:41.163Z" }, - { url = "https://files.pythonhosted.org/packages/03/86/bde4ad8b4d0e9429a4e82c1e8f5c659993a9a863ad62c7df05cf7b678d75/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0", size = 150019, upload-time = "2025-10-14T04:40:42.276Z" }, - { url = "https://files.pythonhosted.org/packages/1f/86/a151eb2af293a7e7bac3a739b81072585ce36ccfb4493039f49f1d3cae8c/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161", size = 143310, upload-time = "2025-10-14T04:40:43.439Z" }, - { url = "https://files.pythonhosted.org/packages/b5/fe/43dae6144a7e07b87478fdfc4dbe9efd5defb0e7ec29f5f58a55aeef7bf7/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4", size = 162022, upload-time = "2025-10-14T04:40:44.547Z" }, - { url = "https://files.pythonhosted.org/packages/80/e6/7aab83774f5d2bca81f42ac58d04caf44f0cc2b65fc6db2b3b2e8a05f3b3/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89", size = 149383, upload-time = "2025-10-14T04:40:46.018Z" }, - { url = "https://files.pythonhosted.org/packages/4f/e8/b289173b4edae05c0dde07f69f8db476a0b511eac556dfe0d6bda3c43384/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569", size = 159098, upload-time = "2025-10-14T04:40:47.081Z" }, - { url = "https://files.pythonhosted.org/packages/d8/df/fe699727754cae3f8478493c7f45f777b17c3ef0600e28abfec8619eb49c/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224", size = 152991, upload-time = "2025-10-14T04:40:48.246Z" }, - { url = "https://files.pythonhosted.org/packages/1a/86/584869fe4ddb6ffa3bd9f491b87a01568797fb9bd8933f557dba9771beaf/charset_normalizer-3.4.4-cp311-cp311-win32.whl", hash = "sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a", size = 99456, upload-time = "2025-10-14T04:40:49.376Z" }, - { url = "https://files.pythonhosted.org/packages/65/f6/62fdd5feb60530f50f7e38b4f6a1d5203f4d16ff4f9f0952962c044e919a/charset_normalizer-3.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016", size = 106978, upload-time = "2025-10-14T04:40:50.844Z" }, - { url = "https://files.pythonhosted.org/packages/7a/9d/0710916e6c82948b3be62d9d398cb4fcf4e97b56d6a6aeccd66c4b2f2bd5/charset_normalizer-3.4.4-cp311-cp311-win_arm64.whl", hash = "sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1", size = 99969, upload-time = "2025-10-14T04:40:52.272Z" }, { url = "https://files.pythonhosted.org/packages/f3/85/1637cd4af66fa687396e757dec650f28025f2a2f5a5531a3208dc0ec43f2/charset_normalizer-3.4.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394", size = 208425, upload-time = "2025-10-14T04:40:53.353Z" }, { url = "https://files.pythonhosted.org/packages/9d/6a/04130023fef2a0d9c62d0bae2649b69f7b7d8d24ea5536feef50551029df/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25", size = 148162, upload-time = "2025-10-14T04:40:54.558Z" }, { url = "https://files.pythonhosted.org/packages/78/29/62328d79aa60da22c9e0b9a66539feae06ca0f5a4171ac4f7dc285b83688/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef", size = 144558, upload-time = "2025-10-14T04:40:55.677Z" }, @@ -459,17 +463,6 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/58/01/1253e6698a07380cd31a736d248a3f2a50a7c88779a1813da27503cadc2a/contourpy-1.3.3.tar.gz", hash = "sha256:083e12155b210502d0bca491432bb04d56dc3432f95a979b429f2848c3dbe880", size = 13466174, upload-time = "2025-07-26T12:03:12.549Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/91/2e/c4390a31919d8a78b90e8ecf87cd4b4c4f05a5b48d05ec17db8e5404c6f4/contourpy-1.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:709a48ef9a690e1343202916450bc48b9e51c049b089c7f79a267b46cffcdaa1", size = 288773, upload-time = "2025-07-26T12:01:02.277Z" }, - { url = "https://files.pythonhosted.org/packages/0d/44/c4b0b6095fef4dc9c420e041799591e3b63e9619e3044f7f4f6c21c0ab24/contourpy-1.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:23416f38bfd74d5d28ab8429cc4d63fa67d5068bd711a85edb1c3fb0c3e2f381", size = 270149, upload-time = "2025-07-26T12:01:04.072Z" }, - { url = "https://files.pythonhosted.org/packages/30/2e/dd4ced42fefac8470661d7cb7e264808425e6c5d56d175291e93890cce09/contourpy-1.3.3-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:929ddf8c4c7f348e4c0a5a3a714b5c8542ffaa8c22954862a46ca1813b667ee7", size = 329222, upload-time = "2025-07-26T12:01:05.688Z" }, - { url = "https://files.pythonhosted.org/packages/f2/74/cc6ec2548e3d276c71389ea4802a774b7aa3558223b7bade3f25787fafc2/contourpy-1.3.3-cp311-cp311-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9e999574eddae35f1312c2b4b717b7885d4edd6cb46700e04f7f02db454e67c1", size = 377234, upload-time = "2025-07-26T12:01:07.054Z" }, - { url = "https://files.pythonhosted.org/packages/03/b3/64ef723029f917410f75c09da54254c5f9ea90ef89b143ccadb09df14c15/contourpy-1.3.3-cp311-cp311-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0bf67e0e3f482cb69779dd3061b534eb35ac9b17f163d851e2a547d56dba0a3a", size = 380555, upload-time = "2025-07-26T12:01:08.801Z" }, - { url = "https://files.pythonhosted.org/packages/5f/4b/6157f24ca425b89fe2eb7e7be642375711ab671135be21e6faa100f7448c/contourpy-1.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:51e79c1f7470158e838808d4a996fa9bac72c498e93d8ebe5119bc1e6becb0db", size = 355238, upload-time = "2025-07-26T12:01:10.319Z" }, - { url = "https://files.pythonhosted.org/packages/98/56/f914f0dd678480708a04cfd2206e7c382533249bc5001eb9f58aa693e200/contourpy-1.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:598c3aaece21c503615fd59c92a3598b428b2f01bfb4b8ca9c4edeecc2438620", size = 1326218, upload-time = "2025-07-26T12:01:12.659Z" }, - { url = "https://files.pythonhosted.org/packages/fb/d7/4a972334a0c971acd5172389671113ae82aa7527073980c38d5868ff1161/contourpy-1.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:322ab1c99b008dad206d406bb61d014cf0174df491ae9d9d0fac6a6fda4f977f", size = 1392867, upload-time = "2025-07-26T12:01:15.533Z" }, - { url = "https://files.pythonhosted.org/packages/75/3e/f2cc6cd56dc8cff46b1a56232eabc6feea52720083ea71ab15523daab796/contourpy-1.3.3-cp311-cp311-win32.whl", hash = "sha256:fd907ae12cd483cd83e414b12941c632a969171bf90fc937d0c9f268a31cafff", size = 183677, upload-time = "2025-07-26T12:01:17.088Z" }, - { url = "https://files.pythonhosted.org/packages/98/4b/9bd370b004b5c9d8045c6c33cf65bae018b27aca550a3f657cdc99acdbd8/contourpy-1.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:3519428f6be58431c56581f1694ba8e50626f2dd550af225f82fb5f5814d2a42", size = 225234, upload-time = "2025-07-26T12:01:18.256Z" }, - { url = "https://files.pythonhosted.org/packages/d9/b6/71771e02c2e004450c12b1120a5f488cad2e4d5b590b1af8bad060360fe4/contourpy-1.3.3-cp311-cp311-win_arm64.whl", hash = "sha256:15ff10bfada4bf92ec8b31c62bf7c1834c244019b4a33095a68000d7075df470", size = 193123, upload-time = "2025-07-26T12:01:19.848Z" }, { url = "https://files.pythonhosted.org/packages/be/45/adfee365d9ea3d853550b2e735f9d66366701c65db7855cd07621732ccfc/contourpy-1.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b08a32ea2f8e42cf1d4be3169a98dd4be32bafe4f22b6c4cb4ba810fa9e5d2cb", size = 293419, upload-time = "2025-07-26T12:01:21.16Z" }, { url = "https://files.pythonhosted.org/packages/53/3e/405b59cfa13021a56bba395a6b3aca8cec012b45bf177b0eaf7a202cde2c/contourpy-1.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:556dba8fb6f5d8742f2923fe9457dbdd51e1049c4a43fd3986a0b14a1d815fc6", size = 273979, upload-time = "2025-07-26T12:01:22.448Z" }, { url = "https://files.pythonhosted.org/packages/d4/1c/a12359b9b2ca3a845e8f7f9ac08bdf776114eb931392fcad91743e2ea17b/contourpy-1.3.3-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92d9abc807cf7d0e047b95ca5d957cf4792fcd04e920ca70d48add15c1a90ea7", size = 332653, upload-time = "2025-07-26T12:01:24.155Z" }, @@ -525,11 +518,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/93/8a/68a4ec5c55a2971213d29a9374913f7e9f18581945a7a31d1a39b5d2dfe5/contourpy-1.3.3-cp314-cp314t-win32.whl", hash = "sha256:e74a9a0f5e3fff48fb5a7f2fd2b9b70a3fe014a67522f79b7cca4c0c7e43c9ae", size = 202428, upload-time = "2025-07-26T12:02:48.691Z" }, { url = "https://files.pythonhosted.org/packages/fa/96/fd9f641ffedc4fa3ace923af73b9d07e869496c9cc7a459103e6e978992f/contourpy-1.3.3-cp314-cp314t-win_amd64.whl", hash = "sha256:13b68d6a62db8eafaebb8039218921399baf6e47bf85006fd8529f2a08ef33fc", size = 250331, upload-time = "2025-07-26T12:02:50.137Z" }, { url = "https://files.pythonhosted.org/packages/ae/8c/469afb6465b853afff216f9528ffda78a915ff880ed58813ba4faf4ba0b6/contourpy-1.3.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b7448cb5a725bb1e35ce88771b86fba35ef418952474492cf7c764059933ff8b", size = 203831, upload-time = "2025-07-26T12:02:51.449Z" }, - { url = "https://files.pythonhosted.org/packages/a5/29/8dcfe16f0107943fa92388c23f6e05cff0ba58058c4c95b00280d4c75a14/contourpy-1.3.3-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:cd5dfcaeb10f7b7f9dc8941717c6c2ade08f587be2226222c12b25f0483ed497", size = 278809, upload-time = "2025-07-26T12:02:52.74Z" }, - { url = "https://files.pythonhosted.org/packages/85/a9/8b37ef4f7dafeb335daee3c8254645ef5725be4d9c6aa70b50ec46ef2f7e/contourpy-1.3.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:0c1fc238306b35f246d61a1d416a627348b5cf0648648a031e14bb8705fcdfe8", size = 261593, upload-time = "2025-07-26T12:02:54.037Z" }, - { url = "https://files.pythonhosted.org/packages/0a/59/ebfb8c677c75605cc27f7122c90313fd2f375ff3c8d19a1694bda74aaa63/contourpy-1.3.3-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:70f9aad7de812d6541d29d2bbf8feb22ff7e1c299523db288004e3157ff4674e", size = 302202, upload-time = "2025-07-26T12:02:55.947Z" }, - { url = "https://files.pythonhosted.org/packages/3c/37/21972a15834d90bfbfb009b9d004779bd5a07a0ec0234e5ba8f64d5736f4/contourpy-1.3.3-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5ed3657edf08512fc3fe81b510e35c2012fbd3081d2e26160f27ca28affec989", size = 329207, upload-time = "2025-07-26T12:02:57.468Z" }, - { url = "https://files.pythonhosted.org/packages/0c/58/bd257695f39d05594ca4ad60df5bcb7e32247f9951fd09a9b8edb82d1daa/contourpy-1.3.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:3d1a3799d62d45c18bafd41c5fa05120b96a28079f2393af559b843d1a966a77", size = 225315, upload-time = "2025-07-26T12:02:58.801Z" }, ] [[package]] @@ -538,19 +526,6 @@ version = "7.13.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/b6/45/2c665ca77ec32ad67e25c77daf1cee28ee4558f3bc571cdbaf88a00b9f23/coverage-7.13.0.tar.gz", hash = "sha256:a394aa27f2d7ff9bc04cf703817773a59ad6dfbd577032e690f961d2460ee936", size = 820905, upload-time = "2025-12-08T13:14:38.055Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f1/dc/888bf90d8b1c3d0b4020a40e52b9f80957d75785931ec66c7dfaccc11c7d/coverage-7.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0dfa3855031070058add1a59fdfda0192fd3e8f97e7c81de0596c145dea51820", size = 218104, upload-time = "2025-12-08T13:12:33.333Z" }, - { url = "https://files.pythonhosted.org/packages/8d/ea/069d51372ad9c380214e86717e40d1a743713a2af191cfba30a0911b0a4a/coverage-7.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4fdb6f54f38e334db97f72fa0c701e66d8479af0bc3f9bfb5b90f1c30f54500f", size = 218606, upload-time = "2025-12-08T13:12:34.498Z" }, - { url = "https://files.pythonhosted.org/packages/68/09/77b1c3a66c2aa91141b6c4471af98e5b1ed9b9e6d17255da5eb7992299e3/coverage-7.13.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:7e442c013447d1d8d195be62852270b78b6e255b79b8675bad8479641e21fd96", size = 248999, upload-time = "2025-12-08T13:12:36.02Z" }, - { url = "https://files.pythonhosted.org/packages/0a/32/2e2f96e9d5691eaf1181d9040f850b8b7ce165ea10810fd8e2afa534cef7/coverage-7.13.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1ed5630d946859de835a85e9a43b721123a8a44ec26e2830b296d478c7fd4259", size = 250925, upload-time = "2025-12-08T13:12:37.221Z" }, - { url = "https://files.pythonhosted.org/packages/7b/45/b88ddac1d7978859b9a39a8a50ab323186148f1d64bc068f86fc77706321/coverage-7.13.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7f15a931a668e58087bc39d05d2b4bf4b14ff2875b49c994bbdb1c2217a8daeb", size = 253032, upload-time = "2025-12-08T13:12:38.763Z" }, - { url = "https://files.pythonhosted.org/packages/71/cb/e15513f94c69d4820a34b6bf3d2b1f9f8755fa6021be97c7065442d7d653/coverage-7.13.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:30a3a201a127ea57f7e14ba43c93c9c4be8b7d17a26e03bb49e6966d019eede9", size = 249134, upload-time = "2025-12-08T13:12:40.382Z" }, - { url = "https://files.pythonhosted.org/packages/09/61/d960ff7dc9e902af3310ce632a875aaa7860f36d2bc8fc8b37ee7c1b82a5/coverage-7.13.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7a485ff48fbd231efa32d58f479befce52dcb6bfb2a88bb7bf9a0b89b1bc8030", size = 250731, upload-time = "2025-12-08T13:12:41.992Z" }, - { url = "https://files.pythonhosted.org/packages/98/34/c7c72821794afc7c7c2da1db8f00c2c98353078aa7fb6b5ff36aac834b52/coverage-7.13.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:22486cdafba4f9e471c816a2a5745337742a617fef68e890d8baf9f3036d7833", size = 248795, upload-time = "2025-12-08T13:12:43.331Z" }, - { url = "https://files.pythonhosted.org/packages/0a/5b/e0f07107987a43b2def9aa041c614ddb38064cbf294a71ef8c67d43a0cdd/coverage-7.13.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:263c3dbccc78e2e331e59e90115941b5f53e85cfcc6b3b2fbff1fd4e3d2c6ea8", size = 248514, upload-time = "2025-12-08T13:12:44.546Z" }, - { url = "https://files.pythonhosted.org/packages/71/c2/c949c5d3b5e9fc6dd79e1b73cdb86a59ef14f3709b1d72bf7668ae12e000/coverage-7.13.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e5330fa0cc1f5c3c4c3bb8e101b742025933e7848989370a1d4c8c5e401ea753", size = 249424, upload-time = "2025-12-08T13:12:45.759Z" }, - { url = "https://files.pythonhosted.org/packages/11/f1/bbc009abd6537cec0dffb2cc08c17a7f03de74c970e6302db4342a6e05af/coverage-7.13.0-cp311-cp311-win32.whl", hash = "sha256:0f4872f5d6c54419c94c25dd6ae1d015deeb337d06e448cd890a1e89a8ee7f3b", size = 220597, upload-time = "2025-12-08T13:12:47.378Z" }, - { url = "https://files.pythonhosted.org/packages/c4/f6/d9977f2fb51c10fbaed0718ce3d0a8541185290b981f73b1d27276c12d91/coverage-7.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:51a202e0f80f241ccb68e3e26e19ab5b3bf0f813314f2c967642f13ebcf1ddfe", size = 221536, upload-time = "2025-12-08T13:12:48.7Z" }, - { url = "https://files.pythonhosted.org/packages/be/ad/3fcf43fd96fb43e337a3073dea63ff148dcc5c41ba7a14d4c7d34efb2216/coverage-7.13.0-cp311-cp311-win_arm64.whl", hash = "sha256:d2a9d7f1c11487b1c69367ab3ac2d81b9b3721f097aa409a3191c3e90f8f3dd7", size = 220206, upload-time = "2025-12-08T13:12:50.365Z" }, { url = "https://files.pythonhosted.org/packages/9b/f1/2619559f17f31ba00fc40908efd1fbf1d0a5536eb75dc8341e7d660a08de/coverage-7.13.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0b3d67d31383c4c68e19a88e28fc4c2e29517580f1b0ebec4a069d502ce1e0bf", size = 218274, upload-time = "2025-12-08T13:12:52.095Z" }, { url = "https://files.pythonhosted.org/packages/2b/11/30d71ae5d6e949ff93b2a79a2c1b4822e00423116c5c6edfaeef37301396/coverage-7.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:581f086833d24a22c89ae0fe2142cfaa1c92c930adf637ddf122d55083fb5a0f", size = 218638, upload-time = "2025-12-08T13:12:53.418Z" }, { url = "https://files.pythonhosted.org/packages/79/c2/fce80fc6ded8d77e53207489d6065d0fed75db8951457f9213776615e0f5/coverage-7.13.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:0a3a30f0e257df382f5f9534d4ce3d4cf06eafaf5192beb1a7bd066cb10e78fb", size = 250129, upload-time = "2025-12-08T13:12:54.744Z" }, @@ -619,11 +594,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/8d/4c/1968f32fb9a2604645827e11ff84a31e59d532e01995f904723b4f5328b3/coverage-7.13.0-py3-none-any.whl", hash = "sha256:850d2998f380b1e266459ca5b47bc9e7daf9af1d070f66317972f382d46f1904", size = 210068, upload-time = "2025-12-08T13:14:36.236Z" }, ] -[package.optional-dependencies] -toml = [ - { name = "tomli", marker = "python_full_version <= '3.11'" }, -] - [[package]] name = "cryptography" version = "46.0.3" @@ -678,12 +648,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0a/6e/1c8331ddf91ca4730ab3086a0f1be19c65510a33b5a441cb334e7a2d2560/cryptography-46.0.3-cp38-abi3-win32.whl", hash = "sha256:6276eb85ef938dc035d59b87c8a7dc559a232f954962520137529d77b18ff1df", size = 3036695, upload-time = "2025-10-15T23:18:08.672Z" }, { url = "https://files.pythonhosted.org/packages/90/45/b0d691df20633eff80955a0fc7695ff9051ffce8b69741444bd9ed7bd0db/cryptography-46.0.3-cp38-abi3-win_amd64.whl", hash = "sha256:416260257577718c05135c55958b674000baef9a1c7d9e8f306ec60d71db850f", size = 3501720, upload-time = "2025-10-15T23:18:10.632Z" }, { url = "https://files.pythonhosted.org/packages/e8/cb/2da4cc83f5edb9c3257d09e1e7ab7b23f049c7962cae8d842bbef0a9cec9/cryptography-46.0.3-cp38-abi3-win_arm64.whl", hash = "sha256:d89c3468de4cdc4f08a57e214384d0471911a3830fcdaf7a8cc587e42a866372", size = 2918740, upload-time = "2025-10-15T23:18:12.277Z" }, - { url = "https://files.pythonhosted.org/packages/06/8a/e60e46adab4362a682cf142c7dcb5bf79b782ab2199b0dcb81f55970807f/cryptography-46.0.3-pp311-pypy311_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7ce938a99998ed3c8aa7e7272dca1a610401ede816d36d0693907d863b10d9ea", size = 3698132, upload-time = "2025-10-15T23:18:17.056Z" }, - { url = "https://files.pythonhosted.org/packages/da/38/f59940ec4ee91e93d3311f7532671a5cef5570eb04a144bf203b58552d11/cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:191bb60a7be5e6f54e30ba16fdfae78ad3a342a0599eb4193ba88e3f3d6e185b", size = 4243992, upload-time = "2025-10-15T23:18:18.695Z" }, - { url = "https://files.pythonhosted.org/packages/b0/0c/35b3d92ddebfdfda76bb485738306545817253d0a3ded0bfe80ef8e67aa5/cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c70cc23f12726be8f8bc72e41d5065d77e4515efae3690326764ea1b07845cfb", size = 4409944, upload-time = "2025-10-15T23:18:20.597Z" }, - { url = "https://files.pythonhosted.org/packages/99/55/181022996c4063fc0e7666a47049a1ca705abb9c8a13830f074edb347495/cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:9394673a9f4de09e28b5356e7fff97d778f8abad85c9d5ac4a4b7e25a0de7717", size = 4242957, upload-time = "2025-10-15T23:18:22.18Z" }, - { url = "https://files.pythonhosted.org/packages/ba/af/72cd6ef29f9c5f731251acadaeb821559fe25f10852f44a63374c9ca08c1/cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:94cd0549accc38d1494e1f8de71eca837d0509d0d44bf11d158524b0e12cebf9", size = 4409447, upload-time = "2025-10-15T23:18:24.209Z" }, - { url = "https://files.pythonhosted.org/packages/0d/c3/e90f4a4feae6410f914f8ebac129b9ae7a8c92eb60a638012dde42030a9d/cryptography-46.0.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:6b5063083824e5509fdba180721d55909ffacccc8adbec85268b48439423d78c", size = 3438528, upload-time = "2025-10-15T23:18:26.227Z" }, ] [[package]] @@ -703,7 +667,6 @@ dependencies = [ { name = "click" }, { name = "cloudpickle" }, { name = "fsspec" }, - { name = "importlib-metadata", marker = "python_full_version < '3.12'" }, { name = "packaging" }, { name = "partd" }, { name = "pyyaml" }, @@ -755,13 +718,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1b/08/0eac3c72a9fd79a043cc492f3ba350c47a7be2160288353218b2c8c1bf3a/deptry-0.24.0-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:92bd8d331a5a6f8e6247436bc6fe384bcf86a8d69fe33442d195996fb9b20547", size = 2023832, upload-time = "2025-11-09T00:31:36.381Z" }, { url = "https://files.pythonhosted.org/packages/35/e4/23dcbc505f6f35c70ba68015774cf891ceda080331d7fd6d75e84ada9f73/deptry-0.24.0-cp39-abi3-win_amd64.whl", hash = "sha256:94b354848130d45e16d3a3039ae8177bce33828f62028c4ff8f2e1b04f7182ba", size = 1631631, upload-time = "2025-11-09T00:31:47.108Z" }, { url = "https://files.pythonhosted.org/packages/39/69/6ec1e18e27dd6f80e4fb6c5fc05a6527242ff83b81c0711d0ba470e9a144/deptry-0.24.0-cp39-abi3-win_arm64.whl", hash = "sha256:ea58709e5f3aa77c0737d8fb76166b7703201cf368fbbb14072ccda968b6703a", size = 1550504, upload-time = "2025-11-09T00:31:45.988Z" }, - { url = "https://files.pythonhosted.org/packages/05/c3/1f2b6afca508a9abcd047c5b4ef69a5fc023a204097cd32cea3de261aa57/deptry-0.24.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6ae96785aaee5540c144306506f1480dcfa4d096094e6bd09dc8c9a9bfda1d46", size = 1770679, upload-time = "2025-11-09T00:31:43.152Z" }, - { url = "https://files.pythonhosted.org/packages/dd/5f/225a920799b601611e6089603ab3521a8f4f7e06bb36a2a08e95fbb68863/deptry-0.24.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:4267d74a600ac7fdd05a0d3e219c9386670db0d3bb316ae7b94c9b239d1187cb", size = 1676012, upload-time = "2025-11-09T00:31:40.755Z" }, - { url = "https://files.pythonhosted.org/packages/ee/83/a52c838fb65929c5589866943348931f2baa22a1051dc7b9c29f4d37dc5d/deptry-0.24.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a047e53b76c36737f8bb392bb326fb66c6af4bedafeaa4ad274c7ed82e91862", size = 1776224, upload-time = "2025-11-09T00:31:30.103Z" }, - { url = "https://files.pythonhosted.org/packages/41/87/cac78e750401621a4abf4e724a1f6dd141e0005a33790bda282b275d1359/deptry-0.24.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:841bf35d62e1facc0c244b9430455705249cc93552ed4964d367befe9be6a313", size = 1841353, upload-time = "2025-11-09T00:31:34.903Z" }, - { url = "https://files.pythonhosted.org/packages/03/c7/c3180784855e702aa5fa94c88a4bda3c5364860606dccc13ba86bf45ee90/deptry-0.24.0-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:5152ffa478e62f9aea9df585ce49d758087fd202f6d92012216aa0ecad22c267", size = 1957564, upload-time = "2025-11-09T00:31:32.285Z" }, - { url = "https://files.pythonhosted.org/packages/e9/65/f33e882d743eda90a7f12515f774be08bdf244520298d259ed9be687e5fe/deptry-0.24.0-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:68d90735042c169e2a12846ac5af9e20d0ad1a5a7a894a9e4eb0bd8f3c655add", size = 2019800, upload-time = "2025-11-09T00:31:37.625Z" }, - { url = "https://files.pythonhosted.org/packages/18/b8/68d6ca1d8a16061e79693587560f6d24ac18ba9617804d7808b2c988d9d5/deptry-0.24.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:03d375db3e56821803aeca665dbb4c2fd935024310350cc18e8d8b6421369d2b", size = 1629786, upload-time = "2025-11-09T00:31:49.469Z" }, ] [[package]] @@ -838,14 +794,6 @@ version = "4.61.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/ec/ca/cf17b88a8df95691275a3d77dc0a5ad9907f328ae53acbe6795da1b2f5ed/fonttools-4.61.1.tar.gz", hash = "sha256:6675329885c44657f826ef01d9e4fb33b9158e9d93c537d84ad8399539bc6f69", size = 3565756, upload-time = "2025-12-12T17:31:24.246Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/69/12/bf9f4eaa2fad039356cc627587e30ed008c03f1cebd3034376b5ee8d1d44/fonttools-4.61.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c6604b735bb12fef8e0efd5578c9fb5d3d8532d5001ea13a19cddf295673ee09", size = 2852213, upload-time = "2025-12-12T17:29:46.675Z" }, - { url = "https://files.pythonhosted.org/packages/ac/49/4138d1acb6261499bedde1c07f8c2605d1d8f9d77a151e5507fd3ef084b6/fonttools-4.61.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5ce02f38a754f207f2f06557523cd39a06438ba3aafc0639c477ac409fc64e37", size = 2401689, upload-time = "2025-12-12T17:29:48.769Z" }, - { url = "https://files.pythonhosted.org/packages/e5/fe/e6ce0fe20a40e03aef906af60aa87668696f9e4802fa283627d0b5ed777f/fonttools-4.61.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:77efb033d8d7ff233385f30c62c7c79271c8885d5c9657d967ede124671bbdfb", size = 5058809, upload-time = "2025-12-12T17:29:51.701Z" }, - { url = "https://files.pythonhosted.org/packages/79/61/1ca198af22f7dd22c17ab86e9024ed3c06299cfdb08170640e9996d501a0/fonttools-4.61.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:75c1a6dfac6abd407634420c93864a1e274ebc1c7531346d9254c0d8f6ca00f9", size = 5036039, upload-time = "2025-12-12T17:29:53.659Z" }, - { url = "https://files.pythonhosted.org/packages/99/cc/fa1801e408586b5fce4da9f5455af8d770f4fc57391cd5da7256bb364d38/fonttools-4.61.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0de30bfe7745c0d1ffa2b0b7048fb7123ad0d71107e10ee090fa0b16b9452e87", size = 5034714, upload-time = "2025-12-12T17:29:55.592Z" }, - { url = "https://files.pythonhosted.org/packages/bf/aa/b7aeafe65adb1b0a925f8f25725e09f078c635bc22754f3fecb7456955b0/fonttools-4.61.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:58b0ee0ab5b1fc9921eccfe11d1435added19d6494dde14e323f25ad2bc30c56", size = 5158648, upload-time = "2025-12-12T17:29:57.861Z" }, - { url = "https://files.pythonhosted.org/packages/99/f9/08ea7a38663328881384c6e7777bbefc46fd7d282adfd87a7d2b84ec9d50/fonttools-4.61.1-cp311-cp311-win32.whl", hash = "sha256:f79b168428351d11e10c5aeb61a74e1851ec221081299f4cf56036a95431c43a", size = 2280681, upload-time = "2025-12-12T17:29:59.943Z" }, - { url = "https://files.pythonhosted.org/packages/07/ad/37dd1ae5fa6e01612a1fbb954f0927681f282925a86e86198ccd7b15d515/fonttools-4.61.1-cp311-cp311-win_amd64.whl", hash = "sha256:fe2efccb324948a11dd09d22136fe2ac8a97d6c1347cf0b58a911dcd529f66b7", size = 2331951, upload-time = "2025-12-12T17:30:02.254Z" }, { url = "https://files.pythonhosted.org/packages/6f/16/7decaa24a1bd3a70c607b2e29f0adc6159f36a7e40eaba59846414765fd4/fonttools-4.61.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:f3cb4a569029b9f291f88aafc927dd53683757e640081ca8c412781ea144565e", size = 2851593, upload-time = "2025-12-12T17:30:04.225Z" }, { url = "https://files.pythonhosted.org/packages/94/98/3c4cb97c64713a8cf499b3245c3bf9a2b8fd16a3e375feff2aed78f96259/fonttools-4.61.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41a7170d042e8c0024703ed13b71893519a1a6d6e18e933e3ec7507a2c26a4b2", size = 2400231, upload-time = "2025-12-12T17:30:06.47Z" }, { url = "https://files.pythonhosted.org/packages/b7/37/82dbef0f6342eb01f54bca073ac1498433d6ce71e50c3c3282b655733b31/fonttools-4.61.1-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:10d88e55330e092940584774ee5e8a6971b01fc2f4d3466a1d6c158230880796", size = 4954103, upload-time = "2025-12-12T17:30:08.432Z" }, @@ -932,18 +880,9 @@ version = "3.3.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/c7/e5/40dbda2736893e3e53d25838e0f19a2b417dfc122b9989c91918db30b5d3/greenlet-3.3.0.tar.gz", hash = "sha256:a82bb225a4e9e4d653dd2fb7b8b2d36e4fb25bc0165422a11e48b88e9e6f78fb", size = 190651, upload-time = "2025-12-04T14:49:44.05Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1f/cb/48e964c452ca2b92175a9b2dca037a553036cb053ba69e284650ce755f13/greenlet-3.3.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:e29f3018580e8412d6aaf5641bb7745d38c85228dacf51a73bd4e26ddf2a6a8e", size = 274908, upload-time = "2025-12-04T14:23:26.435Z" }, - { url = "https://files.pythonhosted.org/packages/28/da/38d7bff4d0277b594ec557f479d65272a893f1f2a716cad91efeb8680953/greenlet-3.3.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a687205fb22794e838f947e2194c0566d3812966b41c78709554aa883183fb62", size = 577113, upload-time = "2025-12-04T14:50:05.493Z" }, - { url = "https://files.pythonhosted.org/packages/3c/f2/89c5eb0faddc3ff014f1c04467d67dee0d1d334ab81fadbf3744847f8a8a/greenlet-3.3.0-cp311-cp311-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4243050a88ba61842186cb9e63c7dfa677ec146160b0efd73b855a3d9c7fcf32", size = 590338, upload-time = "2025-12-04T14:57:41.136Z" }, - { url = "https://files.pythonhosted.org/packages/80/d7/db0a5085035d05134f8c089643da2b44cc9b80647c39e93129c5ef170d8f/greenlet-3.3.0-cp311-cp311-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:670d0f94cd302d81796e37299bcd04b95d62403883b24225c6b5271466612f45", size = 601098, upload-time = "2025-12-04T15:07:11.898Z" }, - { url = "https://files.pythonhosted.org/packages/dc/a6/e959a127b630a58e23529972dbc868c107f9d583b5a9f878fb858c46bc1a/greenlet-3.3.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6cb3a8ec3db4a3b0eb8a3c25436c2d49e3505821802074969db017b87bc6a948", size = 590206, upload-time = "2025-12-04T14:26:01.254Z" }, - { url = "https://files.pythonhosted.org/packages/48/60/29035719feb91798693023608447283b266b12efc576ed013dd9442364bb/greenlet-3.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2de5a0b09eab81fc6a382791b995b1ccf2b172a9fec934747a7a23d2ff291794", size = 1550668, upload-time = "2025-12-04T15:04:22.439Z" }, - { url = "https://files.pythonhosted.org/packages/0a/5f/783a23754b691bfa86bd72c3033aa107490deac9b2ef190837b860996c9f/greenlet-3.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4449a736606bd30f27f8e1ff4678ee193bc47f6ca810d705981cfffd6ce0d8c5", size = 1615483, upload-time = "2025-12-04T14:27:28.083Z" }, - { url = "https://files.pythonhosted.org/packages/1d/d5/c339b3b4bc8198b7caa4f2bd9fd685ac9f29795816d8db112da3d04175bb/greenlet-3.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:7652ee180d16d447a683c04e4c5f6441bae7ba7b17ffd9f6b3aff4605e9e6f71", size = 301164, upload-time = "2025-12-04T14:42:51.577Z" }, { url = "https://files.pythonhosted.org/packages/f8/0a/a3871375c7b9727edaeeea994bfff7c63ff7804c9829c19309ba2e058807/greenlet-3.3.0-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:b01548f6e0b9e9784a2c99c5651e5dc89ffcbe870bc5fb2e5ef864e9cc6b5dcb", size = 276379, upload-time = "2025-12-04T14:23:30.498Z" }, { url = "https://files.pythonhosted.org/packages/43/ab/7ebfe34dce8b87be0d11dae91acbf76f7b8246bf9d6b319c741f99fa59c6/greenlet-3.3.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:349345b770dc88f81506c6861d22a6ccd422207829d2c854ae2af8025af303e3", size = 597294, upload-time = "2025-12-04T14:50:06.847Z" }, { url = "https://files.pythonhosted.org/packages/a4/39/f1c8da50024feecd0793dbd5e08f526809b8ab5609224a2da40aad3a7641/greenlet-3.3.0-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e8e18ed6995e9e2c0b4ed264d2cf89260ab3ac7e13555b8032b25a74c6d18655", size = 607742, upload-time = "2025-12-04T14:57:42.349Z" }, - { url = "https://files.pythonhosted.org/packages/77/cb/43692bcd5f7a0da6ec0ec6d58ee7cddb606d055ce94a62ac9b1aa481e969/greenlet-3.3.0-cp312-cp312-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c024b1e5696626890038e34f76140ed1daf858e37496d33f2af57f06189e70d7", size = 622297, upload-time = "2025-12-04T15:07:13.552Z" }, { url = "https://files.pythonhosted.org/packages/75/b0/6bde0b1011a60782108c01de5913c588cf51a839174538d266de15e4bf4d/greenlet-3.3.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:047ab3df20ede6a57c35c14bf5200fcf04039d50f908270d3f9a7a82064f543b", size = 609885, upload-time = "2025-12-04T14:26:02.368Z" }, { url = "https://files.pythonhosted.org/packages/49/0e/49b46ac39f931f59f987b7cd9f34bfec8ef81d2a1e6e00682f55be5de9f4/greenlet-3.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2d9ad37fc657b1102ec880e637cccf20191581f75c64087a549e66c57e1ceb53", size = 1567424, upload-time = "2025-12-04T15:04:23.757Z" }, { url = "https://files.pythonhosted.org/packages/05/f5/49a9ac2dff7f10091935def9165c90236d8f175afb27cbed38fb1d61ab6b/greenlet-3.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:83cd0e36932e0e7f36a64b732a6f60c2fc2df28c351bae79fbaf4f8092fe7614", size = 1636017, upload-time = "2025-12-04T14:27:29.688Z" }, @@ -951,7 +890,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/02/2f/28592176381b9ab2cafa12829ba7b472d177f3acc35d8fbcf3673d966fff/greenlet-3.3.0-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:a1e41a81c7e2825822f4e068c48cb2196002362619e2d70b148f20a831c00739", size = 275140, upload-time = "2025-12-04T14:23:01.282Z" }, { url = "https://files.pythonhosted.org/packages/2c/80/fbe937bf81e9fca98c981fe499e59a3f45df2a04da0baa5c2be0dca0d329/greenlet-3.3.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9f515a47d02da4d30caaa85b69474cec77b7929b2e936ff7fb853d42f4bf8808", size = 599219, upload-time = "2025-12-04T14:50:08.309Z" }, { url = "https://files.pythonhosted.org/packages/c2/ff/7c985128f0514271b8268476af89aee6866df5eec04ac17dcfbc676213df/greenlet-3.3.0-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7d2d9fd66bfadf230b385fdc90426fcd6eb64db54b40c495b72ac0feb5766c54", size = 610211, upload-time = "2025-12-04T14:57:43.968Z" }, - { url = "https://files.pythonhosted.org/packages/79/07/c47a82d881319ec18a4510bb30463ed6891f2ad2c1901ed5ec23d3de351f/greenlet-3.3.0-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:30a6e28487a790417d036088b3bcb3f3ac7d8babaa7d0139edbaddebf3af9492", size = 624311, upload-time = "2025-12-04T15:07:14.697Z" }, { url = "https://files.pythonhosted.org/packages/fd/8e/424b8c6e78bd9837d14ff7df01a9829fc883ba2ab4ea787d4f848435f23f/greenlet-3.3.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:087ea5e004437321508a8d6f20efc4cfec5e3c30118e1417ea96ed1d93950527", size = 612833, upload-time = "2025-12-04T14:26:03.669Z" }, { url = "https://files.pythonhosted.org/packages/b5/ba/56699ff9b7c76ca12f1cdc27a886d0f81f2189c3455ff9f65246780f713d/greenlet-3.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ab97cf74045343f6c60a39913fa59710e4bd26a536ce7ab2397adf8b27e67c39", size = 1567256, upload-time = "2025-12-04T15:04:25.276Z" }, { url = "https://files.pythonhosted.org/packages/1e/37/f31136132967982d698c71a281a8901daf1a8fbab935dce7c0cf15f942cc/greenlet-3.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5375d2e23184629112ca1ea89a53389dddbffcf417dad40125713d88eb5f96e8", size = 1636483, upload-time = "2025-12-04T14:27:30.804Z" }, @@ -959,7 +897,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d7/7c/f0a6d0ede2c7bf092d00bc83ad5bafb7e6ec9b4aab2fbdfa6f134dc73327/greenlet-3.3.0-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:60c2ef0f578afb3c8d92ea07ad327f9a062547137afe91f38408f08aacab667f", size = 275671, upload-time = "2025-12-04T14:23:05.267Z" }, { url = "https://files.pythonhosted.org/packages/44/06/dac639ae1a50f5969d82d2e3dd9767d30d6dbdbab0e1a54010c8fe90263c/greenlet-3.3.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a5d554d0712ba1de0a6c94c640f7aeba3f85b3a6e1f2899c11c2c0428da9365", size = 646360, upload-time = "2025-12-04T14:50:10.026Z" }, { url = "https://files.pythonhosted.org/packages/e0/94/0fb76fe6c5369fba9bf98529ada6f4c3a1adf19e406a47332245ef0eb357/greenlet-3.3.0-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3a898b1e9c5f7307ebbde4102908e6cbfcb9ea16284a3abe15cab996bee8b9b3", size = 658160, upload-time = "2025-12-04T14:57:45.41Z" }, - { url = "https://files.pythonhosted.org/packages/93/79/d2c70cae6e823fac36c3bbc9077962105052b7ef81db2f01ec3b9bf17e2b/greenlet-3.3.0-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:dcd2bdbd444ff340e8d6bdf54d2f206ccddbb3ccfdcd3c25bf4afaa7b8f0cf45", size = 671388, upload-time = "2025-12-04T15:07:15.789Z" }, { url = "https://files.pythonhosted.org/packages/b8/14/bab308fc2c1b5228c3224ec2bf928ce2e4d21d8046c161e44a2012b5203e/greenlet-3.3.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5773edda4dc00e173820722711d043799d3adb4f01731f40619e07ea2750b955", size = 660166, upload-time = "2025-12-04T14:26:05.099Z" }, { url = "https://files.pythonhosted.org/packages/4b/d2/91465d39164eaa0085177f61983d80ffe746c5a1860f009811d498e7259c/greenlet-3.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ac0549373982b36d5fd5d30beb8a7a33ee541ff98d2b502714a09f1169f31b55", size = 1615193, upload-time = "2025-12-04T15:04:27.041Z" }, { url = "https://files.pythonhosted.org/packages/42/1b/83d110a37044b92423084d52d5d5a3b3a73cafb51b547e6d7366ff62eff1/greenlet-3.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d198d2d977460358c3b3a4dc844f875d1adb33817f0613f663a656f463764ccc", size = 1683653, upload-time = "2025-12-04T14:27:32.366Z" }, @@ -967,7 +904,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a0/66/bd6317bc5932accf351fc19f177ffba53712a202f9df10587da8df257c7e/greenlet-3.3.0-cp314-cp314t-macosx_11_0_universal2.whl", hash = "sha256:d6ed6f85fae6cdfdb9ce04c9bf7a08d666cfcfb914e7d006f44f840b46741931", size = 282638, upload-time = "2025-12-04T14:25:20.941Z" }, { url = "https://files.pythonhosted.org/packages/30/cf/cc81cb030b40e738d6e69502ccbd0dd1bced0588e958f9e757945de24404/greenlet-3.3.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d9125050fcf24554e69c4cacb086b87b3b55dc395a8b3ebe6487b045b2614388", size = 651145, upload-time = "2025-12-04T14:50:11.039Z" }, { url = "https://files.pythonhosted.org/packages/9c/ea/1020037b5ecfe95ca7df8d8549959baceb8186031da83d5ecceff8b08cd2/greenlet-3.3.0-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:87e63ccfa13c0a0f6234ed0add552af24cc67dd886731f2261e46e241608bee3", size = 654236, upload-time = "2025-12-04T14:57:47.007Z" }, - { url = "https://files.pythonhosted.org/packages/69/cc/1e4bae2e45ca2fa55299f4e85854606a78ecc37fead20d69322f96000504/greenlet-3.3.0-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2662433acbca297c9153a4023fe2161c8dcfdcc91f10433171cf7e7d94ba2221", size = 662506, upload-time = "2025-12-04T15:07:16.906Z" }, { url = "https://files.pythonhosted.org/packages/57/b9/f8025d71a6085c441a7eaff0fd928bbb275a6633773667023d19179fe815/greenlet-3.3.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3c6e9b9c1527a78520357de498b0e709fb9e2f49c3a513afd5a249007261911b", size = 653783, upload-time = "2025-12-04T14:26:06.225Z" }, { url = "https://files.pythonhosted.org/packages/f6/c7/876a8c7a7485d5d6b5c6821201d542ef28be645aa024cfe1145b35c120c1/greenlet-3.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:286d093f95ec98fdd92fcb955003b8a3d054b4e2cab3e2707a5039e7b50520fd", size = 1614857, upload-time = "2025-12-04T15:04:28.484Z" }, { url = "https://files.pythonhosted.org/packages/4f/dc/041be1dff9f23dac5f48a43323cd0789cb798342011c19a248d9c9335536/greenlet-3.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c10513330af5b8ae16f023e8ddbfb486ab355d04467c4679c5cfe4659975dd9", size = 1676034, upload-time = "2025-12-04T14:27:33.531Z" }, @@ -994,14 +930,6 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/4d/6a/0d79de0b025aa85dc8864de8e97659c94cf3d23148394a954dc5ca52f8c8/h5py-3.15.1.tar.gz", hash = "sha256:c86e3ed45c4473564de55aa83b6fc9e5ead86578773dfbd93047380042e26b69", size = 426236, upload-time = "2025-10-16T10:35:27.404Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/41/fd/8349b48b15b47768042cff06ad6e1c229f0a4bd89225bf6b6894fea27e6d/h5py-3.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5aaa330bcbf2830150c50897ea5dcbed30b5b6d56897289846ac5b9e529ec243", size = 3434135, upload-time = "2025-10-16T10:33:47.954Z" }, - { url = "https://files.pythonhosted.org/packages/c1/b0/1c628e26a0b95858f54aba17e1599e7f6cd241727596cc2580b72cb0a9bf/h5py-3.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c970fb80001fffabb0109eaf95116c8e7c0d3ca2de854e0901e8a04c1f098509", size = 2870958, upload-time = "2025-10-16T10:33:50.907Z" }, - { url = "https://files.pythonhosted.org/packages/f9/e3/c255cafc9b85e6ea04e2ad1bba1416baa1d7f57fc98a214be1144087690c/h5py-3.15.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:80e5bb5b9508d5d9da09f81fd00abbb3f85da8143e56b1585d59bc8ceb1dba8b", size = 4504770, upload-time = "2025-10-16T10:33:54.357Z" }, - { url = "https://files.pythonhosted.org/packages/8b/23/4ab1108e87851ccc69694b03b817d92e142966a6c4abd99e17db77f2c066/h5py-3.15.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5b849ba619a066196169763c33f9f0f02e381156d61c03e000bb0100f9950faf", size = 4700329, upload-time = "2025-10-16T10:33:57.616Z" }, - { url = "https://files.pythonhosted.org/packages/a4/e4/932a3a8516e4e475b90969bf250b1924dbe3612a02b897e426613aed68f4/h5py-3.15.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e7f6c841efd4e6e5b7e82222eaf90819927b6d256ab0f3aca29675601f654f3c", size = 4152456, upload-time = "2025-10-16T10:34:00.843Z" }, - { url = "https://files.pythonhosted.org/packages/2a/0a/f74d589883b13737021b2049ac796328f188dbb60c2ed35b101f5b95a3fc/h5py-3.15.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ca8a3a22458956ee7b40d8e39c9a9dc01f82933e4c030c964f8b875592f4d831", size = 4617295, upload-time = "2025-10-16T10:34:04.154Z" }, - { url = "https://files.pythonhosted.org/packages/23/95/499b4e56452ef8b6c95a271af0dde08dac4ddb70515a75f346d4f400579b/h5py-3.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:550e51131376889656feec4aff2170efc054a7fe79eb1da3bb92e1625d1ac878", size = 2882129, upload-time = "2025-10-16T10:34:06.886Z" }, - { url = "https://files.pythonhosted.org/packages/ce/bb/cfcc70b8a42222ba3ad4478bcef1791181ea908e2adbd7d53c66395edad5/h5py-3.15.1-cp311-cp311-win_arm64.whl", hash = "sha256:b39239947cb36a819147fc19e86b618dcb0953d1cd969f5ed71fc0de60392427", size = 2477121, upload-time = "2025-10-16T10:34:09.579Z" }, { url = "https://files.pythonhosted.org/packages/62/b8/c0d9aa013ecfa8b7057946c080c0c07f6fa41e231d2e9bd306a2f8110bdc/h5py-3.15.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:316dd0f119734f324ca7ed10b5627a2de4ea42cc4dfbcedbee026aaa361c238c", size = 3399089, upload-time = "2025-10-16T10:34:12.135Z" }, { url = "https://files.pythonhosted.org/packages/a4/5e/3c6f6e0430813c7aefe784d00c6711166f46225f5d229546eb53032c3707/h5py-3.15.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b51469890e58e85d5242e43aab29f5e9c7e526b951caab354f3ded4ac88e7b76", size = 2847803, upload-time = "2025-10-16T10:34:14.564Z" }, { url = "https://files.pythonhosted.org/packages/00/69/ba36273b888a4a48d78f9268d2aee05787e4438557450a8442946ab8f3ec/h5py-3.15.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a33bfd5dfcea037196f7778534b1ff7e36a7f40a89e648c8f2967292eb6898e", size = 4914884, upload-time = "2025-10-16T10:34:18.452Z" }, @@ -1046,18 +974,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" }, ] -[[package]] -name = "importlib-metadata" -version = "8.7.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "zipp", marker = "python_full_version < '3.12'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/76/66/650a33bd90f786193e4de4b3ad86ea60b53c89b669a5c7be931fac31cdb0/importlib_metadata-8.7.0.tar.gz", hash = "sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000", size = 56641, upload-time = "2025-04-27T15:29:01.736Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/20/b0/36bd937216ec521246249be3bf9855081de4c5e06a0c9b4219dbeda50373/importlib_metadata-8.7.0-py3-none-any.whl", hash = "sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd", size = 27656, upload-time = "2025-04-27T15:29:00.214Z" }, -] - [[package]] name = "iniconfig" version = "2.3.0" @@ -1101,10 +1017,8 @@ name = "jax" version = "0.7.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version == '3.12.*' and sys_platform == 'linux'", - "python_full_version == '3.12.*' and sys_platform != 'linux'", - "python_full_version < '3.12' and sys_platform == 'linux'", - "python_full_version < '3.12' and sys_platform != 'linux'", + "python_full_version < '3.13' and sys_platform == 'linux'", + "python_full_version < '3.13' and sys_platform != 'linux'", ] dependencies = [ { name = "jaxlib", version = "0.7.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13'" }, @@ -1132,10 +1046,6 @@ dependencies = [ { name = "scipy", marker = "python_full_version >= '3.13'" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/c2/f2/d9397f264141f2289e229b2faf3b3ddb6397b014a09abe234367814f9697/jaxlib-0.5.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b62bd8b29e5a4f9bfaa57c8daf6e04820b2c994f448f3dec602d64255545e9f2", size = 63696815, upload-time = "2025-03-19T18:24:14.662Z" }, - { url = "https://files.pythonhosted.org/packages/e8/91/04bf391a21ccfb299b9952f91d5c082e5f9877221e5d98592875af4a50e4/jaxlib-0.5.3-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:a4666f81d72c060ed3e581ded116a9caa9b0a70a148a54cb12a1d3afca3624b5", size = 95770114, upload-time = "2025-03-19T18:24:19.498Z" }, - { url = "https://files.pythonhosted.org/packages/67/de/50debb40944baa5ba459604578f8c721be9f38c78ef9e8902895566e6a66/jaxlib-0.5.3-cp311-cp311-manylinux2014_x86_64.whl", hash = "sha256:29e1530fc81833216f1e28b578d0c59697654f72ee31c7a44ed7753baf5ac466", size = 105119259, upload-time = "2025-03-19T18:24:25.39Z" }, - { url = "https://files.pythonhosted.org/packages/20/91/d73c842d1e5cc6b914bb521006d668fbfda4c53cd4424ce9c3a097f6c071/jaxlib-0.5.3-cp311-cp311-win_amd64.whl", hash = "sha256:8eb54e38d789557579f900ea3d70f104a440f8555a9681ed45f4a122dcbfd92e", size = 65765739, upload-time = "2025-03-19T18:24:30.264Z" }, { url = "https://files.pythonhosted.org/packages/d5/a5/646af791ccf75641b4df84fb6cb6e3914b0df87ec5fa5f82397fd5dc30ee/jaxlib-0.5.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d394dbde4a1c6bd67501cfb29d3819a10b900cb534cc0fc603319f7092f24cfa", size = 63711839, upload-time = "2025-03-19T18:24:34.555Z" }, { url = "https://files.pythonhosted.org/packages/53/8c/cbd861e40f0efe7923962ade21919fddcea43fae2794634833e800009b14/jaxlib-0.5.3-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:bddf6360377aa1c792e47fd87f307c342e331e5ff3582f940b1bca00f6b4bc73", size = 95764647, upload-time = "2025-03-19T18:24:39.376Z" }, { url = "https://files.pythonhosted.org/packages/3e/03/bace4acec295febca9329b3d2dd927b8ac74841e620e0d675f76109b805b/jaxlib-0.5.3-cp312-cp312-manylinux2014_x86_64.whl", hash = "sha256:5a5e88ab1cd6fdf78d69abe3544e8f09cce200dd339bb85fbe3c2ea67f2a5e68", size = 105132789, upload-time = "2025-03-19T18:24:45.232Z" }, @@ -1152,10 +1062,8 @@ name = "jaxlib" version = "0.7.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version == '3.12.*' and sys_platform == 'linux'", - "python_full_version == '3.12.*' and sys_platform != 'linux'", - "python_full_version < '3.12' and sys_platform == 'linux'", - "python_full_version < '3.12' and sys_platform != 'linux'", + "python_full_version < '3.13' and sys_platform == 'linux'", + "python_full_version < '3.13' and sys_platform != 'linux'", ] dependencies = [ { name = "ml-dtypes", version = "0.5.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13'" }, @@ -1163,10 +1071,6 @@ dependencies = [ { name = "scipy", marker = "python_full_version < '3.13'" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/8b/af/5058d545e95f99a54289648f5430cc3c23263dd70a1391e7491f24ed328d/jaxlib-0.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3f32c3e4c167b7327c342e82d3df84079714ea0b43718be871d039999670b3c9", size = 57686934, upload-time = "2025-08-20T15:55:58.989Z" }, - { url = "https://files.pythonhosted.org/packages/e8/77/ef7f6cd03e699da7d9755f88741c29b3015654473fc9d5f906da19edcb47/jaxlib-0.7.1-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:9fb189c3b39470c4394ffcb18b71e47cffc5bf85e8fcb1e33692686b0c3e04dd", size = 85134885, upload-time = "2025-08-20T15:56:03.484Z" }, - { url = "https://files.pythonhosted.org/packages/4d/72/304018d46703f337787f010735f70d17212f86778fcba8bb5cf678f8e460/jaxlib-0.7.1-cp311-cp311-manylinux_2_27_x86_64.whl", hash = "sha256:eaf5f68f53bf4dcb93b6512538547667625588e4f3ccaeef048788fd18d8c0d5", size = 81147868, upload-time = "2025-08-20T15:56:07.214Z" }, - { url = "https://files.pythonhosted.org/packages/f7/b7/0f0df407518691099d659ba6e19db01320dfb58e49d80594eaddd57d77c1/jaxlib-0.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:ab4510fbaeafac6c794ab335f23e71200d824c48f6a0ab20553db8deab8805c5", size = 61185342, upload-time = "2025-08-20T15:56:10.452Z" }, { url = "https://files.pythonhosted.org/packages/ef/1f/10543d7a3f7e76dd4bbdc77134890ac2f41bc8570c565961464f6320009b/jaxlib-0.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:127c07c727703e5d59f84f655169bec849f4422e52f8546349cecc30a8a13e1d", size = 57682851, upload-time = "2025-08-20T15:56:13.395Z" }, { url = "https://files.pythonhosted.org/packages/de/4d/76ee71959311fe3da9951aa6f55af8f98eb3572bb322f5a7c89faf7ab933/jaxlib-0.7.1-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:f0f1f52956b8c2518ab000a4d3d8c21be777e1d47f926ba03640e391061a41ee", size = 85133707, upload-time = "2025-08-20T15:56:16.908Z" }, { url = "https://files.pythonhosted.org/packages/0d/50/e37d02e250f5feb755112ec95b1c012a36d48a99209277267037d100f630/jaxlib-0.7.1-cp312-cp312-manylinux_2_27_x86_64.whl", hash = "sha256:74abd3135797f82440dd3711a35cba16c430d1bba65474b85bb70e41733a52e9", size = 81156916, upload-time = "2025-08-20T15:56:20.41Z" }, @@ -1214,19 +1118,6 @@ version = "1.4.9" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/5c/3c/85844f1b0feb11ee581ac23fe5fce65cd049a200c1446708cc1b7f922875/kiwisolver-1.4.9.tar.gz", hash = "sha256:c3b22c26c6fd6811b0ae8363b95ca8ce4ea3c202d3d0975b2914310ceb1bcc4d", size = 97564, upload-time = "2025-08-10T21:27:49.279Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6f/ab/c80b0d5a9d8a1a65f4f815f2afff9798b12c3b9f31f1d304dd233dd920e2/kiwisolver-1.4.9-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:eb14a5da6dc7642b0f3a18f13654847cd8b7a2550e2645a5bda677862b03ba16", size = 124167, upload-time = "2025-08-10T21:25:53.403Z" }, - { url = "https://files.pythonhosted.org/packages/a0/c0/27fe1a68a39cf62472a300e2879ffc13c0538546c359b86f149cc19f6ac3/kiwisolver-1.4.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:39a219e1c81ae3b103643d2aedb90f1ef22650deb266ff12a19e7773f3e5f089", size = 66579, upload-time = "2025-08-10T21:25:54.79Z" }, - { url = "https://files.pythonhosted.org/packages/31/a2/a12a503ac1fd4943c50f9822678e8015a790a13b5490354c68afb8489814/kiwisolver-1.4.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2405a7d98604b87f3fc28b1716783534b1b4b8510d8142adca34ee0bc3c87543", size = 65309, upload-time = "2025-08-10T21:25:55.76Z" }, - { url = "https://files.pythonhosted.org/packages/66/e1/e533435c0be77c3f64040d68d7a657771194a63c279f55573188161e81ca/kiwisolver-1.4.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:dc1ae486f9abcef254b5618dfb4113dd49f94c68e3e027d03cf0143f3f772b61", size = 1435596, upload-time = "2025-08-10T21:25:56.861Z" }, - { url = "https://files.pythonhosted.org/packages/67/1e/51b73c7347f9aabdc7215aa79e8b15299097dc2f8e67dee2b095faca9cb0/kiwisolver-1.4.9-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a1f570ce4d62d718dce3f179ee78dac3b545ac16c0c04bb363b7607a949c0d1", size = 1246548, upload-time = "2025-08-10T21:25:58.246Z" }, - { url = "https://files.pythonhosted.org/packages/21/aa/72a1c5d1e430294f2d32adb9542719cfb441b5da368d09d268c7757af46c/kiwisolver-1.4.9-cp311-cp311-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cb27e7b78d716c591e88e0a09a2139c6577865d7f2e152488c2cc6257f460872", size = 1263618, upload-time = "2025-08-10T21:25:59.857Z" }, - { url = "https://files.pythonhosted.org/packages/a3/af/db1509a9e79dbf4c260ce0cfa3903ea8945f6240e9e59d1e4deb731b1a40/kiwisolver-1.4.9-cp311-cp311-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:15163165efc2f627eb9687ea5f3a28137217d217ac4024893d753f46bce9de26", size = 1317437, upload-time = "2025-08-10T21:26:01.105Z" }, - { url = "https://files.pythonhosted.org/packages/e0/f2/3ea5ee5d52abacdd12013a94130436e19969fa183faa1e7c7fbc89e9a42f/kiwisolver-1.4.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bdee92c56a71d2b24c33a7d4c2856bd6419d017e08caa7802d2963870e315028", size = 2195742, upload-time = "2025-08-10T21:26:02.675Z" }, - { url = "https://files.pythonhosted.org/packages/6f/9b/1efdd3013c2d9a2566aa6a337e9923a00590c516add9a1e89a768a3eb2fc/kiwisolver-1.4.9-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:412f287c55a6f54b0650bd9b6dce5aceddb95864a1a90c87af16979d37c89771", size = 2290810, upload-time = "2025-08-10T21:26:04.009Z" }, - { url = "https://files.pythonhosted.org/packages/fb/e5/cfdc36109ae4e67361f9bc5b41323648cb24a01b9ade18784657e022e65f/kiwisolver-1.4.9-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:2c93f00dcba2eea70af2be5f11a830a742fe6b579a1d4e00f47760ef13be247a", size = 2461579, upload-time = "2025-08-10T21:26:05.317Z" }, - { url = "https://files.pythonhosted.org/packages/62/86/b589e5e86c7610842213994cdea5add00960076bef4ae290c5fa68589cac/kiwisolver-1.4.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f117e1a089d9411663a3207ba874f31be9ac8eaa5b533787024dc07aeb74f464", size = 2268071, upload-time = "2025-08-10T21:26:06.686Z" }, - { url = "https://files.pythonhosted.org/packages/3b/c6/f8df8509fd1eee6c622febe54384a96cfaf4d43bf2ccec7a0cc17e4715c9/kiwisolver-1.4.9-cp311-cp311-win_amd64.whl", hash = "sha256:be6a04e6c79819c9a8c2373317d19a96048e5a3f90bec587787e86a1153883c2", size = 73840, upload-time = "2025-08-10T21:26:07.94Z" }, - { url = "https://files.pythonhosted.org/packages/e2/2d/16e0581daafd147bc11ac53f032a2b45eabac897f42a338d0a13c1e5c436/kiwisolver-1.4.9-cp311-cp311-win_arm64.whl", hash = "sha256:0ae37737256ba2de764ddc12aed4956460277f00c4996d51a197e72f62f5eec7", size = 65159, upload-time = "2025-08-10T21:26:09.048Z" }, { url = "https://files.pythonhosted.org/packages/86/c9/13573a747838aeb1c76e3267620daa054f4152444d1f3d1a2324b78255b5/kiwisolver-1.4.9-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:ac5a486ac389dddcc5bef4f365b6ae3ffff2c433324fb38dd35e3fab7c957999", size = 123686, upload-time = "2025-08-10T21:26:10.034Z" }, { url = "https://files.pythonhosted.org/packages/51/ea/2ecf727927f103ffd1739271ca19c424d0e65ea473fbaeea1c014aea93f6/kiwisolver-1.4.9-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f2ba92255faa7309d06fe44c3a4a97efe1c8d640c2a79a5ef728b685762a6fd2", size = 66460, upload-time = "2025-08-10T21:26:11.083Z" }, { url = "https://files.pythonhosted.org/packages/5b/5a/51f5464373ce2aeb5194508298a508b6f21d3867f499556263c64c621914/kiwisolver-1.4.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a2899935e724dd1074cb568ce7ac0dce28b2cd6ab539c8e001a8578eb106d14", size = 64952, upload-time = "2025-08-10T21:26:12.058Z" }, @@ -1291,11 +1182,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/99/dd/841e9a66c4715477ea0abc78da039832fbb09dac5c35c58dc4c41a407b8a/kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:aedff62918805fb62d43a4aa2ecd4482c380dc76cd31bd7c8878588a61bd0369", size = 2391835, upload-time = "2025-08-10T21:27:34.23Z" }, { url = "https://files.pythonhosted.org/packages/0c/28/4b2e5c47a0da96896fdfdb006340ade064afa1e63675d01ea5ac222b6d52/kiwisolver-1.4.9-cp314-cp314t-win_amd64.whl", hash = "sha256:1fa333e8b2ce4d9660f2cda9c0e1b6bafcfb2457a9d259faa82289e73ec24891", size = 79988, upload-time = "2025-08-10T21:27:35.587Z" }, { url = "https://files.pythonhosted.org/packages/80/be/3578e8afd18c88cdf9cb4cffde75a96d2be38c5a903f1ed0ceec061bd09e/kiwisolver-1.4.9-cp314-cp314t-win_arm64.whl", hash = "sha256:4a48a2ce79d65d363597ef7b567ce3d14d68783d2b2263d98db3d9477805ba32", size = 70260, upload-time = "2025-08-10T21:27:36.606Z" }, - { url = "https://files.pythonhosted.org/packages/a3/0f/36d89194b5a32c054ce93e586d4049b6c2c22887b0eb229c61c68afd3078/kiwisolver-1.4.9-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:720e05574713db64c356e86732c0f3c5252818d05f9df320f0ad8380641acea5", size = 60104, upload-time = "2025-08-10T21:27:43.287Z" }, - { url = "https://files.pythonhosted.org/packages/52/ba/4ed75f59e4658fd21fe7dde1fee0ac397c678ec3befba3fe6482d987af87/kiwisolver-1.4.9-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:17680d737d5335b552994a2008fab4c851bcd7de33094a82067ef3a576ff02fa", size = 58592, upload-time = "2025-08-10T21:27:44.314Z" }, - { url = "https://files.pythonhosted.org/packages/33/01/a8ea7c5ea32a9b45ceeaee051a04c8ed4320f5add3c51bfa20879b765b70/kiwisolver-1.4.9-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:85b5352f94e490c028926ea567fc569c52ec79ce131dadb968d3853e809518c2", size = 80281, upload-time = "2025-08-10T21:27:45.369Z" }, - { url = "https://files.pythonhosted.org/packages/da/e3/dbd2ecdce306f1d07a1aaf324817ee993aab7aee9db47ceac757deabafbe/kiwisolver-1.4.9-pp311-pypy311_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:464415881e4801295659462c49461a24fb107c140de781d55518c4b80cb6790f", size = 78009, upload-time = "2025-08-10T21:27:46.376Z" }, - { url = "https://files.pythonhosted.org/packages/da/e9/0d4add7873a73e462aeb45c036a2dead2562b825aa46ba326727b3f31016/kiwisolver-1.4.9-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:fb940820c63a9590d31d88b815e7a3aa5915cad3ce735ab45f0c730b39547de1", size = 73929, upload-time = "2025-08-10T21:27:48.236Z" }, ] [[package]] @@ -1304,17 +1190,6 @@ version = "0.7.3" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/b3/d9/6f3d3fcf5e5543ed8a60cc70fa7d50508ed60b8a10e9af6d2058159ab54e/librt-0.7.3.tar.gz", hash = "sha256:3ec50cf65235ff5c02c5b747748d9222e564ad48597122a361269dd3aa808798", size = 144549, upload-time = "2025-12-06T19:04:45.553Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/21/e6/f6391f5c6f158d31ed9af6bd1b1bcd3ffafdea1d816bc4219d0d90175a7f/librt-0.7.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:687403cced6a29590e6be6964463835315905221d797bc5c934a98750fe1a9af", size = 54711, upload-time = "2025-12-06T19:03:24.6Z" }, - { url = "https://files.pythonhosted.org/packages/ab/1b/53c208188c178987c081560a0fcf36f5ca500d5e21769596c845ef2f40d4/librt-0.7.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:24d70810f6e2ea853ff79338001533716b373cc0f63e2a0be5bc96129edb5fb5", size = 56664, upload-time = "2025-12-06T19:03:25.969Z" }, - { url = "https://files.pythonhosted.org/packages/cb/5c/d9da832b9a1e5f8366e8a044ec80217945385b26cb89fd6f94bfdc7d80b0/librt-0.7.3-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:bf8c7735fbfc0754111f00edda35cf9e98a8d478de6c47b04eaa9cef4300eaa7", size = 161701, upload-time = "2025-12-06T19:03:27.035Z" }, - { url = "https://files.pythonhosted.org/packages/20/aa/1e0a7aba15e78529dd21f233076b876ee58c8b8711b1793315bdd3b263b0/librt-0.7.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32d43610dff472eab939f4d7fbdd240d1667794192690433672ae22d7af8445", size = 171040, upload-time = "2025-12-06T19:03:28.482Z" }, - { url = "https://files.pythonhosted.org/packages/69/46/3cfa325c1c2bc25775ec6ec1718cfbec9cff4ac767d37d2d3a2d1cc6f02c/librt-0.7.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:adeaa886d607fb02563c1f625cf2ee58778a2567c0c109378da8f17ec3076ad7", size = 184720, upload-time = "2025-12-06T19:03:29.599Z" }, - { url = "https://files.pythonhosted.org/packages/99/bb/e4553433d7ac47f4c75d0a7e59b13aee0e08e88ceadbee356527a9629b0a/librt-0.7.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:572a24fc5958c61431da456a0ef1eeea6b4989d81eeb18b8e5f1f3077592200b", size = 180731, upload-time = "2025-12-06T19:03:31.201Z" }, - { url = "https://files.pythonhosted.org/packages/35/89/51cd73006232981a3106d4081fbaa584ac4e27b49bc02266468d3919db03/librt-0.7.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6488e69d408b492e08bfb68f20c4a899a354b4386a446ecd490baff8d0862720", size = 174565, upload-time = "2025-12-06T19:03:32.818Z" }, - { url = "https://files.pythonhosted.org/packages/42/54/0578a78b587e5aa22486af34239a052c6366835b55fc307bc64380229e3f/librt-0.7.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ed028fc3d41adda916320712838aec289956c89b4f0a361ceadf83a53b4c047a", size = 195247, upload-time = "2025-12-06T19:03:34.434Z" }, - { url = "https://files.pythonhosted.org/packages/b5/0a/ee747cd999753dd9447e50b98fc36ee433b6c841a42dbf6d47b64b32a56e/librt-0.7.3-cp311-cp311-win32.whl", hash = "sha256:2cf9d73499486ce39eebbff5f42452518cc1f88d8b7ea4a711ab32962b176ee2", size = 47514, upload-time = "2025-12-06T19:03:35.959Z" }, - { url = "https://files.pythonhosted.org/packages/ec/af/8b13845178dec488e752878f8e290f8f89e7e34ae1528b70277aa1a6dd1e/librt-0.7.3-cp311-cp311-win_amd64.whl", hash = "sha256:35f1609e3484a649bb80431310ddbec81114cd86648f1d9482bc72a3b86ded2e", size = 54695, upload-time = "2025-12-06T19:03:36.956Z" }, - { url = "https://files.pythonhosted.org/packages/02/7a/ae59578501b1a25850266778f59279f4f3e726acc5c44255bfcb07b4bc57/librt-0.7.3-cp311-cp311-win_arm64.whl", hash = "sha256:550fdbfbf5bba6a2960b27376ca76d6aaa2bd4b1a06c4255edd8520c306fcfc0", size = 48142, upload-time = "2025-12-06T19:03:38.263Z" }, { url = "https://files.pythonhosted.org/packages/29/90/ed8595fa4e35b6020317b5ea8d226a782dcbac7a997c19ae89fb07a41c66/librt-0.7.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0fa9ac2e49a6bee56e47573a6786cb635e128a7b12a0dc7851090037c0d397a3", size = 55687, upload-time = "2025-12-06T19:03:39.245Z" }, { url = "https://files.pythonhosted.org/packages/dd/f6/6a20702a07b41006cb001a759440cb6b5362530920978f64a2b2ae2bf729/librt-0.7.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2e980cf1ed1a2420a6424e2ed884629cdead291686f1048810a817de07b5eb18", size = 57127, upload-time = "2025-12-06T19:03:40.3Z" }, { url = "https://files.pythonhosted.org/packages/79/f3/b0c4703d5ffe9359b67bb2ccb86c42d4e930a363cfc72262ac3ba53cff3e/librt-0.7.3-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:e094e445c37c57e9ec612847812c301840239d34ccc5d153a982fa9814478c60", size = 165336, upload-time = "2025-12-06T19:03:41.369Z" }, @@ -1367,10 +1242,6 @@ version = "0.46.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/74/cd/08ae687ba099c7e3d21fe2ea536500563ef1943c5105bf6ab4ee3829f68e/llvmlite-0.46.0.tar.gz", hash = "sha256:227c9fd6d09dce2783c18b754b7cd9d9b3b3515210c46acc2d3c5badd9870ceb", size = 193456, upload-time = "2025-12-08T18:15:36.295Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7a/a1/2ad4b2367915faeebe8447f0a057861f646dbf5fbbb3561db42c65659cf3/llvmlite-0.46.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:82f3d39b16f19aa1a56d5fe625883a6ab600d5cc9ea8906cca70ce94cabba067", size = 37232766, upload-time = "2025-12-08T18:14:48.836Z" }, - { url = "https://files.pythonhosted.org/packages/12/b5/99cf8772fdd846c07da4fd70f07812a3c8fd17ea2409522c946bb0f2b277/llvmlite-0.46.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a3df43900119803bbc52720e758c76f316a9a0f34612a886862dfe0a5591a17e", size = 56275175, upload-time = "2025-12-08T18:14:51.604Z" }, - { url = "https://files.pythonhosted.org/packages/38/f2/ed806f9c003563732da156139c45d970ee435bd0bfa5ed8de87ba972b452/llvmlite-0.46.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:de183fefc8022d21b0aa37fc3e90410bc3524aed8617f0ff76732fc6c3af5361", size = 55128630, upload-time = "2025-12-08T18:14:55.107Z" }, - { url = "https://files.pythonhosted.org/packages/19/0c/8f5a37a65fc9b7b17408508145edd5f86263ad69c19d3574e818f533a0eb/llvmlite-0.46.0-cp311-cp311-win_amd64.whl", hash = "sha256:e8b10bc585c58bdffec9e0c309bb7d51be1f2f15e169a4b4d42f2389e431eb93", size = 38138652, upload-time = "2025-12-08T18:14:58.171Z" }, { url = "https://files.pythonhosted.org/packages/2b/f8/4db016a5e547d4e054ff2f3b99203d63a497465f81ab78ec8eb2ff7b2304/llvmlite-0.46.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6b9588ad4c63b4f0175a3984b85494f0c927c6b001e3a246a3a7fb3920d9a137", size = 37232767, upload-time = "2025-12-08T18:15:00.737Z" }, { url = "https://files.pythonhosted.org/packages/aa/85/4890a7c14b4fa54400945cb52ac3cd88545bbdb973c440f98ca41591cdc5/llvmlite-0.46.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3535bd2bb6a2d7ae4012681ac228e5132cdb75fefb1bcb24e33f2f3e0c865ed4", size = 56275176, upload-time = "2025-12-08T18:15:03.936Z" }, { url = "https://files.pythonhosted.org/packages/6a/07/3d31d39c1a1a08cd5337e78299fca77e6aebc07c059fbd0033e3edfab45c/llvmlite-0.46.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4cbfd366e60ff87ea6cc62f50bc4cd800ebb13ed4c149466f50cf2163a473d1e", size = 55128630, upload-time = "2025-12-08T18:15:07.196Z" }, @@ -1421,17 +1292,6 @@ version = "3.0.3" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/08/db/fefacb2136439fc8dd20e797950e749aa1f4997ed584c62cfb8ef7c2be0e/markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad", size = 11631, upload-time = "2025-09-27T18:36:18.185Z" }, - { url = "https://files.pythonhosted.org/packages/e1/2e/5898933336b61975ce9dc04decbc0a7f2fee78c30353c5efba7f2d6ff27a/markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a", size = 12058, upload-time = "2025-09-27T18:36:19.444Z" }, - { url = "https://files.pythonhosted.org/packages/1d/09/adf2df3699d87d1d8184038df46a9c80d78c0148492323f4693df54e17bb/markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50", size = 24287, upload-time = "2025-09-27T18:36:20.768Z" }, - { url = "https://files.pythonhosted.org/packages/30/ac/0273f6fcb5f42e314c6d8cd99effae6a5354604d461b8d392b5ec9530a54/markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf", size = 22940, upload-time = "2025-09-27T18:36:22.249Z" }, - { url = "https://files.pythonhosted.org/packages/19/ae/31c1be199ef767124c042c6c3e904da327a2f7f0cd63a0337e1eca2967a8/markupsafe-3.0.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f", size = 21887, upload-time = "2025-09-27T18:36:23.535Z" }, - { url = "https://files.pythonhosted.org/packages/b2/76/7edcab99d5349a4532a459e1fe64f0b0467a3365056ae550d3bcf3f79e1e/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a", size = 23692, upload-time = "2025-09-27T18:36:24.823Z" }, - { url = "https://files.pythonhosted.org/packages/a4/28/6e74cdd26d7514849143d69f0bf2399f929c37dc2b31e6829fd2045b2765/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115", size = 21471, upload-time = "2025-09-27T18:36:25.95Z" }, - { url = "https://files.pythonhosted.org/packages/62/7e/a145f36a5c2945673e590850a6f8014318d5577ed7e5920a4b3448e0865d/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a", size = 22923, upload-time = "2025-09-27T18:36:27.109Z" }, - { url = "https://files.pythonhosted.org/packages/0f/62/d9c46a7f5c9adbeeeda52f5b8d802e1094e9717705a645efc71b0913a0a8/markupsafe-3.0.3-cp311-cp311-win32.whl", hash = "sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19", size = 14572, upload-time = "2025-09-27T18:36:28.045Z" }, - { url = "https://files.pythonhosted.org/packages/83/8a/4414c03d3f891739326e1783338e48fb49781cc915b2e0ee052aa490d586/markupsafe-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01", size = 15077, upload-time = "2025-09-27T18:36:29.025Z" }, - { url = "https://files.pythonhosted.org/packages/35/73/893072b42e6862f319b5207adc9ae06070f095b358655f077f69a35601f0/markupsafe-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c", size = 13876, upload-time = "2025-09-27T18:36:29.954Z" }, { url = "https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615, upload-time = "2025-09-27T18:36:30.854Z" }, { url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020, upload-time = "2025-09-27T18:36:31.971Z" }, { url = "https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", size = 24332, upload-time = "2025-09-27T18:36:32.813Z" }, @@ -1506,13 +1366,6 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/8a/76/d3c6e3a13fe484ebe7718d14e269c9569c4eb0020a968a327acb3b9a8fe6/matplotlib-3.10.8.tar.gz", hash = "sha256:2299372c19d56bcd35cf05a2738308758d32b9eaed2371898d8f5bd33f084aa3", size = 34806269, upload-time = "2025-12-10T22:56:51.155Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f8/86/de7e3a1cdcfc941483af70609edc06b83e7c8a0e0dc9ac325200a3f4d220/matplotlib-3.10.8-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6be43b667360fef5c754dda5d25a32e6307a03c204f3c0fc5468b78fa87b4160", size = 8251215, upload-time = "2025-12-10T22:55:16.175Z" }, - { url = "https://files.pythonhosted.org/packages/fd/14/baad3222f424b19ce6ad243c71de1ad9ec6b2e4eb1e458a48fdc6d120401/matplotlib-3.10.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a2b336e2d91a3d7006864e0990c83b216fcdca64b5a6484912902cef87313d78", size = 8139625, upload-time = "2025-12-10T22:55:17.712Z" }, - { url = "https://files.pythonhosted.org/packages/8f/a0/7024215e95d456de5883e6732e708d8187d9753a21d32f8ddb3befc0c445/matplotlib-3.10.8-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:efb30e3baaea72ce5928e32bab719ab4770099079d66726a62b11b1ef7273be4", size = 8712614, upload-time = "2025-12-10T22:55:20.8Z" }, - { url = "https://files.pythonhosted.org/packages/5a/f4/b8347351da9a5b3f41e26cf547252d861f685c6867d179a7c9d60ad50189/matplotlib-3.10.8-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d56a1efd5bfd61486c8bc968fa18734464556f0fb8e51690f4ac25d85cbbbbc2", size = 9540997, upload-time = "2025-12-10T22:55:23.258Z" }, - { url = "https://files.pythonhosted.org/packages/9e/c0/c7b914e297efe0bc36917bf216b2acb91044b91e930e878ae12981e461e5/matplotlib-3.10.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:238b7ce5717600615c895050239ec955d91f321c209dd110db988500558e70d6", size = 9596825, upload-time = "2025-12-10T22:55:25.217Z" }, - { url = "https://files.pythonhosted.org/packages/6f/d3/a4bbc01c237ab710a1f22b4da72f4ff6d77eb4c7735ea9811a94ae239067/matplotlib-3.10.8-cp311-cp311-win_amd64.whl", hash = "sha256:18821ace09c763ec93aef5eeff087ee493a24051936d7b9ebcad9662f66501f9", size = 8135090, upload-time = "2025-12-10T22:55:27.162Z" }, - { url = "https://files.pythonhosted.org/packages/89/dd/a0b6588f102beab33ca6f5218b31725216577b2a24172f327eaf6417d5c9/matplotlib-3.10.8-cp311-cp311-win_arm64.whl", hash = "sha256:bab485bcf8b1c7d2060b4fcb6fc368a9e6f4cd754c9c2fea281f4be21df394a2", size = 8012377, upload-time = "2025-12-10T22:55:29.185Z" }, { url = "https://files.pythonhosted.org/packages/9e/67/f997cdcbb514012eb0d10cd2b4b332667997fb5ebe26b8d41d04962fa0e6/matplotlib-3.10.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:64fcc24778ca0404ce0cb7b6b77ae1f4c7231cdd60e6778f999ee05cbd581b9a", size = 8260453, upload-time = "2025-12-10T22:55:30.709Z" }, { url = "https://files.pythonhosted.org/packages/7e/65/07d5f5c7f7c994f12c768708bd2e17a4f01a2b0f44a1c9eccad872433e2e/matplotlib-3.10.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b9a5ca4ac220a0cdd1ba6bcba3608547117d30468fefce49bb26f55c1a3d5c58", size = 8148321, upload-time = "2025-12-10T22:55:33.265Z" }, { url = "https://files.pythonhosted.org/packages/3e/f3/c5195b1ae57ef85339fd7285dfb603b22c8b4e79114bae5f4f0fcf688677/matplotlib-3.10.8-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3ab4aabc72de4ff77b3ec33a6d78a68227bf1123465887f9905ba79184a1cc04", size = 8716944, upload-time = "2025-12-10T22:55:34.922Z" }, @@ -1548,9 +1401,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/4d/4b/e7beb6bbd49f6bae727a12b270a2654d13c397576d25bd6786e47033300f/matplotlib-3.10.8-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:595ba4d8fe983b88f0eec8c26a241e16d6376fe1979086232f481f8f3f67494c", size = 9614011, upload-time = "2025-12-10T22:56:33.85Z" }, { url = "https://files.pythonhosted.org/packages/7c/e6/76f2813d31f032e65f6f797e3f2f6e4aab95b65015924b1c51370395c28a/matplotlib-3.10.8-cp314-cp314t-win_amd64.whl", hash = "sha256:25d380fe8b1dc32cf8f0b1b448470a77afb195438bafdf1d858bfb876f3edf7b", size = 8362801, upload-time = "2025-12-10T22:56:36.107Z" }, { url = "https://files.pythonhosted.org/packages/5d/49/d651878698a0b67f23aa28e17f45a6d6dd3d3f933fa29087fa4ce5947b5a/matplotlib-3.10.8-cp314-cp314t-win_arm64.whl", hash = "sha256:113bb52413ea508ce954a02c10ffd0d565f9c3bc7f2eddc27dfe1731e71c7b5f", size = 8192560, upload-time = "2025-12-10T22:56:38.008Z" }, - { url = "https://files.pythonhosted.org/packages/04/30/3afaa31c757f34b7725ab9d2ba8b48b5e89c2019c003e7d0ead143aabc5a/matplotlib-3.10.8-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:6da7c2ce169267d0d066adcf63758f0604aa6c3eebf67458930f9d9b79ad1db1", size = 8249198, upload-time = "2025-12-10T22:56:45.584Z" }, - { url = "https://files.pythonhosted.org/packages/48/2f/6334aec331f57485a642a7c8be03cb286f29111ae71c46c38b363230063c/matplotlib-3.10.8-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:9153c3292705be9f9c64498a8872118540c3f4123d1a1c840172edf262c8be4a", size = 8136817, upload-time = "2025-12-10T22:56:47.339Z" }, - { url = "https://files.pythonhosted.org/packages/73/e4/6d6f14b2a759c622f191b2d67e9075a3f56aaccb3be4bb9bb6890030d0a0/matplotlib-3.10.8-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1ae029229a57cd1e8fe542485f27e7ca7b23aa9e8944ddb4985d0bc444f1eca2", size = 8713867, upload-time = "2025-12-10T22:56:48.954Z" }, ] [[package]] @@ -1694,10 +1544,6 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/fd/15/76f86faa0902836cc133939732f7611ace68cf54148487a99c539c272dc8/ml_dtypes-0.4.1.tar.gz", hash = "sha256:fad5f2de464fd09127e49b7fd1252b9006fb43d2edc1ff112d390c324af5ca7a", size = 692594, upload-time = "2024-09-13T19:07:11.624Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/76/9835c8609c29f2214359e88f29255fc4aad4ea0f613fb48aa8815ceda1b6/ml_dtypes-0.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2d55b588116a7085d6e074cf0cdb1d6fa3875c059dddc4d2c94a4cc81c23e975", size = 397973, upload-time = "2024-09-13T19:06:51.748Z" }, - { url = "https://files.pythonhosted.org/packages/7e/99/e68c56fac5de973007a10254b6e17a0362393724f40f66d5e4033f4962c2/ml_dtypes-0.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e138a9b7a48079c900ea969341a5754019a1ad17ae27ee330f7ebf43f23877f9", size = 2185134, upload-time = "2024-09-13T19:06:53.197Z" }, - { url = "https://files.pythonhosted.org/packages/28/bc/6a2344338ea7b61cd7b46fb24ec459360a5a0903b57c55b156c1e46c644a/ml_dtypes-0.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:74c6cfb5cf78535b103fde9ea3ded8e9f16f75bc07789054edc7776abfb3d752", size = 2163661, upload-time = "2024-09-13T19:06:54.519Z" }, - { url = "https://files.pythonhosted.org/packages/e8/d3/ddfd9878b223b3aa9a930c6100a99afca5cfab7ea703662e00323acb7568/ml_dtypes-0.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:274cc7193dd73b35fb26bef6c5d40ae3eb258359ee71cd82f6e96a8c948bdaa6", size = 126727, upload-time = "2024-09-13T19:06:55.897Z" }, { url = "https://files.pythonhosted.org/packages/ba/1a/99e924f12e4b62139fbac87419698c65f956d58de0dbfa7c028fa5b096aa/ml_dtypes-0.4.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:827d3ca2097085cf0355f8fdf092b888890bb1b1455f52801a2d7756f056f54b", size = 405077, upload-time = "2024-09-13T19:06:57.538Z" }, { url = "https://files.pythonhosted.org/packages/8f/8c/7b610bd500617854c8cc6ed7c8cfb9d48d6a5c21a1437a36a4b9bc8a3598/ml_dtypes-0.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:772426b08a6172a891274d581ce58ea2789cc8abc1c002a27223f314aaf894e7", size = 2181554, upload-time = "2024-09-13T19:06:59.196Z" }, { url = "https://files.pythonhosted.org/packages/c7/c6/f89620cecc0581dc1839e218c4315171312e46c62a62da6ace204bda91c0/ml_dtypes-0.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:126e7d679b8676d1a958f2651949fbfa182832c3cd08020d8facd94e4114f3e9", size = 2160488, upload-time = "2024-09-13T19:07:03.131Z" }, @@ -1709,21 +1555,14 @@ name = "ml-dtypes" version = "0.5.4" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version == '3.12.*' and sys_platform == 'linux'", - "python_full_version == '3.12.*' and sys_platform != 'linux'", - "python_full_version < '3.12' and sys_platform == 'linux'", - "python_full_version < '3.12' and sys_platform != 'linux'", + "python_full_version < '3.13' and sys_platform == 'linux'", + "python_full_version < '3.13' and sys_platform != 'linux'", ] dependencies = [ { name = "numpy", marker = "python_full_version < '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/0e/4a/c27b42ed9b1c7d13d9ba8b6905dece787d6259152f2309338aed29b2447b/ml_dtypes-0.5.4.tar.gz", hash = "sha256:8ab06a50fb9bf9666dd0fe5dfb4676fa2b0ac0f31ecff72a6c3af8e22c063453", size = 692314, upload-time = "2025-11-17T22:32:31.031Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c6/5e/712092cfe7e5eb667b8ad9ca7c54442f21ed7ca8979745f1000e24cf8737/ml_dtypes-0.5.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6c7ecb74c4bd71db68a6bea1edf8da8c34f3d9fe218f038814fd1d310ac76c90", size = 679734, upload-time = "2025-11-17T22:31:39.223Z" }, - { url = "https://files.pythonhosted.org/packages/4f/cf/912146dfd4b5c0eea956836c01dcd2fce6c9c844b2691f5152aca196ce4f/ml_dtypes-0.5.4-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bc11d7e8c44a65115d05e2ab9989d1e045125d7be8e05a071a48bc76eb6d6040", size = 5056165, upload-time = "2025-11-17T22:31:41.071Z" }, - { url = "https://files.pythonhosted.org/packages/a9/80/19189ea605017473660e43762dc853d2797984b3c7bf30ce656099add30c/ml_dtypes-0.5.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:19b9a53598f21e453ea2fbda8aa783c20faff8e1eeb0d7ab899309a0053f1483", size = 5034975, upload-time = "2025-11-17T22:31:42.758Z" }, - { url = "https://files.pythonhosted.org/packages/b4/24/70bd59276883fdd91600ca20040b41efd4902a923283c4d6edcb1de128d2/ml_dtypes-0.5.4-cp311-cp311-win_amd64.whl", hash = "sha256:7c23c54a00ae43edf48d44066a7ec31e05fdc2eee0be2b8b50dd1903a1db94bb", size = 210742, upload-time = "2025-11-17T22:31:44.068Z" }, - { url = "https://files.pythonhosted.org/packages/a0/c9/64230ef14e40aa3f1cb254ef623bf812735e6bec7772848d19131111ac0d/ml_dtypes-0.5.4-cp311-cp311-win_arm64.whl", hash = "sha256:557a31a390b7e9439056644cb80ed0735a6e3e3bb09d67fd5687e4b04238d1de", size = 160709, upload-time = "2025-11-17T22:31:46.557Z" }, { url = "https://files.pythonhosted.org/packages/a8/b8/3c70881695e056f8a32f8b941126cf78775d9a4d7feba8abcb52cb7b04f2/ml_dtypes-0.5.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:a174837a64f5b16cab6f368171a1a03a27936b31699d167684073ff1c4237dac", size = 676927, upload-time = "2025-11-17T22:31:48.182Z" }, { url = "https://files.pythonhosted.org/packages/54/0f/428ef6881782e5ebb7eca459689448c0394fa0a80bea3aa9262cba5445ea/ml_dtypes-0.5.4-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a7f7c643e8b1320fd958bf098aa7ecf70623a42ec5154e3be3be673f4c34d900", size = 5028464, upload-time = "2025-11-17T22:31:50.135Z" }, { url = "https://files.pythonhosted.org/packages/3a/cb/28ce52eb94390dda42599c98ea0204d74799e4d8047a0eb559b6fd648056/ml_dtypes-0.5.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9ad459e99793fa6e13bd5b7e6792c8f9190b4e5a1b45c63aba14a4d0a7f1d5ff", size = 5009002, upload-time = "2025-11-17T22:31:52.001Z" }, @@ -1766,15 +1605,6 @@ version = "1.1.2" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/4d/f2/bfb55a6236ed8725a96b0aa3acbd0ec17588e6a2c3b62a93eb513ed8783f/msgpack-1.1.2.tar.gz", hash = "sha256:3b60763c1373dd60f398488069bcdc703cd08a711477b5d480eecc9f9626f47e", size = 173581, upload-time = "2025-10-08T09:15:56.596Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/97/560d11202bcd537abca693fd85d81cebe2107ba17301de42b01ac1677b69/msgpack-1.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2e86a607e558d22985d856948c12a3fa7b42efad264dca8a3ebbcfa2735d786c", size = 82271, upload-time = "2025-10-08T09:14:49.967Z" }, - { url = "https://files.pythonhosted.org/packages/83/04/28a41024ccbd67467380b6fb440ae916c1e4f25e2cd4c63abe6835ac566e/msgpack-1.1.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:283ae72fc89da59aa004ba147e8fc2f766647b1251500182fac0350d8af299c0", size = 84914, upload-time = "2025-10-08T09:14:50.958Z" }, - { url = "https://files.pythonhosted.org/packages/71/46/b817349db6886d79e57a966346cf0902a426375aadc1e8e7a86a75e22f19/msgpack-1.1.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:61c8aa3bd513d87c72ed0b37b53dd5c5a0f58f2ff9f26e1555d3bd7948fb7296", size = 416962, upload-time = "2025-10-08T09:14:51.997Z" }, - { url = "https://files.pythonhosted.org/packages/da/e0/6cc2e852837cd6086fe7d8406af4294e66827a60a4cf60b86575a4a65ca8/msgpack-1.1.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:454e29e186285d2ebe65be34629fa0e8605202c60fbc7c4c650ccd41870896ef", size = 426183, upload-time = "2025-10-08T09:14:53.477Z" }, - { url = "https://files.pythonhosted.org/packages/25/98/6a19f030b3d2ea906696cedd1eb251708e50a5891d0978b012cb6107234c/msgpack-1.1.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7bc8813f88417599564fafa59fd6f95be417179f76b40325b500b3c98409757c", size = 411454, upload-time = "2025-10-08T09:14:54.648Z" }, - { url = "https://files.pythonhosted.org/packages/b7/cd/9098fcb6adb32187a70b7ecaabf6339da50553351558f37600e53a4a2a23/msgpack-1.1.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bafca952dc13907bdfdedfc6a5f579bf4f292bdd506fadb38389afa3ac5b208e", size = 422341, upload-time = "2025-10-08T09:14:56.328Z" }, - { url = "https://files.pythonhosted.org/packages/e6/ae/270cecbcf36c1dc85ec086b33a51a4d7d08fc4f404bdbc15b582255d05ff/msgpack-1.1.2-cp311-cp311-win32.whl", hash = "sha256:602b6740e95ffc55bfb078172d279de3773d7b7db1f703b2f1323566b878b90e", size = 64747, upload-time = "2025-10-08T09:14:57.882Z" }, - { url = "https://files.pythonhosted.org/packages/2a/79/309d0e637f6f37e83c711f547308b91af02b72d2326ddd860b966080ef29/msgpack-1.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:d198d275222dc54244bf3327eb8cbe00307d220241d9cec4d306d49a44e85f68", size = 71633, upload-time = "2025-10-08T09:14:59.177Z" }, - { url = "https://files.pythonhosted.org/packages/73/4d/7c4e2b3d9b1106cd0aa6cb56cc57c6267f59fa8bfab7d91df5adc802c847/msgpack-1.1.2-cp311-cp311-win_arm64.whl", hash = "sha256:86f8136dfa5c116365a8a651a7d7484b65b13339731dd6faebb9a0242151c406", size = 64755, upload-time = "2025-10-08T09:15:00.48Z" }, { url = "https://files.pythonhosted.org/packages/ad/bd/8b0d01c756203fbab65d265859749860682ccd2a59594609aeec3a144efa/msgpack-1.1.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:70a0dff9d1f8da25179ffcf880e10cf1aad55fdb63cd59c9a49a1b82290062aa", size = 81939, upload-time = "2025-10-08T09:15:01.472Z" }, { url = "https://files.pythonhosted.org/packages/34/68/ba4f155f793a74c1483d4bdef136e1023f7bcba557f0db4ef3db3c665cf1/msgpack-1.1.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:446abdd8b94b55c800ac34b102dffd2f6aa0ce643c55dfc017ad89347db3dbdb", size = 85064, upload-time = "2025-10-08T09:15:03.764Z" }, { url = "https://files.pythonhosted.org/packages/f2/60/a064b0345fc36c4c3d2c743c82d9100c40388d77f0b48b2f04d6041dbec1/msgpack-1.1.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c63eea553c69ab05b6747901b97d620bb2a690633c77f23feb0c6a947a8a7b8f", size = 417131, upload-time = "2025-10-08T09:15:05.136Z" }, @@ -1825,12 +1655,6 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/f9/b5/b58cdc25fadd424552804bf410855d52324183112aa004f0732c5f6324cf/mypy-1.19.0.tar.gz", hash = "sha256:f6b874ca77f733222641e5c46e4711648c4037ea13646fd0cdc814c2eaec2528", size = 3579025, upload-time = "2025-11-28T15:49:01.26Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0f/d2/010fb171ae5ac4a01cc34fbacd7544531e5ace95c35ca166dd8fd1b901d0/mypy-1.19.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a31e4c28e8ddb042c84c5e977e28a21195d086aaffaf08b016b78e19c9ef8106", size = 13010563, upload-time = "2025-11-28T15:48:23.975Z" }, - { url = "https://files.pythonhosted.org/packages/41/6b/63f095c9f1ce584fdeb595d663d49e0980c735a1d2004720ccec252c5d47/mypy-1.19.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:34ec1ac66d31644f194b7c163d7f8b8434f1b49719d403a5d26c87fff7e913f7", size = 12077037, upload-time = "2025-11-28T15:47:51.582Z" }, - { url = "https://files.pythonhosted.org/packages/d7/83/6cb93d289038d809023ec20eb0b48bbb1d80af40511fa077da78af6ff7c7/mypy-1.19.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cb64b0ba5980466a0f3f9990d1c582bcab8db12e29815ecb57f1408d99b4bff7", size = 12680255, upload-time = "2025-11-28T15:46:57.628Z" }, - { url = "https://files.pythonhosted.org/packages/99/db/d217815705987d2cbace2edd9100926196d6f85bcb9b5af05058d6e3c8ad/mypy-1.19.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:120cffe120cca5c23c03c77f84abc0c14c5d2e03736f6c312480020082f1994b", size = 13421472, upload-time = "2025-11-28T15:47:59.655Z" }, - { url = "https://files.pythonhosted.org/packages/4e/51/d2beaca7c497944b07594f3f8aad8d2f0e8fc53677059848ae5d6f4d193e/mypy-1.19.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7a500ab5c444268a70565e374fc803972bfd1f09545b13418a5174e29883dab7", size = 13651823, upload-time = "2025-11-28T15:45:29.318Z" }, - { url = "https://files.pythonhosted.org/packages/aa/d1/7883dcf7644db3b69490f37b51029e0870aac4a7ad34d09ceae709a3df44/mypy-1.19.0-cp311-cp311-win_amd64.whl", hash = "sha256:c14a98bc63fd867530e8ec82f217dae29d0550c86e70debc9667fff1ec83284e", size = 10049077, upload-time = "2025-11-28T15:45:39.818Z" }, { url = "https://files.pythonhosted.org/packages/11/7e/1afa8fb188b876abeaa14460dc4983f909aaacaa4bf5718c00b2c7e0b3d5/mypy-1.19.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0fb3115cb8fa7c5f887c8a8d81ccdcb94cff334684980d847e5a62e926910e1d", size = 13207728, upload-time = "2025-11-28T15:46:26.463Z" }, { url = "https://files.pythonhosted.org/packages/b2/13/f103d04962bcbefb1644f5ccb235998b32c337d6c13145ea390b9da47f3e/mypy-1.19.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f3e19e3b897562276bb331074d64c076dbdd3e79213f36eed4e592272dabd760", size = 12202945, upload-time = "2025-11-28T15:48:49.143Z" }, { url = "https://files.pythonhosted.org/packages/e4/93/a86a5608f74a22284a8ccea8592f6e270b61f95b8588951110ad797c2ddd/mypy-1.19.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b9d491295825182fba01b6ffe2c6fe4e5a49dbf4e2bb4d1217b6ced3b4797bc6", size = 12718673, upload-time = "2025-11-28T15:47:37.193Z" }, @@ -1870,6 +1694,54 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ef/82/7a9d0550484a62c6da82858ee9419f3dd1ccc9aa1c26a1e43da3ecd20b0d/natsort-8.4.0-py3-none-any.whl", hash = "sha256:4732914fb471f56b5cce04d7bae6f164a592c7712e1c85f9ef585e197299521c", size = 38268, upload-time = "2023-06-20T04:17:17.522Z" }, ] +[[package]] +name = "ndindex" +version = "1.10.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f5/92/4b9d2f4e0f3eabcfc7b02b48261f6e5ad36a3e2c1bbdcc4e3b7b6c768fa6/ndindex-1.10.1.tar.gz", hash = "sha256:0f6113c1f031248f8818cbee1aa92aa3c9472b7701debcce9fddebcd2f610f11", size = 271395, upload-time = "2025-11-19T20:40:08.899Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/65/90/774ddd08b2a1b41faa56da111f0fbfeb4f17ee537214c938ef41d61af949/ndindex-1.10.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:87f83e8c35a7f49a68cd3a3054c406e6c22f8c1315f3905f7a778c657669187e", size = 177348, upload-time = "2025-11-19T20:38:41.768Z" }, + { url = "https://files.pythonhosted.org/packages/ed/ee/a423e857f5b45da3adc8ddbcfbfd4a0e9a047edce3915d3e3d6e189b6bd9/ndindex-1.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cf9e05986b2eb8c5993bce0f911d6cedd15bda30b5e35dd354b1ad1f4cc3599d", size = 176561, upload-time = "2025-11-19T20:38:43.06Z" }, + { url = "https://files.pythonhosted.org/packages/1f/40/139b6b050ba2b2a0bb40e0381a352b1eb6551302dcb8f86fb4c97dd34e92/ndindex-1.10.1-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:046c1e88d46b2bd2fd3483e06d27b4e85132b55bc693f2fca2db0bb56eea1e78", size = 542901, upload-time = "2025-11-19T20:38:44.43Z" }, + { url = "https://files.pythonhosted.org/packages/27/ae/defd665dbbeb2fffa077491365ed160acaec49274ce8d4b979f55db71f18/ndindex-1.10.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:03cf1e6cdac876bd8fc92d3b65bb223496b1581d10eab3ba113f7c195121a959", size = 546875, upload-time = "2025-11-19T20:38:45.938Z" }, + { url = "https://files.pythonhosted.org/packages/59/43/6d54d48e8eaee25cdab70d3e4c4f579ddb0255e4f1660040d5ad55e029c6/ndindex-1.10.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:752e78a5e87911ded117c57a7246596f26c9c6da066de3c2b533b3db694949bb", size = 1510036, upload-time = "2025-11-19T20:38:47.444Z" }, + { url = "https://files.pythonhosted.org/packages/09/61/e28ba3b98eacd18193176526526b34d7d70d2a6f9fd2b4d8309ab5692678/ndindex-1.10.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c9dd58d91220b1c1fe516324bfcf4114566c98e84b1cbbe416abe345c75bd557", size = 1571849, upload-time = "2025-11-19T20:38:48.951Z" }, + { url = "https://files.pythonhosted.org/packages/8f/63/83fff78a3712cb9f478dd84a19ec389acf6f8c7b01dc347a65ae74e6123d/ndindex-1.10.1-cp312-cp312-win32.whl", hash = "sha256:3b0d9ce2c8488444499ab6d40e92e09867bf4413f5cf04c01635de923f44aa67", size = 149792, upload-time = "2025-11-19T20:38:50.959Z" }, + { url = "https://files.pythonhosted.org/packages/52/fd/a5e3c8c043d0dddea6cd4567bfaea568f022ac197301882b3d85d9c1e9b3/ndindex-1.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:5c026dbbf2455d97ce6456d8a50b349aee8fefa11027d020638c89e9be2c9c4c", size = 158164, upload-time = "2025-11-19T20:38:52.242Z" }, + { url = "https://files.pythonhosted.org/packages/60/ea/03676266cb38cc671679a9d258cc59bfc58c69726db87b0d6eeafb308895/ndindex-1.10.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:157b5c34a1b779f5d27b790d9bd7e7b156d284e76be83c591a3ba003984f4956", size = 176323, upload-time = "2025-11-19T20:38:53.528Z" }, + { url = "https://files.pythonhosted.org/packages/89/f4/2d350439031b108b0bb8897cad315390c5ad88c14d87419a54c2ffa95c80/ndindex-1.10.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f99b3e89220da3244d03c9c5473669c7107d361c129fd9b064622744dee1ce15", size = 175584, upload-time = "2025-11-19T20:38:57.968Z" }, + { url = "https://files.pythonhosted.org/packages/77/34/a51b7c6f7159718a6a0a694fc1058b94d793c416d9a4fd649f1924cce5f8/ndindex-1.10.1-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6928e47fb008903f2e41309b7ff1e59b16abbcd59e2e945454571c28b2433c9e", size = 524127, upload-time = "2025-11-19T20:38:59.412Z" }, + { url = "https://files.pythonhosted.org/packages/21/91/d8f19f0b8fc9c5585b50fda44c05415da0bdc5fa9c9c69011015dac27880/ndindex-1.10.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e69a2cb1ac7be955c3c77f1def83f410775a81525c9ce2d4c0a3f2a61589ed47", size = 528213, upload-time = "2025-11-19T20:39:00.882Z" }, + { url = "https://files.pythonhosted.org/packages/2c/a9/77d9d037e871a3faa8579b354ca2dd09cc5bbf3e085d9e3c67f786d55ee3/ndindex-1.10.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cb76e0f3f235d8b1c768b17e771de48775d281713795c3aa045e8114ad61bdda", size = 1492172, upload-time = "2025-11-19T20:39:02.387Z" }, + { url = "https://files.pythonhosted.org/packages/ac/29/ad13676fc9312e0aa1a80a7c04bcb0b502b877ed4956136117ad663eced0/ndindex-1.10.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7da34a78410c14341d5fff73be5ce924bd36500bf7f640fc59b8607d3a0df95e", size = 1552614, upload-time = "2025-11-19T20:39:04.232Z" }, + { url = "https://files.pythonhosted.org/packages/63/34/e6e6fd81423810c07ae623c4d36e099f42a812994977e8e3bfa182c02472/ndindex-1.10.1-cp313-cp313-win32.whl", hash = "sha256:9599fcb7411ffe601c367f0a5d4bc0ed588e3e7d9dc7604bdb32c8f669456b9e", size = 149330, upload-time = "2025-11-19T20:39:05.727Z" }, + { url = "https://files.pythonhosted.org/packages/4d/d3/830a20626e2ec0e31a926be90e67068a029930f99e6cfebf2f9768e7b7b1/ndindex-1.10.1-cp313-cp313-win_amd64.whl", hash = "sha256:ef3ef22390a892d16286505083ee5b326317b21c255a0c7f744b1290a0b964a6", size = 157309, upload-time = "2025-11-19T20:39:07.394Z" }, + { url = "https://files.pythonhosted.org/packages/4a/73/3bdeecd1f6ec0ad81478a53d96da4ba9be74ed297c95f2b4fbe2b80843e1/ndindex-1.10.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:72af787dcee3661f36fff9d144d989aacefe32e2c8b51ceef9babd46afb93a18", size = 181022, upload-time = "2025-11-19T20:39:10.487Z" }, + { url = "https://files.pythonhosted.org/packages/b9/b1/0d97ba134b5aa71b5ed638fac193a7ec4d987e091e2f4e4162ebdaacbda1/ndindex-1.10.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fa60637dfae1ee3fc057e420a52cc4ace38cf2c0d1a0451af2a3cba84d281842", size = 181289, upload-time = "2025-11-19T20:39:11.793Z" }, + { url = "https://files.pythonhosted.org/packages/e2/d7/1df02df24880ce3f3c8137b6f3ca5a901a58d9079dcfd8c818419277ff87/ndindex-1.10.1-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d0ebdba2fade3f6916fe21fd49e2a0935af4f58c56100a60f3f2eb26e20baee7", size = 632517, upload-time = "2025-11-19T20:39:13.259Z" }, + { url = "https://files.pythonhosted.org/packages/34/96/b509c2b14e9b10710fe6ab6ba8bda1ee6ce36ab16397ff2f5bbb33bbbba3/ndindex-1.10.1-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:346a4bf09f5771548665c8206e81daadb6b9925d409746e709894bdd98adc701", size = 616179, upload-time = "2025-11-19T20:39:14.757Z" }, + { url = "https://files.pythonhosted.org/packages/38/e3/f89d60cf351c33a484bf1a4546a5dee6f4e7a6a973613ffa12bd316b14ad/ndindex-1.10.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:23d35696f802548143b5cc199bf2f171efb0061aa7934959251dd3bae56d038c", size = 1588373, upload-time = "2025-11-19T20:39:16.62Z" }, + { url = "https://files.pythonhosted.org/packages/ee/19/002fc1e6a4abeef8d92e9aa2e43aea4d462f6b170090f7752ea8887f4897/ndindex-1.10.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a91e1a0398120233d5c3b23ccb2d4b78e970d66136f1a7221fa9a53873c3d5c5", size = 1636436, upload-time = "2025-11-19T20:39:18.266Z" }, + { url = "https://files.pythonhosted.org/packages/5f/8f/28b1ad78c787ac8fafd6e26419a80366617784b1779e3857fa687492f6bc/ndindex-1.10.1-cp313-cp313t-win32.whl", hash = "sha256:78bfe25941d2dac406391ddd9baf0b0fce163807b98ecc2c47a3030ee8466319", size = 158780, upload-time = "2025-11-19T20:39:20.454Z" }, + { url = "https://files.pythonhosted.org/packages/d0/56/b81060607a19865bb8be8d705b1b3e8aefb8747c0fbd383e38b4cae4bd71/ndindex-1.10.1-cp313-cp313t-win_amd64.whl", hash = "sha256:08bfdc1f7a0b408d15b3ce61d141ebbebdb47a25341967e425e104c5bd512a5c", size = 167485, upload-time = "2025-11-19T20:39:21.733Z" }, + { url = "https://files.pythonhosted.org/packages/da/9b/aac1131e9f3a5635ba7b0312c3bfa610511ab4108f85c0d914a32887aa00/ndindex-1.10.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:9b5297f207ebc068c7cdf9e3cd7b95aa5c9ec04295d0a7e56b529f66787d4685", size = 176478, upload-time = "2025-11-19T20:39:23.747Z" }, + { url = "https://files.pythonhosted.org/packages/1a/05/a0d8ca0432c84550bc17af6d6479a803936895b8b8403a1216c5a55475fb/ndindex-1.10.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c5e9762452b163e33cfb6e821f86e45ba0b53bdfcd23ab5d57b48a8f566898cb", size = 175480, upload-time = "2025-11-19T20:39:25.365Z" }, + { url = "https://files.pythonhosted.org/packages/09/4a/028ab78a9f29fd2a7e86a90337cde4658eaa77b425c63045d83a1d2e4f26/ndindex-1.10.1-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cf80241b40adffdc3276b2c9fb63a96c6c98b4a9d941892738de8add65083962", size = 528125, upload-time = "2025-11-19T20:39:26.798Z" }, + { url = "https://files.pythonhosted.org/packages/00/a9/bd823b345fb06c83ade6ef1c1933521d4357cd04490e684d4fa30126926c/ndindex-1.10.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cf5855881884b8467dfcf45764ccf2e4279075be14b155b89c96994bb08d2e6f", size = 527328, upload-time = "2025-11-19T20:39:28.292Z" }, + { url = "https://files.pythonhosted.org/packages/91/4f/40b9c15588cbf9dde43c4fb88a31dd1f636a913fa29649f18f8e3ebca36a/ndindex-1.10.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e81a9bd36fe054b6c9fcc53d26bc9a28cf15d1ab52a0f5b854f894116f3a54e1", size = 1497508, upload-time = "2025-11-19T20:39:30.735Z" }, + { url = "https://files.pythonhosted.org/packages/24/8f/b8048f7837d2e9dff0af507b398307fa84a2aa9ea3db71b4aa800b21da4a/ndindex-1.10.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:588e8875d836a93b3cd9af482c8074bb02288ae1aff92cf277e1f02d9ae0f992", size = 1552625, upload-time = "2025-11-19T20:39:32.404Z" }, + { url = "https://files.pythonhosted.org/packages/20/aa/0ecb53c7e690a44769f2f92a843723ccb1d0ce080d93ba1ea811304cca12/ndindex-1.10.1-cp314-cp314-win32.whl", hash = "sha256:28741daca5926adff402247cd406f453ed5bb6042e82d6855938f805190e5ce9", size = 151237, upload-time = "2025-11-19T20:39:34.847Z" }, + { url = "https://files.pythonhosted.org/packages/8c/4e/197982fa8b4e6e6b9d15c38505c41076d1c552921f09f4d35acbbbbc0b70/ndindex-1.10.1-cp314-cp314-win_amd64.whl", hash = "sha256:59a3222befc0f7cdc85fb9b90a567ae890f70a864bdeb660517e9ebcb36bf1bc", size = 158925, upload-time = "2025-11-19T20:39:37.149Z" }, + { url = "https://files.pythonhosted.org/packages/24/ad/116b6154046a69fc04e2d4490905801d3839a3f21290c0b4d49b1044e251/ndindex-1.10.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:967b87b88dadb62555ec1039695c347254eccb8ca3d124c0e5dbe084c525fa93", size = 181724, upload-time = "2025-11-19T20:39:38.635Z" }, + { url = "https://files.pythonhosted.org/packages/c4/00/3ce4351366c890bcc87a5e9f1f90102547962eef356ac7c799bfdd0dddce/ndindex-1.10.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c67dde588c0fb89d872931a4ed5f9b4d21c1c70a3d92fdf0812a1de154239816", size = 181653, upload-time = "2025-11-19T20:39:40.048Z" }, + { url = "https://files.pythonhosted.org/packages/4d/05/a6fda696a2f02a3f8dd2ee9d816cb2edff6423bf0110a4876cc3b1259732/ndindex-1.10.1-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c65ca639a7abf72d79f22424f4abd18dece1f289a2b7b028a0ca455edd2168d4", size = 630898, upload-time = "2025-11-19T20:39:41.495Z" }, + { url = "https://files.pythonhosted.org/packages/73/78/eb2e5d067d4c054451e33eaece74cbdcb58236dc60516e73d783dae34c7e/ndindex-1.10.1-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5c3634a8df43e7928122225a3d64d850c8957bd1edf2e403907deacb478af27b", size = 614419, upload-time = "2025-11-19T20:39:43.254Z" }, + { url = "https://files.pythonhosted.org/packages/78/51/261bfb49eb7920c2a7314cacba5821930a529911dce48c7c6cd786096a5a/ndindex-1.10.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9d581f931e61f182478f18bdf5edd3955899df5da4892ed0d5de547a4cfd5b6f", size = 1587517, upload-time = "2025-11-19T20:39:44.809Z" }, + { url = "https://files.pythonhosted.org/packages/ec/37/084a332ecdf8b0049151bd78001a7baf2daf7f500d043beb8a1f95d0f4e3/ndindex-1.10.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:78ce45106ebf67aeba99714818c721d8fd5fb9534daebd2565665a2d64b50fc9", size = 1635372, upload-time = "2025-11-19T20:39:47.231Z" }, + { url = "https://files.pythonhosted.org/packages/28/f4/716580fbb03018ab1daa86ed12c1925c67e79689db5fee82393e840758a2/ndindex-1.10.1-cp314-cp314t-win32.whl", hash = "sha256:fe5341e24dc992b09c258456ac90a09a6d25efdc2cb86dcc91d32c8891e1df9a", size = 162186, upload-time = "2025-11-19T20:39:48.81Z" }, + { url = "https://files.pythonhosted.org/packages/4d/20/28f669c09a470e7f523b0cc10b94336664d9648594015e3f2a1ec29047b1/ndindex-1.10.1-cp314-cp314t-win_amd64.whl", hash = "sha256:37f87f0e7690ae0324334740e0661d6297f2e62c9bf925127d249fb7eddd0ad8", size = 171077, upload-time = "2025-11-19T20:39:50.108Z" }, +] + [[package]] name = "networkx" version = "3.6.1" @@ -1898,10 +1770,6 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/dc/60/0145d479b2209bd8fdae5f44201eceb8ce5a23e0ed54c71f57db24618665/numba-0.63.1.tar.gz", hash = "sha256:b320aa675d0e3b17b40364935ea52a7b1c670c9037c39cf92c49502a75902f4b", size = 2761666, upload-time = "2025-12-10T02:57:39.002Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/70/90/5f8614c165d2e256fbc6c57028519db6f32e4982475a372bbe550ea0454c/numba-0.63.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b33db00f18ccc790ee9911ce03fcdfe9d5124637d1ecc266f5ae0df06e02fec3", size = 2680501, upload-time = "2025-12-10T02:57:09.797Z" }, - { url = "https://files.pythonhosted.org/packages/dc/9d/d0afc4cf915edd8eadd9b2ab5b696242886ee4f97720d9322650d66a88c6/numba-0.63.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7d31ea186a78a7c0f6b1b2a3fe68057fdb291b045c52d86232b5383b6cf4fc25", size = 3744945, upload-time = "2025-12-10T02:57:11.697Z" }, - { url = "https://files.pythonhosted.org/packages/05/a9/d82f38f2ab73f3be6f838a826b545b80339762ee8969c16a8bf1d39395a8/numba-0.63.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ed3bb2fbdb651d6aac394388130a7001aab6f4541837123a4b4ab8b02716530c", size = 3450827, upload-time = "2025-12-10T02:57:13.709Z" }, - { url = "https://files.pythonhosted.org/packages/18/3f/a9b106e93c5bd7434e65f044bae0d204e20aa7f7f85d72ceb872c7c04216/numba-0.63.1-cp311-cp311-win_amd64.whl", hash = "sha256:1ecbff7688f044b1601be70113e2fb1835367ee0b28ffa8f3adf3a05418c5c87", size = 2747262, upload-time = "2025-12-10T02:57:15.664Z" }, { url = "https://files.pythonhosted.org/packages/14/9c/c0974cd3d00ff70d30e8ff90522ba5fbb2bcee168a867d2321d8d0457676/numba-0.63.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2819cd52afa5d8d04e057bdfd54367575105f8829350d8fb5e4066fb7591cc71", size = 2680981, upload-time = "2025-12-10T02:57:17.579Z" }, { url = "https://files.pythonhosted.org/packages/cb/70/ea2bc45205f206b7a24ee68a159f5097c9ca7e6466806e7c213587e0c2b1/numba-0.63.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5cfd45dbd3d409e713b1ccfdc2ee72ca82006860254429f4ef01867fdba5845f", size = 3801656, upload-time = "2025-12-10T02:57:19.106Z" }, { url = "https://files.pythonhosted.org/packages/0d/82/4f4ba4fd0f99825cbf3cdefd682ca3678be1702b63362011de6e5f71f831/numba-0.63.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:69a599df6976c03b7ecf15d05302696f79f7e6d10d620367407517943355bcb0", size = 3501857, upload-time = "2025-12-10T02:57:20.721Z" }, @@ -1916,20 +1784,63 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0d/5f/4d0c9e756732577a52211f31da13a3d943d185f7fb90723f56d79c696caa/numba-0.63.1-cp314-cp314-win_amd64.whl", hash = "sha256:8d6d5ce85f572ed4e1a135dbb8c0114538f9dd0e3657eeb0bb64ab204cbe2a8f", size = 2752161, upload-time = "2025-12-10T02:57:37.12Z" }, ] +[[package]] +name = "numexpr" +version = "2.14.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cb/2f/fdba158c9dbe5caca9c3eca3eaffffb251f2fb8674bf8e2d0aed5f38d319/numexpr-2.14.1.tar.gz", hash = "sha256:4be00b1086c7b7a5c32e31558122b7b80243fe098579b170967da83f3152b48b", size = 119400, upload-time = "2025-10-13T16:17:27.351Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/20/c473fc04a371f5e2f8c5749e04505c13e7a8ede27c09e9f099b2ad6f43d6/numexpr-2.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:91ebae0ab18c799b0e6b8c5a8d11e1fa3848eb4011271d99848b297468a39430", size = 162790, upload-time = "2025-10-13T16:16:34.903Z" }, + { url = "https://files.pythonhosted.org/packages/45/93/b6760dd1904c2a498e5f43d1bb436f59383c3ddea3815f1461dfaa259373/numexpr-2.14.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:47041f2f7b9e69498fb311af672ba914a60e6e6d804011caacb17d66f639e659", size = 152196, upload-time = "2025-10-13T16:16:36.593Z" }, + { url = "https://files.pythonhosted.org/packages/72/94/cc921e35593b820521e464cbbeaf8212bbdb07f16dc79fe283168df38195/numexpr-2.14.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d686dfb2c1382d9e6e0ee0b7647f943c1886dba3adbf606c625479f35f1956c1", size = 452468, upload-time = "2025-10-13T16:13:29.531Z" }, + { url = "https://files.pythonhosted.org/packages/d9/43/560e9ba23c02c904b5934496486d061bcb14cd3ebba2e3cf0e2dccb6c22b/numexpr-2.14.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eee6d4fbbbc368e6cdd0772734d6249128d957b3b8ad47a100789009f4de7083", size = 443631, upload-time = "2025-10-13T16:15:02.473Z" }, + { url = "https://files.pythonhosted.org/packages/7b/6c/78f83b6219f61c2c22d71ab6e6c2d4e5d7381334c6c29b77204e59edb039/numexpr-2.14.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3a2839efa25f3c8d4133252ea7342d8f81226c7c4dda81f97a57e090b9d87a48", size = 1417670, upload-time = "2025-10-13T16:13:33.464Z" }, + { url = "https://files.pythonhosted.org/packages/0e/bb/1ccc9dcaf46281568ce769888bf16294c40e98a5158e4b16c241de31d0d3/numexpr-2.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9f9137f1351b310436662b5dc6f4082a245efa8950c3b0d9008028df92fefb9b", size = 1466212, upload-time = "2025-10-13T16:15:12.828Z" }, + { url = "https://files.pythonhosted.org/packages/31/9f/203d82b9e39dadd91d64bca55b3c8ca432e981b822468dcef41a4418626b/numexpr-2.14.1-cp312-cp312-win32.whl", hash = "sha256:36f8d5c1bd1355df93b43d766790f9046cccfc1e32b7c6163f75bcde682cda07", size = 166996, upload-time = "2025-10-13T16:17:10.369Z" }, + { url = "https://files.pythonhosted.org/packages/1f/67/ffe750b5452eb66de788c34e7d21ec6d886abb4d7c43ad1dc88ceb3d998f/numexpr-2.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:fdd886f4b7dbaf167633ee396478f0d0aa58ea2f9e7ccc3c6431019623e8d68f", size = 160187, upload-time = "2025-10-13T16:17:11.974Z" }, + { url = "https://files.pythonhosted.org/packages/73/b4/9f6d637fd79df42be1be29ee7ba1f050fab63b7182cb922a0e08adc12320/numexpr-2.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:09078ba73cffe94745abfbcc2d81ab8b4b4e9d7bfbbde6cac2ee5dbf38eee222", size = 162794, upload-time = "2025-10-13T16:16:38.291Z" }, + { url = "https://files.pythonhosted.org/packages/35/ae/d58558d8043de0c49f385ea2fa789e3cfe4d436c96be80200c5292f45f15/numexpr-2.14.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:dce0b5a0447baa7b44bc218ec2d7dcd175b8eee6083605293349c0c1d9b82fb6", size = 152203, upload-time = "2025-10-13T16:16:39.907Z" }, + { url = "https://files.pythonhosted.org/packages/13/65/72b065f9c75baf8f474fd5d2b768350935989d4917db1c6c75b866d4067c/numexpr-2.14.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:06855053de7a3a8425429bd996e8ae3c50b57637ad3e757e0fa0602a7874be30", size = 455860, upload-time = "2025-10-13T16:13:35.811Z" }, + { url = "https://files.pythonhosted.org/packages/fc/f9/c9457652dfe28e2eb898372da2fe786c6db81af9540c0f853ee04a0699cc/numexpr-2.14.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:05f9366d23a2e991fd5a8b5e61a17558f028ba86158a4552f8f239b005cdf83c", size = 446574, upload-time = "2025-10-13T16:15:17.367Z" }, + { url = "https://files.pythonhosted.org/packages/b6/99/8d3879c4d67d3db5560cf2de65ce1778b80b75f6fa415eb5c3e7bd37ba27/numexpr-2.14.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c5f1b1605695778896534dfc6e130d54a65cd52be7ed2cd0cfee3981fd676bf5", size = 1417306, upload-time = "2025-10-13T16:13:42.813Z" }, + { url = "https://files.pythonhosted.org/packages/ea/05/6bddac9f18598ba94281e27a6943093f7d0976544b0cb5d92272c64719bd/numexpr-2.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a4ba71db47ea99c659d88ee6233fa77b6dc83392f1d324e0c90ddf617ae3f421", size = 1466145, upload-time = "2025-10-13T16:15:27.464Z" }, + { url = "https://files.pythonhosted.org/packages/24/5d/cbeb67aca0c5a76ead13df7e8bd8dd5e0d49145f90da697ba1d9f07005b0/numexpr-2.14.1-cp313-cp313-win32.whl", hash = "sha256:638dce8320f4a1483d5ca4fda69f60a70ed7e66be6e68bc23fb9f1a6b78a9e3b", size = 166996, upload-time = "2025-10-13T16:17:13.803Z" }, + { url = "https://files.pythonhosted.org/packages/cc/23/9281bceaeb282cead95f0aa5f7f222ffc895670ea689cc1398355f6e3001/numexpr-2.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:9fdcd4735121658a313f878fd31136d1bfc6a5b913219e7274e9fca9f8dac3bb", size = 160189, upload-time = "2025-10-13T16:17:15.417Z" }, + { url = "https://files.pythonhosted.org/packages/f3/76/7aac965fd93a56803cbe502aee2adcad667253ae34b0badf6c5af7908b6c/numexpr-2.14.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:557887ad7f5d3c2a40fd7310e50597045a68e66b20a77b3f44d7bc7608523b4b", size = 163524, upload-time = "2025-10-13T16:16:42.213Z" }, + { url = "https://files.pythonhosted.org/packages/58/65/79d592d5e63fbfab3b59a60c386853d9186a44a3fa3c87ba26bdc25b6195/numexpr-2.14.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:af111c8fe6fc55d15e4c7cab11920fc50740d913636d486545b080192cd0ad73", size = 152919, upload-time = "2025-10-13T16:16:44.229Z" }, + { url = "https://files.pythonhosted.org/packages/84/78/3c8335f713d4aeb99fa758d7c62f0be1482d4947ce5b508e2052bb7aeee9/numexpr-2.14.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:33265294376e7e2ae4d264d75b798a915d2acf37b9dd2b9405e8b04f84d05cfc", size = 465972, upload-time = "2025-10-13T16:13:45.061Z" }, + { url = "https://files.pythonhosted.org/packages/35/81/9ee5f69b811e8f18746c12d6f71848617684edd3161927f95eee7a305631/numexpr-2.14.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:83647d846d3eeeb9a9255311236135286728b398d0d41d35dedb532dca807fe9", size = 456953, upload-time = "2025-10-13T16:15:31.186Z" }, + { url = "https://files.pythonhosted.org/packages/6d/39/9b8bc6e294d85cbb54a634e47b833e9f3276a8bdf7ce92aa808718a0212d/numexpr-2.14.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6e575fd3ad41ddf3355d0c7ef6bd0168619dc1779a98fe46693cad5e95d25e6e", size = 1426199, upload-time = "2025-10-13T16:13:48.231Z" }, + { url = "https://files.pythonhosted.org/packages/1e/ce/0d4fcd31ab49319740d934fba1734d7dad13aa485532ca754e555ca16c8b/numexpr-2.14.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:67ea4771029ce818573b1998f5ca416bd255156feea017841b86176a938f7d19", size = 1474214, upload-time = "2025-10-13T16:15:38.893Z" }, + { url = "https://files.pythonhosted.org/packages/b7/47/b2a93cbdb3ba4e009728ad1b9ef1550e2655ea2c86958ebaf03b9615f275/numexpr-2.14.1-cp313-cp313t-win32.whl", hash = "sha256:15015d47d3d1487072d58c0e7682ef2eb608321e14099c39d52e2dd689483611", size = 167676, upload-time = "2025-10-13T16:17:17.351Z" }, + { url = "https://files.pythonhosted.org/packages/86/99/ee3accc589ed032eea68e12172515ed96a5568534c213ad109e1f4411df1/numexpr-2.14.1-cp313-cp313t-win_amd64.whl", hash = "sha256:94c711f6d8f17dfb4606842b403699603aa591ab9f6bf23038b488ea9cfb0f09", size = 161096, upload-time = "2025-10-13T16:17:19.174Z" }, + { url = "https://files.pythonhosted.org/packages/ac/36/9db78dfbfdfa1f8bf0872993f1a334cdd8fca5a5b6567e47dcb128bcb7c2/numexpr-2.14.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ede79f7ff06629f599081de644546ce7324f1581c09b0ac174da88a470d39c21", size = 162848, upload-time = "2025-10-13T16:16:46.216Z" }, + { url = "https://files.pythonhosted.org/packages/13/c1/a5c78ae637402c5550e2e0ba175275d2515d432ec28af0cdc23c9b476e65/numexpr-2.14.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2eac7a5a2f70b3768c67056445d1ceb4ecd9b853c8eda9563823b551aeaa5082", size = 152270, upload-time = "2025-10-13T16:16:47.92Z" }, + { url = "https://files.pythonhosted.org/packages/9a/ed/aabd8678077848dd9a751c5558c2057839f5a09e2a176d8dfcd0850ee00e/numexpr-2.14.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5aedf38d4c0c19d3cecfe0334c3f4099fb496f54c146223d30fa930084bc8574", size = 455918, upload-time = "2025-10-13T16:13:50.338Z" }, + { url = "https://files.pythonhosted.org/packages/88/e1/3db65117f02cdefb0e5e4c440daf1c30beb45051b7f47aded25b7f4f2f34/numexpr-2.14.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:439ec4d57b853792ebe5456e3160312281c3a7071ecac5532ded3278ede614de", size = 446512, upload-time = "2025-10-13T16:15:42.313Z" }, + { url = "https://files.pythonhosted.org/packages/9a/fb/7ceb9ee55b5f67e4a3e4d73d5af4c7e37e3c9f37f54bee90361b64b17e3f/numexpr-2.14.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e23b87f744e04e302d82ac5e2189ae20a533566aec76a46885376e20b0645bf8", size = 1417845, upload-time = "2025-10-13T16:13:53.836Z" }, + { url = "https://files.pythonhosted.org/packages/45/2d/9b5764d0eafbbb2889288f80de773791358acf6fad1a55767538d8b79599/numexpr-2.14.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:44f84e0e5af219dbb62a081606156420815890e041b87252fbcea5df55214c4c", size = 1466211, upload-time = "2025-10-13T16:15:48.985Z" }, + { url = "https://files.pythonhosted.org/packages/5d/21/204db708eccd71aa8bc55bcad55bc0fc6c5a4e01ad78e14ee5714a749386/numexpr-2.14.1-cp314-cp314-win32.whl", hash = "sha256:1f1a5e817c534539351aa75d26088e9e1e0ef1b3a6ab484047618a652ccc4fc3", size = 168835, upload-time = "2025-10-13T16:17:20.82Z" }, + { url = "https://files.pythonhosted.org/packages/4f/3e/d83e9401a1c3449a124f7d4b3fb44084798e0d30f7c11e60712d9b94cf11/numexpr-2.14.1-cp314-cp314-win_amd64.whl", hash = "sha256:587c41509bc373dfb1fe6086ba55a73147297247bedb6d588cda69169fc412f2", size = 162608, upload-time = "2025-10-13T16:17:22.228Z" }, + { url = "https://files.pythonhosted.org/packages/7f/d6/ec947806bb57836d6379a8c8a253c2aeaa602b12fef2336bfd2462bb4ed5/numexpr-2.14.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:ec368819502b64f190c3f71be14a304780b5935c42aae5bf22c27cc2cbba70b5", size = 163525, upload-time = "2025-10-13T16:16:50.133Z" }, + { url = "https://files.pythonhosted.org/packages/0d/77/048f30dcf661a3d52963a88c29b52b6d5ce996d38e9313a56a922451c1e0/numexpr-2.14.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7e87f6d203ac57239de32261c941e9748f9309cbc0da6295eabd0c438b920d3a", size = 152917, upload-time = "2025-10-13T16:16:52.055Z" }, + { url = "https://files.pythonhosted.org/packages/9e/d3/956a13e628d722d649fbf2fded615134a308c082e122a48bad0e90a99ce9/numexpr-2.14.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd72d8c2a165fe45ea7650b16eb8cc1792a94a722022006bb97c86fe51fd2091", size = 466242, upload-time = "2025-10-13T16:13:55.795Z" }, + { url = "https://files.pythonhosted.org/packages/d6/dd/abe848678d82486940892f2cacf39e82eec790e8930d4d713d3f9191063b/numexpr-2.14.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:70d80fcb418a54ca208e9a38e58ddc425c07f66485176b261d9a67c7f2864f73", size = 457149, upload-time = "2025-10-13T16:15:52.036Z" }, + { url = "https://files.pythonhosted.org/packages/fd/bb/797b583b5fb9da5700a5708ca6eb4f889c94d81abb28de4d642c0f4b3258/numexpr-2.14.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:edea2f20c2040df8b54ee8ca8ebda63de9545b2112872466118e9df4d0ae99f3", size = 1426493, upload-time = "2025-10-13T16:13:59.244Z" }, + { url = "https://files.pythonhosted.org/packages/77/c4/0519ab028fdc35e3e7ee700def7f2b4631b175cd9e1202bd7966c1695c33/numexpr-2.14.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:790447be6879a6c51b9545f79612d24c9ea0a41d537a84e15e6a8ddef0b6268e", size = 1474413, upload-time = "2025-10-13T16:15:59.211Z" }, + { url = "https://files.pythonhosted.org/packages/d4/4a/33044878c8f4a75213cfe9c11d4c02058bb710a7a063fe14f362e8de1077/numexpr-2.14.1-cp314-cp314t-win32.whl", hash = "sha256:538961096c2300ea44240209181e31fae82759d26b51713b589332b9f2a4117e", size = 169502, upload-time = "2025-10-13T16:17:23.829Z" }, + { url = "https://files.pythonhosted.org/packages/41/a2/5a1a2c72528b429337f49911b18c302ecd36eeab00f409147e1aa4ae4519/numexpr-2.14.1-cp314-cp314t-win_amd64.whl", hash = "sha256:a40b350cd45b4446076fa11843fa32bbe07024747aeddf6d467290bf9011b392", size = 163589, upload-time = "2025-10-13T16:17:25.696Z" }, +] + [[package]] name = "numpy" version = "1.26.4" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/65/6e/09db70a523a96d25e115e71cc56a6f9031e7b8cd166c1ac8438307c14058/numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010", size = 15786129, upload-time = "2024-02-06T00:26:44.495Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/11/57/baae43d14fe163fa0e4c47f307b6b2511ab8d7d30177c491960504252053/numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71", size = 20630554, upload-time = "2024-02-05T23:51:50.149Z" }, - { url = "https://files.pythonhosted.org/packages/1a/2e/151484f49fd03944c4a3ad9c418ed193cfd02724e138ac8a9505d056c582/numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef", size = 13997127, upload-time = "2024-02-05T23:52:15.314Z" }, - { url = "https://files.pythonhosted.org/packages/79/ae/7e5b85136806f9dadf4878bf73cf223fe5c2636818ba3ab1c585d0403164/numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e", size = 14222994, upload-time = "2024-02-05T23:52:47.569Z" }, - { url = "https://files.pythonhosted.org/packages/3a/d0/edc009c27b406c4f9cbc79274d6e46d634d139075492ad055e3d68445925/numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5", size = 18252005, upload-time = "2024-02-05T23:53:15.637Z" }, - { url = "https://files.pythonhosted.org/packages/09/bf/2b1aaf8f525f2923ff6cfcf134ae5e750e279ac65ebf386c75a0cf6da06a/numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a", size = 13885297, upload-time = "2024-02-05T23:53:42.16Z" }, - { url = "https://files.pythonhosted.org/packages/df/a0/4e0f14d847cfc2a633a1c8621d00724f3206cfeddeb66d35698c4e2cf3d2/numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a", size = 18093567, upload-time = "2024-02-05T23:54:11.696Z" }, - { url = "https://files.pythonhosted.org/packages/d2/b7/a734c733286e10a7f1a8ad1ae8c90f2d33bf604a96548e0a4a3a6739b468/numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20", size = 5968812, upload-time = "2024-02-05T23:54:26.453Z" }, - { url = "https://files.pythonhosted.org/packages/3f/6b/5610004206cf7f8e7ad91c5a85a8c71b2f2f8051a0c0c4d5916b76d6cbb2/numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2", size = 15811913, upload-time = "2024-02-05T23:54:53.933Z" }, { url = "https://files.pythonhosted.org/packages/95/12/8f2020a8e8b8383ac0177dc9570aad031a3beb12e38847f7129bacd96228/numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218", size = 20335901, upload-time = "2024-02-05T23:55:32.801Z" }, { url = "https://files.pythonhosted.org/packages/75/5b/ca6c8bd14007e5ca171c7c03102d17b4f4e0ceb53957e8c44343a9546dcc/numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b", size = 13685868, upload-time = "2024-02-05T23:55:56.28Z" }, { url = "https://files.pythonhosted.org/packages/79/f8/97f10e6755e2a7d027ca783f63044d5b1bc1ae7acb12afe6a9b4286eac17/numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b", size = 13925109, upload-time = "2024-02-05T23:56:20.368Z" }, @@ -1990,7 +1901,7 @@ name = "nvidia-cudnn-cu12" version = "9.10.2.21" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas-cu12", marker = "sys_platform == 'linux'" }, + { name = "nvidia-cublas-cu12" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/ba/51/e123d997aa098c61d029f76663dedbfb9bc8dcf8c60cbd6adbe42f76d049/nvidia_cudnn_cu12-9.10.2.21-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:949452be657fa16687d0930933f032835951ef0892b37d2d53824d1a84dc97a8", size = 706758467, upload-time = "2025-06-06T21:54:08.597Z" }, @@ -2001,7 +1912,7 @@ name = "nvidia-cufft-cu12" version = "11.3.3.83" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-nvjitlink-cu12", marker = "sys_platform == 'linux'" }, + { name = "nvidia-nvjitlink-cu12" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/1f/13/ee4e00f30e676b66ae65b4f08cb5bcbb8392c03f54f2d5413ea99a5d1c80/nvidia_cufft_cu12-11.3.3.83-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4d2dd21ec0b88cf61b62e6b43564355e5222e4a3fb394cac0db101f2dd0d4f74", size = 193118695, upload-time = "2025-03-07T01:45:27.821Z" }, @@ -2028,9 +1939,9 @@ name = "nvidia-cusolver-cu12" version = "11.7.3.90" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas-cu12", marker = "sys_platform == 'linux'" }, - { name = "nvidia-cusparse-cu12", marker = "sys_platform == 'linux'" }, - { name = "nvidia-nvjitlink-cu12", marker = "sys_platform == 'linux'" }, + { name = "nvidia-cublas-cu12" }, + { name = "nvidia-cusparse-cu12" }, + { name = "nvidia-nvjitlink-cu12" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/85/48/9a13d2975803e8cf2777d5ed57b87a0b6ca2cc795f9a4f59796a910bfb80/nvidia_cusolver_cu12-11.7.3.90-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:4376c11ad263152bd50ea295c05370360776f8c3427b30991df774f9fb26c450", size = 267506905, upload-time = "2025-03-07T01:47:16.273Z" }, @@ -2041,7 +1952,7 @@ name = "nvidia-cusparse-cu12" version = "12.5.8.93" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-nvjitlink-cu12", marker = "sys_platform == 'linux'" }, + { name = "nvidia-nvjitlink-cu12" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/c2/f5/e1854cb2f2bcd4280c44736c93550cc300ff4b8c95ebe370d0aa7d2b473d/nvidia_cusparse_cu12-12.5.8.93-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1ec05d76bbbd8b61b06a80e1eaf8cf4959c3d4ce8e711b65ebd0443bb0ebb13b", size = 288216466, upload-time = "2025-03-07T01:48:13.779Z" }, @@ -2157,13 +2068,6 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/33/01/d40b85317f86cf08d853a4f495195c73815fdf205eef3993821720274518/pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b", size = 4495223, upload-time = "2025-09-29T23:34:51.853Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/fa/7ac648108144a095b4fb6aa3de1954689f7af60a14cf25583f4960ecb878/pandas-2.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:602b8615ebcc4a0c1751e71840428ddebeb142ec02c786e8ad6b1ce3c8dec523", size = 11578790, upload-time = "2025-09-29T23:18:30.065Z" }, - { url = "https://files.pythonhosted.org/packages/9b/35/74442388c6cf008882d4d4bdfc4109be87e9b8b7ccd097ad1e7f006e2e95/pandas-2.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8fe25fc7b623b0ef6b5009149627e34d2a4657e880948ec3c840e9402e5c1b45", size = 10833831, upload-time = "2025-09-29T23:38:56.071Z" }, - { url = "https://files.pythonhosted.org/packages/fe/e4/de154cbfeee13383ad58d23017da99390b91d73f8c11856f2095e813201b/pandas-2.3.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b468d3dad6ff947df92dcb32ede5b7bd41a9b3cceef0a30ed925f6d01fb8fa66", size = 12199267, upload-time = "2025-09-29T23:18:41.627Z" }, - { url = "https://files.pythonhosted.org/packages/bf/c9/63f8d545568d9ab91476b1818b4741f521646cbdd151c6efebf40d6de6f7/pandas-2.3.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b98560e98cb334799c0b07ca7967ac361a47326e9b4e5a7dfb5ab2b1c9d35a1b", size = 12789281, upload-time = "2025-09-29T23:18:56.834Z" }, - { url = "https://files.pythonhosted.org/packages/f2/00/a5ac8c7a0e67fd1a6059e40aa08fa1c52cc00709077d2300e210c3ce0322/pandas-2.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37b5848ba49824e5c30bedb9c830ab9b7751fd049bc7914533e01c65f79791", size = 13240453, upload-time = "2025-09-29T23:19:09.247Z" }, - { url = "https://files.pythonhosted.org/packages/27/4d/5c23a5bc7bd209231618dd9e606ce076272c9bc4f12023a70e03a86b4067/pandas-2.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db4301b2d1f926ae677a751eb2bd0e8c5f5319c9cb3f88b0becbbb0b07b34151", size = 13890361, upload-time = "2025-09-29T23:19:25.342Z" }, - { url = "https://files.pythonhosted.org/packages/8e/59/712db1d7040520de7a4965df15b774348980e6df45c129b8c64d0dbe74ef/pandas-2.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:f086f6fe114e19d92014a1966f43a3e62285109afe874f067f5abbdcbb10e59c", size = 11348702, upload-time = "2025-09-29T23:19:38.296Z" }, { url = "https://files.pythonhosted.org/packages/9c/fb/231d89e8637c808b997d172b18e9d4a4bc7bf31296196c260526055d1ea0/pandas-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53", size = 11597846, upload-time = "2025-09-29T23:19:48.856Z" }, { url = "https://files.pythonhosted.org/packages/5c/bd/bf8064d9cfa214294356c2d6702b716d3cf3bb24be59287a6a21e24cae6b/pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35", size = 10729618, upload-time = "2025-09-29T23:39:08.659Z" }, { url = "https://files.pythonhosted.org/packages/57/56/cf2dbe1a3f5271370669475ead12ce77c61726ffd19a35546e31aa8edf4e/pandas-2.3.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908", size = 11737212, upload-time = "2025-09-29T23:19:59.765Z" }, @@ -2242,17 +2146,6 @@ version = "12.0.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/5a/b0/cace85a1b0c9775a9f8f5d5423c8261c858760e2466c79b2dd184638b056/pillow-12.0.0.tar.gz", hash = "sha256:87d4f8125c9988bfbed67af47dd7a953e2fc7b0cc1e7800ec6d2080d490bb353", size = 47008828, upload-time = "2025-10-15T18:24:14.008Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0e/5a/a2f6773b64edb921a756eb0729068acad9fc5208a53f4a349396e9436721/pillow-12.0.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:0fd00cac9c03256c8b2ff58f162ebcd2587ad3e1f2e397eab718c47e24d231cc", size = 5289798, upload-time = "2025-10-15T18:21:47.763Z" }, - { url = "https://files.pythonhosted.org/packages/2e/05/069b1f8a2e4b5a37493da6c5868531c3f77b85e716ad7a590ef87d58730d/pillow-12.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a3475b96f5908b3b16c47533daaa87380c491357d197564e0ba34ae75c0f3257", size = 4650589, upload-time = "2025-10-15T18:21:49.515Z" }, - { url = "https://files.pythonhosted.org/packages/61/e3/2c820d6e9a36432503ead175ae294f96861b07600a7156154a086ba7111a/pillow-12.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:110486b79f2d112cf6add83b28b627e369219388f64ef2f960fef9ebaf54c642", size = 6230472, upload-time = "2025-10-15T18:21:51.052Z" }, - { url = "https://files.pythonhosted.org/packages/4f/89/63427f51c64209c5e23d4d52071c8d0f21024d3a8a487737caaf614a5795/pillow-12.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5269cc1caeedb67e6f7269a42014f381f45e2e7cd42d834ede3c703a1d915fe3", size = 8033887, upload-time = "2025-10-15T18:21:52.604Z" }, - { url = "https://files.pythonhosted.org/packages/f6/1b/c9711318d4901093c15840f268ad649459cd81984c9ec9887756cca049a5/pillow-12.0.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aa5129de4e174daccbc59d0a3b6d20eaf24417d59851c07ebb37aeb02947987c", size = 6343964, upload-time = "2025-10-15T18:21:54.619Z" }, - { url = "https://files.pythonhosted.org/packages/41/1e/db9470f2d030b4995083044cd8738cdd1bf773106819f6d8ba12597d5352/pillow-12.0.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bee2a6db3a7242ea309aa7ee8e2780726fed67ff4e5b40169f2c940e7eb09227", size = 7034756, upload-time = "2025-10-15T18:21:56.151Z" }, - { url = "https://files.pythonhosted.org/packages/cc/b0/6177a8bdd5ee4ed87cba2de5a3cc1db55ffbbec6176784ce5bb75aa96798/pillow-12.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:90387104ee8400a7b4598253b4c406f8958f59fcf983a6cea2b50d59f7d63d0b", size = 6458075, upload-time = "2025-10-15T18:21:57.759Z" }, - { url = "https://files.pythonhosted.org/packages/bc/5e/61537aa6fa977922c6a03253a0e727e6e4a72381a80d63ad8eec350684f2/pillow-12.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bc91a56697869546d1b8f0a3ff35224557ae7f881050e99f615e0119bf934b4e", size = 7125955, upload-time = "2025-10-15T18:21:59.372Z" }, - { url = "https://files.pythonhosted.org/packages/1f/3d/d5033539344ee3cbd9a4d69e12e63ca3a44a739eb2d4c8da350a3d38edd7/pillow-12.0.0-cp311-cp311-win32.whl", hash = "sha256:27f95b12453d165099c84f8a8bfdfd46b9e4bda9e0e4b65f0635430027f55739", size = 6298440, upload-time = "2025-10-15T18:22:00.982Z" }, - { url = "https://files.pythonhosted.org/packages/4d/42/aaca386de5cc8bd8a0254516957c1f265e3521c91515b16e286c662854c4/pillow-12.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:b583dc9070312190192631373c6c8ed277254aa6e6084b74bdd0a6d3b221608e", size = 6999256, upload-time = "2025-10-15T18:22:02.617Z" }, - { url = "https://files.pythonhosted.org/packages/ba/f1/9197c9c2d5708b785f631a6dfbfa8eb3fb9672837cb92ae9af812c13b4ed/pillow-12.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:759de84a33be3b178a64c8ba28ad5c135900359e85fb662bc6e403ad4407791d", size = 2436025, upload-time = "2025-10-15T18:22:04.598Z" }, { url = "https://files.pythonhosted.org/packages/2c/90/4fcce2c22caf044e660a198d740e7fbc14395619e3cb1abad12192c0826c/pillow-12.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:53561a4ddc36facb432fae7a9d8afbfaf94795414f5cdc5fc52f28c1dca90371", size = 5249377, upload-time = "2025-10-15T18:22:05.993Z" }, { url = "https://files.pythonhosted.org/packages/fd/e0/ed960067543d080691d47d6938ebccbf3976a931c9567ab2fbfab983a5dd/pillow-12.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:71db6b4c1653045dacc1585c1b0d184004f0d7e694c7b34ac165ca70c0838082", size = 4650343, upload-time = "2025-10-15T18:22:07.718Z" }, { url = "https://files.pythonhosted.org/packages/e7/a1/f81fdeddcb99c044bf7d6faa47e12850f13cee0849537a7d27eeab5534d4/pillow-12.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2fa5f0b6716fc88f11380b88b31fe591a06c6315e955c096c35715788b339e3f", size = 6232981, upload-time = "2025-10-15T18:22:09.287Z" }, @@ -2314,13 +2207,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a2/2f/16cabcc6426c32218ace36bf0d55955e813f2958afddbf1d391849fee9d1/pillow-12.0.0-cp314-cp314t-win32.whl", hash = "sha256:3830c769decf88f1289680a59d4f4c46c72573446352e2befec9a8512104fa52", size = 6408045, upload-time = "2025-10-15T18:23:53.177Z" }, { url = "https://files.pythonhosted.org/packages/35/73/e29aa0c9c666cf787628d3f0dcf379f4791fba79f4936d02f8b37165bdf8/pillow-12.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:905b0365b210c73afb0ebe9101a32572152dfd1c144c7e28968a331b9217b94a", size = 7148282, upload-time = "2025-10-15T18:23:55.316Z" }, { url = "https://files.pythonhosted.org/packages/c1/70/6b41bdcddf541b437bbb9f47f94d2db5d9ddef6c37ccab8c9107743748a4/pillow-12.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:99353a06902c2e43b43e8ff74ee65a7d90307d82370604746738a1e0661ccca7", size = 2525630, upload-time = "2025-10-15T18:23:57.149Z" }, - { url = "https://files.pythonhosted.org/packages/1d/b3/582327e6c9f86d037b63beebe981425d6811104cb443e8193824ef1a2f27/pillow-12.0.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b22bd8c974942477156be55a768f7aa37c46904c175be4e158b6a86e3a6b7ca8", size = 5215068, upload-time = "2025-10-15T18:23:59.594Z" }, - { url = "https://files.pythonhosted.org/packages/fd/d6/67748211d119f3b6540baf90f92fae73ae51d5217b171b0e8b5f7e5d558f/pillow-12.0.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:805ebf596939e48dbb2e4922a1d3852cfc25c38160751ce02da93058b48d252a", size = 4614994, upload-time = "2025-10-15T18:24:01.669Z" }, - { url = "https://files.pythonhosted.org/packages/2d/e1/f8281e5d844c41872b273b9f2c34a4bf64ca08905668c8ae730eedc7c9fa/pillow-12.0.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cae81479f77420d217def5f54b5b9d279804d17e982e0f2fa19b1d1e14ab5197", size = 5246639, upload-time = "2025-10-15T18:24:03.403Z" }, - { url = "https://files.pythonhosted.org/packages/94/5a/0d8ab8ffe8a102ff5df60d0de5af309015163bf710c7bb3e8311dd3b3ad0/pillow-12.0.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aeaefa96c768fc66818730b952a862235d68825c178f1b3ffd4efd7ad2edcb7c", size = 6986839, upload-time = "2025-10-15T18:24:05.344Z" }, - { url = "https://files.pythonhosted.org/packages/20/2e/3434380e8110b76cd9eb00a363c484b050f949b4bbe84ba770bb8508a02c/pillow-12.0.0-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:09f2d0abef9e4e2f349305a4f8cc784a8a6c2f58a8c4892eea13b10a943bd26e", size = 5313505, upload-time = "2025-10-15T18:24:07.137Z" }, - { url = "https://files.pythonhosted.org/packages/57/ca/5a9d38900d9d74785141d6580950fe705de68af735ff6e727cb911b64740/pillow-12.0.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bdee52571a343d721fb2eb3b090a82d959ff37fc631e3f70422e0c2e029f3e76", size = 5963654, upload-time = "2025-10-15T18:24:09.579Z" }, - { url = "https://files.pythonhosted.org/packages/95/7e/f896623c3c635a90537ac093c6a618ebe1a90d87206e42309cb5d98a1b9e/pillow-12.0.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:b290fd8aa38422444d4b50d579de197557f182ef1068b75f5aa8558638b8d0a5", size = 6997850, upload-time = "2025-10-15T18:24:11.495Z" }, ] [[package]] @@ -2398,6 +2284,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c9/ad/33b2ccec09bf96c2b2ef3f9a6f66baac8253d7565d8839e024a6b905d45d/psutil-7.1.3-cp37-abi3-win_arm64.whl", hash = "sha256:bd0d69cee829226a761e92f28140bec9a5ee9d5b4fb4b0cc589068dbfff559b1", size = 244608, upload-time = "2025-11-02T12:26:36.136Z" }, ] +[[package]] +name = "py-cpuinfo" +version = "9.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/37/a8/d832f7293ebb21690860d2e01d8115e5ff6f2ae8bbdc953f0eb0fa4bd2c7/py-cpuinfo-9.0.0.tar.gz", hash = "sha256:3cdbbf3fac90dc6f118bfd64384f309edeadd902d7c8fb17f02ffa1fc3f49690", size = 104716, upload-time = "2022-10-25T20:38:06.303Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/a9/023730ba63db1e494a271cb018dcd361bd2c917ba7004c3e49d5daf795a2/py_cpuinfo-9.0.0-py3-none-any.whl", hash = "sha256:859625bc251f64e21f077d099d4162689c762b5d6a4c3c97553d56241c9674d5", size = 22335, upload-time = "2022-10-25T20:38:27.636Z" }, +] + [[package]] name = "pycparser" version = "2.23" @@ -2431,20 +2326,6 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/71/70/23b021c950c2addd24ec408e9ab05d59b035b39d97cdc1130e1bce647bb6/pydantic_core-2.41.5.tar.gz", hash = "sha256:08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e", size = 460952, upload-time = "2025-11-04T13:43:49.098Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e8/72/74a989dd9f2084b3d9530b0915fdda64ac48831c30dbf7c72a41a5232db8/pydantic_core-2.41.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a3a52f6156e73e7ccb0f8cced536adccb7042be67cb45f9562e12b319c119da6", size = 2105873, upload-time = "2025-11-04T13:39:31.373Z" }, - { url = "https://files.pythonhosted.org/packages/12/44/37e403fd9455708b3b942949e1d7febc02167662bf1a7da5b78ee1ea2842/pydantic_core-2.41.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7f3bf998340c6d4b0c9a2f02d6a400e51f123b59565d74dc60d252ce888c260b", size = 1899826, upload-time = "2025-11-04T13:39:32.897Z" }, - { url = "https://files.pythonhosted.org/packages/33/7f/1d5cab3ccf44c1935a359d51a8a2a9e1a654b744b5e7f80d41b88d501eec/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:378bec5c66998815d224c9ca994f1e14c0c21cb95d2f52b6021cc0b2a58f2a5a", size = 1917869, upload-time = "2025-11-04T13:39:34.469Z" }, - { url = "https://files.pythonhosted.org/packages/6e/6a/30d94a9674a7fe4f4744052ed6c5e083424510be1e93da5bc47569d11810/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e7b576130c69225432866fe2f4a469a85a54ade141d96fd396dffcf607b558f8", size = 2063890, upload-time = "2025-11-04T13:39:36.053Z" }, - { url = "https://files.pythonhosted.org/packages/50/be/76e5d46203fcb2750e542f32e6c371ffa9b8ad17364cf94bb0818dbfb50c/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6cb58b9c66f7e4179a2d5e0f849c48eff5c1fca560994d6eb6543abf955a149e", size = 2229740, upload-time = "2025-11-04T13:39:37.753Z" }, - { url = "https://files.pythonhosted.org/packages/d3/ee/fed784df0144793489f87db310a6bbf8118d7b630ed07aa180d6067e653a/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:88942d3a3dff3afc8288c21e565e476fc278902ae4d6d134f1eeda118cc830b1", size = 2350021, upload-time = "2025-11-04T13:39:40.94Z" }, - { url = "https://files.pythonhosted.org/packages/c8/be/8fed28dd0a180dca19e72c233cbf58efa36df055e5b9d90d64fd1740b828/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f31d95a179f8d64d90f6831d71fa93290893a33148d890ba15de25642c5d075b", size = 2066378, upload-time = "2025-11-04T13:39:42.523Z" }, - { url = "https://files.pythonhosted.org/packages/b0/3b/698cf8ae1d536a010e05121b4958b1257f0b5522085e335360e53a6b1c8b/pydantic_core-2.41.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c1df3d34aced70add6f867a8cf413e299177e0c22660cc767218373d0779487b", size = 2175761, upload-time = "2025-11-04T13:39:44.553Z" }, - { url = "https://files.pythonhosted.org/packages/b8/ba/15d537423939553116dea94ce02f9c31be0fa9d0b806d427e0308ec17145/pydantic_core-2.41.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4009935984bd36bd2c774e13f9a09563ce8de4abaa7226f5108262fa3e637284", size = 2146303, upload-time = "2025-11-04T13:39:46.238Z" }, - { url = "https://files.pythonhosted.org/packages/58/7f/0de669bf37d206723795f9c90c82966726a2ab06c336deba4735b55af431/pydantic_core-2.41.5-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:34a64bc3441dc1213096a20fe27e8e128bd3ff89921706e83c0b1ac971276594", size = 2340355, upload-time = "2025-11-04T13:39:48.002Z" }, - { url = "https://files.pythonhosted.org/packages/e5/de/e7482c435b83d7e3c3ee5ee4451f6e8973cff0eb6007d2872ce6383f6398/pydantic_core-2.41.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c9e19dd6e28fdcaa5a1de679aec4141f691023916427ef9bae8584f9c2fb3b0e", size = 2319875, upload-time = "2025-11-04T13:39:49.705Z" }, - { url = "https://files.pythonhosted.org/packages/fe/e6/8c9e81bb6dd7560e33b9053351c29f30c8194b72f2d6932888581f503482/pydantic_core-2.41.5-cp311-cp311-win32.whl", hash = "sha256:2c010c6ded393148374c0f6f0bf89d206bf3217f201faa0635dcd56bd1520f6b", size = 1987549, upload-time = "2025-11-04T13:39:51.842Z" }, - { url = "https://files.pythonhosted.org/packages/11/66/f14d1d978ea94d1bc21fc98fcf570f9542fe55bfcc40269d4e1a21c19bf7/pydantic_core-2.41.5-cp311-cp311-win_amd64.whl", hash = "sha256:76ee27c6e9c7f16f47db7a94157112a2f3a00e958bc626e2f4ee8bec5c328fbe", size = 2011305, upload-time = "2025-11-04T13:39:53.485Z" }, - { url = "https://files.pythonhosted.org/packages/56/d8/0e271434e8efd03186c5386671328154ee349ff0354d83c74f5caaf096ed/pydantic_core-2.41.5-cp311-cp311-win_arm64.whl", hash = "sha256:4bc36bbc0b7584de96561184ad7f012478987882ebf9f9c389b23f432ea3d90f", size = 1972902, upload-time = "2025-11-04T13:39:56.488Z" }, { url = "https://files.pythonhosted.org/packages/5f/5d/5f6c63eebb5afee93bcaae4ce9a898f3373ca23df3ccaef086d0233a35a7/pydantic_core-2.41.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f41a7489d32336dbf2199c8c0a215390a751c5b014c2c1c5366e817202e9cdf7", size = 2110990, upload-time = "2025-11-04T13:39:58.079Z" }, { url = "https://files.pythonhosted.org/packages/aa/32/9c2e8ccb57c01111e0fd091f236c7b371c1bccea0fa85247ac55b1e2b6b6/pydantic_core-2.41.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:070259a8818988b9a84a449a2a7337c7f430a22acc0859c6b110aa7212a6d9c0", size = 1896003, upload-time = "2025-11-04T13:39:59.956Z" }, { url = "https://files.pythonhosted.org/packages/68/b8/a01b53cb0e59139fbc9e4fda3e9724ede8de279097179be4ff31f1abb65a/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e96cea19e34778f8d59fe40775a7a574d95816eb150850a85a7a4c8f4b94ac69", size = 1919200, upload-time = "2025-11-04T13:40:02.241Z" }, @@ -2501,22 +2382,10 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/5c/96/5fb7d8c3c17bc8c62fdb031c47d77a1af698f1d7a406b0f79aaa1338f9ad/pydantic_core-2.41.5-cp314-cp314t-win32.whl", hash = "sha256:b4ececa40ac28afa90871c2cc2b9ffd2ff0bf749380fbdf57d165fd23da353aa", size = 1988906, upload-time = "2025-11-04T13:41:56.606Z" }, { url = "https://files.pythonhosted.org/packages/22/ed/182129d83032702912c2e2d8bbe33c036f342cc735737064668585dac28f/pydantic_core-2.41.5-cp314-cp314t-win_amd64.whl", hash = "sha256:80aa89cad80b32a912a65332f64a4450ed00966111b6615ca6816153d3585a8c", size = 1981607, upload-time = "2025-11-04T13:41:58.889Z" }, { url = "https://files.pythonhosted.org/packages/9f/ed/068e41660b832bb0b1aa5b58011dea2a3fe0ba7861ff38c4d4904c1c1a99/pydantic_core-2.41.5-cp314-cp314t-win_arm64.whl", hash = "sha256:35b44f37a3199f771c3eaa53051bc8a70cd7b54f333531c59e29fd4db5d15008", size = 1974769, upload-time = "2025-11-04T13:42:01.186Z" }, - { url = "https://files.pythonhosted.org/packages/11/72/90fda5ee3b97e51c494938a4a44c3a35a9c96c19bba12372fb9c634d6f57/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:b96d5f26b05d03cc60f11a7761a5ded1741da411e7fe0909e27a5e6a0cb7b034", size = 2115441, upload-time = "2025-11-04T13:42:39.557Z" }, - { url = "https://files.pythonhosted.org/packages/1f/53/8942f884fa33f50794f119012dc6a1a02ac43a56407adaac20463df8e98f/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:634e8609e89ceecea15e2d61bc9ac3718caaaa71963717bf3c8f38bfde64242c", size = 1930291, upload-time = "2025-11-04T13:42:42.169Z" }, - { url = "https://files.pythonhosted.org/packages/79/c8/ecb9ed9cd942bce09fc888ee960b52654fbdbede4ba6c2d6e0d3b1d8b49c/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:93e8740d7503eb008aa2df04d3b9735f845d43ae845e6dcd2be0b55a2da43cd2", size = 1948632, upload-time = "2025-11-04T13:42:44.564Z" }, - { url = "https://files.pythonhosted.org/packages/2e/1b/687711069de7efa6af934e74f601e2a4307365e8fdc404703afc453eab26/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f15489ba13d61f670dcc96772e733aad1a6f9c429cc27574c6cdaed82d0146ad", size = 2138905, upload-time = "2025-11-04T13:42:47.156Z" }, { url = "https://files.pythonhosted.org/packages/09/32/59b0c7e63e277fa7911c2fc70ccfb45ce4b98991e7ef37110663437005af/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:7da7087d756b19037bc2c06edc6c170eeef3c3bafcb8f532ff17d64dc427adfd", size = 2110495, upload-time = "2025-11-04T13:42:49.689Z" }, { url = "https://files.pythonhosted.org/packages/aa/81/05e400037eaf55ad400bcd318c05bb345b57e708887f07ddb2d20e3f0e98/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:aabf5777b5c8ca26f7824cb4a120a740c9588ed58df9b2d196ce92fba42ff8dc", size = 1915388, upload-time = "2025-11-04T13:42:52.215Z" }, { url = "https://files.pythonhosted.org/packages/6e/0d/e3549b2399f71d56476b77dbf3cf8937cec5cd70536bdc0e374a421d0599/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c007fe8a43d43b3969e8469004e9845944f1a80e6acd47c150856bb87f230c56", size = 1942879, upload-time = "2025-11-04T13:42:56.483Z" }, { url = "https://files.pythonhosted.org/packages/f7/07/34573da085946b6a313d7c42f82f16e8920bfd730665de2d11c0c37a74b5/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76d0819de158cd855d1cbb8fcafdf6f5cf1eb8e470abe056d5d161106e38062b", size = 2139017, upload-time = "2025-11-04T13:42:59.471Z" }, - { url = "https://files.pythonhosted.org/packages/5f/9b/1b3f0e9f9305839d7e84912f9e8bfbd191ed1b1ef48083609f0dabde978c/pydantic_core-2.41.5-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b2379fa7ed44ddecb5bfe4e48577d752db9fc10be00a6b7446e9663ba143de26", size = 2101980, upload-time = "2025-11-04T13:43:25.97Z" }, - { url = "https://files.pythonhosted.org/packages/a4/ed/d71fefcb4263df0da6a85b5d8a7508360f2f2e9b3bf5814be9c8bccdccc1/pydantic_core-2.41.5-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:266fb4cbf5e3cbd0b53669a6d1b039c45e3ce651fd5442eff4d07c2cc8d66808", size = 1923865, upload-time = "2025-11-04T13:43:28.763Z" }, - { url = "https://files.pythonhosted.org/packages/ce/3a/626b38db460d675f873e4444b4bb030453bbe7b4ba55df821d026a0493c4/pydantic_core-2.41.5-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58133647260ea01e4d0500089a8c4f07bd7aa6ce109682b1426394988d8aaacc", size = 2134256, upload-time = "2025-11-04T13:43:31.71Z" }, - { url = "https://files.pythonhosted.org/packages/83/d9/8412d7f06f616bbc053d30cb4e5f76786af3221462ad5eee1f202021eb4e/pydantic_core-2.41.5-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:287dad91cfb551c363dc62899a80e9e14da1f0e2b6ebde82c806612ca2a13ef1", size = 2174762, upload-time = "2025-11-04T13:43:34.744Z" }, - { url = "https://files.pythonhosted.org/packages/55/4c/162d906b8e3ba3a99354e20faa1b49a85206c47de97a639510a0e673f5da/pydantic_core-2.41.5-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:03b77d184b9eb40240ae9fd676ca364ce1085f203e1b1256f8ab9984dca80a84", size = 2143141, upload-time = "2025-11-04T13:43:37.701Z" }, - { url = "https://files.pythonhosted.org/packages/1f/f2/f11dd73284122713f5f89fc940f370d035fa8e1e078d446b3313955157fe/pydantic_core-2.41.5-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:a668ce24de96165bb239160b3d854943128f4334822900534f2fe947930e5770", size = 2330317, upload-time = "2025-11-04T13:43:40.406Z" }, - { url = "https://files.pythonhosted.org/packages/88/9d/b06ca6acfe4abb296110fb1273a4d848a0bfb2ff65f3ee92127b3244e16b/pydantic_core-2.41.5-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f14f8f046c14563f8eb3f45f499cc658ab8d10072961e07225e507adb700e93f", size = 2316992, upload-time = "2025-11-04T13:43:43.602Z" }, - { url = "https://files.pythonhosted.org/packages/36/c7/cfc8e811f061c841d7990b0201912c3556bfeb99cdcb7ed24adc8d6f8704/pydantic_core-2.41.5-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:56121965f7a4dc965bff783d70b907ddf3d57f6eba29b6d2e5dabfaf07799c51", size = 2145302, upload-time = "2025-11-04T13:43:46.64Z" }, ] [[package]] @@ -2638,7 +2507,7 @@ name = "pytest-cov" version = "7.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "coverage", extra = ["toml"] }, + { name = "coverage" }, { name = "pluggy" }, { name = "pytest" }, ] @@ -2712,15 +2581,6 @@ version = "6.0.3" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6d/16/a95b6757765b7b031c9374925bb718d55e0a9ba8a1b6a12d25962ea44347/pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e", size = 185826, upload-time = "2025-09-25T21:31:58.655Z" }, - { url = "https://files.pythonhosted.org/packages/16/19/13de8e4377ed53079ee996e1ab0a9c33ec2faf808a4647b7b4c0d46dd239/pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824", size = 175577, upload-time = "2025-09-25T21:32:00.088Z" }, - { url = "https://files.pythonhosted.org/packages/0c/62/d2eb46264d4b157dae1275b573017abec435397aa59cbcdab6fc978a8af4/pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c", size = 775556, upload-time = "2025-09-25T21:32:01.31Z" }, - { url = "https://files.pythonhosted.org/packages/10/cb/16c3f2cf3266edd25aaa00d6c4350381c8b012ed6f5276675b9eba8d9ff4/pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00", size = 882114, upload-time = "2025-09-25T21:32:03.376Z" }, - { url = "https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d", size = 806638, upload-time = "2025-09-25T21:32:04.553Z" }, - { url = "https://files.pythonhosted.org/packages/dd/6f/529b0f316a9fd167281a6c3826b5583e6192dba792dd55e3203d3f8e655a/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a", size = 767463, upload-time = "2025-09-25T21:32:06.152Z" }, - { url = "https://files.pythonhosted.org/packages/f2/6a/b627b4e0c1dd03718543519ffb2f1deea4a1e6d42fbab8021936a4d22589/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4", size = 794986, upload-time = "2025-09-25T21:32:07.367Z" }, - { url = "https://files.pythonhosted.org/packages/45/91/47a6e1c42d9ee337c4839208f30d9f09caa9f720ec7582917b264defc875/pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b", size = 142543, upload-time = "2025-09-25T21:32:08.95Z" }, - { url = "https://files.pythonhosted.org/packages/da/e3/ea007450a105ae919a72393cb06f122f288ef60bba2dc64b26e2646fa315/pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf", size = 158763, upload-time = "2025-09-25T21:32:09.96Z" }, { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" }, { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" }, { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" }, @@ -2851,12 +2711,6 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/0e/d4/40988bf3b8e34feec1d0e6a051446b1f66225f8529b9309becaeef62b6c4/scikit_learn-1.8.0.tar.gz", hash = "sha256:9bccbb3b40e3de10351f8f5068e105d0f4083b1a65fa07b6634fbc401a6287fd", size = 7335585, upload-time = "2025-12-10T07:08:53.618Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c9/92/53ea2181da8ac6bf27170191028aee7251f8f841f8d3edbfdcaf2008fde9/scikit_learn-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:146b4d36f800c013d267b29168813f7a03a43ecd2895d04861f1240b564421da", size = 8595835, upload-time = "2025-12-10T07:07:39.385Z" }, - { url = "https://files.pythonhosted.org/packages/01/18/d154dc1638803adf987910cdd07097d9c526663a55666a97c124d09fb96a/scikit_learn-1.8.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:f984ca4b14914e6b4094c5d52a32ea16b49832c03bd17a110f004db3c223e8e1", size = 8080381, upload-time = "2025-12-10T07:07:41.93Z" }, - { url = "https://files.pythonhosted.org/packages/8a/44/226142fcb7b7101e64fdee5f49dbe6288d4c7af8abf593237b70fca080a4/scikit_learn-1.8.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5e30adb87f0cc81c7690a84f7932dd66be5bac57cfe16b91cb9151683a4a2d3b", size = 8799632, upload-time = "2025-12-10T07:07:43.899Z" }, - { url = "https://files.pythonhosted.org/packages/36/4d/4a67f30778a45d542bbea5db2dbfa1e9e100bf9ba64aefe34215ba9f11f6/scikit_learn-1.8.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ada8121bcb4dac28d930febc791a69f7cb1673c8495e5eee274190b73a4559c1", size = 9103788, upload-time = "2025-12-10T07:07:45.982Z" }, - { url = "https://files.pythonhosted.org/packages/89/3c/45c352094cfa60050bcbb967b1faf246b22e93cb459f2f907b600f2ceda5/scikit_learn-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:c57b1b610bd1f40ba43970e11ce62821c2e6569e4d74023db19c6b26f246cb3b", size = 8081706, upload-time = "2025-12-10T07:07:48.111Z" }, - { url = "https://files.pythonhosted.org/packages/3d/46/5416595bb395757f754feb20c3d776553a386b661658fb21b7c814e89efe/scikit_learn-1.8.0-cp311-cp311-win_arm64.whl", hash = "sha256:2838551e011a64e3053ad7618dda9310175f7515f1742fa2d756f7c874c05961", size = 7688451, upload-time = "2025-12-10T07:07:49.873Z" }, { url = "https://files.pythonhosted.org/packages/90/74/e6a7cc4b820e95cc38cf36cd74d5aa2b42e8ffc2d21fe5a9a9c45c1c7630/scikit_learn-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5fb63362b5a7ddab88e52b6dbb47dac3fd7dafeee740dc6c8d8a446ddedade8e", size = 8548242, upload-time = "2025-12-10T07:07:51.568Z" }, { url = "https://files.pythonhosted.org/packages/49/d8/9be608c6024d021041c7f0b3928d4749a706f4e2c3832bbede4fb4f58c95/scikit_learn-1.8.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:5025ce924beccb28298246e589c691fe1b8c1c96507e6d27d12c5fadd85bfd76", size = 8079075, upload-time = "2025-12-10T07:07:53.697Z" }, { url = "https://files.pythonhosted.org/packages/dd/47/f187b4636ff80cc63f21cd40b7b2d177134acaa10f6bb73746130ee8c2e5/scikit_learn-1.8.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4496bb2cf7a43ce1a2d7524a79e40bc5da45cf598dbf9545b7e8316ccba47bb4", size = 8660492, upload-time = "2025-12-10T07:07:55.574Z" }, @@ -2898,16 +2752,6 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/0a/ca/d8ace4f98322d01abcd52d381134344bf7b431eba7ed8b42bdea5a3c2ac9/scipy-1.16.3.tar.gz", hash = "sha256:01e87659402762f43bd2fee13370553a17ada367d42e7487800bf2916535aecb", size = 30597883, upload-time = "2025-10-28T17:38:54.068Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9b/5f/6f37d7439de1455ce9c5a556b8d1db0979f03a796c030bafdf08d35b7bf9/scipy-1.16.3-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:40be6cf99e68b6c4321e9f8782e7d5ff8265af28ef2cd56e9c9b2638fa08ad97", size = 36630881, upload-time = "2025-10-28T17:31:47.104Z" }, - { url = "https://files.pythonhosted.org/packages/7c/89/d70e9f628749b7e4db2aa4cd89735502ff3f08f7b9b27d2e799485987cd9/scipy-1.16.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:8be1ca9170fcb6223cc7c27f4305d680ded114a1567c0bd2bfcbf947d1b17511", size = 28941012, upload-time = "2025-10-28T17:31:53.411Z" }, - { url = "https://files.pythonhosted.org/packages/a8/a8/0e7a9a6872a923505dbdf6bb93451edcac120363131c19013044a1e7cb0c/scipy-1.16.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:bea0a62734d20d67608660f69dcda23e7f90fb4ca20974ab80b6ed40df87a005", size = 20931935, upload-time = "2025-10-28T17:31:57.361Z" }, - { url = "https://files.pythonhosted.org/packages/bd/c7/020fb72bd79ad798e4dbe53938543ecb96b3a9ac3fe274b7189e23e27353/scipy-1.16.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:2a207a6ce9c24f1951241f4693ede2d393f59c07abc159b2cb2be980820e01fb", size = 23534466, upload-time = "2025-10-28T17:32:01.875Z" }, - { url = "https://files.pythonhosted.org/packages/be/a0/668c4609ce6dbf2f948e167836ccaf897f95fb63fa231c87da7558a374cd/scipy-1.16.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:532fb5ad6a87e9e9cd9c959b106b73145a03f04c7d57ea3e6f6bb60b86ab0876", size = 33593618, upload-time = "2025-10-28T17:32:06.902Z" }, - { url = "https://files.pythonhosted.org/packages/ca/6e/8942461cf2636cdae083e3eb72622a7fbbfa5cf559c7d13ab250a5dbdc01/scipy-1.16.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0151a0749efeaaab78711c78422d413c583b8cdd2011a3c1d6c794938ee9fdb2", size = 35899798, upload-time = "2025-10-28T17:32:12.665Z" }, - { url = "https://files.pythonhosted.org/packages/79/e8/d0f33590364cdbd67f28ce79368b373889faa4ee959588beddf6daef9abe/scipy-1.16.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b7180967113560cca57418a7bc719e30366b47959dd845a93206fbed693c867e", size = 36226154, upload-time = "2025-10-28T17:32:17.961Z" }, - { url = "https://files.pythonhosted.org/packages/39/c1/1903de608c0c924a1749c590064e65810f8046e437aba6be365abc4f7557/scipy-1.16.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:deb3841c925eeddb6afc1e4e4a45e418d19ec7b87c5df177695224078e8ec733", size = 38878540, upload-time = "2025-10-28T17:32:23.907Z" }, - { url = "https://files.pythonhosted.org/packages/f1/d0/22ec7036ba0b0a35bccb7f25ab407382ed34af0b111475eb301c16f8a2e5/scipy-1.16.3-cp311-cp311-win_amd64.whl", hash = "sha256:53c3844d527213631e886621df5695d35e4f6a75f620dca412bcd292f6b87d78", size = 38722107, upload-time = "2025-10-28T17:32:29.921Z" }, - { url = "https://files.pythonhosted.org/packages/7b/60/8a00e5a524bb3bf8898db1650d350f50e6cffb9d7a491c561dc9826c7515/scipy-1.16.3-cp311-cp311-win_arm64.whl", hash = "sha256:9452781bd879b14b6f055b26643703551320aa8d79ae064a71df55c00286a184", size = 25506272, upload-time = "2025-10-28T17:32:34.577Z" }, { url = "https://files.pythonhosted.org/packages/40/41/5bf55c3f386b1643812f3a5674edf74b26184378ef0f3e7c7a09a7e2ca7f/scipy-1.16.3-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:81fc5827606858cf71446a5e98715ba0e11f0dbc83d71c7409d05486592a45d6", size = 36659043, upload-time = "2025-10-28T17:32:40.285Z" }, { url = "https://files.pythonhosted.org/packages/1e/0f/65582071948cfc45d43e9870bf7ca5f0e0684e165d7c9ef4e50d783073eb/scipy-1.16.3-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:c97176013d404c7346bf57874eaac5187d969293bf40497140b0a2b2b7482e07", size = 28898986, upload-time = "2025-10-28T17:32:45.325Z" }, { url = "https://files.pythonhosted.org/packages/96/5e/36bf3f0ac298187d1ceadde9051177d6a4fe4d507e8f59067dc9dd39e650/scipy-1.16.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:2b71d93c8a9936046866acebc915e2af2e292b883ed6e2cbe5c34beb094b82d9", size = 20889814, upload-time = "2025-10-28T17:32:49.277Z" }, @@ -3019,13 +2863,6 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/be/f9/5e4491e5ccf42f5d9cfc663741d261b3e6e1683ae7812114e7636409fcc6/sqlalchemy-2.0.45.tar.gz", hash = "sha256:1632a4bda8d2d25703fdad6363058d882541bdaaee0e5e3ddfa0cd3229efce88", size = 9869912, upload-time = "2025-12-09T21:05:16.737Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a2/1c/769552a9d840065137272ebe86ffbb0bc92b0f1e0a68ee5266a225f8cd7b/sqlalchemy-2.0.45-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2e90a344c644a4fa871eb01809c32096487928bd2038bf10f3e4515cb688cc56", size = 2153860, upload-time = "2025-12-10T20:03:23.843Z" }, - { url = "https://files.pythonhosted.org/packages/f3/f8/9be54ff620e5b796ca7b44670ef58bc678095d51b0e89d6e3102ea468216/sqlalchemy-2.0.45-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b8c8b41b97fba5f62349aa285654230296829672fc9939cd7f35aab246d1c08b", size = 3309379, upload-time = "2025-12-09T22:06:07.461Z" }, - { url = "https://files.pythonhosted.org/packages/f6/2b/60ce3ee7a5ae172bfcd419ce23259bb874d2cddd44f67c5df3760a1e22f9/sqlalchemy-2.0.45-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:12c694ed6468333a090d2f60950e4250b928f457e4962389553d6ba5fe9951ac", size = 3309948, upload-time = "2025-12-09T22:09:57.643Z" }, - { url = "https://files.pythonhosted.org/packages/a3/42/bac8d393f5db550e4e466d03d16daaafd2bad1f74e48c12673fb499a7fc1/sqlalchemy-2.0.45-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:f7d27a1d977a1cfef38a0e2e1ca86f09c4212666ce34e6ae542f3ed0a33bc606", size = 3261239, upload-time = "2025-12-09T22:06:08.879Z" }, - { url = "https://files.pythonhosted.org/packages/6f/12/43dc70a0528c59842b04ea1c1ed176f072a9b383190eb015384dd102fb19/sqlalchemy-2.0.45-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d62e47f5d8a50099b17e2bfc1b0c7d7ecd8ba6b46b1507b58cc4f05eefc3bb1c", size = 3284065, upload-time = "2025-12-09T22:09:59.454Z" }, - { url = "https://files.pythonhosted.org/packages/cf/9c/563049cf761d9a2ec7bc489f7879e9d94e7b590496bea5bbee9ed7b4cc32/sqlalchemy-2.0.45-cp311-cp311-win32.whl", hash = "sha256:3c5f76216e7b85770d5bb5130ddd11ee89f4d52b11783674a662c7dd57018177", size = 2113480, upload-time = "2025-12-09T21:29:57.03Z" }, - { url = "https://files.pythonhosted.org/packages/bc/fa/09d0a11fe9f15c7fa5c7f0dd26be3d235b0c0cbf2f9544f43bc42efc8a24/sqlalchemy-2.0.45-cp311-cp311-win_amd64.whl", hash = "sha256:a15b98adb7f277316f2c276c090259129ee4afca783495e212048daf846654b2", size = 2138407, upload-time = "2025-12-09T21:29:58.556Z" }, { url = "https://files.pythonhosted.org/packages/2d/c7/1900b56ce19bff1c26f39a4ce427faec7716c81ac792bfac8b6a9f3dca93/sqlalchemy-2.0.45-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b3ee2aac15169fb0d45822983631466d60b762085bc4535cd39e66bea362df5f", size = 3333760, upload-time = "2025-12-09T22:11:02.66Z" }, { url = "https://files.pythonhosted.org/packages/0a/93/3be94d96bb442d0d9a60e55a6bb6e0958dd3457751c6f8502e56ef95fed0/sqlalchemy-2.0.45-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba547ac0b361ab4f1608afbc8432db669bd0819b3e12e29fb5fa9529a8bba81d", size = 3348268, upload-time = "2025-12-09T22:13:49.054Z" }, { url = "https://files.pythonhosted.org/packages/48/4b/f88ded696e61513595e4a9778f9d3f2bf7332cce4eb0c7cedaabddd6687b/sqlalchemy-2.0.45-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:215f0528b914e5c75ef2559f69dca86878a3beeb0c1be7279d77f18e8d180ed4", size = 3278144, upload-time = "2025-12-09T22:11:04.14Z" }, @@ -3063,6 +2900,31 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", size = 6299353, upload-time = "2025-04-27T18:04:59.103Z" }, ] +[[package]] +name = "tables" +version = "3.11.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "blosc2" }, + { name = "numexpr" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "py-cpuinfo" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cc/a3/d213ebe7376d48055bd55a29cd9f99061afa0dcece608f94a5025d797b0a/tables-3.11.1.tar.gz", hash = "sha256:78abcf413091bc7c1e4e8c10fbbb438d1ac0b5a87436c5b972c3e8253871b6fb", size = 4790533, upload-time = "2026-03-01T11:43:36.036Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fa/bb/4a9cde6628563388db26fa86c64adb0f2475a757e72af0ec185fd520b72f/tables-3.11.1-cp311-abi3-macosx_10_9_x86_64.whl", hash = "sha256:eb30684c42a77bbecdef2b9c763c4372b0ddc9cc5bd8b2a2055f2042eee67217", size = 7045977, upload-time = "2026-03-01T11:42:48.605Z" }, + { url = "https://files.pythonhosted.org/packages/78/74/6568c8d3aabf9982ab89fe3e378afbd7aad4894bde4570991a3246169ef4/tables-3.11.1-cp311-abi3-macosx_11_0_arm64.whl", hash = "sha256:f0367d2e3df0f10ea63ccf4279f3fe58e32ec481767320301a483e2b3cd83efc", size = 6264947, upload-time = "2026-03-01T11:42:53.192Z" }, + { url = "https://files.pythonhosted.org/packages/cc/a3/ec228901fca4c996306b17f5c60a4105144df0bbd07b3a4a816f91f37b4a/tables-3.11.1-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:56bf6fb9132ead989b7e76695d7613d6d08f071a8019038d6565ba90c66b9f3e", size = 6903733, upload-time = "2026-03-01T11:42:58.349Z" }, + { url = "https://files.pythonhosted.org/packages/99/29/c2dc674ea70fa9a4819417289a9c0d3e4780835beeed573eb66964cfb763/tables-3.11.1-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1e78fe190fdeb4afe430b79651bae2a4f341904eb85aa8dbafe5f1caee1c7f67", size = 7241357, upload-time = "2026-03-01T11:43:03.938Z" }, + { url = "https://files.pythonhosted.org/packages/60/b5/a59b62af4127790c618eb11c06c106706e07509a3fb9e346b2a3ffa74419/tables-3.11.1-cp311-abi3-win_amd64.whl", hash = "sha256:7fa6cb03f6fe55ae4f85e89ec5450e5c40cc4c52d8c3b60eb157a445c2219e89", size = 6526565, upload-time = "2026-03-01T11:43:08.58Z" }, + { url = "https://files.pythonhosted.org/packages/1e/ce/561c82496e7c8c15ebf19b53b12c0ef91b322a66869db762db9711102764/tables-3.11.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:a4bbd95036a4d0cc5c86c1f87fbb490b4c53cd70982f1c01b3ed6dcb3085cbb9", size = 7111409, upload-time = "2026-03-01T11:43:13.424Z" }, + { url = "https://files.pythonhosted.org/packages/84/18/bac920aee8239b572c506459607c6dd8742bc6275a43d51d2dd6ae1a1541/tables-3.11.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:e3cfe79484351f7216eb8f3767bfa1217bfd271b04428f79cfa7ef6d7491919d", size = 6380142, upload-time = "2026-03-01T11:43:17.213Z" }, + { url = "https://files.pythonhosted.org/packages/59/3c/f4a694aa744d2b14d536e172c28dd70c84445f4787083a82d6d44a39e39f/tables-3.11.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a9c35f87fcb6a48c79fbc4e3ab15ca8f6053c4ce13063d6ca2ec36cbb58f40f", size = 7014135, upload-time = "2026-03-01T11:43:22.359Z" }, + { url = "https://files.pythonhosted.org/packages/45/82/94d4320d6c0fe5bd55230eec90cd142d58cda37b7cce00a318ac2a6abd93/tables-3.11.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4cf3218b76ba78d156d6ee75c19fb757d50682f6c7b4905370441afbfc9d77f3", size = 7349293, upload-time = "2026-03-01T11:43:27.569Z" }, + { url = "https://files.pythonhosted.org/packages/f7/02/a0f61a602ce2f2be8cc2e6146cc51acdaa8a1bb9b823b3863e70d3e0505d/tables-3.11.1-cp314-cp314t-win_amd64.whl", hash = "sha256:a6f7a3b82dbf0ae0f30de635ca88bb42dd87938b0950369d0ee4289c52ae6de2", size = 6854713, upload-time = "2026-03-01T11:43:31.934Z" }, +] + [[package]] name = "tblib" version = "3.2.2" @@ -3081,55 +2943,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb", size = 18638, upload-time = "2025-03-13T13:49:21.846Z" }, ] -[[package]] -name = "tomli" -version = "2.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/52/ed/3f73f72945444548f33eba9a87fc7a6e969915e7b1acc8260b30e1f76a2f/tomli-2.3.0.tar.gz", hash = "sha256:64be704a875d2a59753d80ee8a533c3fe183e3f06807ff7dc2232938ccb01549", size = 17392, upload-time = "2025-10-08T22:01:47.119Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/2e/299f62b401438d5fe1624119c723f5d877acc86a4c2492da405626665f12/tomli-2.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:88bd15eb972f3664f5ed4b57c1634a97153b4bac4479dcb6a495f41921eb7f45", size = 153236, upload-time = "2025-10-08T22:01:00.137Z" }, - { url = "https://files.pythonhosted.org/packages/86/7f/d8fffe6a7aefdb61bced88fcb5e280cfd71e08939da5894161bd71bea022/tomli-2.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:883b1c0d6398a6a9d29b508c331fa56adbcdff647f6ace4dfca0f50e90dfd0ba", size = 148084, upload-time = "2025-10-08T22:01:01.63Z" }, - { url = "https://files.pythonhosted.org/packages/47/5c/24935fb6a2ee63e86d80e4d3b58b222dafaf438c416752c8b58537c8b89a/tomli-2.3.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d1381caf13ab9f300e30dd8feadb3de072aeb86f1d34a8569453ff32a7dea4bf", size = 234832, upload-time = "2025-10-08T22:01:02.543Z" }, - { url = "https://files.pythonhosted.org/packages/89/da/75dfd804fc11e6612846758a23f13271b76d577e299592b4371a4ca4cd09/tomli-2.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a0e285d2649b78c0d9027570d4da3425bdb49830a6156121360b3f8511ea3441", size = 242052, upload-time = "2025-10-08T22:01:03.836Z" }, - { url = "https://files.pythonhosted.org/packages/70/8c/f48ac899f7b3ca7eb13af73bacbc93aec37f9c954df3c08ad96991c8c373/tomli-2.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0a154a9ae14bfcf5d8917a59b51ffd5a3ac1fd149b71b47a3a104ca4edcfa845", size = 239555, upload-time = "2025-10-08T22:01:04.834Z" }, - { url = "https://files.pythonhosted.org/packages/ba/28/72f8afd73f1d0e7829bfc093f4cb98ce0a40ffc0cc997009ee1ed94ba705/tomli-2.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:74bf8464ff93e413514fefd2be591c3b0b23231a77f901db1eb30d6f712fc42c", size = 245128, upload-time = "2025-10-08T22:01:05.84Z" }, - { url = "https://files.pythonhosted.org/packages/b6/eb/a7679c8ac85208706d27436e8d421dfa39d4c914dcf5fa8083a9305f58d9/tomli-2.3.0-cp311-cp311-win32.whl", hash = "sha256:00b5f5d95bbfc7d12f91ad8c593a1659b6387b43f054104cda404be6bda62456", size = 96445, upload-time = "2025-10-08T22:01:06.896Z" }, - { url = "https://files.pythonhosted.org/packages/0a/fe/3d3420c4cb1ad9cb462fb52967080575f15898da97e21cb6f1361d505383/tomli-2.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:4dc4ce8483a5d429ab602f111a93a6ab1ed425eae3122032db7e9acf449451be", size = 107165, upload-time = "2025-10-08T22:01:08.107Z" }, - { url = "https://files.pythonhosted.org/packages/ff/b7/40f36368fcabc518bb11c8f06379a0fd631985046c038aca08c6d6a43c6e/tomli-2.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d7d86942e56ded512a594786a5ba0a5e521d02529b3826e7761a05138341a2ac", size = 154891, upload-time = "2025-10-08T22:01:09.082Z" }, - { url = "https://files.pythonhosted.org/packages/f9/3f/d9dd692199e3b3aab2e4e4dd948abd0f790d9ded8cd10cbaae276a898434/tomli-2.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:73ee0b47d4dad1c5e996e3cd33b8a76a50167ae5f96a2607cbe8cc773506ab22", size = 148796, upload-time = "2025-10-08T22:01:10.266Z" }, - { url = "https://files.pythonhosted.org/packages/60/83/59bff4996c2cf9f9387a0f5a3394629c7efa5ef16142076a23a90f1955fa/tomli-2.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:792262b94d5d0a466afb5bc63c7daa9d75520110971ee269152083270998316f", size = 242121, upload-time = "2025-10-08T22:01:11.332Z" }, - { url = "https://files.pythonhosted.org/packages/45/e5/7c5119ff39de8693d6baab6c0b6dcb556d192c165596e9fc231ea1052041/tomli-2.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f195fe57ecceac95a66a75ac24d9d5fbc98ef0962e09b2eddec5d39375aae52", size = 250070, upload-time = "2025-10-08T22:01:12.498Z" }, - { url = "https://files.pythonhosted.org/packages/45/12/ad5126d3a278f27e6701abde51d342aa78d06e27ce2bb596a01f7709a5a2/tomli-2.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e31d432427dcbf4d86958c184b9bfd1e96b5b71f8eb17e6d02531f434fd335b8", size = 245859, upload-time = "2025-10-08T22:01:13.551Z" }, - { url = "https://files.pythonhosted.org/packages/fb/a1/4d6865da6a71c603cfe6ad0e6556c73c76548557a8d658f9e3b142df245f/tomli-2.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7b0882799624980785240ab732537fcfc372601015c00f7fc367c55308c186f6", size = 250296, upload-time = "2025-10-08T22:01:14.614Z" }, - { url = "https://files.pythonhosted.org/packages/a0/b7/a7a7042715d55c9ba6e8b196d65d2cb662578b4d8cd17d882d45322b0d78/tomli-2.3.0-cp312-cp312-win32.whl", hash = "sha256:ff72b71b5d10d22ecb084d345fc26f42b5143c5533db5e2eaba7d2d335358876", size = 97124, upload-time = "2025-10-08T22:01:15.629Z" }, - { url = "https://files.pythonhosted.org/packages/06/1e/f22f100db15a68b520664eb3328fb0ae4e90530887928558112c8d1f4515/tomli-2.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:1cb4ed918939151a03f33d4242ccd0aa5f11b3547d0cf30f7c74a408a5b99878", size = 107698, upload-time = "2025-10-08T22:01:16.51Z" }, - { url = "https://files.pythonhosted.org/packages/89/48/06ee6eabe4fdd9ecd48bf488f4ac783844fd777f547b8d1b61c11939974e/tomli-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5192f562738228945d7b13d4930baffda67b69425a7f0da96d360b0a3888136b", size = 154819, upload-time = "2025-10-08T22:01:17.964Z" }, - { url = "https://files.pythonhosted.org/packages/f1/01/88793757d54d8937015c75dcdfb673c65471945f6be98e6a0410fba167ed/tomli-2.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:be71c93a63d738597996be9528f4abe628d1adf5e6eb11607bc8fe1a510b5dae", size = 148766, upload-time = "2025-10-08T22:01:18.959Z" }, - { url = "https://files.pythonhosted.org/packages/42/17/5e2c956f0144b812e7e107f94f1cc54af734eb17b5191c0bbfb72de5e93e/tomli-2.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c4665508bcbac83a31ff8ab08f424b665200c0e1e645d2bd9ab3d3e557b6185b", size = 240771, upload-time = "2025-10-08T22:01:20.106Z" }, - { url = "https://files.pythonhosted.org/packages/d5/f4/0fbd014909748706c01d16824eadb0307115f9562a15cbb012cd9b3512c5/tomli-2.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4021923f97266babc6ccab9f5068642a0095faa0a51a246a6a02fccbb3514eaf", size = 248586, upload-time = "2025-10-08T22:01:21.164Z" }, - { url = "https://files.pythonhosted.org/packages/30/77/fed85e114bde5e81ecf9bc5da0cc69f2914b38f4708c80ae67d0c10180c5/tomli-2.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4ea38c40145a357d513bffad0ed869f13c1773716cf71ccaa83b0fa0cc4e42f", size = 244792, upload-time = "2025-10-08T22:01:22.417Z" }, - { url = "https://files.pythonhosted.org/packages/55/92/afed3d497f7c186dc71e6ee6d4fcb0acfa5f7d0a1a2878f8beae379ae0cc/tomli-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ad805ea85eda330dbad64c7ea7a4556259665bdf9d2672f5dccc740eb9d3ca05", size = 248909, upload-time = "2025-10-08T22:01:23.859Z" }, - { url = "https://files.pythonhosted.org/packages/f8/84/ef50c51b5a9472e7265ce1ffc7f24cd4023d289e109f669bdb1553f6a7c2/tomli-2.3.0-cp313-cp313-win32.whl", hash = "sha256:97d5eec30149fd3294270e889b4234023f2c69747e555a27bd708828353ab606", size = 96946, upload-time = "2025-10-08T22:01:24.893Z" }, - { url = "https://files.pythonhosted.org/packages/b2/b7/718cd1da0884f281f95ccfa3a6cc572d30053cba64603f79d431d3c9b61b/tomli-2.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0c95ca56fbe89e065c6ead5b593ee64b84a26fca063b5d71a1122bf26e533999", size = 107705, upload-time = "2025-10-08T22:01:26.153Z" }, - { url = "https://files.pythonhosted.org/packages/19/94/aeafa14a52e16163008060506fcb6aa1949d13548d13752171a755c65611/tomli-2.3.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:cebc6fe843e0733ee827a282aca4999b596241195f43b4cc371d64fc6639da9e", size = 154244, upload-time = "2025-10-08T22:01:27.06Z" }, - { url = "https://files.pythonhosted.org/packages/db/e4/1e58409aa78eefa47ccd19779fc6f36787edbe7d4cd330eeeedb33a4515b/tomli-2.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4c2ef0244c75aba9355561272009d934953817c49f47d768070c3c94355c2aa3", size = 148637, upload-time = "2025-10-08T22:01:28.059Z" }, - { url = "https://files.pythonhosted.org/packages/26/b6/d1eccb62f665e44359226811064596dd6a366ea1f985839c566cd61525ae/tomli-2.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c22a8bf253bacc0cf11f35ad9808b6cb75ada2631c2d97c971122583b129afbc", size = 241925, upload-time = "2025-10-08T22:01:29.066Z" }, - { url = "https://files.pythonhosted.org/packages/70/91/7cdab9a03e6d3d2bb11beae108da5bdc1c34bdeb06e21163482544ddcc90/tomli-2.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0eea8cc5c5e9f89c9b90c4896a8deefc74f518db5927d0e0e8d4a80953d774d0", size = 249045, upload-time = "2025-10-08T22:01:31.98Z" }, - { url = "https://files.pythonhosted.org/packages/15/1b/8c26874ed1f6e4f1fcfeb868db8a794cbe9f227299402db58cfcc858766c/tomli-2.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b74a0e59ec5d15127acdabd75ea17726ac4c5178ae51b85bfe39c4f8a278e879", size = 245835, upload-time = "2025-10-08T22:01:32.989Z" }, - { url = "https://files.pythonhosted.org/packages/fd/42/8e3c6a9a4b1a1360c1a2a39f0b972cef2cc9ebd56025168c4137192a9321/tomli-2.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b5870b50c9db823c595983571d1296a6ff3e1b88f734a4c8f6fc6188397de005", size = 253109, upload-time = "2025-10-08T22:01:34.052Z" }, - { url = "https://files.pythonhosted.org/packages/22/0c/b4da635000a71b5f80130937eeac12e686eefb376b8dee113b4a582bba42/tomli-2.3.0-cp314-cp314-win32.whl", hash = "sha256:feb0dacc61170ed7ab602d3d972a58f14ee3ee60494292d384649a3dc38ef463", size = 97930, upload-time = "2025-10-08T22:01:35.082Z" }, - { url = "https://files.pythonhosted.org/packages/b9/74/cb1abc870a418ae99cd5c9547d6bce30701a954e0e721821df483ef7223c/tomli-2.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:b273fcbd7fc64dc3600c098e39136522650c49bca95df2d11cf3b626422392c8", size = 107964, upload-time = "2025-10-08T22:01:36.057Z" }, - { url = "https://files.pythonhosted.org/packages/54/78/5c46fff6432a712af9f792944f4fcd7067d8823157949f4e40c56b8b3c83/tomli-2.3.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:940d56ee0410fa17ee1f12b817b37a4d4e4dc4d27340863cc67236c74f582e77", size = 163065, upload-time = "2025-10-08T22:01:37.27Z" }, - { url = "https://files.pythonhosted.org/packages/39/67/f85d9bd23182f45eca8939cd2bc7050e1f90c41f4a2ecbbd5963a1d1c486/tomli-2.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f85209946d1fe94416debbb88d00eb92ce9cd5266775424ff81bc959e001acaf", size = 159088, upload-time = "2025-10-08T22:01:38.235Z" }, - { url = "https://files.pythonhosted.org/packages/26/5a/4b546a0405b9cc0659b399f12b6adb750757baf04250b148d3c5059fc4eb/tomli-2.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a56212bdcce682e56b0aaf79e869ba5d15a6163f88d5451cbde388d48b13f530", size = 268193, upload-time = "2025-10-08T22:01:39.712Z" }, - { url = "https://files.pythonhosted.org/packages/42/4f/2c12a72ae22cf7b59a7fe75b3465b7aba40ea9145d026ba41cb382075b0e/tomli-2.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c5f3ffd1e098dfc032d4d3af5c0ac64f6d286d98bc148698356847b80fa4de1b", size = 275488, upload-time = "2025-10-08T22:01:40.773Z" }, - { url = "https://files.pythonhosted.org/packages/92/04/a038d65dbe160c3aa5a624e93ad98111090f6804027d474ba9c37c8ae186/tomli-2.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5e01decd096b1530d97d5d85cb4dff4af2d8347bd35686654a004f8dea20fc67", size = 272669, upload-time = "2025-10-08T22:01:41.824Z" }, - { url = "https://files.pythonhosted.org/packages/be/2f/8b7c60a9d1612a7cbc39ffcca4f21a73bf368a80fc25bccf8253e2563267/tomli-2.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:8a35dd0e643bb2610f156cca8db95d213a90015c11fee76c946aa62b7ae7e02f", size = 279709, upload-time = "2025-10-08T22:01:43.177Z" }, - { url = "https://files.pythonhosted.org/packages/7e/46/cc36c679f09f27ded940281c38607716c86cf8ba4a518d524e349c8b4874/tomli-2.3.0-cp314-cp314t-win32.whl", hash = "sha256:a1f7f282fe248311650081faafa5f4732bdbfef5d45fe3f2e702fbc6f2d496e0", size = 107563, upload-time = "2025-10-08T22:01:44.233Z" }, - { url = "https://files.pythonhosted.org/packages/84/ff/426ca8683cf7b753614480484f6437f568fd2fda2edbdf57a2d3d8b27a0b/tomli-2.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:70a251f8d4ba2d9ac2542eecf008b3c8a9fc5c3f9f02c56a9d7952612be2fdba", size = 119756, upload-time = "2025-10-08T22:01:45.234Z" }, - { url = "https://files.pythonhosted.org/packages/77/b8/0135fadc89e73be292b473cb820b4f5a08197779206b33191e801feeae40/tomli-2.3.0-py3-none-any.whl", hash = "sha256:e95b1af3c5b07d9e643909b5abbec77cd9f1217e6d0bca72b0234736b9fb1f1b", size = 14408, upload-time = "2025-10-08T22:01:46.04Z" }, -] - [[package]] name = "toolz" version = "1.1.0" @@ -3163,16 +2976,12 @@ dependencies = [ { name = "nvidia-nvjitlink-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, { name = "nvidia-nvshmem-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, { name = "nvidia-nvtx-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "setuptools", marker = "python_full_version >= '3.12'" }, + { name = "setuptools" }, { name = "sympy" }, { name = "triton", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, { name = "typing-extensions" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/15/db/c064112ac0089af3d2f7a2b5bfbabf4aa407a78b74f87889e524b91c5402/torch-2.9.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:62b3fd888277946918cba4478cf849303da5359f0fb4e3bfb86b0533ba2eaf8d", size = 104220430, upload-time = "2025-11-12T15:20:31.705Z" }, - { url = "https://files.pythonhosted.org/packages/56/be/76eaa36c9cd032d3b01b001e2c5a05943df75f26211f68fae79e62f87734/torch-2.9.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d033ff0ac3f5400df862a51bdde9bad83561f3739ea0046e68f5401ebfa67c1b", size = 899821446, upload-time = "2025-11-12T15:20:15.544Z" }, - { url = "https://files.pythonhosted.org/packages/47/cc/7a2949e38dfe3244c4df21f0e1c27bce8aedd6c604a587dd44fc21017cb4/torch-2.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:0d06b30a9207b7c3516a9e0102114024755a07045f0c1d2f2a56b1819ac06bcb", size = 110973074, upload-time = "2025-11-12T15:21:39.958Z" }, - { url = "https://files.pythonhosted.org/packages/1e/ce/7d251155a783fb2c1bb6837b2b7023c622a2070a0a72726ca1df47e7ea34/torch-2.9.1-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:52347912d868653e1528b47cafaf79b285b98be3f4f35d5955389b1b95224475", size = 74463887, upload-time = "2025-11-12T15:20:36.611Z" }, { url = "https://files.pythonhosted.org/packages/0f/27/07c645c7673e73e53ded71705045d6cb5bae94c4b021b03aa8d03eee90ab/torch-2.9.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:da5f6f4d7f4940a173e5572791af238cb0b9e21b1aab592bd8b26da4c99f1cd6", size = 104126592, upload-time = "2025-11-12T15:20:41.62Z" }, { url = "https://files.pythonhosted.org/packages/19/17/e377a460603132b00760511299fceba4102bd95db1a0ee788da21298ccff/torch-2.9.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:27331cd902fb4322252657f3902adf1c4f6acad9dcad81d8df3ae14c7c4f07c4", size = 899742281, upload-time = "2025-11-12T15:22:17.602Z" }, { url = "https://files.pythonhosted.org/packages/b1/1a/64f5769025db846a82567fa5b7d21dba4558a7234ee631712ee4771c436c/torch-2.9.1-cp312-cp312-win_amd64.whl", hash = "sha256:81a285002d7b8cfd3fdf1b98aa8df138d41f1a8334fd9ea37511517cedf43083", size = 110940568, upload-time = "2025-11-12T15:21:18.689Z" }, @@ -3195,6 +3004,23 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/db/2b/f7818f6ec88758dfd21da46b6cd46af9d1b3433e53ddbb19ad1e0da17f9b/torch-2.9.1-cp314-cp314t-win_amd64.whl", hash = "sha256:c88d3299ddeb2b35dcc31753305612db485ab6f1823e37fb29451c8b2732b87e", size = 111163659, upload-time = "2025-11-12T15:23:20.009Z" }, ] +[[package]] +name = "torch-sim-atomistic" +version = "0.5.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "h5py" }, + { name = "numpy" }, + { name = "nvalchemi-toolkit-ops" }, + { name = "tables" }, + { name = "torch" }, + { name = "tqdm" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/33/f2/55fe36788afa2def89ec08b56729d69cbb386eac966212468668eaa9bca8/torch_sim_atomistic-0.5.2.tar.gz", hash = "sha256:631577b0e73add513ebe9e4fa204f80f8c2f83570c2d1a285404082004941d7b", size = 206878, upload-time = "2026-02-18T22:49:54.999Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8f/dc/d2db78bfc41c055a74dbe8f857aa7a04f2d13a7fc672198f20f020f80316/torch_sim_atomistic-0.5.2-py3-none-any.whl", hash = "sha256:6f484fe061ef99d9bd74531f225cfb7e96695bc9fb11ee108a38a3c169e799fd", size = 243646, upload-time = "2026-02-18T22:49:53.267Z" }, +] + [[package]] name = "tornado" version = "6.5.3" @@ -3231,7 +3057,6 @@ name = "triton" version = "3.5.1" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b0/72/ec90c3519eaf168f22cb1757ad412f3a2add4782ad3a92861c9ad135d886/triton-3.5.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:61413522a48add32302353fdbaaf92daaaab06f6b5e3229940d21b5207f47579", size = 170425802, upload-time = "2025-11-11T17:40:53.209Z" }, { url = "https://files.pythonhosted.org/packages/f2/50/9a8358d3ef58162c0a415d173cfb45b67de60176e1024f71fbc4d24c0b6d/triton-3.5.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d2c6b915a03888ab931a9fd3e55ba36785e1fe70cbea0b40c6ef93b20fc85232", size = 170470207, upload-time = "2025-11-11T17:41:00.253Z" }, { url = "https://files.pythonhosted.org/packages/27/46/8c3bbb5b0a19313f50edcaa363b599e5a1a5ac9683ead82b9b80fe497c8d/triton-3.5.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3f4346b6ebbd4fad18773f5ba839114f4826037c9f2f34e0148894cd5dd3dba", size = 170470410, upload-time = "2025-11-11T17:41:06.319Z" }, { url = "https://files.pythonhosted.org/packages/37/92/e97fcc6b2c27cdb87ce5ee063d77f8f26f19f06916aa680464c8104ef0f6/triton-3.5.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0b4d2c70127fca6a23e247f9348b8adde979d2e7a20391bfbabaac6aebc7e6a8", size = 170579924, upload-time = "2025-11-11T17:41:12.455Z" }, @@ -3341,9 +3166,6 @@ version = "6.0.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282", size = 131220, upload-time = "2024-11-01T14:07:13.037Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e0/24/d9be5cd6642a6aa68352ded4b4b10fb0d7889cb7f45814fb92cecd35f101/watchdog-6.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6eb11feb5a0d452ee41f824e271ca311a09e250441c262ca2fd7ebcf2461a06c", size = 96393, upload-time = "2024-11-01T14:06:31.756Z" }, - { url = "https://files.pythonhosted.org/packages/63/7a/6013b0d8dbc56adca7fdd4f0beed381c59f6752341b12fa0886fa7afc78b/watchdog-6.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ef810fbf7b781a5a593894e4f439773830bdecb885e6880d957d5b9382a960d2", size = 88392, upload-time = "2024-11-01T14:06:32.99Z" }, - { url = "https://files.pythonhosted.org/packages/d1/40/b75381494851556de56281e053700e46bff5b37bf4c7267e858640af5a7f/watchdog-6.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afd0fe1b2270917c5e23c2a65ce50c2a4abb63daafb0d419fde368e272a76b7c", size = 89019, upload-time = "2024-11-01T14:06:34.963Z" }, { url = "https://files.pythonhosted.org/packages/39/ea/3930d07dafc9e286ed356a679aa02d777c06e9bfd1164fa7c19c288a5483/watchdog-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948", size = 96471, upload-time = "2024-11-01T14:06:37.745Z" }, { url = "https://files.pythonhosted.org/packages/12/87/48361531f70b1f87928b045df868a9fd4e253d9ae087fa4cf3f7113be363/watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860", size = 88449, upload-time = "2024-11-01T14:06:39.748Z" }, { url = "https://files.pythonhosted.org/packages/5b/7e/8f322f5e600812e6f9a31b75d242631068ca8f4ef0582dd3ae6e72daecc8/watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0", size = 89054, upload-time = "2024-11-01T14:06:41.009Z" }, @@ -3368,18 +3190,6 @@ version = "2.0.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/49/2a/6de8a50cb435b7f42c46126cf1a54b2aab81784e74c8595c8e025e8f36d3/wrapt-2.0.1.tar.gz", hash = "sha256:9c9c635e78497cacb81e84f8b11b23e0aacac7a136e73b8e5b2109a1d9fc468f", size = 82040, upload-time = "2025-11-07T00:45:33.312Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/98/60/553997acf3939079dab022e37b67b1904b5b0cc235503226898ba573b10c/wrapt-2.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0e17283f533a0d24d6e5429a7d11f250a58d28b4ae5186f8f47853e3e70d2590", size = 77480, upload-time = "2025-11-07T00:43:30.573Z" }, - { url = "https://files.pythonhosted.org/packages/2d/50/e5b3d30895d77c52105c6d5cbf94d5b38e2a3dd4a53d22d246670da98f7c/wrapt-2.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:85df8d92158cb8f3965aecc27cf821461bb5f40b450b03facc5d9f0d4d6ddec6", size = 60690, upload-time = "2025-11-07T00:43:31.594Z" }, - { url = "https://files.pythonhosted.org/packages/f0/40/660b2898703e5cbbb43db10cdefcc294274458c3ca4c68637c2b99371507/wrapt-2.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c1be685ac7700c966b8610ccc63c3187a72e33cab53526a27b2a285a662cd4f7", size = 61578, upload-time = "2025-11-07T00:43:32.918Z" }, - { url = "https://files.pythonhosted.org/packages/5b/36/825b44c8a10556957bc0c1d84c7b29a40e05fcf1873b6c40aa9dbe0bd972/wrapt-2.0.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:df0b6d3b95932809c5b3fecc18fda0f1e07452d05e2662a0b35548985f256e28", size = 114115, upload-time = "2025-11-07T00:43:35.605Z" }, - { url = "https://files.pythonhosted.org/packages/83/73/0a5d14bb1599677304d3c613a55457d34c344e9b60eda8a737c2ead7619e/wrapt-2.0.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4da7384b0e5d4cae05c97cd6f94faaf78cc8b0f791fc63af43436d98c4ab37bb", size = 116157, upload-time = "2025-11-07T00:43:37.058Z" }, - { url = "https://files.pythonhosted.org/packages/01/22/1c158fe763dbf0a119f985d945711d288994fe5514c0646ebe0eb18b016d/wrapt-2.0.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ec65a78fbd9d6f083a15d7613b2800d5663dbb6bb96003899c834beaa68b242c", size = 112535, upload-time = "2025-11-07T00:43:34.138Z" }, - { url = "https://files.pythonhosted.org/packages/5c/28/4f16861af67d6de4eae9927799b559c20ebdd4fe432e89ea7fe6fcd9d709/wrapt-2.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7de3cc939be0e1174969f943f3b44e0d79b6f9a82198133a5b7fc6cc92882f16", size = 115404, upload-time = "2025-11-07T00:43:39.214Z" }, - { url = "https://files.pythonhosted.org/packages/a0/8b/7960122e625fad908f189b59c4aae2d50916eb4098b0fb2819c5a177414f/wrapt-2.0.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:fb1a5b72cbd751813adc02ef01ada0b0d05d3dcbc32976ce189a1279d80ad4a2", size = 111802, upload-time = "2025-11-07T00:43:40.476Z" }, - { url = "https://files.pythonhosted.org/packages/3e/73/7881eee5ac31132a713ab19a22c9e5f1f7365c8b1df50abba5d45b781312/wrapt-2.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3fa272ca34332581e00bf7773e993d4f632594eb2d1b0b162a9038df0fd971dd", size = 113837, upload-time = "2025-11-07T00:43:42.921Z" }, - { url = "https://files.pythonhosted.org/packages/45/00/9499a3d14e636d1f7089339f96c4409bbc7544d0889f12264efa25502ae8/wrapt-2.0.1-cp311-cp311-win32.whl", hash = "sha256:fc007fdf480c77301ab1afdbb6ab22a5deee8885f3b1ed7afcb7e5e84a0e27be", size = 58028, upload-time = "2025-11-07T00:43:47.369Z" }, - { url = "https://files.pythonhosted.org/packages/70/5d/8f3d7eea52f22638748f74b102e38fdf88cb57d08ddeb7827c476a20b01b/wrapt-2.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:47434236c396d04875180171ee1f3815ca1eada05e24a1ee99546320d54d1d1b", size = 60385, upload-time = "2025-11-07T00:43:44.34Z" }, - { url = "https://files.pythonhosted.org/packages/14/e2/32195e57a8209003587bbbad44d5922f13e0ced2a493bb46ca882c5b123d/wrapt-2.0.1-cp311-cp311-win_arm64.whl", hash = "sha256:837e31620e06b16030b1d126ed78e9383815cbac914693f54926d816d35d8edf", size = 58893, upload-time = "2025-11-07T00:43:46.161Z" }, { url = "https://files.pythonhosted.org/packages/cb/73/8cb252858dc8254baa0ce58ce382858e3a1cf616acebc497cb13374c95c6/wrapt-2.0.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1fdbb34da15450f2b1d735a0e969c24bdb8d8924892380126e2a293d9902078c", size = 78129, upload-time = "2025-11-07T00:43:48.852Z" }, { url = "https://files.pythonhosted.org/packages/19/42/44a0db2108526ee6e17a5ab72478061158f34b08b793df251d9fbb9a7eb4/wrapt-2.0.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3d32794fe940b7000f0519904e247f902f0149edbe6316c710a8562fb6738841", size = 61205, upload-time = "2025-11-07T00:43:50.402Z" }, { url = "https://files.pythonhosted.org/packages/4d/8a/5b4b1e44b791c22046e90d9b175f9a7581a8cc7a0debbb930f81e6ae8e25/wrapt-2.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:386fb54d9cd903ee0012c09291336469eb7b244f7183d40dc3e86a16a4bace62", size = 61692, upload-time = "2025-11-07T00:43:51.678Z" }, @@ -3451,12 +3261,3 @@ sdist = { url = "https://files.pythonhosted.org/packages/d1/ac/3c494dd7ec5122cff wheels = [ { url = "https://files.pythonhosted.org/packages/80/ab/11a76c1e2126084fde2639514f24e6111b789b0bfa4fc6264a8975c7e1f1/zict-3.0.0-py2.py3-none-any.whl", hash = "sha256:5796e36bd0e0cc8cf0fbc1ace6a68912611c1dbd74750a3f3026b9b9d6a327ae", size = 43332, upload-time = "2023-04-17T21:41:13.444Z" }, ] - -[[package]] -name = "zipp" -version = "3.23.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e3/02/0f2892c661036d50ede074e376733dca2ae7c6eb617489437771209d4180/zipp-3.23.0.tar.gz", hash = "sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166", size = 25547, upload-time = "2025-06-08T17:06:39.4Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl", hash = "sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e", size = 10276, upload-time = "2025-06-08T17:06:38.034Z" }, -] From 5c5f096cc77e77c0b991990a7bbe20c13f381f40 Mon Sep 17 00:00:00 2001 From: Carson Farmer Date: Thu, 19 Mar 2026 12:17:39 -0400 Subject: [PATCH 2/4] Change pytest parallel execution to auto --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 63dc680..e2e72dd 100644 --- a/Makefile +++ b/Makefile @@ -15,7 +15,7 @@ check: ## Run code quality tools. .PHONY: test test: ## Test the code with pytest (parallel execution) @echo "🚀 Testing code: Running pytest" - @uv run pytest -n 2 --cov --cov-config=pyproject.toml --cov-report=xml + @uv run pytest -n auto --cov --cov-config=pyproject.toml --cov-report=xml .PHONY: typecheck typecheck: ## Run mypy type checking (not in CI) From 4768b4a8a175a3f7434ed2195bb8fe05f9b95b0b Mon Sep 17 00:00:00 2001 From: Carson Farmer <59753859+cfarm6@users.noreply.github.com> Date: Thu, 19 Mar 2026 12:19:48 -0400 Subject: [PATCH 3/4] Remove outputs from running examples --- examples/1119028.h5 | Bin 5200 -> 0 bytes examples/1119028.trj | Bin 29777 -> 0 bytes examples/2019828.h5 | Bin 79899 -> 0 bytes examples/2019828.trj | Bin 28640 -> 0 bytes 4 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 examples/1119028.h5 delete mode 100644 examples/1119028.trj delete mode 100644 examples/2019828.h5 delete mode 100644 examples/2019828.trj diff --git a/examples/1119028.h5 b/examples/1119028.h5 deleted file mode 100644 index 3f2b5f66bb5b6349947b96703145bb6ffd399a9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5200 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̖d8T$FljEFDHe+bpt(N%Uj`Rdti&CIN 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%0DO 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 Date: Thu, 19 Mar 2026 13:17:33 -0400 Subject: [PATCH 4/4] reverted changes to CONTRIBUTING.md --- CONTRIBUTING.md | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c1ff73d..a7b4919 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -8,7 +8,7 @@ You can contribute in many ways: ## Report Bugs -Report bugs at [https://github.com/isayevlab/aimnetcentral/issues](https://github.com/isayevlab/aimnetcentral/issues) +Report bugs at https://github.com/isayevlab/aimnetcentral/issues If you are reporting a bug, please include: @@ -30,7 +30,7 @@ AIMNet2 could always use more documentation, whether as part of the official doc ## Submit Feedback -The best way to send feedback is to file an issue at [https://github.com/isayevlab/aimnetcentral/issues](https://github.com/isayevlab/aimnetcentral/issues). +The best way to send feedback is to file an issue at https://github.com/isayevlab/aimnetcentral/issues. If you are proposing a new feature: @@ -43,6 +43,7 @@ If you are proposing a new feature: Ready to contribute? Here's how to set up `aimnetcentral` for local development. Please note this documentation assumes you already have `uv` and `Git` installed and ready to go. 1. Fork the `aimnetcentral` repo on GitHub. + 2. Clone your fork locally: ```bash @@ -50,10 +51,10 @@ cd git clone git@github.com:YOUR_NAME/aimnetcentral.git ``` -1. Now we need to install the environment. Navigate into the directory +3. Now we need to install the environment. Navigate into the directory ```bash -cd aimnetcentral2 +cd aimnetcentral ``` Then, install the development environment with: @@ -63,7 +64,7 @@ make install source .venv/bin/activate ``` -1. Pre-commit (required) +4. Pre-commit (required) We require `pre-commit` for all contributions. Install hooks once: @@ -71,7 +72,7 @@ We require `pre-commit` for all contributions. Install hooks once: uv run pre-commit install ``` -1. Create a branch for local development: +5. Create a branch for local development: ```bash git checkout -b name-of-your-bugfix-or-feature @@ -79,8 +80,9 @@ git checkout -b name-of-your-bugfix-or-feature Now you can make your changes locally. -1. Don't forget to add test cases for your added functionality to the `tests` directory. -2. When you're done making changes, check that your changes pass the formatting tests. +6. Don't forget to add test cases for your added functionality to the `tests` directory. + +7. When you're done making changes, check that your changes pass the formatting tests. ```bash make check @@ -92,14 +94,14 @@ Now, validate that all unit tests are passing: make test ``` -1. CI notes +9. CI notes CI runs tests in separate jobs: - Core tests on a minimal install - Optional extras tests (`ase`, `pysis`, `train`) in dedicated jobs -1. Commit your changes and push your branch to GitHub: +10. Commit your changes and push your branch to GitHub: ```bash git add . @@ -107,11 +109,12 @@ git commit -m "Your detailed description of your changes." git push origin name-of-your-bugfix-or-feature ``` -1. Submit a pull request through the GitHub website. +11. Submit a pull request through the GitHub website. # Pull Request Guidelines Before you submit a pull request, check that it meets these guidelines: 1. The pull request should include tests. + 2. If the pull request adds functionality, the docs should be updated. Put your new functionality into a function with a docstring, and add the feature to the list in `README.md`.