diff --git a/README.md b/README.md index 7d455d0..5d2b4fd 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,11 @@ # AlphaFold 3 -This package provides an implementation of the inference pipeline of AlphaFold - -1. See below for how to access the model parameters. You may only use AlphaFold - 3 model parameters if received directly from Google. Use is subject to these - [terms of use](https://github.com/google-deepmind/alphafold3/blob/main/WEIGHTS_TERMS_OF_USE.md). +This package provides an implementation of the inference pipeline of +AlphaFold 3. See below for how to access the model parameters. You may only use +AlphaFold 3 model parameters if received directly from Google. Use is subject to +these +[terms of use](https://github.com/google-deepmind/alphafold3/blob/main/WEIGHTS_TERMS_OF_USE.md). Any publication that discloses findings arising from using this source code, the model parameters or outputs produced by those should [cite](#citing-this-work) @@ -26,12 +26,9 @@ If you have any questions, please contact the AlphaFold team at ## Obtaining Model Parameters -This repository contains all necessary code for AlphaFold 3 inference. To -request access to the AlphaFold 3 model parameters, please complete -[this form](https://forms.gle/svvpY4u2jsHEwWYS6). Access will be granted at -Google DeepMind’s sole discretion. We will aim to respond to requests within 2–3 -business days. You may only use AlphaFold 3 model parameters if received -directly from Google. Use is subject to these +This repository contains all necessary code for AlphaFold 3 inference. You can +download the AlphaFold 3 model parameters from +https://storage.googleapis.com/alphafold3/af3.bin.zst. Use is subject to these [terms of use](https://github.com/google-deepmind/alphafold3/blob/main/WEIGHTS_TERMS_OF_USE.md). ## Installation and Running Your First Prediction diff --git a/docker/Dockerfile b/docker/Dockerfile index bbeba22..abb1815 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -77,8 +77,9 @@ WORKDIR /app/alphafold # --no-editable: install as a static package. # If using this as a recipe for local installation, we recommend removing the # --frozen and --no-editable flags. -RUN --mount=type=cache,target=/root/.cache/uv \ - UV_LINK_MODE=copy uv sync --frozen --all-groups --no-editable +ARG UV_EXTRAS="" +RUN --mount=type=cache,target=/root/.cache/uv \ + UV_LINK_MODE=copy uv sync --frozen --all-groups --no-editable $UV_EXTRAS # Build chemical components database (this binary was installed by uv sync). RUN uv run build_data diff --git a/docs/input.md b/docs/input.md index d5fed0d..333d866 100644 --- a/docs/input.md +++ b/docs/input.md @@ -5,9 +5,20 @@ You can provide inputs to `run_alphafold.py` in one of two ways: - Single input file: Use the `--json_path` flag followed by the path to a - single JSON file. + single JSON file. This path can be either a local path or a Google Cloud + Storage path (starting with `gs://`), if enabled. - Multiple input files: Use the `--input_dir` flag followed by the path to a - directory of JSON files. + directory of JSON files. This path can be either a local directory path or a + GCS path, if enabled. +- Within an input file, fields with names ending in `Path` (e.g. + `pairedMsaPath`) can be provided as Google Cloud Storage paths, if enabled. + +### Note: Google Cloud Storage paths + +Google Cloud Storage (`gs://`) paths are supported for certain flags and fields +if the optional `gcsfs` dependency is installed. See the +[installation instructions](installation.md#optional-enable-google-cloud-storage-path-support) +for details and a complete list of supported paths. ## Input Format @@ -29,6 +40,9 @@ The custom AlphaFold 3 format allows: * Specifying covalent bonds between entities. * Specifying multiple random seeds. +Multiple examples of input JSON files are provided in +https://github.com/google-deepmind/alphafold3/tree/main/examples. + ## AlphaFold Server JSON Compatibility The [AlphaFold Server](https://alphafoldserver.com/) uses a separate @@ -743,6 +757,39 @@ as it could cause issues in the mmCIF format. The newly defined ligand can then be used as a standard CCD ligand using its custom name, and bonds can be linked to it using its named atom scheme. +### Using user-provided CCD for polymer modifications + +The user-provided CCD can also be used for specifying non-canonical amino acids +or nucleotides in the protein/RNA/DNA chains, not only custom ligands. + +In this case, the custom component is referenced from the polymer +`modifications` field using its CCD component ID: + +```json +{ + "protein": { + "id": "A", + "sequence": "MDQHQAFKEATELLEKMKTSSDEERVEYLRKAVRLFNLTSEGQQGELVGKFKEAGVLIRAVDLS", + "modifications": [{"ptmType": "MYMOD", "ptmPosition": 30}] + } +} +``` + +In the example above, residue 30 is replaced by the custom component `MYMOD`. + +* `ptmType` must match the component ID defined in the user-provided CCD. +* The user-provided CCD should describe an appropriate peptide-linking polymer + component rather than a free non-polymer ligand. +* The user-provided CCD entry should include the expected backbone atoms and + bond graph for the residue, adjusted for the residue position in the polymer + chain. E.g. atoms and bond graphs for the mid-chain residue and terminal + residue may differ. + +The same principle applies to RNA and DNA chains. This workflow is useful for +modeling non-canonical amino acids or nucleotides in the context of polymer +chains. By contrast, external covalent ligands should generally be modeled as +ligand entities plus `bondedAtomPairs`. + ### Conformer Generation The data pipeline attempts to generate a conformer for ligands using RDKit. The diff --git a/docs/installation.md b/docs/installation.md index 1f91b26..3de310f 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -17,8 +17,8 @@ should aid others with different setups. If you are installing locally outside of a Docker container, please ensure CUDA, cuDNN, and JAX are correctly installed; the [JAX installation documentation](https://jax.readthedocs.io/en/latest/installation.html#nvidia-gpu) -is a useful reference for this case. Please note that the Docker container -requires that the host machine has CUDA 12.6 installed. +is a useful reference for this case. Note that the Docker container requires +that the host machine has CUDA 12.6 installed. The instructions provided below describe how to: @@ -264,17 +264,13 @@ You can use theses two scripts: ## Obtaining Model Parameters -To request access to the AlphaFold 3 model parameters, please complete -[this form](https://forms.gle/svvpY4u2jsHEwWYS6). Access will be granted at -Google DeepMind’s sole discretion. We will aim to respond to requests within 2–3 -business days. You may only use AlphaFold 3 model parameters if received -directly from Google. Use is subject to these +You can download the AlphaFold 3 model parameters from +https://storage.googleapis.com/alphafold3/af3.bin.zst. Use is subject to these [terms of use](https://github.com/google-deepmind/alphafold3/blob/main/WEIGHTS_TERMS_OF_USE.md). -Once access has been granted, download the model parameters to a directory of -your choosing, referred to as `` in the following -instructions. As with the databases, this should *not* be a subdirectory in the -AlphaFold 3 repository directory. +Download the model parameters to a directory of your choosing, referred to as +`` in the following instructions. As with the databases, +this should *not* be a subdirectory in the AlphaFold 3 repository directory. ## Building the Docker Container That Will Run AlphaFold 3 @@ -368,6 +364,33 @@ docker run alphafold3 python run_alphafold.py --help for more information. +:ledger: **Optional: Enable Google cloud storage path support** + +AlphaFold 3 supports reading and writing specific files directly from Google +Cloud Storage (`gs://` paths). Since GCS is an optional feature, the required +`gcsfs` dependency is not installed by default. To enable GCS support when +building the Docker container, pass the `UV_EXTRAS` build argument when running +`docker build`: + +```sh +docker build --build-arg UV_EXTRAS="--extra gcsfs" -t alphafold3 -f docker/Dockerfile . +``` + +The following command-line flags support `gs://` paths: + +- `--input_dir` +- `--json_path` +- `--output_dir` +- `--model_dir` +- `--pdb_database_path` +- In the JSON input file, fields with names ending in `Path` (e.g. + `pairedMsaPath`) can be provided as Google Cloud Storage paths, if enabled. + +:warning: All other database paths (e.g., `--db_dir`, +`--small_bfd_database_path`, etc.) and binary paths (e.g., +`--jackhmmer_binary_path`) do **not** support `gs://` paths and must be local +file paths. + ## Running Using Singularity Instead of Docker You may prefer to run AlphaFold 3 within Singularity. You'll still need to @@ -454,3 +477,68 @@ singularity exec \ --db_dir=/root/public_databases_fallback \ --output_dir=/root/af_output ``` + +## Running AlphaFold 3 without a GPU (CPU-only) + +It is possible to run AlphaFold 3 on a computer without a GPU. Note though that +this is not an officially supported mode (we don't perform rigorous numerical +accuracy testing for this mode). This mode can be useful for utilizing machines +without a GPU if you don't mind the longer folding times (roughly 100x slower +than on a GPU). + +### Direct installation without Docker on Linux or Mac OS + +Since JAX doesn't support running natively on Mac GPU as of 2026, you have to +resort to running AlphaFold 3 in the slow CPU-only mode even though it has a GPU +(`jax-metal` is unfinished as of July 2026). + +1. Download all required databases and AlphaFold 3 weights (see above). +2. Install the [HMMER Suite](http://hmmer.org/). See + http://hmmer.org/documentation.html for installation instructions. +3. Install [uv](https://docs.astral.sh/uv/). See + https://docs.astral.sh/uv/getting-started/installation/ for installation + instructions. +4. Clone the AlphaFold 3 GitHub repository + + ```sh + git clone https://github.com/google-deepmind/alphafold3.git + ``` + +5. Navigate in the `alphafold3` directory and run the following commands to + install AlphaFold 3: + + ```sh + cd alphafold3 + uv venv --python 3.12 + source .venv/bin/activate + uv sync + uv run build_data + ``` + +6. Check the installation by running the AlphaFold 3 data test: + + ```sh + uv run python run_alphafold_data_test.py + ``` + +7. You can now run AlphaFold 3. If you are running on a Linux CPU-only machine, + make sure to set flags `--jax_backend="cpu"` and + `--flash_attention_implementation="xla"`. If you are running on Mac OS with + Apple Silicon, you can set `--jax_backend="mps"` instead and get roughly 3x + better inference performance by using the built-in GPU: + + ```sh + uv run run_alphafold.py \ + --json_path="..." \ + --output_dir="..." \ + --model_dir="..." \ + --jax_backend="cpu" \ + --flash_attention_implementation="xla" + ``` + +#### Running on Mac OS using the Apple Silicon GPU + +As an alternative to CPU-only mode, AlphaFold 3 inference can run on the Apple +Silicon GPU with `--jax_backend="mps"` via the community supported `jax-mps` +Metal plugin. This is an unofficial and experimental path, but it is roughly 3× +faster than CPU (possibly more on newer M chips). diff --git a/docs/known_issues.md b/docs/known_issues.md index 5e745fb..76376f5 100644 --- a/docs/known_issues.md +++ b/docs/known_issues.md @@ -60,3 +60,23 @@ the genetic search. In general, we recommend experimenting with MSA if you are seeing a prediction with low predicted confidence. Typically adding more *relevant* sequences in the MSA will increase AlphaFold prediction accuracy and model confidence scores. + +### Gated Linear Unit Tokamax `NotImplementedError` + +When running AlphaFold 3 in certain configurations (e.g. on Mac OS with the MPS +backend), you might see errors like this: + +``` +NotImplementedError: Not supported on gpu. +Failed to run implementation +Traceback (most recent call last): +File "tokamax/_src/ops/gated_linear_unit/api.py", line 114, in gated_linear_unit + return fn(x, weights, activation=activation, precision=precision) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +File "tokamax/_src/ops/op.py", line 197, in __call__ + raise NotImplementedError(f"Not supported on {device.device_kind}.") +NotImplementedError: Not supported on gpu. +``` + +Tokamax will the chose another implementation and run the prediction +successfully, so these are safe to ignore. diff --git a/docs/output.md b/docs/output.md index 0fa887f..5d9bc4d 100644 --- a/docs/output.md +++ b/docs/output.md @@ -9,6 +9,10 @@ AlphaFold 3 will write its outputs in a directory called `My_first_fold_TEST` append a timestamp to the directory name to avoid overwriting existing data unless `--force_output_dir` is passed. +The output directory can also be a Google Cloud Storage path (`gs://`) if the +`gcsfs` dependency is installed (see the +[installation instructions](installation.md#optional-enable-google-cloud-storage-path-support)). + The following structure is used within the output directory: * Sub-directories with results for each sample and seed. There will be @@ -188,6 +192,8 @@ Summary outputs: Can be used for ranking a specific chain, when you care about where the chain binds to the rest of the complex and you do not know which other chains you expect it to interact with. This is often the case with ligands. +* `chain_ids:` A \[num_chains\] array with chain IDs in the same order as all + of the other chain-level arrays to make the JSON more self-contained. Full array outputs: diff --git a/examples/barnase_barstar.json b/examples/barnase_barstar.json new file mode 100644 index 0000000..f0f61ef --- /dev/null +++ b/examples/barnase_barstar.json @@ -0,0 +1,22 @@ +{ + "name": "barnase_barstar_complex", + "sequences": [ + { + "protein": { + "id": "A", + "sequence": "AQVINTFDGVADYLQTYHKLPDNYITKSEAQALGWVASKGNLADVAPGKSIGGDIFSNREGKLPGKSGRTWREADINYTSGFRNSDRILYSSDWLIYKTTDHYQTFTKIR", + "description": "Barnase (ribonuclease), B. amyloliquefaciens (UniProt P00648, mature chain, 110 aa)" + } + }, + { + "protein": { + "id": "B", + "sequence": "KKAVINGEQIRSISDLHQTLKKELALPEYYGENLDALWDCLTGWVEYPLVLEWRQFEQSKQLTENGAESVLQVFREAKAEGCDITIILS", + "description": "Barstar (barnase inhibitor), B. amyloliquefaciens (UniProt P11540, mature chain, 89 aa)" + } + } + ], + "modelSeeds": [42], + "dialect": "alphafold3", + "version": 4 +} diff --git a/examples/calmodulin_4calcium.json b/examples/calmodulin_4calcium.json new file mode 100644 index 0000000..a8bdf6b --- /dev/null +++ b/examples/calmodulin_4calcium.json @@ -0,0 +1,22 @@ +{ + "name": "calmodulin_4calcium", + "sequences": [ + { + "protein": { + "id": "A", + "sequence": "MADQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMTAK", + "description": "Human calmodulin-1 (UniProt P0DP23, 149 aa)" + } + }, + { + "ligand": { + "id": ["B", "C", "D", "E"], + "ccdCodes": ["CA"], + "description": "Calcium ions (CCD: CA), 4 copies for 4 EF-hand binding sites" + } + } + ], + "modelSeeds": [42], + "dialect": "alphafold3", + "version": 4 +} diff --git a/examples/erk2_phosphorylated.json b/examples/erk2_phosphorylated.json new file mode 100644 index 0000000..ea3ccd9 --- /dev/null +++ b/examples/erk2_phosphorylated.json @@ -0,0 +1,19 @@ +{ + "name": "ERK2_dual_phosphorylated", + "sequences": [ + { + "protein": { + "id": "A", + "sequence": "MAAAAAAGAGPEMVRGQVFDVGPRYTNLSYIGEGAYGMVCSAYDNVNKVRVAIKKISPFEHQTYCQRTLREIKILLRFRHENIIGINDIIRAPTIEQMKDVYIVQDLMETDLYKLLKTQHLSNDHICYFLYQILRGLKYIHSANVLHRDLKPSNLLLNTTCDLKICDFGLARVADPDHDHTGFLTEYVATRWYRAPEIMLNSKGYTKSIDIWSVGCILAEMLSNRPIFPGKHYLDQLNHILGILGSPSQEDLNCIINLKARNYLLSLPHKNKVPWNRLFPNADSKALDLLDKMLTFNPHKRIEVEQALAHPYLEQYYDPSDEPIAEAPFKFDMELDDLPKEKLKELIFEETARFQPGYRS", + "modifications": [ + {"ptmType": "TPO", "ptmPosition": 185}, + {"ptmType": "PTR", "ptmPosition": 187} + ], + "description": "Human ERK2/MAPK1 (UniProt P28482, 360 aa) with activation-loop dual phosphorylation: pThr185 (TPO) + pTyr187 (PTR)" + } + } + ], + "modelSeeds": [42], + "dialect": "alphafold3", + "version": 4 +} diff --git a/examples/kras_g12c_sotorasib.json b/examples/kras_g12c_sotorasib.json new file mode 100644 index 0000000..4463e7f --- /dev/null +++ b/examples/kras_g12c_sotorasib.json @@ -0,0 +1,25 @@ +{ + "name": "KRAS_G12C_sotorasib_covalent", + "sequences": [ + { + "protein": { + "id": "A", + "sequence": "MTEYKLVVVGACGVGKSALTIQLIQNHFVDEYDPTIEDSYRKQVVIDGETCLLDILDTAGQEEYSAMRDQYMRTGEGFLCVFAINNTKSFEDIHHYREQIKRVKDSEDVPMVLVGNKCDLPSRTVDTKQAQDLARSYGIPFIETSAKTRQRVEDAFYTLVREIRQYRLKKISKEEKTPGCVKIKKCIIM", + "description": "Human KRAS4B G12C mutant (UniProt P01116 with G12C, 189 aa)" + } + }, + { + "ligand": { + "id": "B", + "ccdCodes": ["MOV"], + "description": "Sotorasib / AMG-510 (CCD: MOV), covalent KRAS G12C inhibitor" + } + } + ], + "bondedAtomPairs": [ + [["A", 12, "SG"], ["B", 1, "C25"]] + ], + "modelSeeds": [42], + "dialect": "alphafold3", + "version": 4 +} diff --git a/examples/methylated_dna.json b/examples/methylated_dna.json new file mode 100644 index 0000000..695dfb1 --- /dev/null +++ b/examples/methylated_dna.json @@ -0,0 +1,34 @@ +{ + "name": "methylated_CpG_dsDNA", + "sequences": [ + { + "dna": { + "id": "A", + "sequence": "AGATCGATCGATCGATCGAT", + "modifications": [ + {"modificationType": "5CM", "basePosition": 5}, + {"modificationType": "5CM", "basePosition": 9}, + {"modificationType": "5CM", "basePosition": 13}, + {"modificationType": "5CM", "basePosition": 17} + ], + "description": "Forward strand (20 nt) with 5-methylcytosine (5CM) at CpG sites (positions 5, 9, 13, 17)" + } + }, + { + "dna": { + "id": "B", + "sequence": "ATCGATCGATCGATCGATCT", + "modifications": [ + {"modificationType": "5CM", "basePosition": 3}, + {"modificationType": "5CM", "basePosition": 7}, + {"modificationType": "5CM", "basePosition": 11}, + {"modificationType": "5CM", "basePosition": 15} + ], + "description": "Reverse complement strand (20 nt) with 5-methylcytosine (5CM) at CpG sites (positions 3, 7, 11, 15)" + } + } + ], + "modelSeeds": [42], + "dialect": "alphafold3", + "version": 4 +} diff --git a/examples/modified_rna.json b/examples/modified_rna.json new file mode 100644 index 0000000..155561c --- /dev/null +++ b/examples/modified_rna.json @@ -0,0 +1,20 @@ +{ + "name": "modified_RNA_hairpin", + "sequences": [ + { + "rna": { + "id": "A", + "sequence": "GGCCCGAUAGCUCAGUCGGUAGAGC", + "modifications": [ + {"modificationType": "PSU", "basePosition": 13}, + {"modificationType": "5MC", "basePosition": 18}, + {"modificationType": "OMG", "basePosition": 4} + ], + "description": "Modified tRNA-like fragment (25 nt): pseudouridine (PSU) at 13, 5-methylcytidine (5MC) at 18, 2'-O-methylguanosine (OMG) at 4" + } + } + ], + "modelSeeds": [42], + "dialect": "alphafold3", + "version": 4 +} diff --git a/examples/rnaseb_glycosylated.json b/examples/rnaseb_glycosylated.json new file mode 100644 index 0000000..5f9a516 --- /dev/null +++ b/examples/rnaseb_glycosylated.json @@ -0,0 +1,29 @@ +{ + "name": "RNaseB_glycosylated", + "sequences": [ + { + "protein": { + "id": "A", + "sequence": "KETAAAKFERQHMDSSTSAASSSNYCNQMMKSRNLTKDRCKPVNTFVHESLADVQAVCSQKNVACKNGQTNCYQSYSTMSITDCRETGSSKYPNCAYKTTQANKHIIVACEGNPYVPVHFDASV", + "description": "Bovine RNase B (UniProt P61823, mature chain 27-150, 124 aa), N-glycosylated at Asn34" + } + }, + { + "ligand": { + "id": "B", + "ccdCodes": ["NAG", "NAG", "BMA", "MAN", "MAN"], + "description": "Core N-linked glycan pentasaccharide (Man3GlcNAc2)" + } + } + ], + "bondedAtomPairs": [ + [["A", 34, "ND2"], ["B", 1, "C1"]], + [["B", 1, "O4"], ["B", 2, "C1"]], + [["B", 2, "O4"], ["B", 3, "C1"]], + [["B", 3, "O3"], ["B", 4, "C1"]], + [["B", 3, "O6"], ["B", 5, "C1"]] + ], + "modelSeeds": [42], + "dialect": "alphafold3", + "version": 4 +} diff --git a/examples/streptavidin_biotin_smiles.json b/examples/streptavidin_biotin_smiles.json new file mode 100644 index 0000000..1ff714c --- /dev/null +++ b/examples/streptavidin_biotin_smiles.json @@ -0,0 +1,22 @@ +{ + "name": "streptavidin_biotin_smiles", + "sequences": [ + { + "protein": { + "id": "A", + "sequence": "EAGITGTWYNQLGSTFIVTAGADGALTGTYESAVGNAESRYVLTGRYDSAPATDGSGTALGWTVAWKNNYRNAHSATTWSGQYVGGAEARINTQWLLTSGTTEANAWKSTLVGHDTFTKVKPSAAS", + "description": "Core streptavidin, S. avidinii (UniProt P22629, residues 38-163, 126 aa)" + } + }, + { + "ligand": { + "id": "B", + "smiles": "OC(=O)CCCC[C@@H]1SC[C@@H]2NC(=O)N[C@H]12", + "description": "D-Biotin (vitamin B7), specified by SMILES" + } + } + ], + "modelSeeds": [42], + "dialect": "alphafold3", + "version": 4 +} diff --git a/examples/tetr_dimer_dna.json b/examples/tetr_dimer_dna.json new file mode 100644 index 0000000..f4366cf --- /dev/null +++ b/examples/tetr_dimer_dna.json @@ -0,0 +1,29 @@ +{ + "name": "TetR_dimer_tetO_DNA", + "sequences": [ + { + "protein": { + "id": ["A", "B"], + "sequence": "MARLNRESVIDAALELLNETGIDGLTTRKLAQKLGIEQPTLYWHVKNKRALLDALAVEILARHHDYSLPAAGESWQSFLRNNAMSFRRALLRYRDGAKVHLGTRPDEKQYDTVETQLRFMTENGFSLRDGLYAISAVSHFTLGAVLEQQEHTAALTDRPAAPDENLPPLLREALQIMDSDDGEQAFLHGLESLIRGFEVQLTALLQIVGGDKLIIPFC", + "description": "Tetracycline repressor protein class D, E. coli (UniProt P0ACT4, 218 aa)" + } + }, + { + "dna": { + "id": "C", + "sequence": "TACTCTATCATTGATAGAGT", + "description": "tetO2 operator, forward strand (19 bp palindromic core + 1 bp flank, 20 nt)" + } + }, + { + "dna": { + "id": "D", + "sequence": "ACTCTATCAATGATAGAGTA", + "description": "tetO2 operator, reverse complement strand (20 nt)" + } + } + ], + "modelSeeds": [42], + "dialect": "alphafold3", + "version": 4 +} diff --git a/examples/tetr_dimer_tetracycline.json b/examples/tetr_dimer_tetracycline.json new file mode 100644 index 0000000..c08b423 --- /dev/null +++ b/examples/tetr_dimer_tetracycline.json @@ -0,0 +1,22 @@ +{ + "name": "TetR_dimer_tetracycline", + "sequences": [ + { + "protein": { + "id": ["A", "B"], + "sequence": "MARLNRESVIDAALELLNETGIDGLTTRKLAQKLGIEQPTLYWHVKNKRALLDALAVEILARHHDYSLPAAGESWQSFLRNNAMSFRRALLRYRDGAKVHLGTRPDEKQYDTVETQLRFMTENGFSLRDGLYAISAVSHFTLGAVLEQQEHTAALTDRPAAPDENLPPLLREALQIMDSDDGEQAFLHGLESLIRGFEVQLTALLQIVGGDKLIIPFC", + "description": "Tetracycline repressor protein class D, E. coli (UniProt P0ACT4, 218 aa)" + } + }, + { + "ligand": { + "id": ["C", "D"], + "ccdCodes": ["TAC"], + "description": "Tetracycline (CCD: TAC), one per TetR monomer" + } + } + ], + "modelSeeds": [42], + "dialect": "alphafold3", + "version": 4 +} diff --git a/examples/tetr_homodimer.json b/examples/tetr_homodimer.json new file mode 100644 index 0000000..fc53cbf --- /dev/null +++ b/examples/tetr_homodimer.json @@ -0,0 +1,15 @@ +{ + "name": "TetR_homodimer", + "sequences": [ + { + "protein": { + "id": ["A", "B"], + "sequence": "MARLNRESVIDAALELLNETGIDGLTTRKLAQKLGIEQPTLYWHVKNKRALLDALAVEILARHHDYSLPAAGESWQSFLRNNAMSFRRALLRYRDGAKVHLGTRPDEKQYDTVETQLRFMTENGFSLRDGLYAISAVSHFTLGAVLEQQEHTAALTDRPAAPDENLPPLLREALQIMDSDDGEQAFLHGLESLIRGFEVQLTALLQIVGGDKLIIPFC", + "description": "Tetracycline repressor protein class D, E. coli (UniProt P0ACT4, 218 aa)" + } + } + ], + "modelSeeds": [42], + "dialect": "alphafold3", + "version": 4 +} diff --git a/examples/u1a_rna_hairpin.json b/examples/u1a_rna_hairpin.json new file mode 100644 index 0000000..3524703 --- /dev/null +++ b/examples/u1a_rna_hairpin.json @@ -0,0 +1,22 @@ +{ + "name": "U1A_RNA_hairpin", + "sequences": [ + { + "protein": { + "id": "A", + "sequence": "AVPETRPNHTIYINNLNEKIKKDELKKSLYAIFSQFGQILDILVSRSLKMRGQAFVIFKEVSSATNALRSMQGFPFYDKPMRIQYAKTDSDIIAKMKGTFV", + "description": "Human U1A spliceosomal protein, RRM1 domain (UniProt P09012, residues 2-102, 101 aa)" + } + }, + { + "rna": { + "id": "B", + "sequence": "AAUCCAUUGCACUCCGGAUUU", + "description": "U1 snRNA stem-loop II hairpin (21 nt, from PDB 1URN)" + } + } + ], + "modelSeeds": [42], + "dialect": "alphafold3", + "version": 4 +} diff --git a/examples/ubiquitin_monomer.json b/examples/ubiquitin_monomer.json new file mode 100644 index 0000000..12b09d0 --- /dev/null +++ b/examples/ubiquitin_monomer.json @@ -0,0 +1,15 @@ +{ + "name": "ubiquitin_monomer", + "sequences": [ + { + "protein": { + "id": "A", + "sequence": "MQIFVKTLTGKTITLEVEPSDTIENVKAKIQDKEGIPPDQQRLIFAGKQLEDGRTLSDYNIQKESTLHLVLRLRGG", + "description": "Human ubiquitin, 76 residues (UniProt P0CG48)" + } + } + ], + "modelSeeds": [42], + "dialect": "alphafold3", + "version": 4 +} diff --git a/pyproject.toml b/pyproject.toml index b1b8e47..02cc0c6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,15 +17,23 @@ license = {file = "LICENSE"} dependencies = [ "absl-py>=2.3.1", "dm-haiku==0.0.16", - "jax==0.9.1", - "jax[cuda12]==0.9.1", + "etils[epath]", + "jax==0.10.2", + "jax[cuda12]==0.10.2; sys_platform != 'darwin'", + "jax-mps==0.10.9; sys_platform == 'darwin' and platform_machine == 'arm64'", "numpy", "rdkit==2025.9.4", - "tokamax==0.0.11", + "tokamax==0.0.12", "tqdm", "zstandard", ] +[project.optional-dependencies] +gcsfs = [ + # Use `uv sync --extra gcsfs` to enable GCS paths for inputs and outputs + "gcsfs", +] + [dependency-groups] dev = [ "pytest>=6.0", @@ -36,6 +44,7 @@ package = true environments = [ "sys_platform == 'linux' and platform_machine == 'x86_64'", "sys_platform == 'linux' and platform_machine == 'aarch64'", + "sys_platform == 'darwin' and platform_machine == 'arm64'", ] [tool.scikit-build] diff --git a/run_alphafold.py b/run_alphafold.py index 0bdd8a5..33664af 100644 --- a/run_alphafold.py +++ b/run_alphafold.py @@ -32,9 +32,10 @@ import csv import dataclasses import datetime +import enum import functools +import io import os -import pathlib import shutil import string import textwrap @@ -56,34 +57,42 @@ from alphafold3.model import params from alphafold3.model import post_processing from alphafold3.model.components import utils +from etils import epath import haiku as hk import jax from jax import numpy as jnp import numpy as np import tokamax -_HOME_DIR = pathlib.Path.home() +_HOME_DIR = epath.Path('~').expanduser() _DEFAULT_MODEL_DIR = _HOME_DIR / 'models' _DEFAULT_DB_DIR = _HOME_DIR / 'public_databases' +@enum.unique +class JaxBackend(enum.StrEnum): + CPU = enum.auto() + GPU = enum.auto() + MPS = enum.auto() # Apple Metal Performance Shaders (MPS). + + # Input and output paths. -_JSON_PATH = flags.DEFINE_string( +_JSON_PATH = epath.DEFINE_path( 'json_path', None, 'Path to the input JSON file.', ) -_INPUT_DIR = flags.DEFINE_string( +_INPUT_DIR = epath.DEFINE_path( 'input_dir', None, 'Path to the directory containing input JSON files.', ) -_OUTPUT_DIR = flags.DEFINE_string( +_OUTPUT_DIR = epath.DEFINE_path( 'output_dir', None, 'Path to a directory where the results will be saved.', ) -MODEL_DIR = flags.DEFINE_string( +MODEL_DIR = epath.DEFINE_path( 'model_dir', _DEFAULT_MODEL_DIR.as_posix(), 'Path to the model to use for inference.', @@ -220,7 +229,7 @@ ' calculation. Must be set for sharded databases.', lower_bound=0.0, ) -_PDB_DATABASE_PATH = flags.DEFINE_string( +_PDB_DATABASE_PATH = epath.DEFINE_path( 'pdb_database_path', '${DB_DIR}/mmcif_files', 'PDB database directory with mmCIF files path, used for template search.', @@ -231,11 +240,20 @@ 'PDB sequence database path, used for template search.', ) + +def _num_cpus_for_msa_tools() -> int: + try: + # Unfortunately, os.process_cpu_count() is only available in Python 3.13+. + num_cpus = len(os.sched_getaffinity(0)) + except AttributeError: + num_cpus = os.cpu_count() # MacOS doesn't have os.sched_getaffinity(). + return min(num_cpus if num_cpus is not None else 8, 8) + + # Number of CPUs to use for MSA tools. _JACKHMMER_N_CPU = flags.DEFINE_integer( 'jackhmmer_n_cpu', - # Unfortunately, os.process_cpu_count() is only available in Python 3.13+. - min(len(os.sched_getaffinity(0)), 8), + _num_cpus_for_msa_tools(), 'Number of CPUs to use for Jackhmmer. Defaults to min(cpu_count, 8). Going' ' above 8 CPUs provides very little additional speedup.', lower_bound=0, @@ -250,8 +268,7 @@ ) _NHMMER_N_CPU = flags.DEFINE_integer( 'nhmmer_n_cpu', - # Unfortunately, os.process_cpu_count() is only available in Python 3.13+. - min(len(os.sched_getaffinity(0)), 8), + _num_cpus_for_msa_tools(), 'Number of CPUs to use for Nhmmer. Defaults to min(cpu_count, 8). Going' ' above 8 CPUs provides very little additional speedup.', lower_bound=0, @@ -310,11 +327,24 @@ _GPU_DEVICE = flags.DEFINE_integer( 'gpu_device', 0, - 'Optional override for the GPU device to use for inference, uses zero-based' - ' indexing. Defaults to the 0th GPU on the system. Useful on multi-GPU' + 'Optional override for the JAX device to use for inference. Uses zero-based' + ' indexing. Defaults to the 0th device on the system. Useful on multi-GPU' ' systems to pin each run to a specific GPU. Note that if GPUs are already' ' pre-filtered by the environment (e.g. by using CUDA_VISIBLE_DEVICES),' - ' this flag refers to the GPU index after the filtering has been done.', + ' this flag refers to the GPU index after the filtering has been done.' + ' Contrary to its name, this flag is also used for CPU and MPS devices.', +) +_JAX_BACKEND = flags.DEFINE_enum_class( + 'jax_backend', + default=JaxBackend.GPU, + enum_class=JaxBackend, + help=( + 'JAX backend to use. "gpu" uses a GPU for inference. "cpu" uses a CPU' + ' only for inference which is much slower than using a GPU, but can be' + ' useful for testing or running on systems without a GPU supported by' + ' JAX. "mps" uses a GPU on Apple Silicon. If you set this flag to "cpu"' + ' or "mps", you must also set --flash_attention_implementation=xla.' + ), ) _BUCKETS = flags.DEFINE_list( 'buckets', @@ -377,6 +407,11 @@ 'Whether to save the final distogram in the output. Note that the distogram' ' is a large float16 array: num_tokens * num_tokens * 64.', ) +_SAVE_TERMS_OF_USE = flags.DEFINE_bool( + 'save_terms_of_use', + True, + 'Whether to save the terms of use as an MD file in the output directory.', +) _FORCE_OUTPUT_DIR = flags.DEFINE_bool( 'force_output_dir', False, @@ -420,11 +455,11 @@ def __init__( self, config: model.Model.Config, device: jax.Device, - model_dir: pathlib.Path, + model_dir: epath.PathLike, ): self._model_config = config self._device = device - self._model_dir = model_dir + self._model_dir = epath.Path(model_dir) @functools.cached_property def model_params(self) -> hk.Params: @@ -574,7 +609,7 @@ def predict_structure( inference_results = model_runner.extract_inference_results( batch=example, result=result, target_name=fold_input.name ) - num_tokens = len(inference_results[0].metadata['token_chain_ids']) + num_tokens = len(inference_results[0].metadata['token_chain_ids']) # pyrefly: ignore[bad-argument-type] embeddings = model_runner.extract_embeddings( result=result, num_tokens=num_tokens ) @@ -605,21 +640,23 @@ def predict_structure( def write_fold_input_json( fold_input: folding_input.Input, - output_dir: os.PathLike[str] | str, + output_dir: epath.PathLike, ) -> None: """Writes the input JSON to the output directory.""" - os.makedirs(output_dir, exist_ok=True) - path = os.path.join(output_dir, f'{fold_input.sanitised_name()}_data.json') + output_dir = epath.Path(output_dir) + output_dir.mkdir(parents=True, exist_ok=True) + path = output_dir / f'{fold_input.sanitised_name()}_data.json' print(f'Writing model input JSON to {path}') - with open(path, 'wt') as f: - f.write(fold_input.to_json()) + path.write_text(fold_input.to_json()) def write_outputs( all_inference_results: Sequence[ResultsForSeed], - output_dir: os.PathLike[str] | str, + output_dir: epath.PathLike, job_name: str, + *, compress_large_output_files: bool = False, + save_terms_of_use: bool = True, ) -> None: """Writes outputs to the specified output directory.""" ranking_scores = [] @@ -627,15 +664,16 @@ def write_outputs( max_ranking_result = None output_terms = ( - pathlib.Path(alphafold3.cpp.__file__).parent / 'OUTPUT_TERMS_OF_USE.md' + epath.Path(alphafold3.cpp.__file__).parent / 'OUTPUT_TERMS_OF_USE.md' ).read_text() - os.makedirs(output_dir, exist_ok=True) + output_dir = epath.Path(output_dir) + output_dir.mkdir(parents=True, exist_ok=True) for results_for_seed in all_inference_results: seed = results_for_seed.seed for sample_idx, result in enumerate(results_for_seed.inference_results): - sample_dir = os.path.join(output_dir, f'seed-{seed}_sample-{sample_idx}') - os.makedirs(sample_dir, exist_ok=True) + sample_dir = output_dir / f'seed-{seed}_sample-{sample_idx}' + sample_dir.mkdir(parents=True, exist_ok=True) post_processing.write_output( inference_result=result, output_dir=sample_dir, @@ -649,8 +687,8 @@ def write_outputs( max_ranking_result = result if embeddings := results_for_seed.embeddings: - embeddings_dir = os.path.join(output_dir, f'seed-{seed}_embeddings') - os.makedirs(embeddings_dir, exist_ok=True) + embeddings_dir = output_dir / f'seed-{seed}_embeddings' + embeddings_dir.mkdir(parents=True, exist_ok=True) post_processing.write_embeddings( embeddings=embeddings, output_dir=embeddings_dir, @@ -658,48 +696,49 @@ def write_outputs( ) if (distogram := results_for_seed.distogram) is not None: - distogram_dir = os.path.join(output_dir, f'seed-{seed}_distogram') - os.makedirs(distogram_dir, exist_ok=True) - distogram_path = os.path.join( - distogram_dir, f'{job_name}_seed-{seed}_distogram.npz' - ) - with open(distogram_path, 'wb') as f: - np.savez_compressed(f, distogram=distogram.astype(np.float16)) + distogram_dir = output_dir / f'seed-{seed}_distogram' + distogram_dir.mkdir(parents=True, exist_ok=True) + distogram_path = distogram_dir / f'{job_name}_seed-{seed}_distogram.npz' + with io.BytesIO() as bio: + np.savez_compressed(bio, distogram=distogram.astype(np.float16)) + distogram_path.write_bytes(bio.getvalue()) if max_ranking_result is not None: # True iff ranking_scores non-empty. post_processing.write_output( inference_result=max_ranking_result, output_dir=output_dir, # The output terms of use are the same for all seeds/samples. - terms_of_use=output_terms, + terms_of_use=output_terms if save_terms_of_use else None, name=job_name, compress=compress_large_output_files, ) # Save csv of ranking scores with seeds and sample indices, to allow easier # comparison of ranking scores across different runs. - with open( - os.path.join(output_dir, f'{job_name}_ranking_scores.csv'), 'wt' - ) as f: + ranking_scores_csv_path = output_dir / f'{job_name}_ranking_scores.csv' + with ranking_scores_csv_path.open('w') as f: writer = csv.writer(f) writer.writerow(['seed', 'sample', 'ranking_score']) writer.writerows(ranking_scores) -def replace_db_dir(path_with_db_dir: str, db_dirs: Sequence[str]) -> str: +def replace_db_dir( + path_with_db_dir: epath.PathLike, db_dirs: Sequence[str] +) -> str: """Replaces the DB_DIR placeholder in a path with the given DB_DIR.""" + path_with_db_dir = os.fspath(path_with_db_dir) template = string.Template(path_with_db_dir) if 'DB_DIR' in template.get_identifiers(): for db_dir in db_dirs: path = template.substitute(DB_DIR=db_dir) - if os.path.exists(path): + if epath.Path(path).exists(): return path raise FileNotFoundError( f'{path_with_db_dir} with ${{DB_DIR}} not found in any of {db_dirs}.' ) if (sharded_paths := shards.get_sharded_paths(path_with_db_dir)) is not None: - db_exists = all(os.path.exists(p) for p in sharded_paths) + db_exists = all(epath.Path(p).exists() for p in sharded_paths) else: - db_exists = os.path.exists(path_with_db_dir) + db_exists = epath.Path(path_with_db_dir).exists() if not db_exists: raise FileNotFoundError(f'{path_with_db_dir} does not exist.') return path_with_db_dir @@ -711,7 +750,7 @@ def process_fold_input( data_pipeline_config: pipeline.DataPipelineConfig | None, *, model_runner: None, - output_dir: os.PathLike[str] | str, + output_dir: epath.PathLike, buckets: Sequence[int] | None = None, ref_max_modified_date: datetime.date | None = None, conformer_max_iterations: int | None = None, @@ -719,6 +758,7 @@ def process_fold_input( fix_standalone_glycans: bool = False, force_output_dir: bool = False, compress_large_output_files: bool = False, + save_terms_of_use: bool = True, ) -> folding_input.Input: ... @@ -729,7 +769,7 @@ def process_fold_input( data_pipeline_config: pipeline.DataPipelineConfig | None, *, model_runner: ModelRunner, - output_dir: os.PathLike[str] | str, + output_dir: epath.PathLike, buckets: Sequence[int] | None = None, ref_max_modified_date: datetime.date | None = None, conformer_max_iterations: int | None = None, @@ -737,6 +777,7 @@ def process_fold_input( fix_standalone_glycans: bool = False, force_output_dir: bool = False, compress_large_output_files: bool = False, + save_terms_of_use: bool = True, ) -> Sequence[ResultsForSeed]: ... @@ -746,7 +787,7 @@ def process_fold_input( data_pipeline_config: pipeline.DataPipelineConfig | None, *, model_runner: ModelRunner | None, - output_dir: os.PathLike[str] | str, + output_dir: epath.PathLike, buckets: Sequence[int] | None = None, ref_max_modified_date: datetime.date | None = None, conformer_max_iterations: int | None = None, @@ -754,6 +795,7 @@ def process_fold_input( fix_standalone_glycans: bool = False, force_output_dir: bool = False, compress_large_output_files: bool = False, + save_terms_of_use: bool = True, ) -> folding_input.Input | Sequence[ResultsForSeed]: """Runs data pipeline and/or inference on a single fold input. @@ -791,6 +833,7 @@ def process_fold_input( output directory instead if the existing one is non-empty. compress_large_output_files: If True, compress large output files (mmCIF and confidences JSON) using zstandard. + save_terms_of_use: If True, write the terms of use to the output directory. Returns: The processed fold input, or the inference results for each seed. @@ -803,13 +846,11 @@ def process_fold_input( if not fold_input.chains: raise ValueError('Fold input has no chains.') - if ( - not force_output_dir - and os.path.exists(output_dir) - and os.listdir(output_dir) - ): + output_dir = epath.Path(output_dir) + if not force_output_dir and output_dir.exists() and any(output_dir.iterdir()): new_output_dir = ( - f'{output_dir}_{datetime.datetime.now().strftime("%Y%m%d_%H%M%S")}' + output_dir.parent + / f'{output_dir.name}_{datetime.datetime.now().strftime("%Y%m%d_%H%M%S")}' ) print( f'Output will be written in {new_output_dir} since {output_dir} is' @@ -849,6 +890,7 @@ def process_fold_input( output_dir=output_dir, job_name=fold_input.sanitised_name(), compress_large_output_files=compress_large_output_files, + save_terms_of_use=save_terms_of_use, ) output = all_inference_results @@ -874,13 +916,9 @@ def main(_): ) if _INPUT_DIR.value is not None: - fold_inputs = folding_input.load_fold_inputs_from_dir( - pathlib.Path(_INPUT_DIR.value) - ) + fold_inputs = folding_input.load_fold_inputs_from_dir(_INPUT_DIR.value) elif _JSON_PATH.value is not None: - fold_inputs = folding_input.load_fold_inputs_from_path( - pathlib.Path(_JSON_PATH.value) - ) + fold_inputs = folding_input.load_fold_inputs_from_path(_JSON_PATH.value) else: raise AssertionError( 'Exactly one of --json_path or --input_dir must be specified.' @@ -891,38 +929,49 @@ def main(_): # Make sure we can create the output directory before running anything. try: - os.makedirs(_OUTPUT_DIR.value, exist_ok=True) + _OUTPUT_DIR.value.mkdir(parents=True, exist_ok=True) except OSError as e: print(f'Failed to create output directory {_OUTPUT_DIR.value}: {e}') raise if _RUN_INFERENCE.value: # Fail early on incompatible devices, but only if we're running inference. - gpu_devices = jax.local_devices(backend='gpu') - if gpu_devices: - compute_capability = float( - gpu_devices[_GPU_DEVICE.value].compute_capability - ) - if compute_capability < 6.0: + if _JAX_BACKEND.value in {JaxBackend.CPU, JaxBackend.MPS}: + if _FLASH_ATTENTION_IMPLEMENTATION.value != 'xla': raise ValueError( - 'AlphaFold 3 requires at least GPU compute capability 6.0 (see' - ' https://developer.nvidia.com/cuda-gpus).' + 'For CPU-only or MPS inference, --flash_attention_implementation' + ' must be set to "xla".' ) - elif 7.0 <= compute_capability < 8.0: - xla_flags = os.environ.get('XLA_FLAGS') - required_flag = '--xla_disable_hlo_passes=custom-kernel-fusion-rewriter' - if not xla_flags or required_flag not in xla_flags: + elif _JAX_BACKEND.value == JaxBackend.GPU: + gpu_devices = jax.local_devices(backend='gpu') + if gpu_devices: + compute_capability = float( + gpu_devices[_GPU_DEVICE.value].compute_capability + ) + if compute_capability < 6.0: raise ValueError( - 'For devices with GPU compute capability 7.x (see' - ' https://developer.nvidia.com/cuda-gpus) the ENV XLA_FLAGS must' - f' include "{required_flag}".' + 'AlphaFold 3 requires at least GPU compute capability 6.0 (see' + ' https://developer.nvidia.com/cuda-gpus).' ) - if _FLASH_ATTENTION_IMPLEMENTATION.value != 'xla': - raise ValueError( - 'For devices with GPU compute capability 7.x (see' - ' https://developer.nvidia.com/cuda-gpus) the' - ' --flash_attention_implementation must be set to "xla".' + elif 7.0 <= compute_capability < 8.0: + xla_flags = os.environ.get('XLA_FLAGS') + required_flag = ( + '--xla_disable_hlo_passes=custom-kernel-fusion-rewriter' ) + if not xla_flags or required_flag not in xla_flags: + raise ValueError( + 'For devices with GPU compute capability 7.x (see' + ' https://developer.nvidia.com/cuda-gpus) the ENV XLA_FLAGS' + f' must include "{required_flag}".' + ) + if _FLASH_ATTENTION_IMPLEMENTATION.value != 'xla': + raise ValueError( + 'For devices with GPU compute capability 7.x (see' + ' https://developer.nvidia.com/cuda-gpus) the' + ' --flash_attention_implementation must be set to "xla".' + ) + else: + raise ValueError(f'Unsupported JAX backend: {_JAX_BACKEND.value}') notice = textwrap.wrap( 'Running AlphaFold 3. Please note that standard AlphaFold 3 model' @@ -941,11 +990,11 @@ def main(_): if _RUN_DATA_PIPELINE.value: expand_path = lambda x: replace_db_dir(x, DB_DIR.value) data_pipeline_config = pipeline.DataPipelineConfig( - jackhmmer_binary_path=_JACKHMMER_BINARY_PATH.value, - nhmmer_binary_path=_NHMMER_BINARY_PATH.value, - hmmalign_binary_path=_HMMALIGN_BINARY_PATH.value, - hmmsearch_binary_path=_HMMSEARCH_BINARY_PATH.value, - hmmbuild_binary_path=_HMMBUILD_BINARY_PATH.value, + jackhmmer_binary_path=_JACKHMMER_BINARY_PATH.value, # pyrefly: ignore[bad-argument-type] + nhmmer_binary_path=_NHMMER_BINARY_PATH.value, # pyrefly: ignore[bad-argument-type] + hmmalign_binary_path=_HMMALIGN_BINARY_PATH.value, # pyrefly: ignore[bad-argument-type] + hmmsearch_binary_path=_HMMSEARCH_BINARY_PATH.value, # pyrefly: ignore[bad-argument-type] + hmmbuild_binary_path=_HMMBUILD_BINARY_PATH.value, # pyrefly: ignore[bad-argument-type] small_bfd_database_path=expand_path(_SMALL_BFD_DATABASE_PATH.value), small_bfd_z_value=_SMALL_BFD_Z_VALUE.value, mgnify_database_path=expand_path(_MGNIFY_DATABASE_PATH.value), @@ -974,10 +1023,11 @@ def main(_): data_pipeline_config = None if _RUN_INFERENCE.value: - devices = jax.local_devices(backend='gpu') + devices = jax.local_devices(backend=_JAX_BACKEND.value) + device = devices[_GPU_DEVICE.value] print( - f'Found local devices: {devices}, using device {_GPU_DEVICE.value}:' - f' {devices[_GPU_DEVICE.value]}' + f'Found local {str(_JAX_BACKEND.value).upper()} devices: {devices},' + f' using device {_GPU_DEVICE.value}: {device}' ) print('Building model from scratch...') @@ -992,8 +1042,8 @@ def main(_): return_embeddings=_SAVE_EMBEDDINGS.value, return_distogram=_SAVE_DISTOGRAM.value, ), - device=devices[_GPU_DEVICE.value], - model_dir=pathlib.Path(MODEL_DIR.value), + device=device, + model_dir=MODEL_DIR.value, ) # Check we can load the model parameters before launching anything. print('Checking that model parameters can be loaded...') @@ -1010,7 +1060,7 @@ def main(_): fold_input=fold_input, data_pipeline_config=data_pipeline_config, model_runner=model_runner, - output_dir=os.path.join(_OUTPUT_DIR.value, fold_input.sanitised_name()), + output_dir=_OUTPUT_DIR.value / fold_input.sanitised_name(), buckets=tuple(int(bucket) for bucket in _BUCKETS.value), ref_max_modified_date=max_template_date, conformer_max_iterations=_CONFORMER_MAX_ITERATIONS.value, @@ -1018,6 +1068,7 @@ def main(_): fix_standalone_glycans=_FIX_STANDALONE_GLYCANS.value, force_output_dir=_FORCE_OUTPUT_DIR.value, compress_large_output_files=_COMPRESS_LARGE_OUTPUT_FILES.value, + save_terms_of_use=_SAVE_TERMS_OF_USE.value, ) num_fold_inputs += 1 diff --git a/run_alphafold_data_test.py b/run_alphafold_data_test.py index bde41a0..0e262a7 100644 --- a/run_alphafold_data_test.py +++ b/run_alphafold_data_test.py @@ -200,6 +200,13 @@ def compare_golden(self, result_path: str) -> None: self.assertEqual(diff, "", f"Result differs from golden:\n{diff}") + def test_all_examples_are_valid(self): + examples_dir = testing_data.Data(resources.ROOT / '../../examples').path() + for filename in sorted(os.listdir(examples_dir)): + with open(os.path.join(examples_dir, filename), 'rt') as f: + with self.subTest(filename): + folding_input.Input.from_json(f.read()) + def test_config(self): model_config = run_alphafold.make_model_config() model_config_as_str = json.dumps( @@ -219,10 +226,14 @@ def test_featurisation(self): ccd=chemical_components.Ccd(), buckets=None, ) - del featurised_example[0]['ref_pos'] # Depends on specific RDKit version. with _output('featurised_example.pkl') as (_, output): output.write(pickle.dumps(featurised_example)) + + del featurised_example[0]['frames_mask'] # Depends on RDKit/CCD version. + del featurised_example[0]['ref_charge'] # Depends on RDKit/CCD version. + del featurised_example[0]['ref_pos'] # Depends on RDKit/CCD version. + featurised_example = jax.tree_util.tree_map(_hash_data, featurised_example) with _output('featurised_example.json') as (result_path, output): output.write( diff --git a/run_alphafold_test.py b/run_alphafold_test.py index 420d7f6..ecd05b5 100644 --- a/run_alphafold_test.py +++ b/run_alphafold_test.py @@ -26,7 +26,6 @@ import difflib import json import os -import pathlib import pickle from absl import logging @@ -37,6 +36,7 @@ from alphafold3.common.testing import data as testing_data from alphafold3.data import pipeline from alphafold3.model.scoring import alignment +from etils import epath import jax import numpy as np @@ -159,7 +159,7 @@ def setUp(self): self._runner = run_alphafold.ModelRunner( config=self._model_config, device=jax.local_devices()[0], - model_dir=pathlib.Path(run_alphafold.MODEL_DIR.value), + model_dir=run_alphafold.MODEL_DIR.value, ) def test_model_inference(self): @@ -179,7 +179,7 @@ def test_model_inference(self): ) embeddings = self._runner.extract_embeddings( result=result, - num_tokens=len(inference_results[0].metadata['token_chain_ids']), + num_tokens=len(inference_results[0].metadata['token_chain_ids']), # pyrefly: ignore[bad-argument-type] ) self.assertLen(embeddings, 2) @@ -213,17 +213,25 @@ def test_inference(self, bucket, seed): fold_input = folding_input.Input.from_json(self._test_input_json) fold_input = dataclasses.replace(fold_input, rng_seeds=[seed]) - output_dir = self.create_tempdir().full_path + output_dir = epath.Path(self.create_tempdir().full_path) + + # Pre-create output directories to explicitly catch exist_ok=False bugs. + (output_dir / f'seed-{seed}_sample-0').mkdir(parents=True) + (output_dir / f'seed-{seed}_sample-1').mkdir(parents=True) + (output_dir / f'seed-{seed}_embeddings').mkdir(parents=True) + (output_dir / f'seed-{seed}_distogram').mkdir(parents=True) + actual = run_alphafold.process_fold_input( fold_input, self._data_pipeline_config, model_runner=run_alphafold.ModelRunner( config=self._model_config, device=jax.local_devices(backend='gpu')[0], - model_dir=pathlib.Path(run_alphafold.MODEL_DIR.value), + model_dir=run_alphafold.MODEL_DIR.value, ), output_dir=output_dir, buckets=None if bucket is None else [bucket], + force_output_dir=True, ) logging.info('finished get_inference_result') expected_model_cif_filename = f'{fold_input.sanitised_name()}_model.cif' @@ -312,7 +320,7 @@ def test_inference(self, bucket, seed): ) self.assertSequenceEqual( actual_input_json['sequences'][1]['ligand']['ccdCodes'], - fold_input.ligands[0].ccd_ids, + fold_input.ligands[0].ccd_ids, # pyrefly: ignore[bad-argument-type] ) self.assertNotEmpty( actual_input_json['sequences'][0]['protein']['unpairedMsa'] @@ -434,6 +442,59 @@ def test_inference(self, bucket, seed): if any(rmsd > 1.4 for rmsd in actual_masked_rmsds): self.fail(f'Masked RMSD too high: {actual_masked_rmsds=}') + @parameterized.parameters( + 'barnase_barstar', + 'calmodulin_4calcium', + 'erk2_phosphorylated', + 'kras_g12c_sotorasib', + 'methylated_dna', + 'modified_rna', + 'rnaseb_glycosylated', + 'streptavidin_biotin_smiles', + 'tetr_dimer_dna', + 'tetr_dimer_tetracycline', + 'tetr_homodimer', + 'u1a_rna_hairpin', + 'ubiquitin_monomer', + ) + def test_examples(self, example_name: str): + + json_path = testing_data.Data( + resources.ROOT / f'../../examples/{example_name}.json' + ).path() + with open(json_path, 'rt') as f: + test_input_json = f.read() + fold_input = folding_input.Input.from_json(test_input_json) + output_dir = self.create_tempdir().full_path + run_alphafold.process_fold_input( + fold_input=fold_input, + data_pipeline_config=self._data_pipeline_config, + model_runner=run_alphafold.ModelRunner( + # Use fast settings. + config=run_alphafold.make_model_config( + num_diffusion_samples=1, + num_recycles=1, + ), + device=jax.local_devices(backend='gpu')[0], + model_dir=run_alphafold.MODEL_DIR.value, + ), + ref_max_modified_date=datetime.date(2021, 9, 30), + output_dir=output_dir, + ) + prefix = f'seed-{fold_input.rng_seeds[0]}' + self.assertSameElements( + os.listdir(output_dir), + [ + f'{prefix}_sample-0', + f'{fold_input.sanitised_name()}_model.cif', + f'{fold_input.sanitised_name()}_summary_confidences.json', + f'{fold_input.sanitised_name()}_confidences.json', + f'{fold_input.sanitised_name()}_ranking_scores.csv', + f'{fold_input.sanitised_name()}_data.json', + 'TERMS_OF_USE.md', + ], + ) + if __name__ == '__main__': absltest.main() diff --git a/src/alphafold3/common/base_config.py b/src/alphafold3/common/base_config.py index 58f4933..c66f84f 100644 --- a/src/alphafold3/common/base_config.py +++ b/src/alphafold3/common/base_config.py @@ -59,7 +59,7 @@ def _clone_field( ) -> dataclasses.Field[_T]: if new_default is _NO_UPDATE: return copy.copy(field) - return dataclasses.field( + return dataclasses.field( # pyrefly: ignore[bad-return] default=new_default, init=True, kw_only=True, @@ -89,9 +89,9 @@ def _coercable_fields(self) -> Mapping[str, tuple[ConfigMeta, Any]]: for f, t in field_to_type_and_default.items() if issubclass(type(t[0]), ConfigMeta) } - return coercable_fields + return coercable_fields # pyrefly: ignore[bad-return] - cls._coercable_fields = property(_coercable_fields) + cls._coercable_fields = property(_coercable_fields) # pyrefly: ignore[missing-attribute] old_post_init = getattr(cls, '__post_init__', None) @@ -129,9 +129,9 @@ def _post_init(self) -> None: if old_post_init: old_post_init(self) - cls.__post_init__ = _post_init + cls.__post_init__ = _post_init # pyrefly: ignore[missing-attribute] - return dataclasses.dataclass(kw_only=True)(cls) + return dataclasses.dataclass(kw_only=True)(cls) # pyrefly: ignore[bad-argument-type] class BaseConfig(metaclass=ConfigMeta): diff --git a/src/alphafold3/common/folding_input.py b/src/alphafold3/common/folding_input.py index 5ab04c3..136dbc1 100644 --- a/src/alphafold3/common/folding_input.py +++ b/src/alphafold3/common/folding_input.py @@ -25,12 +25,10 @@ import json import logging import lzma -import os -import pathlib import random import re import string -from typing import Any, Final, Self, TypeAlias, cast +from typing import Any, BinaryIO, Final, Self, TypeAlias, cast from alphafold3 import structure from alphafold3.constants import chemical_components @@ -38,10 +36,10 @@ from alphafold3.constants import residue_names from alphafold3.cpp import cif_dict from alphafold3.structure import mmcif as mmcif_lib +from etils import epath import rdkit.Chem as rd_chem import zstandard as zstd - BondAtomId: TypeAlias = tuple[str, int, str] JSON_DIALECT: Final[str] = 'alphafold3' @@ -58,35 +56,40 @@ def _validate_keys(actual: Collection[str], expected: Collection[str]): raise ValueError(f'Unexpected JSON keys in: {", ".join(sorted(bad_keys))}') -def _read_file(path: pathlib.Path, json_path: pathlib.Path | None) -> str: +def _read_file( + *, + path: epath.PathLike, + json_path: epath.PathLike | None, +) -> str: """Reads a maybe compressed (gzip, xz, zstd) file from the given path. Args: path: The path to the file to read. This can be either absolute path, or a - path relative to the JSON file path. + path relative to the JSON file. json_path: The path to the JSON file. If None, the path must be absolute. Returns: The contents of the file. """ + path = epath.Path(path) if not path.is_absolute(): if json_path is None: raise ValueError('json_path must be specified if path is not absolute.') - path = (json_path.parent / path).resolve() + path = (epath.Path(json_path).parent / path).resolve() - with open(path, 'rb') as f: + with path.open('rb') as f: first_six_bytes = f.read(6) f.seek(0) # Detect the compression type using the magic number in the header. if first_six_bytes[:2] == b'\x1f\x8b': - with gzip.open(f, 'rt') as gzip_f: + with gzip.open(cast(BinaryIO, f), 'rt') as gzip_f: return cast(str, gzip_f.read()) elif first_six_bytes == b'\xfd\x37\x7a\x58\x5a\x00': - with lzma.open(f, 'rt') as xz_f: + with lzma.open(cast(BinaryIO, f), 'rt') as xz_f: return cast(str, xz_f.read()) elif first_six_bytes[:4] == b'\x28\xb5\x2f\xfd': - with zstd.open(f, 'rt') as zstd_f: + with zstd.open(cast(BinaryIO, f), 'rt') as zstd_f: return cast(str, zstd_f.read()) else: return f.read().decode('utf-8') @@ -345,7 +348,7 @@ def from_alphafoldserver_dict( def from_dict( cls, json_dict: Mapping[str, Any], - json_path: pathlib.Path | None = None, + json_path: epath.PathLike | None = None, seq_id: str | None = None, ) -> Self: """Constructs ProteinChain from the AlphaFold JSON dict.""" @@ -380,24 +383,24 @@ def from_dict( if ( unpaired_msa and len(unpaired_msa) < 256 - and os.path.exists(unpaired_msa) + and epath.Path(unpaired_msa).exists() ): raise ValueError( 'Set the unpaired MSA path using the "unpairedMsaPath" field.' ) elif unpaired_msa_path: - unpaired_msa = _read_file(pathlib.Path(unpaired_msa_path), json_path) + unpaired_msa = _read_file(path=unpaired_msa_path, json_path=json_path) paired_msa = json_dict.get('pairedMsa', None) paired_msa_path = json_dict.get('pairedMsaPath', None) if paired_msa and paired_msa_path: raise ValueError('Only one of pairedMsa/pairedMsaPath can be set.') - if paired_msa and len(paired_msa) < 256 and os.path.exists(paired_msa): + if paired_msa and len(paired_msa) < 256 and epath.Path(paired_msa).exists(): raise ValueError( 'Set the paired MSA path using the "pairedMsaPath" field.' ) elif paired_msa_path: - paired_msa = _read_file(pathlib.Path(paired_msa_path), json_path) + paired_msa = _read_file(path=paired_msa_path, json_path=json_path) raw_templates = json_dict.get('templates', None) @@ -414,10 +417,10 @@ def from_dict( mmcif_path = raw_template.get('mmcifPath', None) if mmcif and mmcif_path: raise ValueError('Only one of mmcif/mmcifPath can be set.') - if mmcif and len(mmcif) < 256 and os.path.exists(mmcif): + if mmcif and len(mmcif) < 256 and epath.Path(mmcif).exists(): raise ValueError('Set the template path using the "mmcifPath" field.') if mmcif_path: - mmcif = _read_file(pathlib.Path(mmcif_path), json_path) + mmcif = _read_file(path=mmcif_path, json_path=json_path) query_to_template_map = dict( zip(raw_template['queryIndices'], raw_template['templateIndices']) ) @@ -447,9 +450,7 @@ def to_dict( { 'mmcif': template.mmcif, 'queryIndices': list(template.query_to_template_map.keys()), - 'templateIndices': ( - list(template.query_to_template_map.values()) or None - ), + 'templateIndices': list(template.query_to_template_map.values()), } for template in self._templates ] @@ -481,7 +482,7 @@ def to_ccd_sequence(self) -> Sequence[str]: def fill_missing_fields(self) -> Self: """Fill missing MSA and template fields with default values.""" - return ProteinChain( + return ProteinChain( # pyrefly: ignore[bad-return] id=self.id, sequence=self._sequence, ptms=self._ptms, @@ -634,7 +635,7 @@ def from_alphafoldserver_dict( def from_dict( cls, json_dict: Mapping[str, Any], - json_path: pathlib.Path | None = None, + json_path: epath.PathLike | None = None, seq_id: str | None = None, ) -> Self: """Constructs RnaChain from the AlphaFold JSON dict.""" @@ -665,13 +666,13 @@ def from_dict( if ( unpaired_msa and len(unpaired_msa) < 256 - and os.path.exists(unpaired_msa) + and epath.Path(unpaired_msa).exists() ): raise ValueError( 'Set the unpaired MSA path using the "unpairedMsaPath" field.' ) elif unpaired_msa_path: - unpaired_msa = _read_file(pathlib.Path(unpaired_msa_path), json_path) + unpaired_msa = _read_file(path=unpaired_msa_path, json_path=json_path) return cls( id=seq_id or json_dict['id'], @@ -713,7 +714,7 @@ def to_ccd_sequence(self) -> Sequence[str]: def fill_missing_fields(self) -> Self: """Fill missing MSA fields with default values.""" - return RnaChain( + return RnaChain( # pyrefly: ignore[bad-return] id=self.id, sequence=self.sequence, modifications=self.modifications, @@ -1075,6 +1076,11 @@ def __post_init__(self): if not self.rng_seeds: raise ValueError('Input must have at least one RNG seed.') + if any(seed < 0 or seed > 2**32 - 1 for seed in self.rng_seeds): + raise ValueError( + f'RNG seeds must be 32-bit unsigned integers, got {self.rng_seeds}' + ) + if not self.name.strip() or not self.sanitised_name(): raise ValueError( 'Input name must be non-empty and contain at least one valid' @@ -1214,7 +1220,7 @@ def from_alphafoldserver_fold_job(cls, fold_job: Mapping[str, Any]) -> Self: @classmethod def from_json( - cls, json_str: str, json_path: pathlib.Path | None = None + cls, json_str: str, json_path: epath.PathLike | None = None ) -> Self: """Loads the input from the AlphaFold JSON string.""" raw_json = json.loads(json_str) @@ -1350,10 +1356,10 @@ def from_json( user_ccd_path = raw_json.get('userCCDPath') if user_ccd and user_ccd_path: raise ValueError('Only one of userCCD/userCCDPath can be set.') - if user_ccd and len(user_ccd) < 256 and os.path.exists(user_ccd): + if user_ccd and len(user_ccd) < 256 and epath.Path(user_ccd).exists(): raise ValueError('Set the user CCD path using the "userCCDPath" field.') elif user_ccd_path: - user_ccd = _read_file(pathlib.Path(user_ccd_path), json_path) + user_ccd = _read_file(path=user_ccd_path, json_path=json_path) return cls( name=raw_json['name'], @@ -1614,10 +1620,10 @@ def with_multiple_seeds(self, num_seeds: int) -> Self: ) -def load_fold_inputs_from_path(json_path: pathlib.Path) -> Iterator[Input]: +def load_fold_inputs_from_path(json_path: epath.PathLike) -> Iterator[Input]: """Loads multiple fold inputs from a JSON string.""" - with open(json_path, 'r') as f: - json_str = f.read() + json_path = epath.Path(json_path) + json_str = json_path.read_text() # Parse the JSON string, so we can detect its format. raw_json = json.loads(json_str) @@ -1643,7 +1649,7 @@ def load_fold_inputs_from_path(json_path: pathlib.Path) -> Iterator[Input]: ) from e -def load_fold_inputs_from_dir(input_dir: pathlib.Path) -> Iterator[Input]: +def load_fold_inputs_from_dir(input_dir: epath.PathLike) -> Iterator[Input]: """Loads multiple fold inputs from all JSON files in a given input_dir. Args: @@ -1652,6 +1658,7 @@ def load_fold_inputs_from_dir(input_dir: pathlib.Path) -> Iterator[Input]: Yields: The fold inputs from all JSON files in the input directory. """ + input_dir = epath.Path(input_dir) for file_path in sorted(input_dir.glob('*.json')): if not file_path.is_file(): continue diff --git a/src/alphafold3/common/resources.py b/src/alphafold3/common/resources.py index edbc307..78e7739 100644 --- a/src/alphafold3/common/resources.py +++ b/src/alphafold3/common/resources.py @@ -73,7 +73,7 @@ def open_resource( root of the repository. mode: the mode to use when opening the file. """ - return (_DATA_ROOT / name).open(mode) + return (_DATA_ROOT / name).open(mode) # pyrefly: ignore[bad-return] def get_resource_dir(path: str | os.PathLike[str]) -> os.PathLike[str]: diff --git a/src/alphafold3/data/featurisation.py b/src/alphafold3/data/featurisation.py index 501e615..536e3f1 100644 --- a/src/alphafold3/data/featurisation.py +++ b/src/alphafold3/data/featurisation.py @@ -92,7 +92,7 @@ def featurise_input( # Set up data pipeline for single use. data_pipeline = pipeline.WholePdbPipeline( config=pipeline.WholePdbPipeline.Config( - buckets=buckets, + buckets=buckets, # pyrefly: ignore[bad-argument-type] ref_max_modified_date=ref_max_modified_date, conformer_max_iterations=conformer_max_iterations, resolve_msa_overlaps=resolve_msa_overlaps, diff --git a/src/alphafold3/data/msa.py b/src/alphafold3/data/msa.py index 9b59fb1..79e3c67 100644 --- a/src/alphafold3/data/msa.py +++ b/src/alphafold3/data/msa.py @@ -197,7 +197,7 @@ def from_multiple_a3ms( all_descriptions.extend(descriptions) return cls( - query_sequence=query_sequence, + query_sequence=query_sequence, # pyrefly: ignore[bad-argument-type] chain_poly_type=chain_poly_type, sequences=all_sequences, descriptions=all_descriptions, diff --git a/src/alphafold3/data/pipeline.py b/src/alphafold3/data/pipeline.py index d518317..4436e6c 100644 --- a/src/alphafold3/data/pipeline.py +++ b/src/alphafold3/data/pipeline.py @@ -32,6 +32,7 @@ from alphafold3.data import msa_config from alphafold3.data import structure_stores from alphafold3.data import templates as templates_lib +from etils import epath # Cache to avoid re-running template search for the same sequence in homomers. @@ -41,7 +42,7 @@ def _get_protein_templates( input_msa_a3m: str, run_template_search: bool, templates_config: msa_config.TemplatesConfig, - pdb_database_path: str, + pdb_database_path: epath.PathLike, ) -> templates_lib.Templates: """Searches for templates for a single protein chain.""" if run_template_search: @@ -85,7 +86,7 @@ def _get_protein_msa_and_templates( small_bfd_msa_config: msa_config.RunConfig, uniprot_msa_config: msa_config.RunConfig, templates_config: msa_config.TemplatesConfig, - pdb_database_path: str, + pdb_database_path: epath.PathLike, ) -> tuple[msa.Msa, msa.Msa, templates_lib.Templates]: """Processes a single protein chain.""" logging.info('Getting protein MSAs for sequence %s', sequence) @@ -287,7 +288,7 @@ class DataPipelineConfig: rna_central_z_value: float | None = None # Template search databases. seqres_database_path: str - pdb_database_path: str + pdb_database_path: epath.PathLike # Optional configuration for MSA tools. jackhmmer_n_cpu: int = 8 diff --git a/src/alphafold3/data/structure_stores.py b/src/alphafold3/data/structure_stores.py index 58904a0..f751ace 100644 --- a/src/alphafold3/data/structure_stores.py +++ b/src/alphafold3/data/structure_stores.py @@ -21,9 +21,8 @@ from collections.abc import Mapping, Sequence import functools -import os -import pathlib import tarfile +from etils import epath class NotFoundError(KeyError): @@ -35,7 +34,7 @@ class StructureStore: def __init__( self, - structures: str | os.PathLike[str] | Mapping[str, str], + structures: epath.PathLike | Mapping[str, str], ): """Initialises the instance. @@ -47,14 +46,19 @@ def __init__( self._structure_mapping = structures self._structure_path = None self._structure_tar = None + else: self._structure_mapping = None - path_str = os.fspath(structures) - if path_str.endswith('.tar'): - self._structure_tar = tarfile.open(path_str, 'r') + structures = epath.Path(structures) + if structures.suffix == '.tar': + self._structure_tar = tarfile.open( + fileobj=structures.open('rb'), + mode='r', + ) self._structure_path = None + else: - self._structure_path = pathlib.Path(structures) + self._structure_path = structures self._structure_tar = None @functools.cached_property @@ -64,7 +68,7 @@ def _tar_members(self) -> Mapping[str, tarfile.TarInfo]: path.stem: tarinfo for tarinfo in self._structure_tar.getmembers() if tarinfo.isfile() - and (path := pathlib.Path(tarinfo.path.lower())).suffix == '.cif' + and (path := epath.Path(tarinfo.path.lower())).suffix == '.cif' } def get_mmcif_str(self, target_name: str) -> str: @@ -92,11 +96,19 @@ def get_mmcif_str(self, target_name: str) -> str: except KeyError: raise NotFoundError(f'{target_name=} not found') from None - filepath = self._structure_path / f'{target_name}.cif' + filepath = self._structure_path / f'{target_name}.cif' # pyrefly: ignore[unsupported-operation] try: return filepath.read_text() - except FileNotFoundError as e: - raise NotFoundError(f'{target_name=} not found at {filepath=}') from e + except Exception as e: + # Unfortunately, we can't predict which error type will be raised from the + # underlying storage library (e.g. tensorflow or gcsfs), so this is an + # attempt to stay backward compatible with file not found without + # obscuring other possible error conditions + exc_str = str(e).lower() + if 'no such file' in exc_str or 'not found' in exc_str: + raise NotFoundError(f'{target_name=} not found at {filepath=}') from e + + raise IOError(f'Error reading file {filepath}: {e}') from e def target_names(self) -> Sequence[str]: """Returns all targets in the store.""" diff --git a/src/alphafold3/data/templates.py b/src/alphafold3/data/templates.py index 3f6477d..05a9847 100644 --- a/src/alphafold3/data/templates.py +++ b/src/alphafold3/data/templates.py @@ -547,7 +547,7 @@ def hit_generator(a3m: str): pdb_id=pdb_id, auth_chain_id=auth_chain_id, hmmsearch_sequence=hit_seq, - structure_sequence=sequence, + structure_sequence=sequence, # pyrefly: ignore[bad-argument-type] query_sequence=query_sequence, unresolved_res_indices=unresolved_indices, start_index=start - 1, # Raw value is residue number, not index. @@ -570,7 +570,7 @@ def hit_generator(a3m: str): max_hits=filter_config.max_hits, ) - return Templates( + return Templates( # pyrefly: ignore[bad-return] query_sequence=query_sequence, query_release_date=query_release_date, hits=hits, @@ -642,7 +642,7 @@ def filter( deduplicate_sequences=deduplicate_sequences, max_hits=max_hits, ) - return Templates( + return Templates( # pyrefly: ignore[bad-return] query_sequence=self.query_sequence, query_release_date=self.query_release_date, hits=filtered_hits, @@ -823,7 +823,7 @@ def _parse_hit_metadata( chain_auth_asym_id=auth_chain_id ).unresolved_residues.id - return release_date, sequence, unresolved_res_ids + return release_date, sequence, unresolved_res_ids # pyrefly: ignore[bad-return] def get_polymer_features( @@ -948,7 +948,7 @@ def package_template_features( stacked_features = {} for k, v in features.items(): if k in _POLYMER_FEATURES: - v = np.stack(v, axis=0) if v else np.array([], dtype=_POLYMER_FEATURES[k]) + v = np.stack(v, axis=0) if v else np.array([], dtype=_POLYMER_FEATURES[k]) # pyrefly: ignore[no-matching-overload] stacked_features[k] = v return stacked_features @@ -988,5 +988,5 @@ def run_hmmsearch_with_a3m( filter_max=hmmsearch_config.filter_max, ) # STO enables us to annotate query non-gap columns as reference columns. - sto = parsers.convert_a3m_to_stockholm(a3m, max_a3m_query_sequences) + sto = parsers.convert_a3m_to_stockholm(a3m, max_a3m_query_sequences) # pyrefly: ignore[bad-argument-type] return searcher.query_with_sto(sto, model_construction='hand') diff --git a/src/alphafold3/data/tools/jackhmmer.py b/src/alphafold3/data/tools/jackhmmer.py index 5acc8b5..5f8a83a 100644 --- a/src/alphafold3/data/tools/jackhmmer.py +++ b/src/alphafold3/data/tools/jackhmmer.py @@ -277,7 +277,7 @@ def _query_db_shard( return msa_tool.MsaToolResult( target_sequence=target_sequence, a3m=a3m, - e_value=self._e_value, + e_value=self._e_value, # pyrefly: ignore[bad-argument-type] tblout=tbl, ) diff --git a/src/alphafold3/data/tools/shards.py b/src/alphafold3/data/tools/shards.py index 1af49cf..dbca7d0 100644 --- a/src/alphafold3/data/tools/shards.py +++ b/src/alphafold3/data/tools/shards.py @@ -32,8 +32,8 @@ from collections.abc import Sequence import dataclasses -import pathlib import re +from etils import epath _MAX_NUM_SHARDS = 99_999 @@ -73,7 +73,7 @@ def parse_shard_spec(path: str) -> ShardSpec | None: if shards != '*': return ShardSpec(prefix=prefix, num_shards=int(shards), suffix=suffix) shard_slice = slice(len(prefix) + 10, len(prefix) + 15) - shard_path = pathlib.Path(f'{prefix}-00000-of-?????{suffix}') + shard_path = epath.Path(f'{prefix}-00000-of-?????{suffix}') for shard in sorted(shard_path.parent.glob(shard_path.name), reverse=True): try: num_shards = int(str(shard)[shard_slice]) diff --git a/src/alphafold3/jax/geometry/rigid_matrix_vector.py b/src/alphafold3/jax/geometry/rigid_matrix_vector.py index 4761e55..6d0e124 100644 --- a/src/alphafold3/jax/geometry/rigid_matrix_vector.py +++ b/src/alphafold3/jax/geometry/rigid_matrix_vector.py @@ -61,7 +61,7 @@ def _compute_covariance_matrix( Covariance Matrix as [..., 3, 3] array. """ weights = jnp.asarray(weights) - weights = jnp.broadcast_to(weights, row_values.shape) + weights = jnp.broadcast_to(weights, row_values.shape) # pyrefly: ignore[missing-attribute] out = [] @@ -115,13 +115,13 @@ class Rigid3Array: def __matmul__(self, other: Self) -> Self: new_rotation = self.rotation @ other.rotation new_translation = self.apply_to_point(other.translation) - return Rigid3Array(new_rotation, new_translation) + return Rigid3Array(new_rotation, new_translation) # pyrefly: ignore[bad-argument-count, bad-return] def inverse(self) -> Self: """Return Rigid3Array corresponding to inverse transform.""" inv_rotation = self.rotation.inverse() inv_translation = inv_rotation.apply_to_point(-self.translation) - return Rigid3Array(inv_rotation, inv_translation) + return Rigid3Array(inv_rotation, inv_translation) # pyrefly: ignore[bad-argument-count, bad-return] def apply_to_point(self, point: vector.Vec3Array) -> vector.Vec3Array: """Apply Rigid3Array transform to point.""" @@ -135,21 +135,21 @@ def apply_inverse_to_point(self, point: vector.Vec3Array) -> vector.Vec3Array: def compose_rotation(self, other_rotation: rotation_matrix.Rot3Array) -> Self: rot = self.rotation @ other_rotation trans = jax.tree.map( - lambda x: jnp.broadcast_to(x, rot.shape), self.translation + lambda x: jnp.broadcast_to(x, rot.shape), self.translation # pyrefly: ignore[missing-attribute] ) - return Rigid3Array(rot, trans) + return Rigid3Array(rot, trans) # pyrefly: ignore[bad-argument-count, bad-return] @classmethod def identity(cls, shape: Any, dtype: jnp.dtype = jnp.float32) -> Self: """Return identity Rigid3Array of given shape.""" return cls( - rotation_matrix.Rot3Array.identity(shape, dtype=dtype), + rotation_matrix.Rot3Array.identity(shape, dtype=dtype), # pyrefly: ignore[bad-argument-count] vector.Vec3Array.zeros(shape, dtype=dtype), ) # pytype: disable=wrong-arg-count # trace-all-classes def scale_translation(self, factor: Float) -> Self: """Scale translation in Rigid3Array by 'factor'.""" - return Rigid3Array(self.rotation, self.translation * factor) + return Rigid3Array(self.rotation, self.translation * factor) # pyrefly: ignore[bad-argument-count, bad-return] def to_array(self): rot_array = self.rotation.to_array() @@ -168,12 +168,12 @@ def from_array4x4(cls, array: jnp.ndarray) -> Self: if array.shape[-2:] != (4, 4): raise ValueError(f'array.shape({array.shape}) must be [..., 4, 4]') rotation = rotation_matrix.Rot3Array( - *(array[..., 0, 0], array[..., 0, 1], array[..., 0, 2]), + *(array[..., 0, 0], array[..., 0, 1], array[..., 0, 2]), # pyrefly: ignore[bad-argument-count] *(array[..., 1, 0], array[..., 1, 1], array[..., 1, 2]), *(array[..., 2, 0], array[..., 2, 1], array[..., 2, 2]), ) translation = vector.Vec3Array( - array[..., 0, 3], array[..., 1, 3], array[..., 2, 3] + array[..., 0, 3], array[..., 1, 3], array[..., 2, 3] # pyrefly: ignore[bad-argument-count] ) return cls(rotation, translation) # pytype: disable=wrong-arg-count # trace-all-classes @@ -203,7 +203,7 @@ def from_point_alignment( weights = 1.0 def compute_center(value): - return utils.weighted_mean(value=value, weights=weights, axis=-1) + return utils.weighted_mean(value=value, weights=weights, axis=-1) # pyrefly: ignore[bad-argument-type] points_to_center = jax.tree.map(compute_center, points_to) points_from_center = jax.tree.map(compute_center, points_from) @@ -212,7 +212,7 @@ def compute_center(value): cov_mat = _compute_covariance_matrix( centered_points_to, centered_points_from, - weights=weights, + weights=weights, # pyrefly: ignore[bad-argument-type] epsilon=epsilon, ) rots = rotation_matrix.Rot3Array.from_svd( diff --git a/src/alphafold3/jax/geometry/rotation_matrix.py b/src/alphafold3/jax/geometry/rotation_matrix.py index 070bf63..89edc9a 100644 --- a/src/alphafold3/jax/geometry/rotation_matrix.py +++ b/src/alphafold3/jax/geometry/rotation_matrix.py @@ -132,8 +132,8 @@ class Rot3Array: def inverse(self) -> Self: """Returns inverse of Rot3Array.""" - return Rot3Array( - *(self.xx, self.yx, self.zx), + return Rot3Array( # pyrefly: ignore[bad-return] + *(self.xx, self.yx, self.zx), # pyrefly: ignore[bad-argument-count] *(self.xy, self.yy, self.zy), *(self.xz, self.yz, self.zz), ) @@ -141,7 +141,7 @@ def inverse(self) -> Self: def apply_to_point(self, point: vector.Vec3Array) -> vector.Vec3Array: """Applies Rot3Array to point.""" return vector.Vec3Array( - self.xx * point.x + self.xy * point.y + self.xz * point.z, + self.xx * point.x + self.xy * point.y + self.xz * point.z, # pyrefly: ignore[bad-argument-count] self.yx * point.x + self.yy * point.y + self.yz * point.z, self.zx * point.x + self.zy * point.y + self.zz * point.z, ) @@ -152,10 +152,10 @@ def apply_inverse_to_point(self, point: vector.Vec3Array) -> vector.Vec3Array: def __matmul__(self, other: Self) -> Self: """Composes two Rot3Arrays.""" - c0 = self.apply_to_point(vector.Vec3Array(other.xx, other.yx, other.zx)) - c1 = self.apply_to_point(vector.Vec3Array(other.xy, other.yy, other.zy)) - c2 = self.apply_to_point(vector.Vec3Array(other.xz, other.yz, other.zz)) - return Rot3Array(c0.x, c1.x, c2.x, c0.y, c1.y, c2.y, c0.z, c1.z, c2.z) + c0 = self.apply_to_point(vector.Vec3Array(other.xx, other.yx, other.zx)) # pyrefly: ignore[bad-argument-count] + c1 = self.apply_to_point(vector.Vec3Array(other.xy, other.yy, other.zy)) # pyrefly: ignore[bad-argument-count] + c2 = self.apply_to_point(vector.Vec3Array(other.xz, other.yz, other.zz)) # pyrefly: ignore[bad-argument-count] + return Rot3Array(c0.x, c1.x, c2.x, c0.y, c1.y, c2.y, c0.z, c1.z, c2.z) # pyrefly: ignore[bad-argument-count, bad-return] @classmethod def identity(cls, shape: Any, dtype: jnp.dtype = jnp.float32) -> Self: @@ -266,7 +266,7 @@ def from_svd(cls, mat: jnp.ndarray, use_quat_formula: bool = True) -> Self: symmetric_4by4 = jnp.reshape(symmetric_4by4, mat.shape[:-1] + (4, 4)) largest_eigvec = largest_evec(symmetric_4by4) return cls.from_quaternion( - *utils.unstack(largest_eigvec, axis=-1) + *utils.unstack(largest_eigvec, axis=-1) # pyrefly: ignore[bad-argument-type] ).inverse() else: @@ -288,7 +288,7 @@ def random_uniform(cls, key, shape, dtype=jnp.float32) -> Self: """Samples uniform random Rot3Array according to Haar Measure.""" quat_array = jax.random.normal(key, tuple(shape) + (4,), dtype=dtype) quats = utils.unstack(quat_array) - return cls.from_quaternion(*quats) + return cls.from_quaternion(*quats) # pyrefly: ignore[bad-argument-type] def __getstate__(self): return (VERSION, [np.asarray(getattr(self, field)) for field in COMPONENTS]) diff --git a/src/alphafold3/jax/geometry/struct_of_array.py b/src/alphafold3/jax/geometry/struct_of_array.py index a4bed29..b92a6b6 100644 --- a/src/alphafold3/jax/geometry/struct_of_array.py +++ b/src/alphafold3/jax/geometry/struct_of_array.py @@ -214,7 +214,7 @@ def __call__(self, cls): new_cls = dataclasses.dataclass(cls, frozen=True, eq=False) # pytype: disable=wrong-keyword-args # pytree claims to require metadata to be hashable, not sure why, # But making derived dataclass that can just hold metadata - new_cls.metadata_cls = make_metadata_class(new_cls) + new_cls.metadata_cls = make_metadata_class(new_cls) # pyrefly: ignore[missing-attribute] def unflatten(aux, data): inner_treedefs, metadata, num_arrays = aux @@ -232,9 +232,9 @@ def unflatten(aux, data): for field in metadata_fields: value_dict[field.name] = getattr(metadata, field.name) - return new_cls(**value_dict) + return new_cls(**value_dict) # pyrefly: ignore[bad-argument-count] jax.tree_util.register_pytree_node( - nodetype=new_cls, flatten_func=flatten, unflatten_func=unflatten + nodetype=new_cls, flatten_func=flatten, unflatten_func=unflatten # pyrefly: ignore[bad-argument-type] ) return new_cls diff --git a/src/alphafold3/jax/geometry/utils.py b/src/alphafold3/jax/geometry/utils.py index 24aed8f..c3df1b4 100644 --- a/src/alphafold3/jax/geometry/utils.py +++ b/src/alphafold3/jax/geometry/utils.py @@ -72,6 +72,6 @@ def weighted_mean( elif axis is None: axis = list(range(len(weights_shape))) - return jnp.sum(weights * value, axis=axis) / ( - jnp.sum(weights, axis=axis) + eps + return jnp.sum(weights * value, axis=axis) / ( # pyrefly: ignore[bad-argument-type] + jnp.sum(weights, axis=axis) + eps # pyrefly: ignore[bad-argument-type] ) diff --git a/src/alphafold3/jax/geometry/vector.py b/src/alphafold3/jax/geometry/vector.py index 091ab2d..61791b6 100644 --- a/src/alphafold3/jax/geometry/vector.py +++ b/src/alphafold3/jax/geometry/vector.py @@ -89,7 +89,7 @@ def cross(self, other: Self) -> Self: new_x = self.y * other.z - self.z * other.y new_y = self.z * other.x - self.x * other.z new_z = self.x * other.y - self.y * other.x - return Vec3Array(new_x, new_y, new_z) + return Vec3Array(new_x, new_y, new_z) # pyrefly: ignore[bad-argument-count, bad-return] def dot(self, other: Self) -> Float: """Compute dot product between 'self' and 'other'.""" @@ -114,7 +114,7 @@ def normalized(self, epsilon: float = 1e-6) -> Self: def zeros(cls, shape, dtype=jnp.float32): """Return Vec3Array corresponding to zeros of given shape.""" return cls( - jnp.zeros(shape, dtype), + jnp.zeros(shape, dtype), # pyrefly: ignore[bad-argument-count] jnp.zeros(shape, dtype), jnp.zeros(shape, dtype), ) # pytype: disable=wrong-arg-count # trace-all-classes @@ -166,7 +166,7 @@ def dot(vector1: Vec3Array, vector2: Vec3Array) -> Float: def cross(vector1: Vec3Array, vector2: Vec3Array) -> Float: - return vector1.cross(vector2) + return vector1.cross(vector2) # pyrefly: ignore[bad-return] def norm(vector: Vec3Array, epsilon: float = 1e-6) -> Float: diff --git a/src/alphafold3/model/atom_layout/atom_layout.py b/src/alphafold3/model/atom_layout/atom_layout.py index 52093a3..9e0a963 100644 --- a/src/alphafold3/model/atom_layout/atom_layout.py +++ b/src/alphafold3/model/atom_layout/atom_layout.py @@ -118,7 +118,7 @@ def __getitem__(self, key: NumpyIndex) -> 'AtomLayout': ), ) - def __eq__(self, other: 'AtomLayout') -> bool: + def __eq__(self, other: 'AtomLayout') -> bool: # pyrefly: ignore[bad-override] if not np.array_equal(self.atom_name, other.atom_name): return False @@ -299,7 +299,7 @@ def __getitem__(self, key: NumpyIndex) -> 'Residues': ), ) - def __eq__(self, other: 'Residues') -> bool: + def __eq__(self, other: 'Residues') -> bool: # pyrefly: ignore[bad-override] return all( np.array_equal(getattr(self, field.name), getattr(other, field.name)) for field in dataclasses.fields(self) @@ -426,10 +426,10 @@ def _convert_str_array(gather: GatherInfo, arr: np.ndarray): return dataclasses.replace( minimal_atom_layout, atom_element=_convert_str_array( - ref_to_self, reference_atoms.atom_element + ref_to_self, reference_atoms.atom_element # pyrefly: ignore[bad-argument-type] ), - res_name=_convert_str_array(ref_to_self, reference_atoms.res_name), - chain_type=_convert_str_array(ref_to_self, reference_atoms.chain_type), + res_name=_convert_str_array(ref_to_self, reference_atoms.res_name), # pyrefly: ignore[bad-argument-type] + chain_type=_convert_str_array(ref_to_self, reference_atoms.chain_type), # pyrefly: ignore[bad-argument-type] ) @@ -821,11 +821,12 @@ def make_flat_atom_layout( strict=True, ) ) - elif residues.smiles_string[idx]: + elif residues.smiles_string[idx]: # pyrefly: ignore[unsupported-operation] # Get atoms from RDKit via SMILES. - mol = Chem.MolFromSmiles(residues.smiles_string[idx]) + mol = Chem.MolFromSmiles(residues.smiles_string[idx]) # pyrefly: ignore[unsupported-operation] if mol is None: raise ValueError( + # pyrefly: ignore[unsupported-operation] f'Failed to construct RDKit Mol for {residues.res_name[idx]} from' f' SMILES string: {residues.smiles_string[idx]} . This is likely' ' due to an issue with the SMILES string. Note that the userCCD' @@ -847,8 +848,8 @@ def make_flat_atom_layout( (n, e) for n, e in atom_names_elements if (e != 'H' and e != 'D') ] bonded_atoms = get_bonded_atoms( - polymer_ligand_bonds, - ligand_ligand_bonds, + polymer_ligand_bonds, # pyrefly: ignore[bad-argument-type] + ligand_ligand_bonds, # pyrefly: ignore[bad-argument-type] residues.res_id[idx], residues.chain_id[idx], ) diff --git a/src/alphafold3/model/components/haiku_modules.py b/src/alphafold3/model/components/haiku_modules.py index 91a6d94..91c8e26 100644 --- a/src/alphafold3/model/components/haiku_modules.py +++ b/src/alphafold3/model/components/haiku_modules.py @@ -94,7 +94,7 @@ def __call__(self, x: jnp.ndarray) -> jnp.ndarray: if self.upcast and is_16bit: x = x.astype(jnp.float32) - param_axis = self.param_axis[0] if self.param_axis else -1 + param_axis = self.param_axis[0] if self.param_axis else -1 # pyrefly: ignore[bad-index] param_shape = (x.shape[param_axis],) param_broadcast_shape = [1] * x.ndim @@ -156,7 +156,7 @@ def haiku_linear_get_params( if isinstance(num_output, numbers.Integral): output_shape = (num_output,) else: - output_shape = tuple(num_output) + output_shape = tuple(num_output) # pyrefly: ignore[bad-argument-type] if num_input_dims > 0: in_shape = inputs.shape[-num_input_dims:] @@ -240,7 +240,7 @@ def __init__( if isinstance(num_output, numbers.Integral): self.output_shape = (num_output,) else: - self.output_shape = tuple(num_output) + self.output_shape = tuple(num_output) # pyrefly: ignore[bad-argument-type] self.initializer = initializer self.use_bias = use_bias self.bias_init = bias_init diff --git a/src/alphafold3/model/confidence_types.py b/src/alphafold3/model/confidence_types.py index dfdead6..a5d7c05 100644 --- a/src/alphafold3/model/confidence_types.py +++ b/src/alphafold3/model/confidence_types.py @@ -19,6 +19,7 @@ """Confidence categories for predictions.""" +from collections.abc import Sequence import dataclasses import enum import json @@ -170,6 +171,8 @@ class StructureConfidenceSummary: chain_pair_iptm: [num_chains, num_chains] Chain pair ipTM. chain_ptm: [num_chains] Chain pTM. chain_iptm: [num_chains] Mean cross chain ipTM for a chain. + chain_ids: [num_chains] Chain IDs in the same order as the chain-level + arrays. """ ptm: float @@ -181,12 +184,14 @@ class StructureConfidenceSummary: chain_pair_iptm: np.ndarray chain_ptm: np.ndarray chain_iptm: np.ndarray + chain_ids: Sequence[str] = dataclasses.field(default_factory=list) @classmethod def from_inference_result( cls, inference_result: model.InferenceResult ) -> Self: """Returns a new instance based on a given inference result.""" + chain_ids = [str(c) for c in inference_result.metadata['token_chain_ids']] # pyrefly: ignore[not-iterable] return cls( ptm=float(inference_result.metadata['ptm']), iptm=float(inference_result.metadata['iptm']), @@ -195,10 +200,11 @@ def from_inference_result( inference_result.metadata['fraction_disordered'] ), has_clash=float(inference_result.metadata['has_clash']), - chain_pair_pae_min=inference_result.metadata['chain_pair_pae_min'], - chain_pair_iptm=inference_result.metadata['chain_pair_iptm'], - chain_ptm=inference_result.metadata['iptm_ichain'], - chain_iptm=inference_result.metadata['iptm_xchain'], + chain_pair_pae_min=inference_result.metadata['chain_pair_pae_min'], # pyrefly: ignore[bad-argument-type] + chain_pair_iptm=inference_result.metadata['chain_pair_iptm'], # pyrefly: ignore[bad-argument-type] + chain_ptm=inference_result.metadata['iptm_ichain'], # pyrefly: ignore[bad-argument-type] + chain_iptm=inference_result.metadata['iptm_xchain'], # pyrefly: ignore[bad-argument-type] + chain_ids=chain_ids, ) @classmethod @@ -207,11 +213,16 @@ def from_json(cls, json_string: str) -> Self: return cls(**json.loads(json_string)) def to_json(self) -> str: + """Returns a JSON representation of the dataclass.""" + def convert(data): if isinstance(data, np.ndarray): # Cast to np.float64 before rounding, since casting to Python float will # cast to a 64 bit float, potentially undoing np.float32 rounding. rounded_data = np.round(data.astype(np.float64), decimals=2).tolist() + elif isinstance(data, str): + # String leaves (e.g. chain_ids entries) are passed through unchanged. + rounded_data = data else: rounded_data = np.round(data, decimals=2) return rounded_data @@ -251,10 +262,10 @@ def from_inference_result( atom_plddts = struc.atom_b_factor.tolist() token_chain_ids = [ str(token_id) - for token_id in inference_result.metadata['token_chain_ids'] + for token_id in inference_result.metadata['token_chain_ids'] # pyrefly: ignore[not-iterable] ] token_res_ids = [ - int(token_id) for token_id in inference_result.metadata['token_res_ids'] + int(token_id) for token_id in inference_result.metadata['token_res_ids'] # pyrefly: ignore[not-iterable] ] return cls( pae=pae, diff --git a/src/alphafold3/model/confidences.py b/src/alphafold3/model/confidences.py index 0119821..387238f 100644 --- a/src/alphafold3/model/confidences.py +++ b/src/alphafold3/model/confidences.py @@ -134,7 +134,7 @@ def fraction_disordered( if not rasa: return 0.0 - return np.mean(np.array(rasa) > rasa_disorder_cutoff) + return np.mean(np.array(rasa) > rasa_disorder_cutoff) # pyrefly: ignore[bad-return] def has_clash( diff --git a/src/alphafold3/model/features.py b/src/alphafold3/model/features.py index 79b2ffc..e83b1aa 100644 --- a/src/alphafold3/model/features.py +++ b/src/alphafold3/model/features.py @@ -148,7 +148,7 @@ def _compute_asym_entity_and_sym_id( if chain_id not in seen_chain_ids: asym_id = len(seen_chain_ids) + 1 seen_chain_ids.add(chain_id) - seq = ','.join(all_tokens.res_name[all_tokens.chain_id == chain_id]) + seq = ','.join(all_tokens.res_name[all_tokens.chain_id == chain_id]) # pyrefly: ignore[unsupported-operation] if seq not in seq_to_entity_id_sym_id: entity_id = len(seq_to_entity_id_sym_id) + 1 sym_id = 1 @@ -212,10 +212,10 @@ def tokenizer( # residue. for key, group_iter in itertools.groupby( zip( - flat_output_layout.chain_type, + flat_output_layout.chain_type, # pyrefly: ignore[bad-argument-type] flat_output_layout.chain_id, flat_output_layout.res_id, - flat_output_layout.res_name, + flat_output_layout.res_name, # pyrefly: ignore[bad-argument-type] flat_output_layout.atom_name, np.arange(flat_output_layout.shape[0]), ), @@ -322,7 +322,7 @@ def tokenizer( # Standard protein and nucleic residues have many atoms per token chain_id = all_tokens.chain_id[idx] res_id = all_tokens.res_id[idx] - res_name = all_tokens.res_name[idx] + res_name = all_tokens.res_name[idx] # pyrefly: ignore[unsupported-operation] atom_names = [] atom_elements = [] @@ -380,16 +380,16 @@ def tokenizer( # ligands have only 1 atom per token padding = [''] * (max_atoms_per_token - 1) atom_names = [all_tokens.atom_name[idx]] + padding - atom_elements = [all_tokens.atom_element[idx]] + padding + atom_elements = [all_tokens.atom_element[idx]] + padding # pyrefly: ignore[unsupported-operation] # Append the atoms to the target lists. target_atom_names.append(atom_names) target_atom_elements.append(atom_elements) - target_res_names.append([all_tokens.res_name[idx]] * max_atoms_per_token) + target_res_names.append([all_tokens.res_name[idx]] * max_atoms_per_token) # pyrefly: ignore[unsupported-operation] target_res_ids.append([all_tokens.res_id[idx]] * max_atoms_per_token) target_chain_ids.append([all_tokens.chain_id[idx]] * max_atoms_per_token) target_chain_types.append( - [all_tokens.chain_type[idx]] * max_atoms_per_token + [all_tokens.chain_type[idx]] * max_atoms_per_token # pyrefly: ignore[unsupported-operation] ) # Make sure to get the right shape also for 0 tokens @@ -530,7 +530,7 @@ def compute_features( msa_features = unpaired_msa.featurize() all_seqs_msa_features = paired_msa.featurize() - msa_features = msa_features | { + msa_features = msa_features | { # pyrefly: ignore[unsupported-operation] f'{k}_all_seq': v for k, v in all_seqs_msa_features.items() } feats = msa_features @@ -567,7 +567,7 @@ def compute_features( nonempty_asym_ids.append(chain['asym_id'][0]) if 'msa_all_seq' in np_chains_list[0]: np_chains_list = msa_pairing.remove_all_gapped_rows_from_all_seqs( - np_chains_list, asym_ids=nonempty_asym_ids + np_chains_list, asym_ids=nonempty_asym_ids # pyrefly: ignore[bad-argument-type] ) # Crop MSA rows. @@ -631,7 +631,7 @@ def compute_features( ]) np_example['msa_all_seq'] = np_example['msa_all_seq'][:max_allowed_paired] - np_example = merging_features.merge_paired_and_unpaired_msa(np_example) + np_example = merging_features.merge_paired_and_unpaired_msa(np_example) # pyrefly: ignore[bad-argument-type] # Crop MSA residues. Need to use the standard token indices, since msa does # not expand non-standard residues. This means that for expanded residues, @@ -657,7 +657,7 @@ def safe_cast_int8(x): np.int8 ) - return MSA( + return MSA( # pyrefly: ignore[bad-return] rows=_pad_to(safe_cast_int8(np_example['msa']), (msa_size, num_tokens)), mask=_pad_to( np_example['msa_mask'].astype(bool), (msa_size, num_tokens) @@ -668,15 +668,15 @@ def safe_cast_int8(x): safe_cast_int8(np_example['deletion_matrix']), (msa_size, num_tokens), ), - profile=_pad_to(np_example['profile'], (num_tokens, None)), - deletion_mean=_pad_to(np_example['deletion_mean'], (num_tokens,)), + profile=_pad_to(np_example['profile'], (num_tokens, None)), # pyrefly: ignore[bad-argument-type] + deletion_mean=_pad_to(np_example['deletion_mean'], (num_tokens,)), # pyrefly: ignore[bad-argument-type] num_alignments=np.array(num_alignments, dtype=np.int32), ) def index_msa_rows(self, indices: xnp_ndarray) -> Self: assert indices.ndim == 1 - return MSA( + return MSA( # pyrefly: ignore[bad-return] rows=self.rows[indices, :], mask=self.mask[indices, :], deletion_matrix=self.deletion_matrix[indices, :], @@ -857,7 +857,7 @@ def compute_features( (None, padding_shapes.num_tokens, None), ), ) - return templates_features + return templates_features # pyrefly: ignore[bad-return] @classmethod def from_data_dict(cls, batch: BatchDict) -> Self: @@ -941,7 +941,7 @@ def compute_features( token_index = np.arange(1, len(all_tokens.atom_name) + 1).astype(np.int32) aatype = [] - for res_name, chain_type in zip(all_tokens.res_name, all_tokens.chain_type): + for res_name, chain_type in zip(all_tokens.res_name, all_tokens.chain_type): # pyrefly: ignore[bad-argument-type] if chain_type in mmcif_names.POLYMER_CHAIN_TYPES: res_name = mmcif_names.fix_non_standard_polymer_res( res_name=res_name, chain_type=chain_type @@ -976,17 +976,17 @@ def compute_features( is_rna = all_tokens.chain_type == mmcif_names.RNA_CHAIN is_dna = all_tokens.chain_type == mmcif_names.DNA_CHAIN is_ligand = np.isin( - all_tokens.chain_type, list(mmcif_names.LIGAND_CHAIN_TYPES) + all_tokens.chain_type, list(mmcif_names.LIGAND_CHAIN_TYPES) # pyrefly: ignore[bad-argument-type] ) standard_polymer_chain = list(mmcif_names.NON_POLYMER_CHAIN_TYPES) + list( mmcif_names.STANDARD_POLYMER_CHAIN_TYPES ) is_nonstandard_polymer_chain = np.isin( - all_tokens.chain_type, standard_polymer_chain, invert=True + all_tokens.chain_type, standard_polymer_chain, invert=True # pyrefly: ignore[bad-argument-type] ) is_water = all_tokens.chain_type == mmcif_names.WATER - return TokenFeatures( + return TokenFeatures( # pyrefly: ignore[bad-return] residue_index=_pad_to(residue_index, (padding_shapes.num_tokens,)), token_index=_pad_to(token_index, (padding_shapes.num_tokens,)), aatype=_pad_to(aatype, (padding_shapes.num_tokens,)), @@ -995,14 +995,14 @@ def compute_features( entity_id=_pad_to(entity_id, (padding_shapes.num_tokens,)), sym_id=_pad_to(sym_id, (padding_shapes.num_tokens,)), seq_length=seq_length, - is_protein=_pad_to(is_protein, (padding_shapes.num_tokens,)), - is_rna=_pad_to(is_rna, (padding_shapes.num_tokens,)), - is_dna=_pad_to(is_dna, (padding_shapes.num_tokens,)), + is_protein=_pad_to(is_protein, (padding_shapes.num_tokens,)), # pyrefly: ignore[bad-argument-type] + is_rna=_pad_to(is_rna, (padding_shapes.num_tokens,)), # pyrefly: ignore[bad-argument-type] + is_dna=_pad_to(is_dna, (padding_shapes.num_tokens,)), # pyrefly: ignore[bad-argument-type] is_ligand=_pad_to(is_ligand, (padding_shapes.num_tokens,)), is_nonstandard_polymer_chain=_pad_to( is_nonstandard_polymer_chain, (padding_shapes.num_tokens,) ), - is_water=_pad_to(is_water, (padding_shapes.num_tokens,)), + is_water=_pad_to(is_water, (padding_shapes.num_tokens,)), # pyrefly: ignore[bad-argument-type] ) @classmethod @@ -1158,8 +1158,8 @@ def compute_features( # These atom renames are so that we can use the atom layout code with # all_tokens, which only has a single atom per token. atom_names = bond_layout.atom_name.copy() - atom_names[np.isin(bond_layout.chain_type, peptide_types)] = 'CA' - atom_names[np.isin(bond_layout.chain_type, nucleic_types)] = "C1'" + atom_names[np.isin(bond_layout.chain_type, peptide_types)] = 'CA' # pyrefly: ignore[bad-argument-type] + atom_names[np.isin(bond_layout.chain_type, nucleic_types)] = "C1'" # pyrefly: ignore[bad-argument-type] adjusted_bond_layout = atom_layout.AtomLayout( atom_name=atom_names, res_id=bond_layout.res_id, @@ -1374,7 +1374,7 @@ def compute_features( token_idxs = [] atom_idxs = [] for token_idx in range(all_token_atoms_layout.shape[0]): - chain_type = all_token_atoms_layout.chain_type[token_idx, 0] + chain_type = all_token_atoms_layout.chain_type[token_idx, 0] # pyrefly: ignore[unsupported-operation] atom_names = list(all_token_atoms_layout.atom_name[token_idx, :]) atom_idx = None is_nucleic_backbone = ( @@ -1389,7 +1389,7 @@ def compute_features( atom_idx = atom_names.index('CA') elif is_nucleic_backbone: # RNA / DNA chains - res_name = all_token_atoms_layout.res_name[token_idx, 0] + res_name = all_token_atoms_layout.res_name[token_idx, 0] # pyrefly: ignore[unsupported-operation] cifdict = ccd.get(res_name) if cifdict: parent = cifdict['_chem_comp.mon_nstd_parent_comp_id'][0] @@ -1646,7 +1646,7 @@ def get_reference( ) # Augment reference positions. - pos = random_augmentation(pos, random_state) + pos = random_augmentation(pos, random_state) # pyrefly: ignore[bad-argument-type] # Extract atom and bond information from CCD cif. from_atom = ccd_cif.get('_chem_comp_bond.atom_id_1', None) @@ -1719,7 +1719,7 @@ def compute_features( for idx in np.ndindex(all_token_atoms_layout.shape): chain_id = all_token_atoms_layout.chain_id[idx] res_id = all_token_atoms_layout.res_id[idx] - res_name = all_token_atoms_layout.res_name[idx] + res_name = all_token_atoms_layout.res_name[idx] # pyrefly: ignore[unsupported-operation] is_non_standard = res_name not in _STANDARD_RESIDUES atom_name = all_token_atoms_layout.atom_name[idx] if not atom_name: @@ -1760,7 +1760,7 @@ def compute_features( logging.warning( 'Missing atom "%s" for CCD "%s"', atom_name, - all_token_atoms_layout.res_name[idx], + all_token_atoms_layout.res_name[idx], # pyrefly: ignore[unsupported-operation] ) ref = conformation.get(atom_name, _DEFAULT_BLANK_REF) for k in ref: @@ -2096,7 +2096,7 @@ def compute_features( # Iterate over tokens for idx, args in enumerate( - zip(all_tokens.chain_type, all_tokens.chain_id, all_tokens.res_id) + zip(all_tokens.chain_type, all_tokens.chain_id, all_tokens.res_id) # pyrefly: ignore[bad-argument-type] ): chain_type, chain_id, res_id = args diff --git a/src/alphafold3/model/model.py b/src/alphafold3/model/model.py index 52412ff..f0a86db 100644 --- a/src/alphafold3/model/model.py +++ b/src/alphafold3/model/model.py @@ -122,7 +122,7 @@ def get_predicted_structure( zip( missing_atoms_flat_layout.chain_id, missing_atoms_flat_layout.res_id, - missing_atoms_flat_layout.res_name, + missing_atoms_flat_layout.res_name, # pyrefly: ignore[bad-argument-type] missing_atoms_flat_layout.atom_name, ) ) @@ -138,10 +138,10 @@ def get_predicted_structure( # Put them into a structure pred_struc = batch.convert_model_output.empty_output_struc pred_struc = pred_struc.copy_and_update_atoms( - atom_x=pred_flat_atom_coords[..., 0], - atom_y=pred_flat_atom_coords[..., 1], - atom_z=pred_flat_atom_coords[..., 2], - atom_b_factor=pred_flat_b_factors, + atom_x=pred_flat_atom_coords[..., 0], # pyrefly: ignore[bad-argument-type] + atom_y=pred_flat_atom_coords[..., 1], # pyrefly: ignore[bad-argument-type] + atom_z=pred_flat_atom_coords[..., 2], # pyrefly: ignore[bad-argument-type] + atom_b_factor=pred_flat_b_factors, # pyrefly: ignore[bad-argument-type] atom_occupancy=np.ones(pred_flat_atom_coords.shape[:-1]), # Always 1.0. ) # Set manually/differently when adding metadata. @@ -275,13 +275,13 @@ def __call__( if key is None: key = hk.next_rng_key() - batch = feat_batch.Batch.from_data_dict(batch) + batch = feat_batch.Batch.from_data_dict(batch) # pyrefly: ignore[bad-assignment] embedding_module = evoformer_network.Evoformer( self.config.evoformer, self.global_config ) target_feat = create_target_feat_embedding( - batch=batch, + batch=batch, # pyrefly: ignore[bad-argument-type] config=embedding_module.config, global_config=self.global_config, ) @@ -299,7 +299,7 @@ def recycle_body(_, args): embeddings['single'] = embeddings['single'].astype(jnp.float32) return embeddings, key - num_res = batch.num_res + num_res = batch.num_res # pyrefly: ignore[missing-attribute] embeddings = { 'pair': jnp.zeros( @@ -319,7 +319,7 @@ def recycle_body(_, args): embeddings, _ = hk.fori_loop(0, num_iter, recycle_body, (embeddings, key)) samples = self._sample_diffusion( - batch, + batch, # pyrefly: ignore[bad-argument-type] embeddings, sample_config=self.config.heads.diffusion.eval, ) @@ -331,9 +331,9 @@ def recycle_body(_, args): )( dense_atom_positions=dense_atom_positions, embeddings=embeddings, - seq_mask=batch.token_features.mask, - token_atoms_to_pseudo_beta=batch.pseudo_beta_info.token_atoms_to_pseudo_beta, - asym_id=batch.token_features.asym_id, + seq_mask=batch.token_features.mask, # pyrefly: ignore[missing-attribute] + token_atoms_to_pseudo_beta=batch.pseudo_beta_info.token_atoms_to_pseudo_beta, # pyrefly: ignore[missing-attribute] + asym_id=batch.token_features.asym_id, # pyrefly: ignore[missing-attribute] ), in_axes=0, )(samples['atom_positions']) @@ -376,40 +376,40 @@ def get_inference_result( dictionary of raw model result from the forward pass (for debugging). """ del target_name - batch = feat_batch.Batch.from_data_dict(batch) + batch = feat_batch.Batch.from_data_dict(batch) # pyrefly: ignore[bad-assignment] # Retrieve structure and construct a predicted structure. - pred_structure = get_predicted_structure(result=result, batch=batch) + pred_structure = get_predicted_structure(result=result, batch=batch) # pyrefly: ignore[bad-argument-type] - num_tokens = batch.token_features.seq_length.item() + num_tokens = batch.token_features.seq_length.item() # pyrefly: ignore[missing-attribute] pae_single_mask = np.tile( - batch.frames.mask[:, None], - [1, batch.frames.mask.shape[0]], + batch.frames.mask[:, None], # pyrefly: ignore[missing-attribute] + [1, batch.frames.mask.shape[0]], # pyrefly: ignore[missing-attribute] ) ptm = _compute_ptm( result=result, num_tokens=num_tokens, - asym_id=batch.token_features.asym_id[:num_tokens], + asym_id=batch.token_features.asym_id[:num_tokens], # pyrefly: ignore[missing-attribute] pae_single_mask=pae_single_mask, interface=False, ) iptm = _compute_ptm( result=result, num_tokens=num_tokens, - asym_id=batch.token_features.asym_id[:num_tokens], + asym_id=batch.token_features.asym_id[:num_tokens], # pyrefly: ignore[missing-attribute] pae_single_mask=pae_single_mask, interface=True, ) ptm_iptm_average = 0.8 * iptm + 0.2 * ptm - asym_ids = batch.token_features.asym_id[:num_tokens] + asym_ids = batch.token_features.asym_id[:num_tokens] # pyrefly: ignore[missing-attribute] # Map asym IDs back to chain IDs. Asym IDs are constructed from chain IDs by # iterating over the chain IDs, and for each unique chain ID incrementing # the asym ID by 1 and mapping it to the particular chain ID. Asym IDs are # 1-indexed, so subtract 1 to get back to the chain ID. chain_ids = [pred_structure.chains[asym_id - 1] for asym_id in asym_ids] - res_ids = batch.token_features.residue_index[:num_tokens] + res_ids = batch.token_features.residue_index[:num_tokens] # pyrefly: ignore[missing-attribute] if len(np.unique(asym_ids[:num_tokens])) > 1: # There is more than one chain, hence interface pTM (i.e. ipTM) defined, @@ -423,24 +423,24 @@ def get_inference_result( # Compute PAE related summaries. _, chain_pair_pae_min, _ = confidences.chain_pair_pae( num_tokens=num_tokens, - asym_ids=batch.token_features.asym_id, + asym_ids=batch.token_features.asym_id, # pyrefly: ignore[missing-attribute] full_pae=result['full_pae'], mask=pae_single_mask, ) chain_pair_pde_mean, chain_pair_pde_min = confidences.chain_pair_pde( num_tokens=num_tokens, - asym_ids=batch.token_features.asym_id, + asym_ids=batch.token_features.asym_id, # pyrefly: ignore[missing-attribute] full_pde=result['full_pde'], ) intra_chain_single_pde, cross_chain_single_pde, _ = confidences.pde_single( num_tokens, - batch.token_features.asym_id, + batch.token_features.asym_id, # pyrefly: ignore[missing-attribute] result['full_pde'], contact_probs, ) pae_metrics = confidences.pae_metrics( num_tokens=num_tokens, - asym_ids=batch.token_features.asym_id, + asym_ids=batch.token_features.asym_id, # pyrefly: ignore[missing-attribute] full_pae=result['full_pae'], mask=pae_single_mask, contact_probs=contact_probs, @@ -448,11 +448,11 @@ def get_inference_result( ) ranking_confidence_pae = confidences.rank_metric( result['full_pae'], - contact_probs * batch.frames.mask[:, None].astype(float), + contact_probs * batch.frames.mask[:, None].astype(float), # pyrefly: ignore[missing-attribute] ) chain_pair_iptm = _compute_chain_pair_iptm( num_tokens=num_tokens, - asym_ids=batch.token_features.asym_id, + asym_ids=batch.token_features.asym_id, # pyrefly: ignore[missing-attribute] mask=pae_single_mask, tm_adjusted_pae=result['tmscore_adjusted_pae_interface'], ) @@ -498,7 +498,7 @@ def get_inference_result( 'full_pae': result['full_pae'][idx, :num_tokens, :num_tokens], 'contact_probs': contact_probs[:num_tokens, :num_tokens], }, - metadata={ + metadata={ # pyrefly: ignore[bad-argument-type] 'predicted_distance_error': predicted_distance_errors[idx], 'ranking_score': ranking_score, 'fraction_disordered': fraction_disordered[idx], diff --git a/src/alphafold3/model/network/atom_cross_attention.py b/src/alphafold3/model/network/atom_cross_attention.py index 6667a10..156954f 100644 --- a/src/alphafold3/model/network/atom_cross_attention.py +++ b/src/alphafold3/model/network/atom_cross_attention.py @@ -340,22 +340,22 @@ def atom_cross_att_encoder( queries_act = hm.Linear( c.per_token_channels, name=f'{name}_project_atom_features_for_aggr' )(queries_act) - token_atoms_act = atom_layout.convert( + token_atoms_act = atom_layout.convert( # pyrefly: ignore[bad-assignment] batch.atom_cross_att.queries_to_token_atoms, queries_act, layout_axes=(-3, -2), ) token_act = utils.mask_mean( - token_atoms_mask[..., None], jax.nn.relu(token_atoms_act), axis=-2 + token_atoms_mask[..., None], jax.nn.relu(token_atoms_act), axis=-2 # pyrefly: ignore[bad-argument-type] ) return AtomCrossAttEncoderOutput( token_act=token_act, skip_connection=skip_connection, - queries_mask=queries_mask, - queries_single_cond=queries_single_cond, - keys_mask=keys_mask, - keys_single_cond=keys_single_cond, + queries_mask=queries_mask, # pyrefly: ignore[bad-argument-type] + queries_single_cond=queries_single_cond, # pyrefly: ignore[bad-argument-type] + keys_mask=keys_mask, # pyrefly: ignore[bad-argument-type] + keys_single_cond=keys_single_cond, # pyrefly: ignore[bad-argument-type] pair_cond=pair_act, ) diff --git a/src/alphafold3/model/network/diffusion_head.py b/src/alphafold3/model/network/diffusion_head.py index 14fe909..94e850e 100644 --- a/src/alphafold3/model/network/diffusion_head.py +++ b/src/alphafold3/model/network/diffusion_head.py @@ -335,13 +335,16 @@ def apply_denoising_step(carry, noise_level): key, key_noise, key_aug = jax.random.split(key, 3) positions = random_augmentation( - rng_key=key_aug, positions=positions, mask=mask + rng_key=key_aug, positions=positions, mask=mask # pyrefly: ignore[bad-argument-type] ) gamma = config.gamma_0 * (noise_level > config.gamma_min) t_hat = noise_level_prev * (1 + gamma) - noise_scale = config.noise_scale * jnp.sqrt(t_hat**2 - noise_level_prev**2) + noise_scale = config.noise_scale * jnp.sqrt( + # Don't take sqrt of tiny negative number (happens when running on CPU). + jnp.maximum(t_hat**2 - noise_level_prev**2, 0.0) + ) noise = noise_scale * jax.random.normal(key_noise, positions.shape) positions_noisy = positions + noise diff --git a/src/alphafold3/model/network/diffusion_transformer.py b/src/alphafold3/model/network/diffusion_transformer.py index 153137c..2148f26 100644 --- a/src/alphafold3/model/network/diffusion_transformer.py +++ b/src/alphafold3/model/network/diffusion_transformer.py @@ -373,7 +373,7 @@ def block(queries_act, pair_logits): # cross attention queries_act += cross_attention( x_q=queries_act, - x_k=keys_act, + x_k=keys_act, # pyrefly: ignore[bad-argument-type] mask_q=queries_mask, mask_k=keys_mask, config=self.config.attention, diff --git a/src/alphafold3/model/network/distogram_head.py b/src/alphafold3/model/network/distogram_head.py index 15492f6..0af6952 100644 --- a/src/alphafold3/model/network/distogram_head.py +++ b/src/alphafold3/model/network/distogram_head.py @@ -89,4 +89,4 @@ def __call__( if return_distogram: return_dict['distogram'] = logits - return return_dict + return return_dict # pyrefly: ignore[bad-return] diff --git a/src/alphafold3/model/network/featurization.py b/src/alphafold3/model/network/featurization.py index fc1a349..9ab36fe 100644 --- a/src/alphafold3/model/network/featurization.py +++ b/src/alphafold3/model/network/featurization.py @@ -163,7 +163,7 @@ def create_target_feat( ref_mask = batch.ref_structure.mask element_feat = jax.nn.one_hot(batch.ref_structure.element, 128) element_feat = utils.mask_mean( - mask=ref_mask[..., None], value=element_feat, axis=-2, eps=1e-6 + mask=ref_mask[..., None], value=element_feat, axis=-2, eps=1e-6 # pyrefly: ignore[bad-argument-type] ) target_features.append(element_feat) pos_feat = batch.ref_structure.positions diff --git a/src/alphafold3/model/network/modules.py b/src/alphafold3/model/network/modules.py index 6ef3ec9..fb99e43 100644 --- a/src/alphafold3/model/network/modules.py +++ b/src/alphafold3/model/network/modules.py @@ -240,7 +240,7 @@ def __call__(self, act, pair_mask): act = mapping.inference_subbatch( self._attention, - chunk_size, + chunk_size, # pyrefly: ignore[bad-argument-type] batched_args=[act, pair_mask], nonbatched_args=[nonbatched_bias], ) @@ -402,10 +402,8 @@ def compute_chunk(left_act): # Make sure that the 'b' dimension is the most minor batch like dimension # so it will be treated as the real batch by XLA (both during the forward # and the backward pass) - left_act = jnp.transpose(left_act, [0, 2, 1]) - act = jnp.einsum('acb,ade->dceb', left_act, right_act) - act = jnp.einsum('dceb,cef->dbf', act, output_w) + output_b - return jnp.transpose(act, [1, 0, 2]) + out = jnp.einsum('abc,ade,cef->bdf', left_act, right_act, output_w) + return out + output_b act = mapping.inference_subbatch( compute_chunk, @@ -521,9 +519,9 @@ def __call__( pair_logits = jnp.transpose(pair_logits, [2, 0, 1]) - single_act += diffusion_transformer.self_attention( - single_act, - seq_mask, + single_act += diffusion_transformer.self_attention( # pyrefly: ignore[unsupported-operation] + single_act, # pyrefly: ignore[bad-argument-type] + seq_mask, # pyrefly: ignore[bad-argument-type] pair_logits=pair_logits, config=self.config.single_attention, global_config=self.global_config, diff --git a/src/alphafold3/model/network/template_modules.py b/src/alphafold3/model/network/template_modules.py index 1081b87..38b4d67 100644 --- a/src/alphafold3/model/network/template_modules.py +++ b/src/alphafold3/model/network/template_modules.py @@ -110,7 +110,7 @@ def make_backbone_rigid( frame_positions[2] - frame_positions[1], frame_positions[0] - frame_positions[1], ) - rigid = geometry.Rigid3Array(rotation, frame_positions[1]) + rigid = geometry.Rigid3Array(rotation, frame_positions[1]) # pyrefly: ignore[bad-argument-count] return rigid, rigid_mask @@ -307,7 +307,7 @@ def construct_input( template_group_indices.astype(jnp.int32), ) points = rigid.translation - rigid_vec = rigid[:, None].inverse().apply_to_point(points) + rigid_vec = rigid[:, None].inverse().apply_to_point(points) # pyrefly: ignore[bad-index] unit_vector = rigid_vec.normalized() unit_vector = [unit_vector.x, unit_vector.y, unit_vector.z] diff --git a/src/alphafold3/model/params.py b/src/alphafold3/model/params.py index 97fb84c..3d20564 100644 --- a/src/alphafold3/model/params.py +++ b/src/alphafold3/model/params.py @@ -21,16 +21,16 @@ import bisect import collections -from collections.abc import Iterator +from collections.abc import Iterator, Sequence import contextlib import io import os -import pathlib import re import struct import sys from typing import IO +from etils import epath import haiku as hk import jax.numpy as jnp import numpy as np @@ -43,8 +43,8 @@ class RecordError(Exception): def encode_record(scope: str, name: str, arr: np.ndarray) -> bytes: """Encodes a single haiku param as bytes, preserving non-numpy dtypes.""" - scope = scope.encode('utf-8') - name = name.encode('utf-8') + scope = scope.encode('utf-8') # pyrefly: ignore[bad-assignment] + name = name.encode('utf-8') # pyrefly: ignore[bad-assignment] shape = arr.shape dtype = str(arr.dtype).encode('utf-8') arr = np.ascontiguousarray(arr) @@ -55,7 +55,7 @@ def encode_record(scope: str, name: str, arr: np.ndarray) -> bytes: '<5i', len(scope), len(name), len(dtype), len(shape), len(arr_buffer) ) return header + b''.join( - (scope, name, dtype, struct.pack(f'{len(shape)}i', *shape), arr_buffer) + (scope, name, dtype, struct.pack(f'{len(shape)}i', *shape), arr_buffer) # pyrefly: ignore[bad-argument-type] ) @@ -95,11 +95,11 @@ def read_records(stream: IO[bytes]) -> Iterator[tuple[str, str, np.ndarray]]: class _MultiFileIO(io.RawIOBase): """A file-like object that presents a concatenated view of multiple files.""" - def __init__(self, files: list[pathlib.Path]): - self._files = files + def __init__(self, files: Sequence[epath.PathLike]): + self._files = [epath.Path(file) for file in files] self._stack = contextlib.ExitStack() self._handles = [ - self._stack.enter_context(file.open('rb')) for file in files + self._stack.enter_context(file.open('rb')) for file in self._files ] self._sizes = [] for handle in self._handles: @@ -145,12 +145,20 @@ def seek(self, pos: int, whence: int = os.SEEK_SET, /): self._abspos = pos self._relpos = self._abs_to_rel(pos) - def readinto(self, b: bytearray | memoryview) -> int: + def readinto(self, b: bytearray | memoryview) -> int: # pyrefly: ignore[bad-override] result = 0 mem = memoryview(b) while mem: - self._handles[self._relpos[0]].seek(self._relpos[1]) - count = self._handles[self._relpos[0]].readinto(mem) + file_handle = self._handles[self._relpos[0]] + file_handle.seek(self._relpos[1]) + if hasattr(file_handle, 'readinto'): + count = file_handle.readinto(mem) # pyrefly: ignore[missing-attribute] + else: + # Workaround for file providers that do not support readinto. + data = file_handle.read(len(mem)) + count = len(data) + mem[:count] = data + result += count self._abspos += count self._relpos = self._abs_to_rel(self._abspos) @@ -161,7 +169,7 @@ def readinto(self, b: bytearray | memoryview) -> int: @contextlib.contextmanager -def open_for_reading(model_files: list[pathlib.Path], is_compressed: bool): +def open_for_reading(model_files: list[epath.PathLike], is_compressed: bool): with contextlib.closing(_MultiFileIO(model_files)) as f: if is_compressed: buffered = io.BufferedReader(f) @@ -171,8 +179,8 @@ def open_for_reading(model_files: list[pathlib.Path], is_compressed: bool): def _match_model( - paths: list[pathlib.Path], pattern: re.Pattern[str] -) -> dict[str, list[pathlib.Path]]: + paths: list[epath.Path], pattern: re.Pattern[str] +) -> dict[str, list[epath.Path]]: """Match files in a directory with a pattern, and group by model name.""" models = collections.defaultdict(list) for path in paths: @@ -183,10 +191,14 @@ def _match_model( def select_model_files( - model_dir: pathlib.Path, model_name: str | None = None -) -> tuple[list[pathlib.Path], bool]: + model_dir: epath.PathLike, model_name: str | None = None +) -> tuple[list[epath.Path], bool]: """Select the model files from a model directory.""" - files = [file for file in model_dir.iterdir() if file.is_file()] + model_dir = epath.Path(model_dir) + if model_dir.exists(): + files = [file for file in model_dir.iterdir() if file.is_file()] + else: + files = [] for pattern, is_compressed in ( (r'(?P.*)\.[0-9]+\.bin\.zst$', True), @@ -209,11 +221,11 @@ def select_model_files( raise FileNotFoundError(f'No models matched in {model_dir}') -def get_model_haiku_params(model_dir: pathlib.Path) -> hk.Params: +def get_model_haiku_params(model_dir: epath.PathLike) -> hk.Params: """Get the Haiku parameters from a model name.""" params: dict[str, dict[str, jnp.Array]] = {} model_files, is_compressed = select_model_files(model_dir) - with open_for_reading(model_files, is_compressed) as stream: + with open_for_reading(model_files, is_compressed) as stream: # pyrefly: ignore[bad-argument-type] for scope, name, arr in read_records(stream): params.setdefault(scope, {})[name] = jnp.array(arr) if not params: diff --git a/src/alphafold3/model/pipeline/inter_chain_bonds.py b/src/alphafold3/model/pipeline/inter_chain_bonds.py index 6a8c2d4..e918a03 100644 --- a/src/alphafold3/model/pipeline/inter_chain_bonds.py +++ b/src/alphafold3/model/pipeline/inter_chain_bonds.py @@ -95,10 +95,10 @@ def get_polymer_ligand_and_ligand_ligand_bonds( allow_multiple_bonds_per_atom=allow_multiple_bonds_per_atom, ) ligand_ligand_bonds_mask = np.isin( - all_bonds.chain_type, list(mmcif_names.LIGAND_CHAIN_TYPES) + all_bonds.chain_type, list(mmcif_names.LIGAND_CHAIN_TYPES) # pyrefly: ignore[bad-argument-type] ) polymer_ligand_bonds_mask = np.isin( - all_bonds.chain_type, list(mmcif_names.POLYMER_CHAIN_TYPES) + all_bonds.chain_type, list(mmcif_names.POLYMER_CHAIN_TYPES) # pyrefly: ignore[bad-argument-type] ) polymer_ligand_bonds_mask = np.logical_and( ligand_ligand_bonds_mask.any(axis=1), @@ -264,29 +264,29 @@ def get_bond_layout( np.logical_and( np.isin( from_atoms.chain_type, - allowed_chain_types1, + allowed_chain_types1, # pyrefly: ignore[bad-argument-type] ), np.isin( dest_atoms.chain_type, - allowed_chain_types2, + allowed_chain_types2, # pyrefly: ignore[bad-argument-type] ), ), np.logical_and( np.isin( from_atoms.chain_type, - allowed_chain_types2, + allowed_chain_types2, # pyrefly: ignore[bad-argument-type] ), np.isin( dest_atoms.chain_type, - allowed_chain_types1, + allowed_chain_types1, # pyrefly: ignore[bad-argument-type] ), ), ) if allowed_res_names: # Res type res_mask = np.logical_or( - np.isin(from_atoms.res_name, allowed_res_names), - np.isin(dest_atoms.res_name, allowed_res_names), + np.isin(from_atoms.res_name, allowed_res_names), # pyrefly: ignore[bad-argument-type] + np.isin(dest_atoms.res_name, allowed_res_names), # pyrefly: ignore[bad-argument-type] ) # All mask all_mask = np.logical_and(chain_mask, res_mask) diff --git a/src/alphafold3/model/pipeline/pipeline.py b/src/alphafold3/model/pipeline/pipeline.py index 2b39931..9f4aac7 100644 --- a/src/alphafold3/model/pipeline/pipeline.py +++ b/src/alphafold3/model/pipeline/pipeline.py @@ -308,7 +308,7 @@ def process_structure( # Create reference structure features chemical_components_data = struc_chem_comps.populate_missing_ccd_data( ccd=ccd, - chemical_components_data=cleaned_struc.chemical_components_data, + chemical_components_data=cleaned_struc.chemical_components_data, # pyrefly: ignore[bad-argument-type] populate_pdbx_smiles=True, ) @@ -322,8 +322,8 @@ def process_structure( padding_shapes=padding_shapes, flat_output_layout=flat_output_layout, empty_output_struc=empty_output_struc, - polymer_ligand_bonds=polymer_ligand_bonds, - ligand_ligand_bonds=ligand_ligand_bonds, + polymer_ligand_bonds=polymer_ligand_bonds, # pyrefly: ignore[bad-argument-type] + ligand_ligand_bonds=ligand_ligand_bonds, # pyrefly: ignore[bad-argument-type] ) # Create the PredictedStructureInfo @@ -366,7 +366,7 @@ def process_structure( padding_shapes=padding_shapes, chemical_components_data=chemical_components_data, random_state=random_state, - ref_max_modified_date=ref_max_modified_date, + ref_max_modified_date=ref_max_modified_date, # pyrefly: ignore[bad-argument-type] conformer_max_iterations=conformer_max_iterations, ligand_ligand_bonds=ligand_ligand_bonds, ) @@ -381,7 +381,7 @@ def process_structure( random_state=( np.random.RandomState(_DETERMINISTIC_FRAMES_RANDOM_SEED) ), - ref_max_modified_date=ref_max_modified_date, + ref_max_modified_date=ref_max_modified_date, # pyrefly: ignore[bad-argument-type] conformer_max_iterations=None, ligand_ligand_bonds=ligand_ligand_bonds, ) @@ -413,7 +413,7 @@ def process_structure( all_tokens=all_tokens, all_token_atoms_layout=all_token_atoms_layout, ref_structure=( - deterministic_ref_structure + deterministic_ref_structure # pyrefly: ignore[bad-argument-type] if self._config.deterministic_frames else batch_ref_structure ), @@ -456,7 +456,7 @@ def process_item( unpaired_msa_by_chain_id[chain.id] = chain.unpaired_msa if isinstance(chain, folding_input.ProteinChain): paired_msa_by_chain_id[chain.id] = chain.paired_msa - templates_by_chain_id[chain.id] = list(chain.templates) + templates_by_chain_id[chain.id] = list(chain.templates) # pyrefly: ignore[bad-argument-type] batch = self.process_structure( struct=struct, diff --git a/src/alphafold3/model/pipeline/structure_cleaning.py b/src/alphafold3/model/pipeline/structure_cleaning.py index 23acb7f..80c4b67 100644 --- a/src/alphafold3/model/pipeline/structure_cleaning.py +++ b/src/alphafold3/model/pipeline/structure_cleaning.py @@ -41,8 +41,8 @@ def _get_leaving_atom_mask( ) -> np.ndarray: """Updates a drop_leaving_atoms mask with new leaving atom locations.""" bonded_atoms = atom_layout.get_bonded_atoms( - polymer_ligand_bonds, - ligand_ligand_bonds, + polymer_ligand_bonds, # pyrefly: ignore[bad-argument-type] + ligand_ligand_bonds, # pyrefly: ignore[bad-argument-type] res_id, chain_id, ) @@ -197,7 +197,7 @@ def clean_structure( new_bonds = struc.bonds[is_covalent] else: new_bonds = structure.Bonds.make_empty() - struc = struc.copy_and_update(bonds=new_bonds) + struc = struc.copy_and_update(bonds=new_bonds) # pyrefly: ignore[bad-argument-type] # Other bond filters require iterating over individual bonds. if struc.bonds and (remove_bad_bonds or remove_polymer_polymer_bonds): @@ -246,7 +246,7 @@ def clean_structure( new_bonds = struc.bonds[np.array(include_bond, dtype=bool)] else: new_bonds = structure.Bonds.make_empty() - struc = struc.copy_and_update(bonds=new_bonds) + struc = struc.copy_and_update(bonds=new_bonds) # pyrefly: ignore[bad-argument-type] return struc diff --git a/src/alphafold3/model/post_processing.py b/src/alphafold3/model/post_processing.py index 22eef2f..5627357 100644 --- a/src/alphafold3/model/post_processing.py +++ b/src/alphafold3/model/post_processing.py @@ -21,12 +21,12 @@ import dataclasses import datetime -import os - +import io from alphafold3 import version from alphafold3.model import confidence_types from alphafold3.model import mmcif_metadata from alphafold3.model import model +from etils import epath import numpy as np import zstandard @@ -98,7 +98,7 @@ def post_process_inference_result( def write_output( inference_result: model.InferenceResult, - output_dir: os.PathLike[str] | str, + output_dir: epath.PathLike, terms_of_use: str | None = None, name: str | None = None, compress: bool = False, @@ -106,41 +106,40 @@ def write_output( """Writes processed inference result to a directory.""" processed_result = post_process_inference_result(inference_result) + output_dir = epath.Path(output_dir) prefix = f'{name}_' if name is not None else '' - if compress: - opener = zstandard.open - path_transform = lambda path: f'{path}.zst' - else: - opener = open - path_transform = lambda path: path - - mmcif_path = os.path.join(output_dir, f'{prefix}model.cif') - with opener(path_transform(mmcif_path), 'wb') as f: - f.write(processed_result.cif) - - full_confidences_path = os.path.join(output_dir, f'{prefix}confidences.json') - with opener(path_transform(full_confidences_path), 'wb') as f: - f.write(processed_result.structure_full_data_json) - - summary_confidences_path = os.path.join( - output_dir, f'{prefix}summary_confidences.json' + mmcif_path = output_dir / f'{prefix}model.cif' + full_confidences_path = output_dir / f'{prefix}confidences.json' + summary_confidences_path = output_dir / f'{prefix}summary_confidences.json' + + def write_bytes(path: epath.Path, data: bytes): + if compress: + with path.with_suffix(path.suffix + '.zst').open('wb') as f: + with zstandard.ZstdCompressor().stream_writer(f) as compressor: + compressor.write(data) + else: + path.write_bytes(data) + + write_bytes(mmcif_path, processed_result.cif) + write_bytes(full_confidences_path, processed_result.structure_full_data_json) + summary_confidences_path.write_bytes( + processed_result.structure_confidence_summary_json ) - with open(summary_confidences_path, 'wb') as f: - f.write(processed_result.structure_confidence_summary_json) if terms_of_use is not None: - with open(os.path.join(output_dir, 'TERMS_OF_USE.md'), 'wt') as f: - f.write(terms_of_use) + (output_dir / 'TERMS_OF_USE.md').write_text(terms_of_use) def write_embeddings( embeddings: dict[str, np.ndarray], - output_dir: os.PathLike[str] | str, + output_dir: epath.PathLike, name: str | None = None, ) -> None: """Writes embeddings to a directory.""" - prefix = f'{name}_' if name is not None else '' + output_dir = epath.Path(output_dir) + prefix = f'{name}_' if name else '' - with open(os.path.join(output_dir, f'{prefix}embeddings.npz'), 'wb') as f: - np.savez_compressed(f, **embeddings) + with io.BytesIO() as bio: + np.savez_compressed(bio, **embeddings) # pyrefly: ignore[bad-argument-type] + (output_dir / f'{prefix}embeddings.npz').write_bytes(bio.getvalue()) diff --git a/src/alphafold3/model/protein_data_processing.py b/src/alphafold3/model/protein_data_processing.py index 455034c..84009ca 100644 --- a/src/alphafold3/model/protein_data_processing.py +++ b/src/alphafold3/model/protein_data_processing.py @@ -35,7 +35,7 @@ ) -def _make_restype_rigidgroup_dense_atom_idx(): +def _make_restype_rigidgroup_dense_atom_idx() -> np.ndarray: """Create Mapping from rigid_groups to dense_atom indices.""" # Create an array with the atom names. # shape (num_restypes, num_rigidgroups, 3_atoms): @@ -82,7 +82,7 @@ def _make_restype_rigidgroup_dense_atom_idx(): RESTYPE_RIGIDGROUP_DENSE_ATOM_IDX = _make_restype_rigidgroup_dense_atom_idx() -def _make_restype_pseudobeta_idx(): +def _make_restype_pseudobeta_idx() -> np.ndarray: """Returns indices of residue's pseudo-beta.""" restype_pseudobeta_index = np.zeros( (NUM_RESTYPES_WITH_UNK_AND_GAP,), dtype=np.int32 @@ -111,7 +111,7 @@ def _make_restype_pseudobeta_idx(): RESTYPE_PSEUDOBETA_INDEX = _make_restype_pseudobeta_idx() -def _make_aatype_dense_atom_to_atom37(): +def _make_aatype_dense_atom_to_atom37() -> np.ndarray: """Map from dense_atom to atom37 per residue type.""" restype_dense_atom_to_atom37 = [] # mapping (restype, dense_atom) --> atom37 for rt in residue_names.PROTEIN_TYPES_ONE_LETTER: diff --git a/src/alphafold3/model/scoring/scoring.py b/src/alphafold3/model/scoring/scoring.py index 3ee354a..06df203 100644 --- a/src/alphafold3/model/scoring/scoring.py +++ b/src/alphafold3/model/scoring/scoring.py @@ -65,12 +65,12 @@ def pseudo_beta_fn( ) pseudo_beta = xnp.take_along_axis( - dense_atom_positions, pseudobeta_index[..., None, None], axis=-2 + dense_atom_positions, pseudobeta_index[..., None, None], axis=-2 # pyrefly: ignore[bad-argument-type] ) pseudo_beta = xnp.squeeze(pseudo_beta, axis=-2) pseudo_beta_mask = xnp.take_along_axis( - dense_atom_masks, pseudobeta_index[..., None], axis=-1 + dense_atom_masks, pseudobeta_index[..., None], axis=-1 # pyrefly: ignore[bad-argument-type] ).astype(xnp.float32) pseudo_beta_mask = xnp.squeeze(pseudo_beta_mask, axis=-1) diff --git a/src/alphafold3/structure/bioassemblies.py b/src/alphafold3/structure/bioassemblies.py index b5ae2f9..4bea62d 100644 --- a/src/alphafold3/structure/bioassemblies.py +++ b/src/alphafold3/structure/bioassemblies.py @@ -327,7 +327,7 @@ def rename_label_asym_ids( ) row['_pdbx_struct_assembly_gen.asym_id_list'] = ','.join(new_asym_ids) # pytype: disable=unsupported-operands - return BioassemblyData( + return BioassemblyData( # pyrefly: ignore[bad-return] pdbx_struct_assembly=copy.deepcopy(self._pdbx_struct_assembly), pdbx_struct_assembly_gen=new_pdbx_struct_assembly_gen, pdbx_struct_oper_list=copy.deepcopy(self._pdbx_struct_oper_list), diff --git a/src/alphafold3/structure/bonds.py b/src/alphafold3/structure/bonds.py index af0f1d0..899e020 100644 --- a/src/alphafold3/structure/bonds.py +++ b/src/alphafold3/structure/bonds.py @@ -92,7 +92,7 @@ def restrict_to_atoms(self, atom_key: np.ndarray) -> Self: from_atom_mask = np.isin(self.from_atom_key, atom_key) dest_atom_mask = np.isin(self.dest_atom_key, atom_key) mask = np.logical_and(from_atom_mask, dest_atom_mask) - return typing.cast(Bonds, self.filter(mask=mask)) + return typing.cast(Bonds, self.filter(mask=mask)) # pyrefly: ignore[bad-return] def to_mmcif_dict_from_atom_arrays( self, diff --git a/src/alphafold3/structure/chemical_components.py b/src/alphafold3/structure/chemical_components.py index 2d73955..25fbcea 100644 --- a/src/alphafold3/structure/chemical_components.py +++ b/src/alphafold3/structure/chemical_components.py @@ -36,11 +36,11 @@ def _value_is_missing(value: Collection[Any] | str | None) -> bool: def _to_optional_int(values: Sequence[str | None]) -> Sequence[int | None]: - return [None if _value_is_missing(x) else int(x) for x in values] + return [None if _value_is_missing(x) else int(x) for x in values] # pyrefly: ignore[bad-argument-type] def _to_optional_float(values: Sequence[str | None]) -> Sequence[float | None]: - return [None if _value_is_missing(x) else float(x) for x in values] + return [None if _value_is_missing(x) else float(x) for x in values] # pyrefly: ignore[bad-argument-type] @dataclasses.dataclass(frozen=True, kw_only=True, slots=True) @@ -208,7 +208,7 @@ def from_mmcif( pdbx_smiles=None, ) - return ChemicalComponentsData(chem_comp) + return ChemicalComponentsData(chem_comp) # pyrefly: ignore[bad-return] def to_mmcif_dict(self) -> Mapping[str, Sequence[str]]: """Returns chemical components data as a dict suitable for `mmcif.Mmcif`.""" diff --git a/src/alphafold3/structure/parsing.py b/src/alphafold3/structure/parsing.py index 18c35f2..c50c473 100644 --- a/src/alphafold3/structure/parsing.py +++ b/src/alphafold3/structure/parsing.py @@ -547,7 +547,7 @@ def from_res_arrays(atom_mask: np.ndarray, **kwargs) -> structure.Structure: key=chain_key[chain_start], id=chain_id[chain_start], type=fields.get('chain_type', chain_str_empty)[chain_start], - auth_asym_id=fields.get('chain_auth_asym_id', chain_id)[chain_start], + auth_asym_id=fields.get('chain_auth_asym_id', chain_id)[chain_start], # pyrefly: ignore[unsupported-operation] entity_id=entity_id, entity_desc=fields.get('chain_entity_desc', chain_str_empty)[chain_start], ) @@ -732,7 +732,7 @@ def from_sequences_and_bonds( if bond_indices_by_atom_name := bond_lookup.get((chain_i, res_i)): comp_atoms = None if sequence_format != SequenceFormat.LIGAND_SMILES: - comp_atoms = set(ccd.get(full_res_name)['_chem_comp_atom.atom_id']) + comp_atoms = set(ccd.get(full_res_name)['_chem_comp_atom.atom_id']) # pyrefly: ignore[unsupported-operation] for bond_atom_name, bond_indices in bond_indices_by_atom_name.items(): if comp_atoms is not None and bond_atom_name not in comp_atoms: raise ValueError( @@ -918,7 +918,7 @@ def add_residues( if chain_ids.size == 0: return - chain_ids_with_prev = np.concatenate( + chain_ids_with_prev = np.concatenate( # pyrefly: ignore[no-matching-overload] (([self.chain_id[-1] if self.chain_id else None], chain_ids)) ) chain_change_mask = chain_ids_with_prev[:-1] != chain_ids_with_prev[1:] diff --git a/src/alphafold3/structure/structure.py b/src/alphafold3/structure/structure.py index d54ecf9..53c210b 100644 --- a/src/alphafold3/structure/structure.py +++ b/src/alphafold3/structure/structure.py @@ -306,9 +306,9 @@ class ResArrays: class Structure(table.Database): """Structure class for representing and processing molecular structures.""" - tables: ClassVar[Collection[str]] = TABLE_FIELDS + tables: ClassVar[Collection[str]] = TABLE_FIELDS # pyrefly: ignore[bad-override] - foreign_keys: ClassVar[Mapping[str, Collection[tuple[str, str]]]] = { + foreign_keys: ClassVar[Mapping[str, Collection[tuple[str, str]]]] = { # pyrefly: ignore[bad-override] 'residues': (('chain_key', 'chains'),), 'atoms': (('chain_key', 'chains'), ('res_key', 'residues')), 'bonds': (('from_atom_key', 'atoms'), ('dest_atom_key', 'atoms')), @@ -1100,7 +1100,7 @@ def _iter_residues(struc: Self) -> Iterable[tuple[str, str]]: } res_indices = [ residue_index - for res_id in _iter_residues(other) + for res_id in _iter_residues(other) # pyrefly: ignore[bad-argument-type] if (residue_index := residue_index_map.get(res_id)) is not None ] @@ -1138,7 +1138,7 @@ def _iter_residues(struc: Self) -> Iterable[tuple[str, str]]: bonds=updated_tables.bonds, ) - def copy_and_update( + def copy_and_update( # pyrefly: ignore[bad-override] self, *, name: str | _UnsetType = _UNSET, @@ -1186,7 +1186,7 @@ def all_unset(fields): def select(field, default): return field if field != _UNSET else default - return Structure( + return Structure( # pyrefly: ignore[bad-return] name=select(name, self.name), release_date=select(release_date, self.release_date), resolution=select(resolution, self.resolution), @@ -1252,7 +1252,7 @@ def _copy_and_update( else: constructor_kwargs = {field: self[field] for field in _UPDATEABLE_FIELDS} constructor_kwargs.update(changes) - return Structure(skip_validation=skip_validation, **constructor_kwargs) + return Structure(skip_validation=skip_validation, **constructor_kwargs) # pyrefly: ignore[bad-return] def copy_and_update_coords(self, coords: np.ndarray) -> Self: """Performs a shallow copy but with coordinates updated.""" @@ -1355,7 +1355,7 @@ def select(field, default): bioassembly_data = select(bioassembly_data, self.bioassembly_data) chem_data = select(chemical_components_data, self.chemical_components_data) - return Structure( + return Structure( # pyrefly: ignore[bad-return] name=name, release_date=release_date, resolution=resolution, @@ -1562,10 +1562,10 @@ def filter( # Get boolean masks for each table. These are None if none of the filter # parameters affect the table in question. chain_mask = self._chains.make_filter_mask( - **chain_predicates, apply_per_element=apply_per_element + **chain_predicates, apply_per_element=apply_per_element # pyrefly: ignore[bad-argument-type] ) res_mask = self._residues.make_filter_mask( - **res_predicates, apply_per_element=apply_per_element + **res_predicates, apply_per_element=apply_per_element # pyrefly: ignore[bad-argument-type] ) atom_mask = self._atoms.make_filter_mask( mask, **atom_predicates, apply_per_element=apply_per_element @@ -1607,8 +1607,8 @@ def filter( ) filtered_chains = self._chains[nonempty_chain_mask] updated_tables = self._cascade_delete( - chains=filtered_chains, - residues=filtered_residues, + chains=filtered_chains, # pyrefly: ignore[bad-argument-type] + residues=filtered_residues, # pyrefly: ignore[bad-argument-type] atoms=filtered_atoms, ) case CascadeDelete.CHAINS: @@ -2312,7 +2312,7 @@ def transform_states_to_chains(self) -> Self: 'Coordinate field tensor must have 2 dimensions: ' f'(num_states, num_atoms), got {self._atoms.ndim}.' ) - return concat(self.unstack(axis=0)) + return concat(self.unstack(axis=0)) # pyrefly: ignore[bad-return] def merge_chains( self, @@ -2610,7 +2610,7 @@ def rename_auth_asym_ids(self, new_id_by_old_id: Mapping[str, str]) -> Self: ValueError: If any two previously distinct polymer chains do not have unique names anymore after the rename. """ - mapped_chains = self._chains.copy_and_remap(auth_asym_id=new_id_by_old_id) + mapped_chains = self._chains.copy_and_remap(auth_asym_id=new_id_by_old_id) # pyrefly: ignore[bad-argument-type] mapped_polymer_ids = mapped_chains.filter( type=mmcif_names.POLYMER_CHAIN_TYPES ).auth_asym_id @@ -2704,7 +2704,7 @@ def rename_res_name( for res_name in res_name_map: if res_name not in res_name_set: raise ValueError(f'"{res_name}" not found in this structure.') - new_residues = self._residues.copy_and_remap(name=res_name_map) + new_residues = self._residues.copy_and_remap(name=res_name_map) # pyrefly: ignore[bad-argument-type] if self._chemical_components_data is not None: chem_comp = { @@ -2848,7 +2848,7 @@ def _apply_bioassembly_transform( transform.apply_to_coords(base_struc.coords) ) transformed_chains = base_struc.chains_table.copy_and_remap( - id=transform.chain_id_rename_map + id=transform.chain_id_rename_map # pyrefly: ignore[bad-argument-type] ) # Set the transformed author chain ID to match the label chain ID. transformed_chains = transformed_chains.copy_and_update( @@ -2907,7 +2907,7 @@ def generate_bioassembly(self, assembly_id: str | None = None) -> Self: # Copy over all scalar fields (e.g. name, release date, etc.) other than # bioassembly_data because it relates only to the pre-transformed structure. - return concatenated.copy_and_update_globals( + return concatenated.copy_and_update_globals( # pyrefly: ignore[bad-return] name=self.name, release_date=self.release_date, resolution=self.resolution, @@ -2922,7 +2922,7 @@ def _to_mmcif_header(self) -> Mapping[str, Sequence[str]]: raw_mmcif['_entry.id'] = [self._name] if self._release_date is not None: - date = [datetime.datetime.strftime(self._release_date, '%Y-%m-%d')] + date = [datetime.datetime.strftime(self._release_date, '%Y-%m-%d')] # pyrefly: ignore[bad-argument-type] raw_mmcif['_pdbx_audit_revision_history.revision_date'] = date raw_mmcif['_pdbx_database_status.recvd_initial_deposition_date'] = date @@ -2934,11 +2934,11 @@ def _to_mmcif_header(self) -> Mapping[str, Sequence[str]]: raw_mmcif['_exptl.method'].append(method) if self._bioassembly_data is not None: - raw_mmcif.update(self._bioassembly_data.to_mmcif_dict()) + raw_mmcif.update(self._bioassembly_data.to_mmcif_dict()) # pyrefly: ignore[no-matching-overload] # Populate chemical components data for all residues of this Structure. if self._chemical_components_data: - raw_mmcif.update(self._chemical_components_data.to_mmcif_dict()) + raw_mmcif.update(self._chemical_components_data.to_mmcif_dict()) # pyrefly: ignore[no-matching-overload] # Add _software table to store version number used to generate mmCIF. # Only required data items are used (+ _software.version). diff --git a/src/alphafold3/structure/structure_tables.py b/src/alphafold3/structure/structure_tables.py index 35fbe8d..43243a4 100644 --- a/src/alphafold3/structure/structure_tables.py +++ b/src/alphafold3/structure/structure_tables.py @@ -152,7 +152,7 @@ def from_defaults( num_atoms = len(chain_key) if not num_atoms: return cls.make_empty() - return Atoms( + return Atoms( # pyrefly: ignore[bad-return] chain_key=chain_key, res_key=res_key, key=_default(key, np.arange(num_atoms), np.int64), @@ -179,7 +179,7 @@ def copy_and_update_coords(self, coords: np.ndarray) -> Self: raise ValueError( f'Expecting 3-dimensional coordinates, got {coords.shape}' ) - return typing.cast( + return typing.cast( # pyrefly: ignore[bad-return] Atoms, self.copy_and_update( x=coords[..., 0], y=coords[..., 1], z=coords[..., 2] @@ -246,7 +246,7 @@ def from_defaults( num_res = len(id) if not num_res: return cls.make_empty() - return Residues( + return Residues( # pyrefly: ignore[bad-return] key=_default(key, np.arange(num_res), np.int64), id=id, chain_key=chain_key, @@ -293,7 +293,7 @@ def from_defaults( if not num_chains: return cls.make_empty() - return Chains( + return Chains( # pyrefly: ignore[bad-return] key=_default(key, np.arange(num_chains), np.int64), id=id, type=_default(type, [mmcif_names.PROTEIN_CHAIN] * num_chains, object), @@ -516,7 +516,7 @@ def tile_for_models(arr: np.ndarray) -> list[str]: ).tolist() if bonds.key.size > 0: - raw_mmcif.update( + raw_mmcif.update( # pyrefly: ignore[no-matching-overload] bonds.to_mmcif_dict_from_atom_arrays( atom_key=atoms.key, chain_id=label_asym_id, diff --git a/src/alphafold3/structure/table.py b/src/alphafold3/structure/table.py index 05755dc..80c41f7 100644 --- a/src/alphafold3/structure/table.py +++ b/src/alphafold3/structure/table.py @@ -390,9 +390,9 @@ def filter( if not invert: return self else: - return self[np.array((), dtype=np.int64)] + return self[np.array((), dtype=np.int64)] # pyrefly: ignore[bad-return] else: - return self[~filter_mask if invert else filter_mask] + return self[~filter_mask if invert else filter_mask] # pyrefly: ignore[bad-return] def _validate_keys_are_column_names(self, keys: Collection[str]) -> None: """Raises an error if any of the keys are not column names.""" diff --git a/src/alphafold3/test_data/featurised_example.json b/src/alphafold3/test_data/featurised_example.json index d2d13e0..4575be4 100644 --- a/src/alphafold3/test_data/featurised_example.json +++ b/src/alphafold3/test_data/featurised_example.json @@ -7,7 +7,6 @@ "empty_output_struc": "<>", "entity_id": "42c714885d17f6c0fcfebebd171b5ed7d7e77a56cf9c4983d9ff9ff90995bd1c", "flat_output_layout": "<>", - "frames_mask": "e8a48532fba32c318f7d809fae3ea0999baa01376b29d94ef3c27d82f12f6a90", "is_dna": "1d83518b897b14e2943990eff655838246cc0207a7c95a5f3dfccc2e395f8bbf", "is_ligand": "cfa4e080dc2885de94224db5075c2feb0805567d31e8898abdebaebc6646ce12", "is_nonstandard_polymer_chain": "1d83518b897b14e2943990eff655838246cc0207a7c95a5f3dfccc2e395f8bbf", @@ -28,7 +27,6 @@ "queries_to_token_atoms:gather_mask": "1e388e40167a4d31291903d74c98544868d0dc574706cdfd259ddd65f56d2993", "queries_to_token_atoms:input_shape": "cf801b14d3da833c486e3d73e355c3c2068523012b42c2b17decc45dbd8b9972", "ref_atom_name_chars": "043f3242ff4dff04fd36699ccefdff718c57c325f72c71f33f4c4774e75a64dc", - "ref_charge": "27898ee238963105942db19f27a980c1fe4f7aeb396c1e5ea4e82da3876deef4", "ref_element": "cc437747adeea094daf8a0e551be02f406c7e7d9b0a9328a84a59d907c5492b5", "ref_mask": "1e388e40167a4d31291903d74c98544868d0dc574706cdfd259ddd65f56d2993", "ref_space_uid": "97afd7d9d3ba835731457ef090ba4939d707bb2a270d48fde56369bde8e58e9f", diff --git a/uv.lock b/uv.lock index d527c5b..bf076fe 100644 --- a/uv.lock +++ b/uv.lock @@ -8,10 +8,14 @@ resolution-markers = [ "python_full_version >= '3.14' and platform_machine == 'aarch64' and sys_platform == 'linux'", "python_full_version == '3.13.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", "python_full_version < '3.13' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "python_full_version >= '3.14' and platform_machine == 'arm64' and sys_platform == 'darwin'", + "python_full_version == '3.13.*' and platform_machine == 'arm64' and sys_platform == 'darwin'", + "python_full_version < '3.13' and platform_machine == 'arm64' and sys_platform == 'darwin'", ] supported-markers = [ "platform_machine == 'x86_64' and sys_platform == 'linux'", "platform_machine == 'aarch64' and sys_platform == 'linux'", + "platform_machine == 'arm64' and sys_platform == 'darwin'", ] [[package]] @@ -32,37 +36,119 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/bc/8a/340a1555ae33d7354dbca4faa54948d76d89a27ceef032c8c3bc661d003e/aiofiles-25.1.0-py3-none-any.whl", hash = "sha256:abe311e527c862958650f9438e859c1fa7568a141b22abcd015e120e86a85695", size = 14668, upload-time = "2025-10-09T20:51:03.174Z" }, ] +[[package]] +name = "aiohappyeyeballs" +version = "2.6.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/33/c6/61a2d7b7572279226bb2e7f61d7a19ca7c90da0329c93fa0d560cbf288d8/aiohappyeyeballs-2.6.2.tar.gz", hash = "sha256:e202810ee718bd01fc6ef49e8ea53d023d5cb6b581076d7925aa499fa55dbe64", size = 22591, upload-time = "2026-05-20T15:12:24.631Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5f/fc/a7bf5b6e4e617b45f90f2d9d2a68519c249c81dd4fc2658c7a2a61c4f4b7/aiohappyeyeballs-2.6.2-py3-none-any.whl", hash = "sha256:4708045e2d7a6c6bdf8aafa8ed39649eaf926a4543b54560659129e3365953c4", size = 15062, upload-time = "2026-05-20T15:12:23.328Z" }, +] + +[[package]] +name = "aiohttp" +version = "3.14.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohappyeyeballs", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "aiosignal", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "attrs", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "frozenlist", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "multidict", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "propcache", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "typing-extensions", marker = "(python_full_version < '3.13' and platform_machine == 'arm64' and sys_platform == 'darwin') or (python_full_version < '3.13' and platform_machine == 'aarch64' and sys_platform == 'linux') or (python_full_version < '3.13' and platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "yarl", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/82/78/8ea7308cac6934de8c74a14f3d5f65d1c89287426688be79538d0e5c013d/aiohttp-3.14.1.tar.gz", hash = "sha256:307f2cff90a764d329e77040603fa032db89c5c24fdad50c4c15334cba744035", size = 7955794, upload-time = "2026-06-07T21:09:35.529Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1d/21/151624b51cd92553d95424daf4bf19f19ce9be9002d19253e7e7ce67197b/aiohttp-3.14.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d35143e27778b4bb0fb189562d7f275bff79c62ab8e98459717c0ea617ff2480", size = 757402, upload-time = "2026-06-07T21:06:40.311Z" }, + { url = "https://files.pythonhosted.org/packages/55/b2/2aac325583aaa1353045f96dffa586d8a34e8322e14a7ba49cffeb103ab4/aiohttp-3.14.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:27fd7c91e51729b4f7e1577865fa6d34c9adccbc39aabe9000285b48af9f0ec2", size = 512448, upload-time = "2026-06-07T21:06:43.813Z" }, + { url = "https://files.pythonhosted.org/packages/8a/72/a60607cb849faa8af8a356c9329ea2eb6f395d49e82cc82ccba1fd8deb8f/aiohttp-3.14.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:64c567bf9eaf664280116a8688f63016e6b32db2505908e2bdaca1b6438142f2", size = 1766854, upload-time = "2026-06-07T21:06:45.391Z" }, + { url = "https://files.pythonhosted.org/packages/20/9c/d445818389df371f56d141d881153ba23183c4735a03f7356ffb43f7757d/aiohttp-3.14.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3e6fc1a85fa7194a1a7d19f44e8609180f4a8eb5fa4c7ed8b4355f080fad235c", size = 1790278, upload-time = "2026-06-07T21:06:54.049Z" }, + { url = "https://files.pythonhosted.org/packages/dc/b4/4dac0038960427ba832f6609dfb4ea5437d7fd80c72001b9e48f834f428b/aiohttp-3.14.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c6fa4dc7ad6f8109c70bb1499e589f76b0b792baf39f9b017eb92c8a81d0a199", size = 1728397, upload-time = "2026-06-07T21:06:57.777Z" }, + { url = "https://files.pythonhosted.org/packages/70/0a/e0075ce9ca0279ee1d4f0c0b85f54fea02ebc83c3007651a72bece658fec/aiohttp-3.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6f71173be42d3241d428f760122febb748de0623f44308a6f120d0dd9ec572e3", size = 1767580, upload-time = "2026-06-07T21:07:07.873Z" }, + { url = "https://files.pythonhosted.org/packages/fe/22/a73ccbf9dbd6e26dda0b24d5fd5db7da92ee3383a79f47677ffb834c5c5b/aiohttp-3.14.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:915fbb7b41b115192259f8c9ae58f3ddc444d2b5579917270211858e606a4afd", size = 485841, upload-time = "2026-06-07T21:07:19.555Z" }, + { url = "https://files.pythonhosted.org/packages/3b/b9/57ed8eaf596321c2ad747bd480fb1700dbd7177c60dfc9e4c187f629662e/aiohttp-3.14.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:7fb4bdf95b0561a79f259f9d28fbc109728c5ee7f27aff6391f0ca703a329abe", size = 492088, upload-time = "2026-06-07T21:07:21.581Z" }, + { url = "https://files.pythonhosted.org/packages/78/c0/5ebe5270a7c140d7c6f79dcb018640225f14d406c149e4eec04a7d82fe71/aiohttp-3.14.1-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:1b9748363260121d2927704f5d4fc498150669ca3ae93625986ee89c8f80dcd4", size = 501564, upload-time = "2026-06-07T21:07:23.388Z" }, + { url = "https://files.pythonhosted.org/packages/75/7f/8cdaa24fc7983865e0915153b96a9ac5bcdd3548d64c5a27d17cecccad2d/aiohttp-3.14.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:86a6dab78b0e43e2897a3bbe15745aa60dc5423ca437b7b0b164c069bf91b876", size = 751998, upload-time = "2026-06-07T21:07:25.046Z" }, + { url = "https://files.pythonhosted.org/packages/ab/01/a2d5f96cd4e74424864d30bc0a7e44d0a12dacdcfa91b5b2d1bd3dca6bf3/aiohttp-3.14.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:317acd9f8602858dc7d59679812c376c7f0b97bcbbf16e0d6237f54141d8a8a6", size = 508657, upload-time = "2026-06-07T21:07:29.252Z" }, + { url = "https://files.pythonhosted.org/packages/e8/ed/3c0fb5c500fdd8e7ebc10d1889c04384fffa1a9163eac1356088ca9da1b1/aiohttp-3.14.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bd869c427324e5cb15195793de951295710db28be7d818247f3097b4ab5d4b96", size = 1757907, upload-time = "2026-06-07T21:07:31.03Z" }, + { url = "https://files.pythonhosted.org/packages/9d/6e/dbf1d0625dc711fb2851f4f3c3055c39ed58bae92082d8c627dbe6013736/aiohttp-3.14.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:faccab372e66bc76d5731525e7f1143c922271725b9d38c9f97edcc66266b451", size = 1783881, upload-time = "2026-06-07T21:07:39.063Z" }, + { url = "https://files.pythonhosted.org/packages/2a/bd/cf9cee17e140f942a3de73e658a543aa8fbf35a5fc67a9d2538d52d77f0b/aiohttp-3.14.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:97e704dcd26271f5bda3fa07c3ce0fb76d6d3f8659f4baa1a24442cc9ba177ca", size = 1722137, upload-time = "2026-06-07T21:07:43.014Z" }, + { url = "https://files.pythonhosted.org/packages/ba/45/4de841f005cfe1fd63e2a2fe011262c515e2a62aa6994b15947e7d717ac9/aiohttp-3.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:cb21957bb8aca671c1765e32f58164cf0c50e6bf41c0bbbd16da20732ecaf588", size = 1761094, upload-time = "2026-06-07T21:07:54.113Z" }, + { url = "https://files.pythonhosted.org/packages/85/a5/9594ad6289eebbc97d167c44213d557807f90e59115caad24de21ad2c3b1/aiohttp-3.14.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:62a759436b29e677181a9e76bab8b8f689a29cb9c535f45f7c48c9c830d3f8c3", size = 487918, upload-time = "2026-06-07T21:08:06.377Z" }, + { url = "https://files.pythonhosted.org/packages/b4/61/16a32c36c3c49edec122a3dc811f2057df2f94d3b14aa107c8017d981618/aiohttp-3.14.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:2964cbf553df4d7a57348da44d961d871895fc1ee4e8c322b2a95612c7b17fba", size = 494014, upload-time = "2026-06-07T21:08:08.263Z" }, + { url = "https://files.pythonhosted.org/packages/9b/89/3ebcf96ed99c05bec9c434aaac6963fd3cbab4a786ae739908a144d9ce44/aiohttp-3.14.1-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:237651caadc3a59badd39319c54642b5299e9cc98a3a194310e55d5bb9f5e397", size = 502398, upload-time = "2026-06-07T21:08:10.244Z" }, + { url = "https://files.pythonhosted.org/packages/fd/3d/b74870a0c2d40c355928cd5b96c7a11fa821b8a40fc41365e64479b151fb/aiohttp-3.14.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:896e12dfdbbab9d8f7e16d2b28c6769a60126fa92095d1ebf9473d02593a2448", size = 758018, upload-time = "2026-06-07T21:08:12.447Z" }, + { url = "https://files.pythonhosted.org/packages/e9/a7/248e1aebe0c7810b0271e021a0f2a5eb6e78a051885b3c9df49f42a5802d/aiohttp-3.14.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:07eabb979d236335fed927e137a928c9adfb7df3b9ec7aa31726f133a62be983", size = 512824, upload-time = "2026-06-07T21:08:16.572Z" }, + { url = "https://files.pythonhosted.org/packages/26/97/2aa0e5ba0727dc3bd5aaebb7ccbc510f7dfb7fb961ec87497cd496635ab1/aiohttp-3.14.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4fe1f1087cbadb280b5e1bb054a4f00d1423c74d6626c5e48400d871d34ecefe", size = 1749898, upload-time = "2026-06-07T21:08:18.635Z" }, + { url = "https://files.pythonhosted.org/packages/a0/18/938441025db6769a3464596b2410af3afde0b21eb2f204c6f766f68af4bd/aiohttp-3.14.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:634e385930fb6d2d479cf3aa66515955863b77a5e3c2b5894ca259a25b308602", size = 1760329, upload-time = "2026-06-07T21:08:27.363Z" }, + { url = "https://files.pythonhosted.org/packages/49/a2/2136674d52123b1354bd05dd5753c318db47dc0c927cc70b27bab3755456/aiohttp-3.14.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:335c0cc3e3545ce98dcb9cfcb836f40c3411f43fa03dab757597d80c89af8a35", size = 1714756, upload-time = "2026-06-07T21:08:32.094Z" }, + { url = "https://files.pythonhosted.org/packages/c1/af/14bb5843eccbe234f4dfb78ab73e549d99727247e62ae5d62cbd22eaf5b0/aiohttp-3.14.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6ffbb2f4ec1ceaff7e07d43922954da26b223d188bf30658e561b98e23089444", size = 1742574, upload-time = "2026-06-07T21:08:43.795Z" }, + { url = "https://files.pythonhosted.org/packages/34/e3/19dbe1a1f4cc6230eb9e314de7fe68053b0992f9302b27d12141a0b5db53/aiohttp-3.14.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:819c054312f1af92947e6a55883d1b66feefab11531a7fc45e0fb9b63880b5c2", size = 793320, upload-time = "2026-06-07T21:08:52.775Z" }, + { url = "https://files.pythonhosted.org/packages/b9/c8/14ce60ec31a2e5f5274bb17d383a6f7a3aabca31ac04eee05585bbadab16/aiohttp-3.14.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1601cc37baf5750ccacae618ec2daf020769581695550e3b654a911f859c563d", size = 532476, upload-time = "2026-06-07T21:08:57.176Z" }, + { url = "https://files.pythonhosted.org/packages/7e/02/9ac85e081e53da2e061b02fa7758fe0a12d17b8ce2d1f5e6c7cb76730328/aiohttp-3.14.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4d6e0ac9da31c9c04c84e1c0182ad8d6df35965a85cae29cd71d089621b3ae94", size = 1922347, upload-time = "2026-06-07T21:08:59.563Z" }, + { url = "https://files.pythonhosted.org/packages/66/4e/560c7472d3d198a23aa5c8b19a5115bf6a9b77b7d3e4bb363da320430ad2/aiohttp-3.14.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fc0cacab7ba4e56f0f81c82a98c09bed2f39c940107b03a34b168bdf7597edd3", size = 1877095, upload-time = "2026-06-07T21:09:09.011Z" }, + { url = "https://files.pythonhosted.org/packages/6a/c9/48255813cca749a229ef0ab476004ec623728ad79a9c0840616f6c076325/aiohttp-3.14.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:38e1e7daaea81df51c952e18483f323d878499a1e2bfe564790e0f9701d6f203", size = 1842922, upload-time = "2026-06-07T21:09:14.118Z" }, + { url = "https://files.pythonhosted.org/packages/44/be/0474c5a8b5640e1e4aa1923430a91f4151be82e511373fe764189b89aef5/aiohttp-3.14.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:99abd37084b82f5830c635fddd0b4993b9742a66eb746dacf433c8590e8f9e3c", size = 1841409, upload-time = "2026-06-07T21:09:26.207Z" }, +] + +[[package]] +name = "aiosignal" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "frozenlist", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "typing-extensions", marker = "(python_full_version < '3.13' and platform_machine == 'arm64' and sys_platform == 'darwin') or (python_full_version < '3.13' and platform_machine == 'aarch64' and sys_platform == 'linux') or (python_full_version < '3.13' and platform_machine == 'x86_64' and sys_platform == 'linux')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/61/62/06741b579156360248d1ec624842ad0edf697050bbaf7c3e46394e106ad1/aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7", size = 25007, upload-time = "2025-07-03T22:54:43.528Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e", size = 7490, upload-time = "2025-07-03T22:54:42.156Z" }, +] + [[package]] name = "alphafold3" source = { editable = "." } dependencies = [ - { name = "absl-py", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "dm-haiku", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "absl-py", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "dm-haiku", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "etils", extra = ["epath"], marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "jax", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, { name = "jax", extra = ["cuda12"], marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "numpy", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "rdkit", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "tokamax", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "tqdm", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "zstandard", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "jax-mps", marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" }, + { name = "numpy", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "rdkit", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "tokamax", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "tqdm", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "zstandard", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, +] + +[package.optional-dependencies] +gcsfs = [ + { name = "gcsfs", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] [package.dev-dependencies] dev = [ - { name = "pytest", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "pytest", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] [package.metadata] requires-dist = [ { name = "absl-py", specifier = ">=2.3.1" }, { name = "dm-haiku", specifier = "==0.0.16" }, - { name = "jax", specifier = "==0.9.1" }, - { name = "jax", extras = ["cuda12"], specifier = "==0.9.1" }, + { name = "etils", extras = ["epath"] }, + { name = "gcsfs", marker = "extra == 'gcsfs'" }, + { name = "jax", specifier = "==0.10.2" }, + { name = "jax", extras = ["cuda12"], marker = "sys_platform != 'darwin'", specifier = "==0.10.2" }, + { name = "jax-mps", marker = "platform_machine == 'arm64' and sys_platform == 'darwin'", specifier = "==0.10.9" }, { name = "numpy" }, { name = "rdkit", specifier = "==2025.9.4" }, - { name = "tokamax", specifier = "==0.0.11" }, + { name = "tokamax", specifier = "==0.0.12" }, { name = "tqdm" }, { name = "zstandard" }, ] +provides-extras = ["gcsfs"] [package.metadata.requires-dev] dev = [{ name = "pytest", specifier = ">=6.0" }] @@ -76,32 +162,157 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, ] +[[package]] +name = "attrs" +version = "26.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/82a0fe20a541c03148528be8cac2408564a6c9a0cc7e9171802bc1d26985/attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32", size = 952055, upload-time = "2026-03-19T14:22:25.026Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" }, +] + +[[package]] +name = "certifi" +version = "2026.6.17" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c9/c7/424b75da314c1045981bd9777432fad05a9e0c69daa4ed7e308bbaffe405/certifi-2026.6.17.tar.gz", hash = "sha256:024c88eeec92ca068db80f02b8b07c9cef7b9fe261d1d535abfd5abd6f6af432", size = 134594, upload-time = "2026-06-17T10:31:07.894Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/2f/c5464532e965badff2f4c4c1a3a83f5697f0d7c407ed0cda44aaa99bb451/certifi-2026.6.17-py3-none-any.whl", hash = "sha256:2227dcbaafe0d2f59279d1762ddddc37783ed4354594f194ffc31d20f41fc3db", size = 133289, upload-time = "2026-06-17T10:31:06.348Z" }, +] + +[[package]] +name = "cffi" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "(implementation_name != 'PyPy' and platform_machine == 'arm64' and sys_platform == 'darwin') or (implementation_name != 'PyPy' and platform_machine == 'aarch64' and sys_platform == 'linux') or (implementation_name != 'PyPy' and platform_machine == 'x86_64' and sys_platform == 'linux')" }, +] +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/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/d5/72/12b5f8d3865bf0f87cf1404d8c374e7487dcf097a1c91c436e72e6badd83/cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062", size = 220097, upload-time = "2025-09-08T23:22:48.677Z" }, + { url = "https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba", size = 219572, upload-time = "2025-09-08T23:22:52.902Z" }, + { url = "https://files.pythonhosted.org/packages/07/e0/267e57e387b4ca276b90f0434ff88b2c2241ad72b16d31836adddfd6031b/cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94", size = 222963, upload-time = "2025-09-08T23:22:54.518Z" }, + { url = "https://files.pythonhosted.org/packages/b6/75/1f2747525e06f53efbd878f4d03bac5b859cbc11c633d0fb81432d98a795/cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187", size = 221361, upload-time = "2025-09-08T23:22:55.867Z" }, + { url = "https://files.pythonhosted.org/packages/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca", size = 181043, upload-time = "2025-09-08T23:23:02.231Z" }, + { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", size = 220101, upload-time = "2025-09-08T23:23:04.792Z" }, + { url = "https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26", size = 219499, upload-time = "2025-09-08T23:23:09.648Z" }, + { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", size = 222928, upload-time = "2025-09-08T23:23:10.928Z" }, + { url = "https://files.pythonhosted.org/packages/36/54/0362578dd2c9e557a28ac77698ed67323ed5b9775ca9d3fe73fe191bb5d8/cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b", size = 221302, upload-time = "2025-09-08T23:23:12.42Z" }, + { url = "https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13", size = 181487, upload-time = "2025-09-08T23:23:19.622Z" }, + { url = "https://files.pythonhosted.org/packages/d6/43/0e822876f87ea8a4ef95442c3d766a06a51fc5298823f884ef87aaad168c/cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b", size = 220049, upload-time = "2025-09-08T23:23:20.853Z" }, + { url = "https://files.pythonhosted.org/packages/47/d9/d83e293854571c877a92da46fdec39158f8d7e68da75bf73581225d28e90/cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775", size = 219244, upload-time = "2025-09-08T23:23:24.541Z" }, + { url = "https://files.pythonhosted.org/packages/2b/0f/1f177e3683aead2bb00f7679a16451d302c436b5cbf2505f0ea8146ef59e/cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205", size = 222828, upload-time = "2025-09-08T23:23:26.143Z" }, + { url = "https://files.pythonhosted.org/packages/c6/0f/cafacebd4b040e3119dcb32fed8bdef8dfe94da653155f9d0b9dc660166e/cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1", size = 220926, upload-time = "2025-09-08T23:23:27.873Z" }, + { url = "https://files.pythonhosted.org/packages/2c/ea/5f76bce7cf6fcd0ab1a1058b5af899bfbef198bea4d5686da88471ea0336/cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d", size = 185013, upload-time = "2025-09-08T23:23:30.63Z" }, + { url = "https://files.pythonhosted.org/packages/be/b4/c56878d0d1755cf9caa54ba71e5d049479c52f9e4afc230f06822162ab2f/cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c", size = 221593, upload-time = "2025-09-08T23:23:31.91Z" }, + { url = "https://files.pythonhosted.org/packages/d0/44/681604464ed9541673e486521497406fadcc15b5217c3e326b061696899a/cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592", size = 221584, upload-time = "2025-09-08T23:23:36.096Z" }, + { url = "https://files.pythonhosted.org/packages/25/8e/342a504ff018a2825d395d44d63a767dd8ebc927ebda557fecdaca3ac33a/cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512", size = 224443, upload-time = "2025-09-08T23:23:37.328Z" }, + { url = "https://files.pythonhosted.org/packages/e1/5e/b666bacbbc60fbf415ba9988324a132c9a7a0448a9a8f125074671c0f2c3/cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4", size = 223437, upload-time = "2025-09-08T23:23:38.945Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/a1/67fe25fac3c7642725500a3f6cfe5821ad557c3abb11c9d20d12c7008d3e/charset_normalizer-3.4.7.tar.gz", hash = "sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5", size = 144271, upload-time = "2026-04-02T09:28:39.342Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/eb/4fc8d0a7110eb5fc9cc161723a34a8a6c200ce3b4fbf681bc86feee22308/charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:eca9705049ad3c7345d574e3510665cb2cf844c2f2dcfe675332677f081cbd46", size = 311328, upload-time = "2026-04-02T09:26:24.331Z" }, + { url = "https://files.pythonhosted.org/packages/f8/e3/0fadc706008ac9d7b9b5be6dc767c05f9d3e5df51744ce4cc9605de7b9f4/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6178f72c5508bfc5fd446a5905e698c6212932f25bcdd4b47a757a50605a90e2", size = 208061, upload-time = "2026-04-02T09:26:25.568Z" }, + { url = "https://files.pythonhosted.org/packages/4b/f8/d0118a2f5f23b02cd166fa385c60f9b0d4f9194f574e2b31cef350ad7223/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5649fd1c7bade02f320a462fdefd0b4bd3ce036065836d4f42e0de958038e116", size = 216589, upload-time = "2026-04-02T09:26:29.239Z" }, + { url = "https://files.pythonhosted.org/packages/38/dd/5a9ab159fe45c6e72079398f277b7d2b523e7f716acc489726115a910097/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:708838739abf24b2ceb208d0e22403dd018faeef86ddac04319a62ae884c4f15", size = 211229, upload-time = "2026-04-02T09:26:33.282Z" }, + { url = "https://files.pythonhosted.org/packages/8a/2d/a572df5c9204ab7688ec1edc895a73ebded3b023bb07364710b05dd1c9be/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bb6d88045545b26da47aa879dd4a89a71d1dce0f0e549b1abcb31dfe4a8eac49", size = 218468, upload-time = "2026-04-02T09:26:40.17Z" }, + { url = "https://files.pythonhosted.org/packages/c1/3b/66777e39d3ae1ddc77ee606be4ec6d8cbd4c801f65e5a1b6f2b11b8346dd/charset_normalizer-3.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f496c9c3cc02230093d8330875c4c3cdfc3b73612a5fd921c65d39cbcef08063", size = 309627, upload-time = "2026-04-02T09:26:45.198Z" }, + { url = "https://files.pythonhosted.org/packages/2e/4e/b7f84e617b4854ade48a1b7915c8ccfadeba444d2a18c291f696e37f0d3b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ea948db76d31190bf08bd371623927ee1339d5f2a0b4b1b4a4439a65298703c", size = 207008, upload-time = "2026-04-02T09:26:46.824Z" }, + { url = "https://files.pythonhosted.org/packages/fa/07/330e3a0dda4c404d6da83b327270906e9654a24f6c546dc886a0eb0ffb23/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e044c39e41b92c845bc815e5ae4230804e8e7bc29e399b0437d64222d92809dd", size = 215595, upload-time = "2026-04-02T09:26:50.915Z" }, + { url = "https://files.pythonhosted.org/packages/6f/a5/a581c13798546a7fd557c82614a5c65a13df2157e9ad6373166d2a3e645d/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7804338df6fcc08105c7745f1502ba68d900f45fd770d5bdd5288ddccb8a42d8", size = 210036, upload-time = "2026-04-02T09:26:54.975Z" }, + { url = "https://files.pythonhosted.org/packages/6a/9f/130394f9bbe06f4f63e22641d32fc9b202b7e251c9aef4db044324dac493/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:64f02c6841d7d83f832cd97ccf8eb8a906d06eb95d5276069175c696b024b60a", size = 217723, upload-time = "2026-04-02T09:27:02.021Z" }, + { url = "https://files.pythonhosted.org/packages/97/c8/c67cb8c70e19ef1960b97b22ed2a1567711de46c4ddf19799923adc836c2/charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0", size = 309234, upload-time = "2026-04-02T09:27:07.194Z" }, + { url = "https://files.pythonhosted.org/packages/99/85/c091fdee33f20de70d6c8b522743b6f831a2f1cd3ff86de4c6a827c48a76/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a", size = 208042, upload-time = "2026-04-02T09:27:08.749Z" }, + { url = "https://files.pythonhosted.org/packages/47/5c/032c2d5a07fe4d4855fea851209cca2b6f03ebeb6d4e3afdb3358386a684/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e", size = 215882, upload-time = "2026-04-02T09:27:12.446Z" }, + { url = "https://files.pythonhosted.org/packages/44/86/58e6f13ce26cc3b8f4a36b94a0f22ae2f00a72534520f4ae6857c4b81f89/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b", size = 211276, upload-time = "2026-04-02T09:27:16.834Z" }, + { url = "https://files.pythonhosted.org/packages/30/45/99d18aa925bd1740098ccd3060e238e21115fffbfdcb8f3ece837d0ace6c/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72", size = 217869, upload-time = "2026-04-02T09:27:23.486Z" }, + { url = "https://files.pythonhosted.org/packages/94/09/7e8a7f73d24dba1f0035fbbf014d2c36828fc1bf9c88f84093e57d315935/charset_normalizer-3.4.7-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24", size = 330133, upload-time = "2026-04-02T09:27:29.474Z" }, + { url = "https://files.pythonhosted.org/packages/8d/da/96975ddb11f8e977f706f45cddd8540fd8242f71ecdb5d18a80723dcf62c/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79", size = 216257, upload-time = "2026-04-02T09:27:30.793Z" }, + { url = "https://files.pythonhosted.org/packages/be/c1/06c6c49d5a5450f76899992f1ee40b41d076aee9279b49cf9974d2f313d5/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e", size = 223251, upload-time = "2026-04-02T09:27:35.369Z" }, + { url = "https://files.pythonhosted.org/packages/7e/80/8a7b8104a3e203074dc9aa2c613d4b726c0e136bad1cc734594b02867972/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e", size = 218979, upload-time = "2026-04-02T09:27:39.37Z" }, + { url = "https://files.pythonhosted.org/packages/76/22/ef7bd0fe480a0ae9b656189ec00744b60933f68b4f42a7bb06589f6f576a/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe", size = 225194, upload-time = "2026-04-02T09:27:46.706Z" }, + { url = "https://files.pythonhosted.org/packages/db/8f/61959034484a4a7c527811f4721e75d02d653a35afb0b6054474d8185d4c/charset_normalizer-3.4.7-py3-none-any.whl", hash = "sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d", size = 61958, upload-time = "2026-04-02T09:28:37.794Z" }, +] + [[package]] name = "chex" version = "0.1.91" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "absl-py", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "jax", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "jaxlib", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "numpy", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "toolz", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "typing-extensions", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "absl-py", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "jax", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "jaxlib", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "numpy", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "toolz", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "typing-extensions", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/5b/7d/812f01e7b2ddf28a0caa8dde56bd951a2c8f691c9bbfce38d469458d1502/chex-0.1.91.tar.gz", hash = "sha256:65367a521415ada905b8c0222b0a41a68337fcadf79a1fb6fc992dbd95dd9f76", size = 90302, upload-time = "2025-09-01T21:49:32.834Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/12/0c/96102c01dd02ae740d4afc3644d5c7d7fc51d3feefd67300a2aa1ddbf7cb/chex-0.1.91-py3-none-any.whl", hash = "sha256:6fc4cbfc22301c08d4a7ef706045668410100962eba8ba6af03fa07f4e5dcf9b", size = 100965, upload-time = "2025-09-01T21:49:31.141Z" }, ] +[[package]] +name = "cryptography" +version = "49.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "(platform_machine == 'arm64' and platform_python_implementation != 'PyPy' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and platform_python_implementation != 'PyPy' and sys_platform == 'linux') or (platform_machine == 'x86_64' and platform_python_implementation != 'PyPy' and sys_platform == 'linux')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1f/99/d1c90d6041656cc6ee229dc99cd67fd0cd5aec3c5f7d72fffc27cc750054/cryptography-49.0.0.tar.gz", hash = "sha256:f89660a348f4f78a92366240a61404e337586ef7f5909a2fef59ca88ef505493", size = 854345, upload-time = "2026-06-12T20:02:30.512Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9b/22/adf66990e63584a68dfb50c24f48a125c07b1699899381c8151e63ed458c/cryptography-49.0.0-cp311-abi3-macosx_11_0_arm64.whl", hash = "sha256:966fe0e9c67490071f14c0d2b1cb2dfb3023c5ce39457343931415f08382f2db", size = 4032100, upload-time = "2026-06-12T20:02:32.143Z" }, + { url = "https://files.pythonhosted.org/packages/09/41/3797cfaf69cae04a13ee78ebd83f0678d9c02b4779d21ce24445326f1a69/cryptography-49.0.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:36d1709f992593689b45bda411498d62c6e365f2ca00b84657d4dadd24de16db", size = 4692978, upload-time = "2026-06-12T20:01:21.305Z" }, + { url = "https://files.pythonhosted.org/packages/e6/8b/43011f7ebe515a8aa20d61f290a326cd890c2e738e16e59eaff8d9c3a412/cryptography-49.0.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0e959b578856a3924bc0cbb710fc12c387b9412a951389f3ca61704a9e25f325", size = 4716422, upload-time = "2026-06-12T20:01:48.566Z" }, + { url = "https://files.pythonhosted.org/packages/4a/91/01ce7303a4579e6d3a6abef01bd322848e9ea7a219adcabc5048b9033571/cryptography-49.0.0-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:53ecee2e23f7169b6117e99fc8a944e5e50f79e69758a83b52a00cb98ab2b2d2", size = 4700503, upload-time = "2026-06-12T20:02:47.091Z" }, + { url = "https://files.pythonhosted.org/packages/20/2c/0622f20ff02b2ef32558733443805dc82fd4c275be01b2d19d14676f3a1b/cryptography-49.0.0-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2afe9051da7ae7bd5905da5a949280c7d2bb75682e188f650a9d0f2756b834c6", size = 4749683, upload-time = "2026-06-12T20:02:03.335Z" }, + { url = "https://files.pythonhosted.org/packages/6d/88/05563c7fe2e914e87d1a536d06fe83e66b4e1d95cb593e05aea375531da8/cryptography-49.0.0-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:ccac2bfebc306b862133e3bb71f3f6ee8bb525240089b2d952e4144b3a6d5da7", size = 4700283, upload-time = "2026-06-12T20:01:34.822Z" }, + { url = "https://files.pythonhosted.org/packages/a9/3c/f3ad17eecc1a57b0ba236dc01f90e783c51f4a2f35f64777cc4f47a184b2/cryptography-49.0.0-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:cbc77da8c523d5abd028635ba850a6966fcee2c82e2bf65a41d1d8afe0f98be9", size = 4749290, upload-time = "2026-06-12T20:01:30.848Z" }, + { url = "https://files.pythonhosted.org/packages/4f/01/339573cf1023163a400b0b5d16f6d507de413b9f60be6fd1b77feeaf6737/cryptography-49.0.0-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:b87e65d263b3e5d3bb92a57e2a6638e2f31110fa7aa890c7b2dbba42248d0a3f", size = 4834612, upload-time = "2026-06-12T20:01:29.246Z" }, + { url = "https://files.pythonhosted.org/packages/71/fd/577302e213a1be9468f92d1afef66fcf1ef83d516819d9992ca547f592bd/cryptography-49.0.0-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:66ec79c3904820572d7e987abdf304281f141d37ad9a489b8e97066e7b9b6459", size = 4980804, upload-time = "2026-06-12T20:01:42.853Z" }, + { url = "https://files.pythonhosted.org/packages/ec/9e/db72b3ae7fc9cfad53e630e56c6ae83b9b6ff0bf3718ffb8012d20b3aabf/cryptography-49.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:73a205dce83953d131a4aa1e0fd917a2fd1c5b1eef251e9d7152efefcbf5caf7", size = 4013892, upload-time = "2026-06-12T20:02:10.735Z" }, + { url = "https://files.pythonhosted.org/packages/86/12/c48a424f38db03027be9f7ed5c7dc5de9933dbee992865f98b13727a009d/cryptography-49.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:196ecd6a36e4e9aa10270393bb98d8df88fccee0bf1e5128b91ae4eb4375896d", size = 4678835, upload-time = "2026-06-12T20:02:48.743Z" }, + { url = "https://files.pythonhosted.org/packages/68/28/8a3ad4653662c93fc44dc4e5d8fd374c25c42e07b34bbfbadf49cf57a5a8/cryptography-49.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7abcee80084cda3f7691f3eb1ce480d8df49cec637b429aa35986c1de71738aa", size = 4697239, upload-time = "2026-06-12T20:02:56.03Z" }, + { url = "https://files.pythonhosted.org/packages/a8/b2/2193fc74f81aee4f9b62733133b73b5176718932ed8f2e4b03fa040480a6/cryptography-49.0.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:4ae387c9cb68ea569ca17e490d66d8142b81c3cc814bf179974b7d146e490bbb", size = 4685593, upload-time = "2026-06-12T20:02:50.666Z" }, + { url = "https://files.pythonhosted.org/packages/58/39/2d51306721330c486495853eda1c567880ff036de15a14c4b74f399934af/cryptography-49.0.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:c2bc30226390d60ea19d9f82b19db005fe0452154a23c1c410c12ea801e43561", size = 4731145, upload-time = "2026-06-12T20:02:16.832Z" }, + { url = "https://files.pythonhosted.org/packages/a7/f5/8f571d7e27c55bce9f76f026143bcb1e040a4233149ecca0bea5fa5dd5f7/cryptography-49.0.0-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:b20133d204d2bb56ba047642199603876c872026ca53e79c35b83772ab2cc505", size = 4685209, upload-time = "2026-06-12T20:02:07.282Z" }, + { url = "https://files.pythonhosted.org/packages/11/2d/5e1fb307cb5931881516b464c98774b3f2c36b5d4bb9a2830253cf553cad/cryptography-49.0.0-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:d8ecde755e2e91bf773fc94e8c9d730cd7f2007004cb492263a794ec3899a1c8", size = 4730441, upload-time = "2026-06-12T20:02:01.469Z" }, + { url = "https://files.pythonhosted.org/packages/e4/c0/bff5a02ee731d207d6a1ed51732549d8c53d2bc8da1d10ec6f2844201d68/cryptography-49.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e3fb64c420688e5319ae25113a354015abbd8dffbfbc41781a1ea66fc7622ac3", size = 4815869, upload-time = "2026-06-12T20:01:36.574Z" }, + { url = "https://files.pythonhosted.org/packages/b9/26/814681d14248d95d73d5c3eea0c39a94eb8302df966f670a2c60de90974b/cryptography-49.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:32703d93296f5c1f4b53349ad3a250c2cae0fdecd3a3dd5d47e616d8d616af27", size = 4960948, upload-time = "2026-06-12T20:02:18.688Z" }, + { url = "https://files.pythonhosted.org/packages/19/2a/5bb823f5bedcf80718cea7fbc95ec5515cca3769633c4b01a32be7f30e7c/cryptography-49.0.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:ec5e529fb80935c94fe7b729f9972b50e351a0e6b50aa294fd5cabb109fcc29a", size = 4025947, upload-time = "2026-06-12T20:01:25.745Z" }, + { url = "https://files.pythonhosted.org/packages/3d/df/40577043ca124e17012f408ddddaeb213b856336ac82ddb3bc915f39e29f/cryptography-49.0.0-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f78ff2c9ed8dc2d036b0f4d640e22522213d047c1b14e61205a7e55c80a494d4", size = 4692429, upload-time = "2026-06-12T20:01:53.628Z" }, + { url = "https://files.pythonhosted.org/packages/2c/99/2d13299eb3dd27b02dcfaafcc91d6b5cb3329f7cbd6d8f51921acd566c1a/cryptography-49.0.0-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:35b151772baff2c74cba7fa290ceaff4c3b11c0c881eb93eb5dbc05a7cfbba18", size = 4700968, upload-time = "2026-06-12T20:02:45.383Z" }, + { url = "https://files.pythonhosted.org/packages/a5/4d/9c0cd02f95e2602dd5e563da149ee0830abef3537be8b34dc56281ebe27a/cryptography-49.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:0f21641cf4b30fca7aee061ced0ec7ad7b073518088b7c9969a297c0ae796c69", size = 4697758, upload-time = "2026-06-12T20:01:41.13Z" }, + { url = "https://files.pythonhosted.org/packages/b8/7b/62cbbab75d0659865bf0273790031544a0b16c8072d258f9428dcd8190dc/cryptography-49.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:6f2debedf9ca60cf1d5bd466475638af5130f89965605cd818484d19987d3a21", size = 4735983, upload-time = "2026-06-12T20:01:50.14Z" }, + { url = "https://files.pythonhosted.org/packages/f0/ee/6fca21d1ac73e06f8bef71940abfd4d2f6472b4bca284d770f32bd4086f6/cryptography-49.0.0-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:28d8b15e6275f12c8a207dc309dfa957903c927d08d0cc937ee3f63f200693cc", size = 4697298, upload-time = "2026-06-12T20:02:20.918Z" }, + { url = "https://files.pythonhosted.org/packages/a0/84/84fe36f19caf857d61cb7fc9c63035a47ffabd84ea12d1d393148efa3615/cryptography-49.0.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:2400ef9c9e2299a25614eb1dea3db54a69b1349efd043bfac9c67630d136df36", size = 4735650, upload-time = "2026-06-12T20:02:41.389Z" }, + { url = "https://files.pythonhosted.org/packages/6c/a0/db537264e234f7273a73ec020873d6d6b39dfd8a53db78b550ca8320440e/cryptography-49.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:67e1d20ad9ef3a563c59ef22e7a8a0b8210bd26604369ea4a30a7c66aefe504e", size = 4834820, upload-time = "2026-06-12T20:01:51.847Z" }, + { url = "https://files.pythonhosted.org/packages/93/77/8df9eb486495979bccecd1062e2eaf435250e84437040295b57d09048b0b/cryptography-49.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:42b0684e0e40cf26122427802486f6d93aea593612603a94fbf260c7eb1e9c1b", size = 4967968, upload-time = "2026-06-12T20:02:12.524Z" }, +] + +[[package]] +name = "decorator" +version = "5.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/60/8b/32f9823da46cde7df2087faa08cd98d01b908f8dcab982cdba9c84e85355/decorator-5.3.1.tar.gz", hash = "sha256:4cbcdd55a6efadb9dbea26b858f4fb3264567b52d69ca0d25b721b553f60ea82", size = 58084, upload-time = "2026-05-18T06:03:28.057Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/7f/798705f5296a58ca505d600456748d1be48078eac8a7050d8a98bc9edb89/decorator-5.3.1-py3-none-any.whl", hash = "sha256:f47fe6fdbd2edd623ecfe36875d37aba411624e2670dd395dddae1358689bb3c", size = 10365, upload-time = "2026-05-18T06:03:26.517Z" }, +] + [[package]] name = "dm-haiku" version = "0.0.16" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "absl-py", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "jmp", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "numpy", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "tabulate", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "absl-py", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "jmp", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "numpy", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "tabulate", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/2a/fc/daf4689198f4c0af8b71611f39fcd5d68ce0ae59fa919b9e58192a7d70f5/dm_haiku-0.0.16.tar.gz", hash = "sha256:1830b0ce63c5cef2fb3a63a13033c9d8f612ee7f896f2b0b25a6ba484f5fad28", size = 263092, upload-time = "2025-12-17T15:55:35.145Z" } wheels = [ @@ -113,8 +324,8 @@ name = "einshape" version = "1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "absl-py", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "numpy", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "absl-py", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "numpy", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/cb/c6/95ad0a036656aec1cb32177a5d5abfcfbf53a01c1416484cacb8c7332a84/einshape-1.0.tar.gz", hash = "sha256:53538d75dd099f4ead4a4f786fafdcb0b729bb587e0b3afeca25ceef18c9ac14", size = 14571, upload-time = "2022-12-19T17:09:34.618Z" } wheels = [ @@ -132,13 +343,13 @@ wheels = [ [package.optional-dependencies] epath = [ - { name = "fsspec", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "importlib-resources", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "typing-extensions", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "zipp", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "fsspec", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "importlib-resources", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "typing-extensions", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "zipp", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] epy = [ - { name = "typing-extensions", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "typing-extensions", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] [[package]] @@ -146,29 +357,282 @@ name = "flax" version = "0.12.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "jax", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "msgpack", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "numpy", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "optax", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "orbax-checkpoint", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "pyyaml", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "rich", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "tensorstore", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "treescope", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "typing-extensions", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "jax", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "msgpack", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "numpy", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "optax", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "orbax-checkpoint", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "pyyaml", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "rich", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "tensorstore", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "treescope", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "typing-extensions", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/6b/7e/c4c66ab9b41149cf7a1961907d9a844832af1e76b121b35235a618c92825/flax-0.12.2.tar.gz", hash = "sha256:e9723b0881e571abe61885bb8770f53fdb3c383b6b3f5a923dcf6f1e9a687905", size = 5008370, upload-time = "2025-12-18T22:36:19.988Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/b7/6b/7b75508251f4220df8f68e7718b476ee3d614a2a51f9eace97393ee91b46/flax-0.12.2-py3-none-any.whl", hash = "sha256:912fdd8a7c623ec8b2694b28d2827608e7fc82a3a6f8fff17ec5038f2bca66f4", size = 488031, upload-time = "2025-12-18T22:36:18.01Z" }, ] +[[package]] +name = "frozenlist" +version = "1.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2d/f5/c831fac6cc817d26fd54c7eaccd04ef7e0288806943f7cc5bbf69f3ac1f0/frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad", size = 45875, upload-time = "2025-10-06T05:38:17.865Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/29/948b9aa87e75820a38650af445d2ef2b6b8a6fab1a23b6bb9e4ef0be2d59/frozenlist-1.8.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:78f7b9e5d6f2fdb88cdde9440dc147259b62b9d3b019924def9f6478be254ac1", size = 87782, upload-time = "2025-10-06T05:36:06.649Z" }, + { url = "https://files.pythonhosted.org/packages/2b/94/5c8a2b50a496b11dd519f4a24cb5496cf125681dd99e94c604ccdea9419a/frozenlist-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f833670942247a14eafbb675458b4e61c82e002a148f49e68257b79296e865c4", size = 50448, upload-time = "2025-10-06T05:36:08.78Z" }, + { url = "https://files.pythonhosted.org/packages/6a/bd/d91c5e39f490a49df14320f4e8c80161cfcce09f1e2cde1edd16a551abb3/frozenlist-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383", size = 242411, upload-time = "2025-10-06T05:36:09.801Z" }, + { url = "https://files.pythonhosted.org/packages/8f/83/f61505a05109ef3293dfb1ff594d13d64a2324ac3482be2cedc2be818256/frozenlist-1.8.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96f423a119f4777a4a056b66ce11527366a8bb92f54e541ade21f2374433f6d4", size = 243014, upload-time = "2025-10-06T05:36:11.394Z" }, + { url = "https://files.pythonhosted.org/packages/ce/03/024bf7720b3abaebcff6d0793d73c154237b85bdf67b7ed55e5e9596dc9a/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:405e8fe955c2280ce66428b3ca55e12b3c4e9c336fb2103a4937e891c69a4a29", size = 237619, upload-time = "2025-10-06T05:36:16.558Z" }, + { url = "https://files.pythonhosted.org/packages/8f/96/007e5944694d66123183845a106547a15944fbbb7154788cbf7272789536/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:776f352e8329135506a1d6bf16ac3f87bc25b28e765949282dcc627af36123aa", size = 239096, upload-time = "2025-10-06T05:36:22.129Z" }, + { url = "https://files.pythonhosted.org/packages/2d/40/0832c31a37d60f60ed79e9dfb5a92e1e2af4f40a16a29abcc7992af9edff/frozenlist-1.8.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8d92f1a84bb12d9e56f818b3a746f3efba93c1b63c8387a73dde655e1e42282a", size = 85717, upload-time = "2025-10-06T05:36:27.341Z" }, + { url = "https://files.pythonhosted.org/packages/0c/ab/6e5080ee374f875296c4243c381bbdef97a9ac39c6e3ce1d5f7d42cb78d6/frozenlist-1.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f21f00a91358803399890ab167098c131ec2ddd5f8f5fd5fe9c9f2c6fcd91e40", size = 49417, upload-time = "2025-10-06T05:36:29.877Z" }, + { url = "https://files.pythonhosted.org/packages/d5/4e/e4691508f9477ce67da2015d8c00acd751e6287739123113a9fca6f1604e/frozenlist-1.8.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027", size = 234391, upload-time = "2025-10-06T05:36:31.301Z" }, + { url = "https://files.pythonhosted.org/packages/40/76/c202df58e3acdf12969a7895fd6f3bc016c642e6726aa63bd3025e0fc71c/frozenlist-1.8.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eaa352d7047a31d87dafcacbabe89df0aa506abb5b1b85a2fb91bc3faa02d822", size = 233048, upload-time = "2025-10-06T05:36:32.531Z" }, + { url = "https://files.pythonhosted.org/packages/1f/96/cb85ec608464472e82ad37a17f844889c36100eed57bea094518bf270692/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ec3cc8c5d4084591b4237c0a272cc4f50a5b03396a47d9caaf76f5d7b38a4f11", size = 229314, upload-time = "2025-10-06T05:36:38.582Z" }, + { url = "https://files.pythonhosted.org/packages/03/a8/9ea226fbefad669f11b52e864c55f0bd57d3c8d7eb07e9f2e9a0b39502e1/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:21900c48ae04d13d416f0e1e0c4d81f7931f73a9dfa0b7a8746fb2fe7dd970ed", size = 233717, upload-time = "2025-10-06T05:36:44.251Z" }, + { url = "https://files.pythonhosted.org/packages/d2/5c/3bbfaa920dfab09e76946a5d2833a7cbdf7b9b4a91c714666ac4855b88b4/frozenlist-1.8.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:e25ac20a2ef37e91c1b39938b591457666a0fa835c7783c3a8f33ea42870db94", size = 89235, upload-time = "2025-10-06T05:36:48.78Z" }, + { url = "https://files.pythonhosted.org/packages/1e/bb/a6d12b7ba4c3337667d0e421f7181c82dda448ce4e7ad7ecd249a16fa806/frozenlist-1.8.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4e0c11f2cc6717e0a741f84a527c52616140741cd812a50422f83dc31749fb52", size = 51725, upload-time = "2025-10-06T05:36:50.851Z" }, + { url = "https://files.pythonhosted.org/packages/bc/71/d1fed0ffe2c2ccd70b43714c6cab0f4188f09f8a67a7914a6b46ee30f274/frozenlist-1.8.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b3210649ee28062ea6099cfda39e147fa1bc039583c8ee4481cb7811e2448c51", size = 284533, upload-time = "2025-10-06T05:36:51.898Z" }, + { url = "https://files.pythonhosted.org/packages/c9/1f/fb1685a7b009d89f9bf78a42d94461bc06581f6e718c39344754a5d9bada/frozenlist-1.8.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:581ef5194c48035a7de2aefc72ac6539823bb71508189e5de01d60c9dcd5fa65", size = 292506, upload-time = "2025-10-06T05:36:53.101Z" }, + { url = "https://files.pythonhosted.org/packages/fc/4f/a7e4d0d467298f42de4b41cbc7ddaf19d3cfeabaf9ff97c20c6c7ee409f9/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5c1c8e78426e59b3f8005e9b19f6ff46e5845895adbde20ece9218319eca6506", size = 283067, upload-time = "2025-10-06T05:36:57.965Z" }, + { url = "https://files.pythonhosted.org/packages/e3/20/bba307ab4235a09fdcd3cc5508dbabd17c4634a1af4b96e0f69bfe551ebd/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6da155091429aeba16851ecb10a9104a108bcd32f6c1642867eadaee401c1c41", size = 283659, upload-time = "2025-10-06T05:37:03.711Z" }, + { url = "https://files.pythonhosted.org/packages/f1/c8/85da824b7e7b9b6e7f7705b2ecaf9591ba6f79c1177f324c2735e41d36a2/frozenlist-1.8.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:cee686f1f4cadeb2136007ddedd0aaf928ab95216e7691c63e50a8ec066336d0", size = 86127, upload-time = "2025-10-06T05:37:08.438Z" }, + { url = "https://files.pythonhosted.org/packages/a1/93/72b1736d68f03fda5fdf0f2180fb6caaae3894f1b854d006ac61ecc727ee/frozenlist-1.8.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4970ece02dbc8c3a92fcc5228e36a3e933a01a999f7094ff7c23fbd2beeaa67c", size = 49749, upload-time = "2025-10-06T05:37:10.569Z" }, + { url = "https://files.pythonhosted.org/packages/a7/b2/fabede9fafd976b991e9f1b9c8c873ed86f202889b864756f240ce6dd855/frozenlist-1.8.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:cba69cb73723c3f329622e34bdbf5ce1f80c21c290ff04256cff1cd3c2036ed2", size = 231298, upload-time = "2025-10-06T05:37:11.993Z" }, + { url = "https://files.pythonhosted.org/packages/3a/3b/d9b1e0b0eed36e70477ffb8360c49c85c8ca8ef9700a4e6711f39a6e8b45/frozenlist-1.8.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:778a11b15673f6f1df23d9586f83c4846c471a8af693a22e066508b77d201ec8", size = 232015, upload-time = "2025-10-06T05:37:13.194Z" }, + { url = "https://files.pythonhosted.org/packages/62/c3/f57a5c8c70cd1ead3d5d5f776f89d33110b1addae0ab010ad774d9a44fb9/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:2f05983daecab868a31e1da44462873306d3cbfd76d1f0b5b69c473d21dbb128", size = 229131, upload-time = "2025-10-06T05:37:18.221Z" }, + { url = "https://files.pythonhosted.org/packages/b2/60/b1d2da22f4970e7a155f0adde9b1435712ece01b3cd45ba63702aea33938/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:073f8bf8becba60aa931eb3bc420b217bb7d5b8f4750e6f8b3be7f3da85d38b7", size = 231972, upload-time = "2025-10-06T05:37:23.5Z" }, + { url = "https://files.pythonhosted.org/packages/c0/c7/43200656ecc4e02d3f8bc248df68256cd9572b3f0017f0a0c4e93440ae23/frozenlist-1.8.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:d3bb933317c52d7ea5004a1c442eef86f426886fba134ef8cf4226ea6ee1821d", size = 89238, upload-time = "2025-10-06T05:37:29.373Z" }, + { url = "https://files.pythonhosted.org/packages/ba/7d/b7282a445956506fa11da8c2db7d276adcbf2b17d8bb8407a47685263f90/frozenlist-1.8.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2c5dcbbc55383e5883246d11fd179782a9d07a986c40f49abe89ddf865913930", size = 51739, upload-time = "2025-10-06T05:37:32.127Z" }, + { url = "https://files.pythonhosted.org/packages/62/1c/3d8622e60d0b767a5510d1d3cf21065b9db874696a51ea6d7a43180a259c/frozenlist-1.8.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:39ecbc32f1390387d2aa4f5a995e465e9e2f79ba3adcac92d68e3e0afae6657c", size = 284186, upload-time = "2025-10-06T05:37:33.21Z" }, + { url = "https://files.pythonhosted.org/packages/2d/14/aa36d5f85a89679a85a1d44cd7a6657e0b1c75f61e7cad987b203d2daca8/frozenlist-1.8.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92db2bf818d5cc8d9c1f1fc56b897662e24ea5adb36ad1f1d82875bd64e03c24", size = 292196, upload-time = "2025-10-06T05:37:36.107Z" }, + { url = "https://files.pythonhosted.org/packages/30/de/2c22ab3eb2a8af6d69dc799e48455813bab3690c760de58e1bf43b36da3e/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:168c0969a329b416119507ba30b9ea13688fafffac1b7822802537569a1cb0ef", size = 282814, upload-time = "2025-10-06T05:37:45.337Z" }, + { url = "https://files.pythonhosted.org/packages/96/52/abddd34ca99be142f354398700536c5bd315880ed0a213812bc491cff5e4/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:974b28cf63cc99dfb2188d8d222bc6843656188164848c4f679e63dae4b0708e", size = 283148, upload-time = "2025-10-06T05:37:50.745Z" }, + { url = "https://files.pythonhosted.org/packages/9a/9a/e35b4a917281c0b8419d4207f4334c8e8c5dbf4f3f5f9ada73958d937dcc/frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d", size = 13409, upload-time = "2025-10-06T05:38:16.721Z" }, +] + [[package]] name = "fsspec" -version = "2026.1.0" +version = "2026.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/10/a1/ae4e3e5003468d6391d2c77b6fa1cd73bd5d13511d81c642d7b28ac90ed4/fsspec-2026.6.0.tar.gz", hash = "sha256:f5bac145310fe30e16e1471bd6840b2d990d609e872251d7e674241822abf01a", size = 313646, upload-time = "2026-06-16T01:57:28.105Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/22/4222d7ddf3da30f363edaa98e329c2bce6c65497c9cb2810931c8b2c0fbc/fsspec-2026.6.0-py3-none-any.whl", hash = "sha256:02e0b71817df9b2169dc30a16832045764def1191b43dcff5bb85bdee212d2a1", size = 203949, upload-time = "2026-06-16T01:57:26.358Z" }, +] + +[[package]] +name = "gcsfs" +version = "2026.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "decorator", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "fsspec", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "google-auth", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "google-auth-oauthlib", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "google-cloud-storage", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "google-cloud-storage-control", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "requests", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cd/ad/36777b2030b96d32f5c557606ac11bf5d0e152620fc15055bd1e30194037/gcsfs-2026.6.0.tar.gz", hash = "sha256:bfb1f912b3f51006b00bcd5fcef915214cb51f8b892a3974178430a55990ba3f", size = 1007987, upload-time = "2026-06-18T03:16:08.99Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/43/a0096d96d3271640bbda056b9d22249be141a54509859b99002ee6149a01/gcsfs-2026.6.0-py3-none-any.whl", hash = "sha256:4a81fe40fbdef450aeaacb534b42c04059f8f3b080e3e169137247a5bb023464", size = 89629, upload-time = "2026-06-18T03:16:07.407Z" }, +] + +[[package]] +name = "google-api-core" +version = "2.31.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "google-auth", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "googleapis-common-protos", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "proto-plus", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "protobuf", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "requests", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c6/22/155cadf1d49272a9cf48f3168c0f3874fa13397297e611a5ea00cd093880/google_api_core-2.31.0.tar.gz", hash = "sha256:2be84ee0f584c48e6bde1b36766e23348b361fb7e55e56135fc76ce1c397f9c2", size = 176492, upload-time = "2026-06-03T14:52:17.257Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/86/40/9bdbb60b03a332bd45acb8703da08bbc27d991d35286b62e42acc86d243a/google_api_core-2.31.0-py3-none-any.whl", hash = "sha256:ef79fb3784c71cbac89cbd03301ba0c8fb8ad2aa95d7f9204dd9628f7adf59ab", size = 173102, upload-time = "2026-06-03T14:51:26.729Z" }, +] + +[package.optional-dependencies] +grpc = [ + { name = "grpcio", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "grpcio-status", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, +] + +[[package]] +name = "google-auth" +version = "2.55.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "pyasn1-modules", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/81/1c/70b23fc52b2bb3c70b379f3bd05c4a60ab3a873e30c6bd21c57e0154848a/google_auth-2.55.0.tar.gz", hash = "sha256:fcd3a130f575fa36403d38774af1c64a4fbfbca09215f0589d2372b5119697cb", size = 349379, upload-time = "2026-06-15T22:33:16.466Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/44/71/c0321dc6d63d99946da45f7c06299b934e4f7f7da5c4f14d101bcb39adf1/google_auth-2.55.0-py3-none-any.whl", hash = "sha256:a17cef9dedf98c4ebae2fb0c48c8f75952c877cbc2efe09f329ef16c2783d88a", size = 252400, upload-time = "2026-06-15T22:33:14.992Z" }, +] + +[[package]] +name = "google-auth-oauthlib" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "google-auth", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "requests-oauthlib", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/70/18/90c7fac516e63cf2058166fce0c88c353647c677b51cc036c09c49bb5cbb/google_auth_oauthlib-1.4.0.tar.gz", hash = "sha256:18b5e28880eb8eba9065c436becdc0ee8e4b59117a73a510679c82f70cd363d2", size = 21675, upload-time = "2026-05-07T08:03:47.816Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/37/d3/d7dff0d58a9e9244b48044bfb6a898bfcc8ecc42e0031d1bebc695344725/google_auth_oauthlib-1.4.0-py3-none-any.whl", hash = "sha256:251314f213a9ee46a5ae73988e84fd7cca8bb68e7ecf4bfd45940f9e7f51d070", size = 19261, upload-time = "2026-05-07T08:02:13.798Z" }, +] + +[[package]] +name = "google-cloud-core" +version = "2.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "google-api-core", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "google-auth", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a8/dd/1eef226e470369b26824a505c34482c0b493bc35fe8e0c6b003b5feca21a/google_cloud_core-2.6.0.tar.gz", hash = "sha256:e76149739f90fac1fc6757c09f47eaccb3145b54adbd7759b0f7c4b235f46c83", size = 36001, upload-time = "2026-05-07T08:04:04.124Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/4a/98da8930ab109c73d9a5d13782a9ebb81ea8c111f6d534a567b71d23e52b/google_cloud_core-2.6.0-py3-none-any.whl", hash = "sha256:6d63ac8e5eca6d9e4319d0a1e2265fadcd7f1049904378caecfa01cf52dd869e", size = 29390, upload-time = "2026-05-07T08:02:34.672Z" }, +] + +[[package]] +name = "google-cloud-storage" +version = "3.12.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "google-api-core", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "google-auth", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "google-cloud-core", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "google-crc32c", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "google-resumable-media", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "requests", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/58/72/86f94e1639a8bcd9d33e8e01b49afcaa1c3a13bda7683c681717e0901e15/google_cloud_storage-3.12.0.tar.gz", hash = "sha256:03ae9847c6babb368f35f054126b8a08cbc0e3266efb990eb17b9926a45cf3be", size = 17338620, upload-time = "2026-06-12T18:03:29.215Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1b/bd/a89eaebd2f9db5f92ddcc8e4f23c266be1dbd11058bb83451d8dd029f34c/google_cloud_storage-3.12.0-py3-none-any.whl", hash = "sha256:3880773754ddf7c27567b04e2a4d193950b6b99429f37b9097d873686e95b09c", size = 340605, upload-time = "2026-06-12T18:03:12.677Z" }, +] + +[[package]] +name = "google-cloud-storage-control" +version = "1.12.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "google-api-core", extra = ["grpc"], marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "google-auth", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "grpc-google-iam-v1", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "grpcio", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "proto-plus", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "protobuf", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/88/ae/707995271f77e3c1da715c740160f98f87a79a5c601b28d17c4d2500c037/google_cloud_storage_control-1.12.0.tar.gz", hash = "sha256:49090d03532c0c84c6246a5fd490c31fd4bbffb4c7771c0a6744ec23a194a5f6", size = 137036, upload-time = "2026-06-03T16:14:00.921Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/ba/f187f30fb2c8bb5dbb0de0fcb0dec2f8fab0b782ab42facc83ea02628f1b/google_cloud_storage_control-1.12.0-py3-none-any.whl", hash = "sha256:20f7f1252fa5635d47e12f746aa69d719e31eb9405cbbd14cdfba317db27d421", size = 102205, upload-time = "2026-06-03T16:12:43.266Z" }, +] + +[[package]] +name = "google-crc32c" +version = "1.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/03/41/4b9c02f99e4c5fb477122cd5437403b552873f014616ac1d19ac8221a58d/google_crc32c-1.8.0.tar.gz", hash = "sha256:a428e25fb7691024de47fecfbff7ff957214da51eddded0da0ae0e0f03a2cf79", size = 14192, upload-time = "2025-12-16T00:35:25.142Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/5f/7307325b1198b59324c0fa9807cafb551afb65e831699f2ce211ad5c8240/google_crc32c-1.8.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:4b8286b659c1335172e39563ab0a768b8015e88e08329fa5321f774275fc3113", size = 31300, upload-time = "2025-12-16T00:21:56.723Z" }, + { url = "https://files.pythonhosted.org/packages/ce/a9/a780cc66f86335a6019f557a8aaca8fbb970728f0efd2430d15ff1beae0e/google_crc32c-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:14f87e04d613dfa218d6135e81b78272c3b904e2a7053b841481b38a7d901411", size = 33364, upload-time = "2025-12-16T00:40:22.96Z" }, + { url = "https://files.pythonhosted.org/packages/21/3f/3457ea803db0198c9aaca2dd373750972ce28a26f00544b6b85088811939/google_crc32c-1.8.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cb5c869c2923d56cb0c8e6bcdd73c009c36ae39b652dbe46a05eb4ef0ad01454", size = 33740, upload-time = "2025-12-16T00:40:23.96Z" }, + { url = "https://files.pythonhosted.org/packages/d1/db/000f15b41724589b0e7bc24bc7a8967898d8d3bc8caf64c513d91ef1f6c0/google_crc32c-1.8.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:3ebb04528e83b2634857f43f9bb8ef5b2bbe7f10f140daeb01b58f972d04736b", size = 31297, upload-time = "2025-12-16T00:23:20.709Z" }, + { url = "https://files.pythonhosted.org/packages/ce/42/b468aec74a0354b34c8cbf748db20d6e350a68a2b0912e128cabee49806c/google_crc32c-1.8.0-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:3b9776774b24ba76831609ffbabce8cdf6fa2bd5e9df37b594221c7e333a81fa", size = 33344, upload-time = "2025-12-16T00:40:24.742Z" }, + { url = "https://files.pythonhosted.org/packages/1c/e8/b33784d6fc77fb5062a8a7854e43e1e618b87d5ddf610a88025e4de6226e/google_crc32c-1.8.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:89c17d53d75562edfff86679244830599ee0a48efc216200691de8b02ab6b2b8", size = 33694, upload-time = "2025-12-16T00:40:25.505Z" }, + { url = "https://files.pythonhosted.org/packages/21/88/8ecf3c2b864a490b9e7010c84fd203ec8cf3b280651106a3a74dd1b0ca72/google_crc32c-1.8.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:e6584b12cb06796d285d09e33f63309a09368b9d806a551d8036a4207ea43697", size = 31301, upload-time = "2025-12-16T00:24:48.527Z" }, + { url = "https://files.pythonhosted.org/packages/56/15/c25671c7aad70f8179d858c55a6ae8404902abe0cdcf32a29d581792b491/google_crc32c-1.8.0-cp314-cp314-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b0d1a7afc6e8e4635564ba8aa5c0548e3173e41b6384d7711a9123165f582de2", size = 33381, upload-time = "2025-12-16T00:40:26.268Z" }, + { url = "https://files.pythonhosted.org/packages/42/fa/f50f51260d7b0ef5d4898af122d8a7ec5a84e2984f676f746445f783705f/google_crc32c-1.8.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8b3f68782f3cbd1bce027e48768293072813469af6a61a86f6bb4977a4380f21", size = 33734, upload-time = "2025-12-16T00:40:27.028Z" }, +] + +[[package]] +name = "google-resumable-media" +version = "2.10.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "google-crc32c", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/48/f8/1ca5781d6be9cb9f73f7d40f4958c4bd1226a60598e3e39e1d6aaf838c4b/google_resumable_media-2.10.0.tar.gz", hash = "sha256:e324bc9d0fdae4c52a08ae90456edc4e71ece858399e1217ac0eb3a51d6bc6ee", size = 2164570, upload-time = "2026-06-03T16:14:26.103Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b0/d8/00c6854ac1512bb9eaf13bd3f8f28222f7674947fc510a4ff7616f2efc80/google_resumable_media-2.10.0-py3-none-any.whl", hash = "sha256:88152884bee37b2bf36a0ab81ad8c7fd12212c9803dd981d77c1b35b02d34e7c", size = 81533, upload-time = "2026-06-03T16:13:12.51Z" }, +] + +[[package]] +name = "googleapis-common-protos" +version = "1.75.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "protobuf", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b5/c8/f439cffde755cffa462bfbb156278fa6f9d09119719af9814b858fd4f81f/googleapis_common_protos-1.75.0.tar.gz", hash = "sha256:53a062ff3c32552fbd62c11fe23768b78e4ddf0494d5e5fd97d3f4689c75fbbd", size = 151035, upload-time = "2026-05-07T08:04:49.423Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/c8/e2645aa8ed02fd4c7a2f59d68783b65b1f3cbdfe39a6308e156509d1fee8/googleapis_common_protos-1.75.0-py3-none-any.whl", hash = "sha256:961ed60399c457ceb0ee8f285a84c870aabc9c6a832b9d37bb281b5bebde43ed", size = 300631, upload-time = "2026-05-07T08:03:30.345Z" }, +] + +[package.optional-dependencies] +grpc = [ + { name = "grpcio", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, +] + +[[package]] +name = "grpc-google-iam-v1" +version = "0.14.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "googleapis-common-protos", extra = ["grpc"], marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "grpcio", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "protobuf", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/44/4f/d098419ad0bfc06c9ce440575f05aa22d8973b6c276e86ac7890093d3c37/grpc_google_iam_v1-0.14.4.tar.gz", hash = "sha256:392b3796947ed6334e61171d9ab06bf7eb357f554e5fc7556ad7aab6d0e17038", size = 23706, upload-time = "2026-04-01T01:57:49.813Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/89/22/c2dd50c09bf679bd38173656cd4402d2511e563b33bc88f90009cf50613c/grpc_google_iam_v1-0.14.4-py3-none-any.whl", hash = "sha256:412facc320fcbd94034b4df3d557662051d4d8adfa86e0ddb4dca70a3f739964", size = 32675, upload-time = "2026-04-01T01:57:47.69Z" }, +] + +[[package]] +name = "grpcio" +version = "1.81.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b0/b5/1ff353970a87eda4c98251e34d2dfd214abd4982dc89119c9252a2a482d2/grpcio-1.81.1.tar.gz", hash = "sha256:6fa10a767143a5e82e8eaab53918af0cd8909a57a27f8cb2288b80a613ac671b", size = 13026582, upload-time = "2026-06-11T12:46:51.673Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/75/95/539706ca0d3bd40dbad583dc56fd883da941f37556b629132da5762781b9/grpcio-1.81.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:12b7524c88d4026d3dcb7b0ebe16b6714f3b4af402ddd0f0639ab064a00c87c3", size = 12052560, upload-time = "2026-06-11T12:45:23.652Z" }, + { url = "https://files.pythonhosted.org/packages/e0/44/f257b7e0bd69c93b06c6cb8ac8d1b901ccb42bedabd83c1a4c77a71f8810/grpcio-1.81.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1e123f9b37edb8375fd74130d1f69c944bbf0a7b06761ae7211154b8759e94d2", size = 6595983, upload-time = "2026-06-11T12:45:26.963Z" }, + { url = "https://files.pythonhosted.org/packages/eb/8c/dea020b6d91508cd84463917a63149ec196ee7db505d032ae43fcb3303b9/grpcio-1.81.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:766bc7c9a9c340342f4c864ccbda8e78111e4751f13b895812b9c148fb79e9d0", size = 6809167, upload-time = "2026-06-11T12:45:32.52Z" }, + { url = "https://files.pythonhosted.org/packages/1c/c7/3030dd940408083bd32cd95d634777a71605ade4887154d93e8a89244946/grpcio-1.81.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b259a04a737cb3496be0901328eb8b7552ed8df4865d8c8f1cf1bffcfc0776a3", size = 7412536, upload-time = "2026-06-11T12:45:35.403Z" }, + { url = "https://files.pythonhosted.org/packages/25/7a/71437c7f3596e5246155c515852795a85a1a8d228190212432b13b97a95d/grpcio-1.81.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8ea1936c26b99999b27479853039a7f34713f56c49375ad52b38535ec93a796c", size = 7849660, upload-time = "2026-06-11T12:45:40.627Z" }, + { url = "https://files.pythonhosted.org/packages/7b/4a/a36e03210183a8a7d4c80c3936acee679f4bd77d5861f369db47b2cc5f05/grpcio-1.81.1-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:819edbdcb42ab8598b494bcf0222684bbb7a3c772bd1b1f0be7e029a6063c28e", size = 12048795, upload-time = "2026-06-11T12:45:54.011Z" }, + { url = "https://files.pythonhosted.org/packages/b0/d5/d68e30b29098f63beab6fe501100fe82674ff142b32c672532da86a99b3a/grpcio-1.81.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c5bf2dc311127d91230cc79b92188c082634a06cf66c5234db49a43b910183b0", size = 6599094, upload-time = "2026-06-11T12:45:57.799Z" }, + { url = "https://files.pythonhosted.org/packages/0d/1e/b47957057e729adc6cdf519a47f8be2562b7140e280f1418443eb4022192/grpcio-1.81.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e64dd101d380a115cc5a0c7856788adb535f1a4e21fc543775602f8be95180ae", size = 6810962, upload-time = "2026-06-11T12:46:03.312Z" }, + { url = "https://files.pythonhosted.org/packages/40/26/569868e364e05b19ec8f969da53d230bcd89c962cd198f7c29943155c4d3/grpcio-1.81.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:98a07f9bf591e3a8919797bee1c53f026ba4acd587e5a4404c8e57c9ec36b2a5", size = 7415698, upload-time = "2026-06-11T12:46:06.005Z" }, + { url = "https://files.pythonhosted.org/packages/ff/aa/66fe9f39871d766987d869a03ee0842a026f499c7b1e62decb9e78a8088e/grpcio-1.81.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:58ad1131c300d3c9b933802b3cc4dc69d380822935ba50b28703156ea826fbf7", size = 7844521, upload-time = "2026-06-11T12:46:12.171Z" }, + { url = "https://files.pythonhosted.org/packages/32/f1/2ec88adb92b0eba970dd0e0e7dd086341daa3c75eba4f735f9e44bf684b0/grpcio-1.81.1-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:d865db4a6318e1c1bea83292e0ed231090538fc4ca45425b0f0480eb338bbc6e", size = 12056279, upload-time = "2026-06-11T12:46:24.255Z" }, + { url = "https://files.pythonhosted.org/packages/41/36/e8c5f8c6ec71de73733695ebc809e98b178b534ec6d8eaa31a7ebab4ad4c/grpcio-1.81.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e2aa72e3ce1770317ef534f63d397b55e130725f5149bd36077c3b539019db27", size = 6608225, upload-time = "2026-06-11T12:46:27.601Z" }, + { url = "https://files.pythonhosted.org/packages/76/7b/61dab5d5969f28d97fb1009cead1df0a5cd987d3315e1b37f18a4449f8bc/grpcio-1.81.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:410482da976329fe5f4067270401b12cf2bd552ff8020f054ecfaddb5475f9d6", size = 6812165, upload-time = "2026-06-11T12:46:33.699Z" }, + { url = "https://files.pythonhosted.org/packages/82/78/6e501929d4f5f96462fd82fd9f0f06e5f9612207582b862868d68757b27d/grpcio-1.81.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e3657301562ac3cb8018d30d0d3ebfa39932239f7b5703422057ef14b69949f5", size = 7422962, upload-time = "2026-06-11T12:46:36.511Z" }, + { url = "https://files.pythonhosted.org/packages/da/df/c6717fef716e00d235ffb96123baf6dce76d6004f6233fa767c502861460/grpcio-1.81.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b427c19380991a4eaab2f6144b64b99b412043314c6bf4ab544f97bb31ee4190", size = 7846681, upload-time = "2026-06-11T12:46:43.013Z" }, +] + +[[package]] +name = "grpcio-status" +version = "1.80.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d5/7d/5df2650c57d47c57232af5ef4b4fdbff182070421e405e0d62c6cdbfaa87/fsspec-2026.1.0.tar.gz", hash = "sha256:e987cb0496a0d81bba3a9d1cee62922fb395e7d4c3b575e57f547953334fe07b", size = 310496, upload-time = "2026-01-09T15:21:35.562Z" } +dependencies = [ + { name = "googleapis-common-protos", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "grpcio", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "protobuf", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/ed/105f619bdd00cb47a49aa2feea6232ea2bbb04199d52a22cc6a7d603b5cb/grpcio_status-1.80.0.tar.gz", hash = "sha256:df73802a4c89a3ea88aa2aff971e886fccce162bc2e6511408b3d67a144381cd", size = 13901, upload-time = "2026-03-30T08:54:34.784Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/01/c9/97cc5aae1648dcb851958a3ddf73ccd7dbe5650d95203ecb4d7720b4cdbf/fsspec-2026.1.0-py3-none-any.whl", hash = "sha256:cb76aa913c2285a3b49bdd5fc55b1d7c708d7208126b60f2eb8194fe1b4cbdcc", size = 201838, upload-time = "2026-01-09T15:21:34.041Z" }, + { url = "https://files.pythonhosted.org/packages/76/80/58cd2dfc19a07d022abe44bde7c365627f6c7cb6f692ada6c65ca437d09a/grpcio_status-1.80.0-py3-none-any.whl", hash = "sha256:4b56990363af50dbf2c2ebb80f1967185c07d87aa25aa2bea45ddb75fc181dbe", size = 14638, upload-time = "2026-03-30T08:54:01.569Z" }, ] [[package]] @@ -180,6 +644,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c5/7b/bca5613a0c3b542420cf92bd5e5fb8ebd5435ce1011a091f66bb7693285e/humanize-4.15.0-py3-none-any.whl", hash = "sha256:b1186eb9f5a9749cd9cb8565aee77919dd7c8d076161cf44d70e59e3301e1769", size = 132203, upload-time = "2025-12-20T20:16:11.67Z" }, ] +[[package]] +name = "idna" +version = "3.18" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/63/9496c57188a2ee585e0f1db071d75089a11e98aa86eb99d9d7618fc1edce/idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848", size = 196711, upload-time = "2026-06-02T14:34:07.794Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2", size = 65455, upload-time = "2026-06-02T14:34:06.319Z" }, +] + [[package]] name = "immutabledict" version = "4.2.2" @@ -209,18 +682,18 @@ wheels = [ [[package]] name = "jax" -version = "0.9.1" +version = "0.10.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "jaxlib", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "ml-dtypes", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "numpy", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "opt-einsum", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "scipy", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "jaxlib", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "ml-dtypes", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "numpy", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "opt-einsum", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "scipy", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/25/4d/f45853fdc2b811e78b866d5f80b8a21a848278361f66c066706132f415cf/jax-0.9.1.tar.gz", hash = "sha256:ce1b82477ee192f0b1d9801b095aa0cf3839bc1fe0cbc071c961a24b3ff30361", size = 2625994, upload-time = "2026-03-02T11:24:18.382Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d2/73/eb91d98fcadfa2cbcfdd4e417ab116e47eb20882acc5ee678e47c35d6b57/jax-0.10.2.tar.gz", hash = "sha256:bf77428a8c2e6904c4f46d5ab12aa5cfc6cad2179f07f7e4c0fc75ac86ef0639", size = 2775110, upload-time = "2026-06-17T23:44:57.818Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/80/e4/88778c6a23b65224e5088e68fd0924e5bde2196a26e76edb3ea3543fed6a/jax-0.9.1-py3-none-any.whl", hash = "sha256:d11cb53d362912253013e8c4d6926cb9f3a4b59ab5b25a7dc08123567067d088", size = 3062162, upload-time = "2026-03-02T11:22:05.089Z" }, + { url = "https://files.pythonhosted.org/packages/89/82/5ab5211079a151b6f661529369c0c8e98ec64cabf5c0cf22a0a05af124d8/jax-0.10.2-py3-none-any.whl", hash = "sha256:724d73c4678d8b06f6a6ab4db1b8a2fea8cd4f1e2c2564f99601634ec7b8d1c6", size = 3219515, upload-time = "2026-06-17T23:42:41.259Z" }, ] [package.optional-dependencies] @@ -231,31 +704,31 @@ cuda12 = [ [[package]] name = "jax-cuda12-pjrt" -version = "0.9.1" +version = "0.10.2" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1b/b8/b725d6ae617b5b6d988eb3b8672e997fff52f1749b3b138c371ae6cf7c2d/jax_cuda12_pjrt-0.9.1-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:31284cd1c279612cebcf2e9383db9cc2e0703ad8ef56c887476b40331fed7c93", size = 149993391, upload-time = "2026-03-02T11:22:08.125Z" }, - { url = "https://files.pythonhosted.org/packages/a7/2c/8ddb471091b46de99bba7eaa7f4e3983f9c8e74e310e585ff08915ce8b7a/jax_cuda12_pjrt-0.9.1-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:6447fe3d661b1d824ae7329914c4ac05fe54aeab68c7a7ca23c4f5306dec2e1f", size = 156039796, upload-time = "2026-03-02T11:22:13.316Z" }, + { url = "https://files.pythonhosted.org/packages/bf/b0/e1d392ee24ecd53caa202194746cb12058befde5882d1f3307922829783f/jax_cuda12_pjrt-0.10.2-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:b6f2d66548ee1ee910a836b5fe3d0ebbe1da04a62d0f468ba4822189036a32b3", size = 169847949, upload-time = "2026-06-17T23:42:44.729Z" }, + { url = "https://files.pythonhosted.org/packages/77/00/326facd192b7dc0731e43b30f5ada5ef235e2a3325a151d94ed3db041536/jax_cuda12_pjrt-0.10.2-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:806d1fd29038b6acf5a2b289dd62192abea977ee26aef60ea295b1d28a23acf8", size = 174364763, upload-time = "2026-06-17T23:42:49.931Z" }, ] [[package]] name = "jax-cuda12-plugin" -version = "0.9.1" +version = "0.10.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jax-cuda12-pjrt", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/63/3e/df484dc2f9c42ad2344ff677ab5cb28c05420990a2697708ea0c32ef23bd/jax_cuda12_plugin-0.9.1-cp312-cp312-manylinux_2_27_aarch64.whl", hash = "sha256:2843ca4278617a199f9f0a3d992d8684fabe8beaf988ff793ec19d836bdcadc4", size = 5652156, upload-time = "2026-03-02T11:22:19.536Z" }, - { url = "https://files.pythonhosted.org/packages/4f/4e/cd2aa23847bb3c631d9c55ff35fda51c0c5d0410159df897b22c6c02ff5c/jax_cuda12_plugin-0.9.1-cp312-cp312-manylinux_2_27_x86_64.whl", hash = "sha256:f4c21de4507b1c442f4e10beb123e4b916055bff4c0102729aa2a49f2ed0fc88", size = 5654547, upload-time = "2026-03-02T11:22:21.365Z" }, - { url = "https://files.pythonhosted.org/packages/95/80/0d15d44900bbe2c6276537dc62c8ec49cb08d77b11f8a948b398a3d17eec/jax_cuda12_plugin-0.9.1-cp313-cp313-manylinux_2_27_aarch64.whl", hash = "sha256:d1bf3374819c8a87e90df04b7144272e5ac0727a5e1fc4872531c52e387c0e38", size = 5652459, upload-time = "2026-03-02T11:22:22.728Z" }, - { url = "https://files.pythonhosted.org/packages/ca/25/7257a5e4b94634495c138b57f15e77573c440f5128fd44882ae798c70181/jax_cuda12_plugin-0.9.1-cp313-cp313-manylinux_2_27_x86_64.whl", hash = "sha256:389c896216a6d4af78709a8f4ca75916ab4ff7bbf4b1af5c09dce9823c003b73", size = 5654488, upload-time = "2026-03-02T11:22:23.978Z" }, - { url = "https://files.pythonhosted.org/packages/45/5b/eadf6199ec61d0640c00c41bb6152c67c2b4b116f7c118ab1eec7034d13e/jax_cuda12_plugin-0.9.1-cp313-cp313t-manylinux_2_27_aarch64.whl", hash = "sha256:6c7a92b7890de3b3cf9f16a017d4ce7f364ef7d3003da86a59d941a2da4a0bda", size = 5665206, upload-time = "2026-03-02T11:22:26.471Z" }, - { url = "https://files.pythonhosted.org/packages/8d/30/302d9331fe44db041efe042d70fa963c88eaa32e92b4c241a2229a6fea76/jax_cuda12_plugin-0.9.1-cp313-cp313t-manylinux_2_27_x86_64.whl", hash = "sha256:0a5d2c6604c8fec04df575190f13908a4aa588fb715c338839099d7cb8f90ad5", size = 5663128, upload-time = "2026-03-02T11:22:27.809Z" }, - { url = "https://files.pythonhosted.org/packages/cc/8a/d626849b8667c971a95784cf468d272d92823133dbb2311ceadcb07427aa/jax_cuda12_plugin-0.9.1-cp314-cp314-manylinux_2_27_aarch64.whl", hash = "sha256:d04ac5cff48d18f8497d99c25a26f15bb2df3ba287a4e5eb86c61c89f058c2f9", size = 5653063, upload-time = "2026-03-02T11:22:28.998Z" }, - { url = "https://files.pythonhosted.org/packages/17/e9/3632d7eddb8f282b50bf7c095bba9de91aae0de9baea56d1699d982fe5f8/jax_cuda12_plugin-0.9.1-cp314-cp314-manylinux_2_27_x86_64.whl", hash = "sha256:55888255c325f98af961cf5f665ca8223d0e36363eb544fc0286277be2324e8f", size = 5655068, upload-time = "2026-03-02T11:22:30.251Z" }, - { url = "https://files.pythonhosted.org/packages/a9/90/cfa3222b419194524d28b63b3c6d09ce22ddf823701ae73426df6688f26a/jax_cuda12_plugin-0.9.1-cp314-cp314t-manylinux_2_27_aarch64.whl", hash = "sha256:6b4533951bca6e03b07bb092241f2b471d7675e6c0fd5a4c7cc371d030e0c95a", size = 5665690, upload-time = "2026-03-02T11:22:31.438Z" }, - { url = "https://files.pythonhosted.org/packages/11/65/c123fd6343008df4366840a68f9d5a5c2ee1c7a88b94f0485d1e5bbfd1f8/jax_cuda12_plugin-0.9.1-cp314-cp314t-manylinux_2_27_x86_64.whl", hash = "sha256:88d3714a638e38f80fa91ba4b9ffc4fd767f4c158ef156067801c74b38d6370f", size = 5663278, upload-time = "2026-03-02T11:22:32.687Z" }, + { url = "https://files.pythonhosted.org/packages/94/4a/382ec14e57d774148b079c3d251fc9b9e1ed7f92dd2327823f35e0a968a7/jax_cuda12_plugin-0.10.2-cp312-cp312-manylinux_2_27_aarch64.whl", hash = "sha256:767a1482dbf652688403c4e22ff01470e1add13c48f9d817169fd8f7440afce5", size = 8093630, upload-time = "2026-06-17T23:42:57.019Z" }, + { url = "https://files.pythonhosted.org/packages/ca/25/19ee8936b00ca74a12bfaebd4703695cee2407f954a6e4e67cdd7f82b7bf/jax_cuda12_plugin-0.10.2-cp312-cp312-manylinux_2_27_x86_64.whl", hash = "sha256:4eb6e8e0992fd9897db2468da33f276ae414ec84dc436804124404430502eeac", size = 8141521, upload-time = "2026-06-17T23:42:58.483Z" }, + { url = "https://files.pythonhosted.org/packages/94/33/a9c4ea148d31843764383b26fd66b38cfedad9a6dbf08db634a23d9312c3/jax_cuda12_plugin-0.10.2-cp313-cp313-manylinux_2_27_aarch64.whl", hash = "sha256:69776ac849112f4fc2d6fa616f8772106daff38fcdb825c4e39f47e878f27610", size = 8093605, upload-time = "2026-06-17T23:43:00.071Z" }, + { url = "https://files.pythonhosted.org/packages/92/07/3098ae537e68d76bbc98ed61d53e9856f63f4f1bd64f8aeb4d432dad1290/jax_cuda12_plugin-0.10.2-cp313-cp313-manylinux_2_27_x86_64.whl", hash = "sha256:948a988927cb10843b501a215181ccb1daed3fa70531b2f1ae0842fe1c08b05e", size = 8141236, upload-time = "2026-06-17T23:43:01.55Z" }, + { url = "https://files.pythonhosted.org/packages/72/0c/ff1e1975ef108cb2e45deacf5dea812822efaf3210af075f464abd40399c/jax_cuda12_plugin-0.10.2-cp313-cp313t-manylinux_2_27_aarch64.whl", hash = "sha256:febd9d3f488d182090758936042ad647a60470923715b48a385bc312cb943c63", size = 8108408, upload-time = "2026-06-17T23:43:03.398Z" }, + { url = "https://files.pythonhosted.org/packages/09/c2/04c70eb73beb4df23f49b72d159ca74ee31cccb1be95cdab7491a5ebd259/jax_cuda12_plugin-0.10.2-cp313-cp313t-manylinux_2_27_x86_64.whl", hash = "sha256:1f1e20fba0aaa3f28ab0a3273754c8c098fa40b74bf4dac5b76c9f2a70425487", size = 8151184, upload-time = "2026-06-17T23:43:05.106Z" }, + { url = "https://files.pythonhosted.org/packages/95/34/5d5b2993f6b7bbfe781920671de61036faffa5a8bf3740b4ca23d790b6f9/jax_cuda12_plugin-0.10.2-cp314-cp314-manylinux_2_27_aarch64.whl", hash = "sha256:4946ec57ddb795e2da8288ceb1ceddd58c2a204a0f7765af89eae486a1d3ace7", size = 8094107, upload-time = "2026-06-17T23:43:06.546Z" }, + { url = "https://files.pythonhosted.org/packages/02/ac/85bc07d7a0766c7999f9bdfcf7f7cb2487fd0eb5d6bbe2bd41a3a54cd379/jax_cuda12_plugin-0.10.2-cp314-cp314-manylinux_2_27_x86_64.whl", hash = "sha256:0c7a0204155585cc1c4fcb30c66b7f881b38e57e1f0d8e97d48e1654bf0d27f8", size = 8141889, upload-time = "2026-06-17T23:43:08.018Z" }, + { url = "https://files.pythonhosted.org/packages/f3/7d/9fa25e24b96ab06217e1e3dd311a80f3534076bb1b19d46cbc8cf9aa55b9/jax_cuda12_plugin-0.10.2-cp314-cp314t-manylinux_2_27_aarch64.whl", hash = "sha256:c26a7dd5e71c9edf203b95480f02ec4ad60c9c7e11e38b7310b1fd1dd03ba116", size = 8108639, upload-time = "2026-06-17T23:43:09.651Z" }, + { url = "https://files.pythonhosted.org/packages/20/c2/98fa02ba204f5dc88680128129fbc7cd833d5b5ddae2734af93ef85db853/jax_cuda12_plugin-0.10.2-cp314-cp314t-manylinux_2_27_x86_64.whl", hash = "sha256:c539b052056e8181082fa2635f17e098b3f625d87da53ba35470a2c13480801d", size = 8151505, upload-time = "2026-06-17T23:43:11.023Z" }, ] [package.optional-dependencies] @@ -274,26 +747,43 @@ with-cuda = [ { name = "nvidia-nvshmem-cu12", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] +[[package]] +name = "jax-mps" +version = "0.10.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jax", marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" }, + { name = "jaxlib", marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/70/34/7f01c633b3ba61d0beaacf3bce238b1c7110bcfcf8b2e924ac3aba0d9be9/jax_mps-0.10.9-py3-none-macosx_14_0_arm64.whl", hash = "sha256:6b289db0bea58f9c11b7b09b73626d9ee0cb4b8268e2f88dca01286159fec3eb", size = 44034532, upload-time = "2026-07-10T03:50:16.636Z" }, +] + [[package]] name = "jaxlib" -version = "0.9.1" +version = "0.10.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "ml-dtypes", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "numpy", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "scipy", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "ml-dtypes", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "numpy", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "scipy", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/f8/b9/e0419783cbff9fa3bbc053dbe130f9051f60de4f424f650d70aae7f3bdf1/jaxlib-0.9.1-cp312-cp312-manylinux_2_27_aarch64.whl", hash = "sha256:f80e8aead3461683657027e14e814e5bdd00be8ce8e05c0a5db86403db297c2e", size = 76828062, upload-time = "2026-03-02T11:23:19.202Z" }, - { url = "https://files.pythonhosted.org/packages/53/6b/b381bda5850f5611822d791cd25dfe36efda2688a68c4dda0f8a92c36dec/jaxlib-0.9.1-cp312-cp312-manylinux_2_27_x86_64.whl", hash = "sha256:e2ab8c97be30354a34e64d17066df0fce7d1d0f40f7a48eded19e9e837896f5d", size = 82472923, upload-time = "2026-03-02T11:23:23.352Z" }, - { url = "https://files.pythonhosted.org/packages/fd/5f/d4a79d6802f3cef02773852453d9528569dd0896964117d4401658828aba/jaxlib-0.9.1-cp313-cp313-manylinux_2_27_aarch64.whl", hash = "sha256:9e88c35248b37d5219423ff8ddca60c6a561e665ded5c4fcbc61f0763e03f1e3", size = 76828438, upload-time = "2026-03-02T11:23:34.793Z" }, - { url = "https://files.pythonhosted.org/packages/3e/2e/d84cafbd07e8cdc7701d9f840f4eea0cfcf3487a99ada14507702172da14/jaxlib-0.9.1-cp313-cp313-manylinux_2_27_x86_64.whl", hash = "sha256:da60d967b4ac2084a3e3535ad982392894dd6bdf79c9a56978aba08404a58c82", size = 82473711, upload-time = "2026-03-02T11:23:38.356Z" }, - { url = "https://files.pythonhosted.org/packages/e9/63/0f5acacd3bd6906f2e1f730ceeafac4afc5cc612f43be4820785608cb951/jaxlib-0.9.1-cp313-cp313t-manylinux_2_27_aarch64.whl", hash = "sha256:469f08a30f6b541557e29c5de61ea6df16ac0ef9225879373bb2b332f1b27d14", size = 76949185, upload-time = "2026-03-02T11:23:49.378Z" }, - { url = "https://files.pythonhosted.org/packages/91/c5/a4dee13627d913c7bd0cf29b7f5c1d6a2605760d08a7cff952f9098ebb61/jaxlib-0.9.1-cp313-cp313t-manylinux_2_27_x86_64.whl", hash = "sha256:2e2225b80689610cbb472822dadf7cc200aa4bdac813112a3f6e074d96b1458c", size = 82584273, upload-time = "2026-03-02T11:23:52.762Z" }, - { url = "https://files.pythonhosted.org/packages/0c/e7/237ec5f4cd07420ef50d79a048b769664dbe306e31bdb10f9dcb9accabe9/jaxlib-0.9.1-cp314-cp314-manylinux_2_27_aarch64.whl", hash = "sha256:531dff9fae7aea14449ee544cc1415880cc8a346a9287d347dbd1b2b51d8aabd", size = 76846925, upload-time = "2026-03-02T11:23:59.18Z" }, - { url = "https://files.pythonhosted.org/packages/76/fe/67d2c414b0860d42f4a20b1fadbe7aeffb1b3d885efebd7aedf22a4bc2a2/jaxlib-0.9.1-cp314-cp314-manylinux_2_27_x86_64.whl", hash = "sha256:2287a1c891b152c52eb9b73925f57cde01be35d2bab4dad9673d3c83c5982ca8", size = 82484342, upload-time = "2026-03-02T11:24:02.541Z" }, - { url = "https://files.pythonhosted.org/packages/50/d2/35ecc2e92065ac035a954fcb4b752baa72747dcc3a3466525c42c4404958/jaxlib-0.9.1-cp314-cp314t-manylinux_2_27_aarch64.whl", hash = "sha256:30fe58e8e4e105dffe364a6f0dccca16d93433576d4a015babc83339ca7f1f38", size = 76948543, upload-time = "2026-03-02T11:24:12.026Z" }, - { url = "https://files.pythonhosted.org/packages/ba/cb/a8de776aee88f42937d07472953cf7980e45f5fb30aa9d5ee652b4acc771/jaxlib-0.9.1-cp314-cp314t-manylinux_2_27_x86_64.whl", hash = "sha256:6b6654a20d54e7cc77d1d54c33f1db851ef9d70bb112b627776178221036e720", size = 82585090, upload-time = "2026-03-02T11:24:15.783Z" }, + { url = "https://files.pythonhosted.org/packages/ca/93/ee9cc8743191544f65d26ab7eeb82d65968fe60905662d1a5554d056654b/jaxlib-0.10.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:47bb7c011515ea862be7e8313f40f9c56cbec09dc98a0fcb5016785fcd454c01", size = 61434612, upload-time = "2026-06-17T23:43:57.808Z" }, + { url = "https://files.pythonhosted.org/packages/11/06/8cc36021bf74d617c312eeed94c280282bb1bcbb32b63f2a42b10ae41575/jaxlib-0.10.2-cp312-cp312-manylinux_2_27_aarch64.whl", hash = "sha256:53b72977ae582c03a9e8e1cdee1efbf8ebc1418270965b0e69eade57acf40331", size = 81085366, upload-time = "2026-06-17T23:44:01.067Z" }, + { url = "https://files.pythonhosted.org/packages/48/17/38b718af2353dba7753300871e83fbb64a88a772e12727ae27373ab675ce/jaxlib-0.10.2-cp312-cp312-manylinux_2_27_x86_64.whl", hash = "sha256:fe88ec443714c4379968b6c109f9fa617c7ad19b802828e4d7bf861cd66da4b7", size = 85467828, upload-time = "2026-06-17T23:44:04.238Z" }, + { url = "https://files.pythonhosted.org/packages/c2/68/eaa4cebe253359196a8e80a33b242959e27d8d2a6ae3d09339f21da2acb8/jaxlib-0.10.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4df530afa354a22dc1747a5d560640450cbb895d49889338a3f58c76a4c76c8e", size = 61434805, upload-time = "2026-06-17T23:44:10.511Z" }, + { url = "https://files.pythonhosted.org/packages/25/c1/4b884ea5962b6beb3c0f93742db54246bbf8b3274e48b0aca47908e454be/jaxlib-0.10.2-cp313-cp313-manylinux_2_27_aarch64.whl", hash = "sha256:45b28b0238697ab74bbcf20411aafb6db42acc31836cc2fd711e5cf056bf9556", size = 81084260, upload-time = "2026-06-17T23:44:14.065Z" }, + { url = "https://files.pythonhosted.org/packages/36/ac/4ee28c65861605945223145fbcd3c9362ec2255ddf7d917574e205548c82/jaxlib-0.10.2-cp313-cp313-manylinux_2_27_x86_64.whl", hash = "sha256:9e4818b4a8756fd3918766ca2aa5342125809f4f08a6fe46026d4386e7c23644", size = 85467706, upload-time = "2026-06-17T23:44:17.471Z" }, + { url = "https://files.pythonhosted.org/packages/56/5b/70df11da52a8b1a826184cccc05a3fec8aed76058a980021873fba3069cb/jaxlib-0.10.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4c202d8ff7c1f3b5049dbd8f1e30e52759cd4e0a5835f0b3c7ae076a05818e28", size = 61564746, upload-time = "2026-06-17T23:44:24.421Z" }, + { url = "https://files.pythonhosted.org/packages/23/5c/184a648ea5db6c8b1a08fc5784c157b4c557255e009fb56091393df3c6de/jaxlib-0.10.2-cp313-cp313t-manylinux_2_27_aarch64.whl", hash = "sha256:b7b029bb95d981566750475b9719a9d6b66ed5dd2748851667899b6cfe075299", size = 81204888, upload-time = "2026-06-17T23:44:27.57Z" }, + { url = "https://files.pythonhosted.org/packages/6c/5c/539596a55265711d74147913278bcdc38412980be7d74d9c9d860297c486/jaxlib-0.10.2-cp313-cp313t-manylinux_2_27_x86_64.whl", hash = "sha256:e8b126097d609b0c6e6786e89f6dd6978adc02ebd5f63a1c61293fbac7821305", size = 85583810, upload-time = "2026-06-17T23:44:30.962Z" }, + { url = "https://files.pythonhosted.org/packages/f2/0d/27471ec9f1d04674f6e62de809412371e097aed3eca7d9483e677c54c214/jaxlib-0.10.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:72eba28b12fee02616fa42aa4b881b4ab62d7757c7843c462401d3fb34a27be4", size = 61446097, upload-time = "2026-06-17T23:44:34.196Z" }, + { url = "https://files.pythonhosted.org/packages/af/c8/941a7f7f37510f51290a5bd1a413aeef977fb8ba8adc0cfe8391233a764c/jaxlib-0.10.2-cp314-cp314-manylinux_2_27_aarch64.whl", hash = "sha256:f18f56fee90699cfba9b6627045a7a299702cb0e2af82ce180d9a6a7c8048093", size = 81096546, upload-time = "2026-06-17T23:44:37.486Z" }, + { url = "https://files.pythonhosted.org/packages/69/77/ac054882c220872512df28d16aeb648fe0e651efbb5be4fd7c4817fd88b0/jaxlib-0.10.2-cp314-cp314-manylinux_2_27_x86_64.whl", hash = "sha256:ca34f363197fb0ac4082582ca755007910369e33f8a8ba3d35ed94b71070107d", size = 85472993, upload-time = "2026-06-17T23:44:40.904Z" }, + { url = "https://files.pythonhosted.org/packages/54/9b/91b00ec74985d29708b50420b4103c1f651c8f1c253d4fcb49d1bbb532cd/jaxlib-0.10.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:fc62997fce8831819551a2a5469a818169b09582b5b648c102d11ac7205bb812", size = 61564620, upload-time = "2026-06-17T23:44:48.217Z" }, + { url = "https://files.pythonhosted.org/packages/a1/c7/49d2b19c3b3105c30e1d3af2062e82e1977fb239d3dc3cbb583ef676dda7/jaxlib-0.10.2-cp314-cp314t-manylinux_2_27_aarch64.whl", hash = "sha256:a24d6e3cba263978293eae8b41330d5ccf24d6cdd1a6bcd4e82aff34e767620d", size = 81206365, upload-time = "2026-06-17T23:44:51.419Z" }, + { url = "https://files.pythonhosted.org/packages/bf/99/006cedf443f4a01f2088651facce79b2105bfb4905bfe9162eb0920a6dfb/jaxlib-0.10.2-cp314-cp314t-manylinux_2_27_x86_64.whl", hash = "sha256:5a2ac7aed7c4e661f67600bbcdec9e589151c1efec91f4cdb8d484af1a45c895", size = 85584458, upload-time = "2026-06-17T23:44:55.377Z" }, ] [[package]] @@ -301,7 +791,7 @@ name = "jaxtyping" version = "0.3.5" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "wadler-lindig", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "wadler-lindig", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/43/30/0e29eab664d33127a7a30aebd7a845a95fbfa1887ede692676769820acea/jaxtyping-0.3.5.tar.gz", hash = "sha256:8150ad5b72b62fa63f573d492a79e9e455f070abe3b260f7dc15270b3eb9bba6", size = 45482, upload-time = "2026-01-05T10:51:34.486Z" } wheels = [ @@ -313,7 +803,7 @@ name = "jmp" version = "0.0.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "numpy", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ab/b0/e90fbbffef4b345329c878a69f0336d3edc5a1f9fcba193931aca2132d62/jmp-0.0.4.tar.gz", hash = "sha256:5dfeb0fd7c7a9f72a70fff0aab9d0cbfae32a809c02f4037ff3485ceb33e1730", size = 18582, upload-time = "2023-01-30T12:47:13.634Z" } wheels = [ @@ -325,7 +815,7 @@ name = "markdown-it-py" version = "4.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "mdurl", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "mdurl", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/5b/f5/4ec618ed16cc4f8fb3b701563655a69816155e79e24a17b651541804721d/markdown_it_py-4.0.0.tar.gz", hash = "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3", size = 73070, upload-time = "2025-08-11T12:57:52.854Z" } wheels = [ @@ -346,18 +836,23 @@ name = "ml-dtypes" version = "0.5.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "numpy", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] 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/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" }, + { url = "https://files.pythonhosted.org/packages/d9/a1/4008f14bbc616cfb1ac5b39ea485f9c63031c4634ab3f4cf72e7541f816a/ml_dtypes-0.5.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8c760d85a2f82e2bed75867079188c9d18dae2ee77c25a54d60e9cc79be1bc48", size = 676888, upload-time = "2025-11-17T22:31:56.907Z" }, { url = "https://files.pythonhosted.org/packages/d3/b7/dff378afc2b0d5a7d6cd9d3209b60474d9819d1189d347521e1688a60a53/ml_dtypes-0.5.4-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ce756d3a10d0c4067172804c9cc276ba9cc0ff47af9078ad439b075d1abdc29b", size = 5036993, upload-time = "2025-11-17T22:31:58.497Z" }, { url = "https://files.pythonhosted.org/packages/eb/33/40cd74219417e78b97c47802037cf2d87b91973e18bb968a7da48a96ea44/ml_dtypes-0.5.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:533ce891ba774eabf607172254f2e7260ba5f57bdd64030c9a4fcfbd99815d0d", size = 5010956, upload-time = "2025-11-17T22:31:59.931Z" }, + { url = "https://files.pythonhosted.org/packages/4f/74/e9ddb35fd1dd43b1106c20ced3f53c2e8e7fc7598c15638e9f80677f81d4/ml_dtypes-0.5.4-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:304ad47faa395415b9ccbcc06a0350800bc50eda70f0e45326796e27c62f18b6", size = 702083, upload-time = "2025-11-17T22:32:04.08Z" }, { url = "https://files.pythonhosted.org/packages/74/f5/667060b0aed1aa63166b22897fdf16dca9eb704e6b4bbf86848d5a181aa7/ml_dtypes-0.5.4-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6a0df4223b514d799b8a1629c65ddc351b3efa833ccf7f8ea0cf654a61d1e35d", size = 5354111, upload-time = "2025-11-17T22:32:05.546Z" }, { url = "https://files.pythonhosted.org/packages/40/49/0f8c498a28c0efa5f5c95a9e374c83ec1385ca41d0e85e7cf40e5d519a21/ml_dtypes-0.5.4-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:531eff30e4d368cb6255bc2328d070e35836aa4f282a0fb5f3a0cd7260257298", size = 5366453, upload-time = "2025-11-17T22:32:07.115Z" }, + { url = "https://files.pythonhosted.org/packages/72/4e/1339dc6e2557a344f5ba5590872e80346f76f6cb2ac3dd16e4666e88818c/ml_dtypes-0.5.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:2b857d3af6ac0d39db1de7c706e69c7f9791627209c3d6dedbfca8c7e5faec22", size = 673781, upload-time = "2025-11-17T22:32:11.364Z" }, { url = "https://files.pythonhosted.org/packages/04/f9/067b84365c7e83bda15bba2b06c6ca250ce27b20630b1128c435fb7a09aa/ml_dtypes-0.5.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:805cef3a38f4eafae3a5bf9ebdcdb741d0bcfd9e1bd90eb54abd24f928cd2465", size = 5036145, upload-time = "2025-11-17T22:32:12.783Z" }, { url = "https://files.pythonhosted.org/packages/c6/bb/82c7dcf38070b46172a517e2334e665c5bf374a262f99a283ea454bece7c/ml_dtypes-0.5.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:14a4fd3228af936461db66faccef6e4f41c1d82fcc30e9f8d58a08916b1d811f", size = 5010230, upload-time = "2025-11-17T22:32:14.38Z" }, + { url = "https://files.pythonhosted.org/packages/cd/02/48aa7d84cc30ab4ee37624a2fd98c56c02326785750cd212bc0826c2f15b/ml_dtypes-0.5.4-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:bfc534409c5d4b0bf945af29e5d0ab075eae9eecbb549ff8a29280db822f34f9", size = 702085, upload-time = "2025-11-17T22:32:18.175Z" }, { url = "https://files.pythonhosted.org/packages/5a/e7/85cb99fe80a7a5513253ec7faa88a65306be071163485e9a626fce1b6e84/ml_dtypes-0.5.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2314892cdc3fcf05e373d76d72aaa15fda9fb98625effa73c1d646f331fcecb7", size = 5355358, upload-time = "2025-11-17T22:32:19.7Z" }, { url = "https://files.pythonhosted.org/packages/79/2b/a826ba18d2179a56e144aef69e57fb2ab7c464ef0b2111940ee8a3a223a2/ml_dtypes-0.5.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0d2ffd05a2575b1519dc928c0b93c06339eb67173ff53acb00724502cda231cf", size = 5366332, upload-time = "2025-11-17T22:32:21.193Z" }, ] @@ -368,24 +863,67 @@ 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/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" }, { url = "https://files.pythonhosted.org/packages/65/92/a5100f7185a800a5d29f8d14041f61475b9de465ffcc0f3b9fba606e4505/msgpack-1.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:372839311ccf6bdaf39b00b61288e0557916c3729529b301c52c2d88842add42", size = 427556, upload-time = "2025-10-08T09:15:06.837Z" }, { url = "https://files.pythonhosted.org/packages/f5/87/ffe21d1bf7d9991354ad93949286f643b2bb6ddbeab66373922b44c3b8cc/msgpack-1.1.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2929af52106ca73fcb28576218476ffbb531a036c2adbcf54a3664de124303e9", size = 404920, upload-time = "2025-10-08T09:15:08.179Z" }, { url = "https://files.pythonhosted.org/packages/ff/41/8543ed2b8604f7c0d89ce066f42007faac1eaa7d79a81555f206a5cdb889/msgpack-1.1.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:be52a8fc79e45b0364210eef5234a7cf8d330836d0a64dfbb878efa903d84620", size = 415013, upload-time = "2025-10-08T09:15:09.83Z" }, + { url = "https://files.pythonhosted.org/packages/92/dc/c385f38f2c2433333345a82926c6bfa5ecfff3ef787201614317b58dd8be/msgpack-1.1.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:42eefe2c3e2af97ed470eec850facbe1b5ad1d6eacdbadc42ec98e7dcf68b4b7", size = 84315, upload-time = "2025-10-08T09:15:15.543Z" }, { url = "https://files.pythonhosted.org/packages/d3/68/93180dce57f684a61a88a45ed13047558ded2be46f03acb8dec6d7c513af/msgpack-1.1.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1fdf7d83102bf09e7ce3357de96c59b627395352a4024f6e2458501f158bf999", size = 412721, upload-time = "2025-10-08T09:15:16.567Z" }, { url = "https://files.pythonhosted.org/packages/5d/ba/459f18c16f2b3fc1a1ca871f72f07d70c07bf768ad0a507a698b8052ac58/msgpack-1.1.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fac4be746328f90caa3cd4bc67e6fe36ca2bf61d5c6eb6d895b6527e3f05071e", size = 424657, upload-time = "2025-10-08T09:15:17.825Z" }, { url = "https://files.pythonhosted.org/packages/38/f8/4398c46863b093252fe67368b44edc6c13b17f4e6b0e4929dbf0bdb13f23/msgpack-1.1.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fffee09044073e69f2bad787071aeec727183e7580443dfeb8556cbf1978d162", size = 402668, upload-time = "2025-10-08T09:15:19.003Z" }, { url = "https://files.pythonhosted.org/packages/28/ce/698c1eff75626e4124b4d78e21cca0b4cc90043afb80a507626ea354ab52/msgpack-1.1.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5928604de9b032bc17f5099496417f113c45bc6bc21b5c6920caf34b3c428794", size = 419040, upload-time = "2025-10-08T09:15:20.183Z" }, + { url = "https://files.pythonhosted.org/packages/1b/9f/38ff9e57a2eade7bf9dfee5eae17f39fc0e998658050279cbb14d97d36d9/msgpack-1.1.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:6c15b7d74c939ebe620dd8e559384be806204d73b4f9356320632d783d1f7939", size = 84981, upload-time = "2025-10-08T09:15:25.812Z" }, { url = "https://files.pythonhosted.org/packages/8e/a9/3536e385167b88c2cc8f4424c49e28d49a6fc35206d4a8060f136e71f94c/msgpack-1.1.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99e2cb7b9031568a2a5c73aa077180f93dd2e95b4f8d3b8e14a73ae94a9e667e", size = 411885, upload-time = "2025-10-08T09:15:27.22Z" }, { url = "https://files.pythonhosted.org/packages/2f/40/dc34d1a8d5f1e51fc64640b62b191684da52ca469da9cd74e84936ffa4a6/msgpack-1.1.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:180759d89a057eab503cf62eeec0aa61c4ea1200dee709f3a8e9397dbb3b6931", size = 419658, upload-time = "2025-10-08T09:15:28.4Z" }, { url = "https://files.pythonhosted.org/packages/3b/ef/2b92e286366500a09a67e03496ee8b8ba00562797a52f3c117aa2b29514b/msgpack-1.1.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:04fb995247a6e83830b62f0b07bf36540c213f6eac8e851166d8d86d83cbd014", size = 403290, upload-time = "2025-10-08T09:15:29.764Z" }, { url = "https://files.pythonhosted.org/packages/78/90/e0ea7990abea5764e4655b8177aa7c63cdfa89945b6e7641055800f6c16b/msgpack-1.1.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:8e22ab046fa7ede9e36eeb4cfad44d46450f37bb05d5ec482b02868f451c95e2", size = 415234, upload-time = "2025-10-08T09:15:31.022Z" }, + { url = "https://files.pythonhosted.org/packages/87/1c/33c8a24959cf193966ef11a6f6a2995a65eb066bd681fd085afd519a57ce/msgpack-1.1.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a668204fa43e6d02f89dbe79a30b0d67238d9ec4c5bd8a940fc3a004a47b721b", size = 89076, upload-time = "2025-10-08T09:15:36.619Z" }, { url = "https://files.pythonhosted.org/packages/fc/6b/62e85ff7193663fbea5c0254ef32f0c77134b4059f8da89b958beb7696f3/msgpack-1.1.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5559d03930d3aa0f3aacb4c42c776af1a2ace2611871c84a75afe436695e6245", size = 435242, upload-time = "2025-10-08T09:15:37.647Z" }, { url = "https://files.pythonhosted.org/packages/c1/47/5c74ecb4cc277cf09f64e913947871682ffa82b3b93c8dad68083112f412/msgpack-1.1.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:70c5a7a9fea7f036b716191c29047374c10721c389c21e9ffafad04df8c52c90", size = 432509, upload-time = "2025-10-08T09:15:38.794Z" }, { url = "https://files.pythonhosted.org/packages/24/a4/e98ccdb56dc4e98c929a3f150de1799831c0a800583cde9fa022fa90602d/msgpack-1.1.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:f2cb069d8b981abc72b41aea1c580ce92d57c673ec61af4c500153a626cb9e20", size = 415957, upload-time = "2025-10-08T09:15:40.238Z" }, { url = "https://files.pythonhosted.org/packages/da/28/6951f7fb67bc0a4e184a6b38ab71a92d9ba58080b27a77d3e2fb0be5998f/msgpack-1.1.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:d62ce1f483f355f61adb5433ebfd8868c5f078d1a52d042b0a998682b4fa8c27", size = 422910, upload-time = "2025-10-08T09:15:41.505Z" }, ] +[[package]] +name = "multidict" +version = "6.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1a/c2/c2d94cbe6ac1753f3fc980da97b3d930efe1da3af3c9f5125354436c073d/multidict-6.7.1.tar.gz", hash = "sha256:ec6652a1bee61c53a3e5776b6049172c53b6aaba34f18c9ad04f82712bac623d", size = 102010, upload-time = "2026-01-26T02:46:45.979Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8d/9c/f20e0e2cf80e4b2e4b1c365bf5fe104ee633c751a724246262db8f1a0b13/multidict-6.7.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:a90f75c956e32891a4eda3639ce6dd86e87105271f43d43442a3aedf3cddf172", size = 76893, upload-time = "2026-01-26T02:43:52.754Z" }, + { url = "https://files.pythonhosted.org/packages/a9/65/1caac9d4cd32e8433908683446eebc953e82d22b03d10d41a5f0fefe991b/multidict-6.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b0fa96985700739c4c7853a43c0b3e169360d6855780021bfc6d0f1ce7c123e7", size = 43872, upload-time = "2026-01-26T02:43:55.041Z" }, + { url = "https://files.pythonhosted.org/packages/fd/80/c959c5933adedb9ac15152e4067c702a808ea183a8b64cf8f31af8ad3155/multidict-6.7.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eb0ce7b2a32d09892b3dd6cc44877a0d02a33241fafca5f25c8b6b62374f8b75", size = 258883, upload-time = "2026-01-26T02:43:57.499Z" }, + { url = "https://files.pythonhosted.org/packages/f3/8d/5e5be3ced1d12966fefb5c4ea3b2a5b480afcea36406559442c6e31d4a48/multidict-6.7.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bfde23ef6ed9db7eaee6c37dcec08524cb43903c60b285b172b6c094711b3961", size = 256322, upload-time = "2026-01-26T02:44:03.56Z" }, + { url = "https://files.pythonhosted.org/packages/31/6e/d8a26d81ac166a5592782d208dd90dfdc0a7a218adaa52b45a672b46c122/multidict-6.7.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3758692429e4e32f1ba0df23219cd0b4fc0a52f476726fff9337d1a57676a582", size = 253955, upload-time = "2026-01-26T02:44:04.845Z" }, + { url = "https://files.pythonhosted.org/packages/2b/17/ebb9644da78c4ab36403739e0e6e0e30ebb135b9caf3440825001a0bddcb/multidict-6.7.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fc5907494fccf3e7d3f94f95c91d6336b092b5fc83811720fae5e2765890dfba", size = 251377, upload-time = "2026-01-26T02:44:12.042Z" }, + { url = "https://files.pythonhosted.org/packages/f2/22/929c141d6c0dba87d3e1d38fbdf1ba8baba86b7776469f2bc2d3227a1e67/multidict-6.7.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2b41f5fed0ed563624f1c17630cb9941cf2309d4df00e494b551b5f3e3d67a23", size = 76174, upload-time = "2026-01-26T02:44:18.509Z" }, + { url = "https://files.pythonhosted.org/packages/79/76/55cd7186f498ed080a18440c9013011eb548f77ae1b297206d030eb1180a/multidict-6.7.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:935434b9853c7c112eee7ac891bc4cb86455aa631269ae35442cb316790c1445", size = 43524, upload-time = "2026-01-26T02:44:21.571Z" }, + { url = "https://files.pythonhosted.org/packages/f6/32/befed7f74c458b4a525e60519fe8d87eef72bb1e99924fa2b0f9d97a221e/multidict-6.7.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e82d14e3c948952a1a85503817e038cba5905a3352de76b9a465075d072fba23", size = 256952, upload-time = "2026-01-26T02:44:24.306Z" }, + { url = "https://files.pythonhosted.org/packages/b0/73/6e1b01cbeb458807aa0831742232dbdd1fa92bfa33f52a3f176b4ff3dc11/multidict-6.7.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d624335fd4fa1c08a53f8b4be7676ebde19cd092b3895c421045ca87895b429", size = 254277, upload-time = "2026-01-26T02:44:30.902Z" }, + { url = "https://files.pythonhosted.org/packages/6a/b2/5fb8c124d7561a4974c342bc8c778b471ebbeb3cc17df696f034a7e9afe7/multidict-6.7.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:12fad252f8b267cc75b66e8fc51b3079604e8d43a75428ffe193cd9e2195dfd6", size = 252291, upload-time = "2026-01-26T02:44:32.31Z" }, + { url = "https://files.pythonhosted.org/packages/52/da/151a44e8016dd33feed44f730bd856a66257c1ee7aed4f44b649fb7edeb3/multidict-6.7.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:97891f3b1b3ffbded884e2916cacf3c6fc87b66bb0dde46f7357404750559f33", size = 249490, upload-time = "2026-01-26T02:44:39.386Z" }, + { url = "https://files.pythonhosted.org/packages/6d/b3/e6b21c6c4f314bb956016b0b3ef2162590a529b84cb831c257519e7fde44/multidict-6.7.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:c76c4bec1538375dad9d452d246ca5368ad6e1c9039dadcf007ae59c70619ea1", size = 83175, upload-time = "2026-01-26T02:44:44.894Z" }, + { url = "https://files.pythonhosted.org/packages/c4/57/a0ed92b23f3a042c36bc4227b72b97eca803f5f1801c1ab77c8a212d455e/multidict-6.7.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e954b24433c768ce78ab7929e84ccf3422e46deb45a4dc9f93438f8217fa2d34", size = 46930, upload-time = "2026-01-26T02:44:47.278Z" }, + { url = "https://files.pythonhosted.org/packages/58/18/64f5a795e7677670e872673aca234162514696274597b3708b2c0d276cce/multidict-6.7.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:253282d70d67885a15c8a7716f3a73edf2d635793ceda8173b9ecc21f2fb8292", size = 250031, upload-time = "2026-01-26T02:44:50.544Z" }, + { url = "https://files.pythonhosted.org/packages/00/e3/9b60ed9e23e64c73a5cde95269ef1330678e9c6e34dd4eb6b431b85b5a10/multidict-6.7.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6aac4f16b472d5b7dc6f66a0d49dd57b0e0902090be16594dc9ebfd3d17c47e7", size = 247970, upload-time = "2026-01-26T02:44:56.783Z" }, + { url = "https://files.pythonhosted.org/packages/3e/06/538e58a63ed5cfb0bd4517e346b91da32fde409d839720f664e9a4ae4f9d/multidict-6.7.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:21f830fe223215dffd51f538e78c172ed7c7f60c9b96a2bf05c4848ad49921c3", size = 245060, upload-time = "2026-01-26T02:44:58.195Z" }, + { url = "https://files.pythonhosted.org/packages/e5/03/7ca022ffc36c5a3f6e03b179a5ceb829be9da5783e6fe395f347c0794680/multidict-6.7.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:41f2952231456154ee479651491e94118229844dd7226541788be783be2b5108", size = 243422, upload-time = "2026-01-26T02:45:05.296Z" }, + { url = "https://files.pythonhosted.org/packages/91/cc/db74228a8be41884a567e88a62fd589a913708fcf180d029898c17a9a371/multidict-6.7.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:8f333ec9c5eb1b7105e3b84b53141e66ca05a19a605368c55450b6ba208cb9ee", size = 75190, upload-time = "2026-01-26T02:45:10.651Z" }, + { url = "https://files.pythonhosted.org/packages/f1/4f/733c48f270565d78b4544f2baddc2fb2a245e5a8640254b12c36ac7ac68e/multidict-6.7.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0e161ddf326db5577c3a4cc2d8648f81456e8a20d40415541587a71620d7a7d1", size = 43219, upload-time = "2026-01-26T02:45:14.346Z" }, + { url = "https://files.pythonhosted.org/packages/a7/f9/44d4b3064c65079d2467888794dea218d1601898ac50222ab8a9a8094460/multidict-6.7.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97231140a50f5d447d3164f994b86a0bed7cd016e2682f8650d6a9158e14fd31", size = 252420, upload-time = "2026-01-26T02:45:17.293Z" }, + { url = "https://files.pythonhosted.org/packages/fe/3b/8ec5074bcfc450fe84273713b4b0a0dd47c0249358f5d82eb8104ffe2520/multidict-6.7.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7eee46ccb30ff48a1e35bb818cc90846c6be2b68240e42a78599166722cea709", size = 248483, upload-time = "2026-01-26T02:45:24.368Z" }, + { url = "https://files.pythonhosted.org/packages/48/5a/d5a99e3acbca0e29c5d9cba8f92ceb15dce78bab963b308ae692981e3a5d/multidict-6.7.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fa263a02f4f2dd2d11a7b1bb4362aa7cb1049f84a9235d31adf63f30143469a0", size = 248403, upload-time = "2026-01-26T02:45:25.982Z" }, + { url = "https://files.pythonhosted.org/packages/e1/9f/75a9ac888121d0c5bbd4ecf4eead45668b1766f6baabfb3b7f66a410e231/multidict-6.7.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f33dc2a3abe9249ea5d8360f969ec7f4142e7ac45ee7014d8f8d5acddf178b7b", size = 243602, upload-time = "2026-01-26T02:45:34.043Z" }, + { url = "https://files.pythonhosted.org/packages/e0/6d/f9293baa6146ba9507e360ea0292b6422b016907c393e2f63fc40ab7b7b5/multidict-6.7.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:0458c978acd8e6ea53c81eefaddbbee9c6c5e591f41b3f5e8e194780fe026581", size = 82401, upload-time = "2026-01-26T02:45:40.254Z" }, + { url = "https://files.pythonhosted.org/packages/37/e8/5284c53310dcdc99ce5d66563f6e5773531a9b9fe9ec7a615e9bc306b05f/multidict-6.7.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:14525a5f61d7d0c94b368a42cff4c9a4e7ba2d52e2672a7b23d84dc86fb02b0c", size = 46507, upload-time = "2026-01-26T02:45:42.99Z" }, + { url = "https://files.pythonhosted.org/packages/41/75/4ad0973179361cdf3a113905e6e088173198349131be2b390f9fa4da5fc6/multidict-6.7.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7a7e590ff876a3eaf1c02a4dfe0724b6e69a9e9de6d8f556816f29c496046e59", size = 246884, upload-time = "2026-01-26T02:45:47.167Z" }, + { url = "https://files.pythonhosted.org/packages/a2/76/b9669547afa5a1a25cd93eaca91c0da1c095b06b6d2d8ec25b713588d3a1/multidict-6.7.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9004d8386d133b7e6135679424c91b0b854d2d164af6ea3f289f8f2761064609", size = 244889, upload-time = "2026-01-26T02:45:53.27Z" }, + { url = "https://files.pythonhosted.org/packages/7e/a9/a50d2669e506dad33cfc45b5d574a205587b7b8a5f426f2fbb2e90882588/multidict-6.7.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e628ef0e6859ffd8273c69412a2465c4be4a9517d07261b33334b5ec6f3c7489", size = 241982, upload-time = "2026-01-26T02:45:54.919Z" }, + { url = "https://files.pythonhosted.org/packages/41/5f/604ae839e64a4a6efc80db94465348d3b328ee955e37acb24badbcd24d83/multidict-6.7.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b4938326284c4f1224178a560987b6cf8b4d38458b113d9b8c1db1a836e640a2", size = 240237, upload-time = "2026-01-26T02:46:05.898Z" }, + { url = "https://files.pythonhosted.org/packages/81/08/7036c080d7117f28a4af526d794aab6a84463126db031b007717c1a6676e/multidict-6.7.1-py3-none-any.whl", hash = "sha256:55d97cc6dae627efa6a6e548885712d4864b81110ac76fa4e534c03819fa4a56", size = 12319, upload-time = "2026-01-26T02:46:44.004Z" }, +] + [[package]] name = "nest-asyncio" version = "1.6.0" @@ -401,22 +939,32 @@ version = "2.4.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/24/62/ae72ff66c0f1fd959925b4c11f8c2dea61f47f6acaea75a08512cdfe3fed/numpy-2.4.1.tar.gz", hash = "sha256:a1ceafc5042451a858231588a104093474c6a5c57dcc724841f5c888d237d690", size = 20721320, upload-time = "2026-01-10T06:44:59.619Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/b8/e0/1f9585d7dae8f14864e948fd7fa86c6cb72dee2676ca2748e63b1c5acfe0/numpy-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7211b95ca365519d3596a1d8688a95874cc94219d417504d9ecb2df99fa7bfa8", size = 12373956, upload-time = "2026-01-10T06:42:43.091Z" }, + { url = "https://files.pythonhosted.org/packages/8e/43/9762e88909ff2326f5e7536fa8cb3c49fb03a7d92705f23e6e7f553d9cb3/numpy-2.4.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:5adf01965456a664fc727ed69cc71848f28d063217c63e1a0e200a118d5eec9a", size = 5202567, upload-time = "2026-01-10T06:42:45.107Z" }, { url = "https://files.pythonhosted.org/packages/79/e3/5f115fae982565771be994867c89bcd8d7208dbfe9469185497d70de5ddf/numpy-2.4.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0093e85df2960d7e4049664b26afc58b03236e967fb942354deef3208857a04c", size = 14404859, upload-time = "2026-01-10T06:42:49.947Z" }, { url = "https://files.pythonhosted.org/packages/d9/7d/9c8a781c88933725445a859cac5d01b5871588a15969ee6aeb618ba99eee/numpy-2.4.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7ad270f438cbdd402c364980317fb6b117d9ec5e226fff5b4148dd9aa9fc6e02", size = 16371419, upload-time = "2026-01-10T06:42:52.409Z" }, { url = "https://files.pythonhosted.org/packages/a6/d2/8aa084818554543f17cf4162c42f162acbd3bb42688aefdba6628a859f77/numpy-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:297c72b1b98100c2e8f873d5d35fb551fce7040ade83d67dd51d38c8d42a2162", size = 16182131, upload-time = "2026-01-10T06:42:54.694Z" }, { url = "https://files.pythonhosted.org/packages/60/db/0425216684297c58a8df35f3284ef56ec4a043e6d283f8a59c53562caf1b/numpy-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:cf6470d91d34bf669f61d515499859fa7a4c2f7c36434afb70e82df7217933f9", size = 18295342, upload-time = "2026-01-10T06:42:56.991Z" }, + { url = "https://files.pythonhosted.org/packages/20/ca/857722353421a27f1465652b2c66813eeeccea9d76d5f7b74b99f298e60e/numpy-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:82c55962006156aeef1629b953fd359064aa47e4d82cfc8e67f0918f7da3344f", size = 12368657, upload-time = "2026-01-10T06:43:09.094Z" }, + { url = "https://files.pythonhosted.org/packages/81/0d/2377c917513449cc6240031a79d30eb9a163d32a91e79e0da47c43f2c0c8/numpy-2.4.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:71abbea030f2cfc3092a0ff9f8c8fdefdc5e0bf7d9d9c99663538bb0ecdac0b9", size = 5197256, upload-time = "2026-01-10T06:43:13.634Z" }, { url = "https://files.pythonhosted.org/packages/8c/a4/77333f4d1e4dac4395385482557aeecf4826e6ff517e32ca48e1dafbe42a/numpy-2.4.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c0faba4a331195bfa96f93dd9dfaa10b2c7aa8cda3a02b7fd635e588fe821bf5", size = 14402871, upload-time = "2026-01-10T06:43:17.324Z" }, { url = "https://files.pythonhosted.org/packages/ba/87/d341e519956273b39d8d47969dd1eaa1af740615394fe67d06f1efa68773/numpy-2.4.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d3e3087f53e2b4428766b54932644d148613c5a595150533ae7f00dab2f319a8", size = 16359305, upload-time = "2026-01-10T06:43:19.376Z" }, { url = "https://files.pythonhosted.org/packages/32/91/789132c6666288eaa20ae8066bb99eba1939362e8f1a534949a215246e97/numpy-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:49e792ec351315e16da54b543db06ca8a86985ab682602d90c60ef4ff4db2a9c", size = 16181909, upload-time = "2026-01-10T06:43:21.808Z" }, { url = "https://files.pythonhosted.org/packages/cf/b8/090b8bd27b82a844bb22ff8fdf7935cb1980b48d6e439ae116f53cdc2143/numpy-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:79e9e06c4c2379db47f3f6fc7a8652e7498251789bf8ff5bd43bf478ef314ca2", size = 18284380, upload-time = "2026-01-10T06:43:23.957Z" }, + { url = "https://files.pythonhosted.org/packages/da/a1/354583ac5c4caa566de6ddfbc42744409b515039e085fab6e0ff942e0df5/numpy-2.4.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f93bc6892fe7b0663e5ffa83b61aab510aacffd58c16e012bb9352d489d90cb7", size = 12496156, upload-time = "2026-01-10T06:43:34.237Z" }, + { url = "https://files.pythonhosted.org/packages/51/b0/42807c6e8cce58c00127b1dc24d365305189991f2a7917aa694a109c8d7d/numpy-2.4.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:178de8f87948163d98a4c9ab5bee4ce6519ca918926ec8df195af582de28544d", size = 5324663, upload-time = "2026-01-10T06:43:36.211Z" }, { url = "https://files.pythonhosted.org/packages/50/96/9fa8635ed9d7c847d87e30c834f7109fac5e88549d79ef3324ab5c20919f/numpy-2.4.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:941c2a93313d030f219f3a71fd3d91a728b82979a5e8034eb2e60d394a2b83f9", size = 14462352, upload-time = "2026-01-10T06:43:39.479Z" }, { url = "https://files.pythonhosted.org/packages/03/d1/8cf62d8bb2062da4fb82dd5d49e47c923f9c0738032f054e0a75342faba7/numpy-2.4.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:529050522e983e00a6c1c6b67411083630de8b57f65e853d7b03d9281b8694d2", size = 16407279, upload-time = "2026-01-10T06:43:41.93Z" }, { url = "https://files.pythonhosted.org/packages/86/1c/95c86e17c6b0b31ce6ef219da00f71113b220bcb14938c8d9a05cee0ff53/numpy-2.4.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2302dc0224c1cbc49bb94f7064f3f923a971bfae45c33870dcbff63a2a550505", size = 16248316, upload-time = "2026-01-10T06:43:44.121Z" }, { url = "https://files.pythonhosted.org/packages/30/b4/e7f5ff8697274c9d0fa82398b6a372a27e5cef069b37df6355ccb1f1db1a/numpy-2.4.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:9171a42fcad32dcf3fa86f0a4faa5e9f8facefdb276f54b8b390d90447cff4e2", size = 18329884, upload-time = "2026-01-10T06:43:46.613Z" }, + { url = "https://files.pythonhosted.org/packages/8f/39/e378b3e3ca13477e5ac70293ec027c438d1927f18637e396fe90b1addd72/numpy-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e867df947d427cdd7a60e3e271729090b0f0df80f5f10ab7dd436f40811699c3", size = 12378858, upload-time = "2026-01-10T06:43:57.099Z" }, + { url = "https://files.pythonhosted.org/packages/c3/74/7ec6154f0006910ed1fdbb7591cf4432307033102b8a22041599935f8969/numpy-2.4.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:e3bd2cb07841166420d2fa7146c96ce00cb3410664cbc1a6be028e456c4ee220", size = 5207417, upload-time = "2026-01-10T06:43:59.037Z" }, { url = "https://files.pythonhosted.org/packages/c0/c4/2e7908915c0e32ca636b92e4e4a3bdec4cb1e7eb0f8aedf1ed3c68a0d8cd/numpy-2.4.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d558123217a83b2d1ba316b986e9248a1ed1971ad495963d555ccd75dcb1556", size = 14418963, upload-time = "2026-01-10T06:44:04.047Z" }, { url = "https://files.pythonhosted.org/packages/eb/c0/3ed5083d94e7ffd7c404e54619c088e11f2e1939a9544f5397f4adb1b8ba/numpy-2.4.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2f44de05659b67d20499cbc96d49f2650769afcb398b79b324bb6e297bfe3844", size = 16363811, upload-time = "2026-01-10T06:44:06.207Z" }, { url = "https://files.pythonhosted.org/packages/0e/68/42b66f1852bf525050a67315a4fb94586ab7e9eaa541b1bef530fab0c5dd/numpy-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:69e7419c9012c4aaf695109564e3387f1259f001b4326dfa55907b098af082d3", size = 16197643, upload-time = "2026-01-10T06:44:08.33Z" }, { url = "https://files.pythonhosted.org/packages/d2/40/e8714fc933d85f82c6bfc7b998a0649ad9769a32f3494ba86598aaf18a48/numpy-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2ffd257026eb1b34352e749d7cc1678b5eeec3e329ad8c9965a797e08ccba205", size = 18289601, upload-time = "2026-01-10T06:44:10.841Z" }, + { url = "https://files.pythonhosted.org/packages/de/bc/ea3f2c96fcb382311827231f911723aeff596364eb6e1b6d1d91128aa29b/numpy-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:4e53170557d37ae404bf8d542ca5b7c629d6efa1117dac6a83e394142ea0a43f", size = 12498774, upload-time = "2026-01-10T06:44:19.467Z" }, + { url = "https://files.pythonhosted.org/packages/aa/ab/ef9d939fe4a812648c7a712610b2ca6140b0853c5efea361301006c02ae5/numpy-2.4.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:a73044b752f5d34d4232f25f18160a1cc418ea4507f5f11e299d8ac36875f8a0", size = 5327274, upload-time = "2026-01-10T06:44:23.189Z" }, { url = "https://files.pythonhosted.org/packages/c8/e5/0989b44ade47430be6323d05c23207636d67d7362a1796ccbccac6773dd2/numpy-2.4.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:423797bdab2eeefbe608d7c1ec7b2b4fd3c58d51460f1ee26c7500a1d9c9ee93", size = 14464653, upload-time = "2026-01-10T06:44:26.706Z" }, { url = "https://files.pythonhosted.org/packages/10/a7/cfbe475c35371cae1358e61f20c5f075badc18c4797ab4354140e1d283cf/numpy-2.4.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:52b5f61bdb323b566b528899cc7db2ba5d1015bda7ea811a8bcf3c89c331fa42", size = 16405144, upload-time = "2026-01-10T06:44:29.378Z" }, { url = "https://files.pythonhosted.org/packages/f8/a3/0c63fe66b534888fa5177cc7cef061541064dbe2b4b60dcc60ffaf0d2157/numpy-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:42d7dd5fa36d16d52a84f821eb96031836fd405ee6955dd732f2023724d0aa01", size = 16247425, upload-time = "2026-01-10T06:44:31.721Z" }, @@ -557,6 +1105,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/64/b9/6ab941001c23cfb43499b5b0b7417b0bb4dfba3a29ffa2b06985422dad50/nvidia_nvshmem_cu12-3.5.19-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f29a23c5ee75461ec4342e17757f9e010369ada8eb0d441070049db787d9e51b", size = 152681200, upload-time = "2026-01-02T04:24:46.524Z" }, ] +[[package]] +name = "oauthlib" +version = "3.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/5f/19930f824ffeb0ad4372da4812c50edbd1434f678c90c2733e1188edfc63/oauthlib-3.3.1.tar.gz", hash = "sha256:0f0f8aa759826a193cf66c12ea1af1637f87b9b4622d46e866952bb022e538c9", size = 185918, upload-time = "2025-06-19T22:48:08.269Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl", hash = "sha256:88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1", size = 160065, upload-time = "2025-06-19T22:48:06.508Z" }, +] + [[package]] name = "opt-einsum" version = "3.4.0" @@ -571,11 +1128,11 @@ name = "optax" version = "0.2.6" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "absl-py", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "chex", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "jax", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "jaxlib", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "numpy", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "absl-py", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "chex", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "jax", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "jaxlib", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "numpy", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/6d/3b/90c11f740a3538200b61cd2b7d9346959cb9e31e0bdea3d2f886b7262203/optax-0.2.6.tar.gz", hash = "sha256:ba8d1e12678eba2657484d6feeca4fb281b8066bdfd5efbfc0f41b87663109c0", size = 269660, upload-time = "2025-09-15T22:41:24.76Z" } wheels = [ @@ -587,20 +1144,20 @@ name = "orbax-checkpoint" version = "0.11.31" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "absl-py", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "aiofiles", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "etils", extra = ["epath", "epy"], marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "humanize", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "jax", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "msgpack", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "nest-asyncio", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "numpy", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "protobuf", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "psutil", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "pyyaml", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "simplejson", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "tensorstore", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "typing-extensions", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "absl-py", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "aiofiles", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "etils", extra = ["epath", "epy"], marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "humanize", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "jax", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "msgpack", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "nest-asyncio", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "numpy", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "protobuf", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "psutil", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "pyyaml", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "simplejson", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "tensorstore", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "typing-extensions", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/4b/1e/c65e35ab5ef9d380f4a4ce7f983a0dd360d229eec22204aacb80d2b91aca/orbax_checkpoint-0.11.31.tar.gz", hash = "sha256:f021193a619782655798bc4a285f40612f6fe647ddeb303d1f49cdbc5645e319", size = 406137, upload-time = "2025-12-11T18:09:17.181Z" } wheels = [ @@ -622,6 +1179,7 @@ version = "12.1.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/d0/02/d52c733a2452ef1ffcc123b68e6606d07276b0e358db70eabad7e40042b7/pillow-12.1.0.tar.gz", hash = "sha256:5c5ae0a06e9ea030ab786b0251b32c7e4ce10e58d983c0d5c56029455180b5b9", size = 46977283, upload-time = "2026-01-02T09:13:29.892Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/ab/c1/10e45ac9cc79419cedf5121b42dcca5a50ad2b601fa080f58c22fb27626e/pillow-12.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:907bfa8a9cb790748a9aa4513e37c88c59660da3bcfffbd24a7d9e6abf224551", size = 4657464, upload-time = "2026-01-02T09:11:12.319Z" }, { url = "https://files.pythonhosted.org/packages/ad/26/7b82c0ab7ef40ebede7a97c72d473bda5950f609f8e0c77b04af574a0ddb/pillow-12.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:efdc140e7b63b8f739d09a99033aa430accce485ff78e6d311973a67b6bf3208", size = 6234878, upload-time = "2026-01-02T09:11:14.096Z" }, { url = "https://files.pythonhosted.org/packages/76/25/27abc9792615b5e886ca9411ba6637b675f1b77af3104710ac7353fe5605/pillow-12.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bef9768cab184e7ae6e559c032e95ba8d07b3023c289f79a2bd36e8bf85605a5", size = 8044868, upload-time = "2026-01-02T09:11:15.903Z" }, { url = "https://files.pythonhosted.org/packages/0a/ea/f200a4c36d836100e7bc738fc48cd963d3ba6372ebc8298a889e0cfc3359/pillow-12.1.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:742aea052cf5ab5034a53c3846165bc3ce88d7c38e954120db0ab867ca242661", size = 6349468, upload-time = "2026-01-02T09:11:17.631Z" }, @@ -631,12 +1189,14 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/dd/c7/2530a4aa28248623e9d7f27316b42e27c32ec410f695929696f2e0e4a778/pillow-12.1.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:7b5dd7cbae20285cdb597b10eb5a2c13aa9de6cde9bb64a3c1317427b1db1ae1", size = 4062543, upload-time = "2026-01-02T09:11:31.566Z" }, { url = "https://files.pythonhosted.org/packages/8f/1f/40b8eae823dc1519b87d53c30ed9ef085506b05281d313031755c1705f73/pillow-12.1.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:29a4cef9cb672363926f0470afc516dbf7305a14d8c54f7abbb5c199cd8f8179", size = 4138373, upload-time = "2026-01-02T09:11:33.367Z" }, { url = "https://files.pythonhosted.org/packages/d4/77/6fa60634cf06e52139fd0e89e5bbf055e8166c691c42fb162818b7fda31d/pillow-12.1.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:681088909d7e8fa9e31b9799aaa59ba5234c58e5e4f1951b4c4d1082a2e980e0", size = 3601241, upload-time = "2026-01-02T09:11:35.011Z" }, + { url = "https://files.pythonhosted.org/packages/1c/34/583420a1b55e715937a85bd48c5c0991598247a1fd2eb5423188e765ea02/pillow-12.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:db44d5c160a90df2d24a24760bbd37607d53da0b34fb546c4c232af7192298ac", size = 4657312, upload-time = "2026-01-02T09:11:38.535Z" }, { url = "https://files.pythonhosted.org/packages/1d/fd/f5a0896839762885b3376ff04878f86ab2b097c2f9a9cdccf4eda8ba8dc0/pillow-12.1.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6b7a9d1db5dad90e2991645874f708e87d9a3c370c243c2d7684d28f7e133e6b", size = 6232605, upload-time = "2026-01-02T09:11:40.602Z" }, { url = "https://files.pythonhosted.org/packages/98/aa/938a09d127ac1e70e6ed467bd03834350b33ef646b31edb7452d5de43792/pillow-12.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6258f3260986990ba2fa8a874f8b6e808cf5abb51a94015ca3dc3c68aa4f30ea", size = 8041617, upload-time = "2026-01-02T09:11:42.721Z" }, { url = "https://files.pythonhosted.org/packages/17/e8/538b24cb426ac0186e03f80f78bc8dc7246c667f58b540bdd57c71c9f79d/pillow-12.1.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e115c15e3bc727b1ca3e641a909f77f8ca72a64fff150f666fcc85e57701c26c", size = 6346509, upload-time = "2026-01-02T09:11:44.955Z" }, { url = "https://files.pythonhosted.org/packages/01/9a/632e58ec89a32738cabfd9ec418f0e9898a2b4719afc581f07c04a05e3c9/pillow-12.1.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6741e6f3074a35e47c77b23a4e4f2d90db3ed905cb1c5e6e0d49bff2045632bc", size = 7038117, upload-time = "2026-01-02T09:11:46.736Z" }, { url = "https://files.pythonhosted.org/packages/c7/a2/d40308cf86eada842ca1f3ffa45d0ca0df7e4ab33c83f81e73f5eaed136d/pillow-12.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:935b9d1aed48fcfb3f838caac506f38e29621b44ccc4f8a64d575cb1b2a88644", size = 6460151, upload-time = "2026-01-02T09:11:48.625Z" }, { url = "https://files.pythonhosted.org/packages/f1/88/f5b058ad6453a085c5266660a1417bdad590199da1b32fb4efcff9d33b05/pillow-12.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5fee4c04aad8932da9f8f710af2c1a15a83582cfb884152a9caa79d4efcdbf9c", size = 7164534, upload-time = "2026-01-02T09:11:50.445Z" }, + { url = "https://files.pythonhosted.org/packages/10/60/650f2fb55fdba7a510d836202aa52f0baac633e50ab1cf18415d332188fb/pillow-12.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:7d6daa89a00b58c37cb1747ec9fb7ac3bc5ffd5949f5888657dfddde6d1312e0", size = 4660472, upload-time = "2026-01-02T09:12:00.798Z" }, { url = "https://files.pythonhosted.org/packages/2b/c0/5273a99478956a099d533c4f46cbaa19fd69d606624f4334b85e50987a08/pillow-12.1.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e2479c7f02f9d505682dc47df8c0ea1fc5e264c4d1629a5d63fe3e2334b89554", size = 6268974, upload-time = "2026-01-02T09:12:02.572Z" }, { url = "https://files.pythonhosted.org/packages/b4/26/0bf714bc2e73d5267887d47931d53c4ceeceea6978148ed2ab2a4e6463c4/pillow-12.1.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f188d580bd870cda1e15183790d1cc2fa78f666e76077d103edf048eed9c356e", size = 8073070, upload-time = "2026-01-02T09:12:04.75Z" }, { url = "https://files.pythonhosted.org/packages/43/cf/1ea826200de111a9d65724c54f927f3111dc5ae297f294b370a670c17786/pillow-12.1.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0fde7ec5538ab5095cc02df38ee99b0443ff0e1c847a045554cf5f9af1f4aa82", size = 6380176, upload-time = "2026-01-02T09:12:06.626Z" }, @@ -646,12 +1206,14 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/8c/87/bdf971d8bbcf80a348cc3bacfcb239f5882100fe80534b0ce67a784181d8/pillow-12.1.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:5cb7bc1966d031aec37ddb9dcf15c2da5b2e9f7cc3ca7c54473a20a927e1eb91", size = 4062533, upload-time = "2026-01-02T09:12:20.791Z" }, { url = "https://files.pythonhosted.org/packages/ff/4f/5eb37a681c68d605eb7034c004875c81f86ec9ef51f5be4a63eadd58859a/pillow-12.1.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:97e9993d5ed946aba26baf9c1e8cf18adbab584b99f452ee72f7ee8acb882796", size = 4138546, upload-time = "2026-01-02T09:12:23.664Z" }, { url = "https://files.pythonhosted.org/packages/11/6d/19a95acb2edbace40dcd582d077b991646b7083c41b98da4ed7555b59733/pillow-12.1.0-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:414b9a78e14ffeb98128863314e62c3f24b8a86081066625700b7985b3f529bd", size = 3601163, upload-time = "2026-01-02T09:12:26.338Z" }, + { url = "https://files.pythonhosted.org/packages/53/4b/649056e4d22e1caa90816bf99cef0884aed607ed38075bd75f091a607a38/pillow-12.1.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:3413c2ae377550f5487991d444428f1a8ae92784aac79caa8b1e3b89b175f77e", size = 4657344, upload-time = "2026-01-02T09:12:31.117Z" }, { url = "https://files.pythonhosted.org/packages/6c/6b/c5742cea0f1ade0cd61485dc3d81f05261fc2276f537fbdc00802de56779/pillow-12.1.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e5dcbe95016e88437ecf33544ba5db21ef1b8dd6e1b434a2cb2a3d605299e643", size = 6232114, upload-time = "2026-01-02T09:12:32.936Z" }, { url = "https://files.pythonhosted.org/packages/bf/8f/9f521268ce22d63991601aafd3d48d5ff7280a246a1ef62d626d67b44064/pillow-12.1.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d0a7735df32ccbcc98b98a1ac785cc4b19b580be1bdf0aeb5c03223220ea09d5", size = 8042708, upload-time = "2026-01-02T09:12:34.78Z" }, { url = "https://files.pythonhosted.org/packages/1a/eb/257f38542893f021502a1bbe0c2e883c90b5cff26cc33b1584a841a06d30/pillow-12.1.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0c27407a2d1b96774cbc4a7594129cc027339fd800cd081e44497722ea1179de", size = 6347762, upload-time = "2026-01-02T09:12:36.748Z" }, { url = "https://files.pythonhosted.org/packages/c4/5a/8ba375025701c09b309e8d5163c5a4ce0102fa86bbf8800eb0d7ac87bc51/pillow-12.1.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:15c794d74303828eaa957ff8070846d0efe8c630901a1c753fdc63850e19ecd9", size = 7039265, upload-time = "2026-01-02T09:12:39.082Z" }, { url = "https://files.pythonhosted.org/packages/cf/dc/cf5e4cdb3db533f539e88a7bbf9f190c64ab8a08a9bc7a4ccf55067872e4/pillow-12.1.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c990547452ee2800d8506c4150280757f88532f3de2a58e3022e9b179107862a", size = 6462341, upload-time = "2026-01-02T09:12:40.946Z" }, { url = "https://files.pythonhosted.org/packages/d0/47/0291a25ac9550677e22eda48510cfc4fa4b2ef0396448b7fbdc0a6946309/pillow-12.1.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b63e13dd27da389ed9475b3d28510f0f954bca0041e8e551b2a4eb1eab56a39a", size = 7165395, upload-time = "2026-01-02T09:12:42.706Z" }, + { url = "https://files.pythonhosted.org/packages/57/61/571163a5ef86ec0cf30d265ac2a70ae6fc9e28413d1dc94fa37fae6bda89/pillow-12.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:896866d2d436563fa2a43a9d72f417874f16b5545955c54a64941e87c1376c61", size = 4660426, upload-time = "2026-01-02T09:12:52.865Z" }, { url = "https://files.pythonhosted.org/packages/5e/e1/53ee5163f794aef1bf84243f755ee6897a92c708505350dd1923f4afec48/pillow-12.1.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8e178e3e99d3c0ea8fc64b88447f7cac8ccf058af422a6cedc690d0eadd98c51", size = 6269908, upload-time = "2026-01-02T09:12:54.884Z" }, { url = "https://files.pythonhosted.org/packages/bc/0b/b4b4106ff0ee1afa1dc599fde6ab230417f800279745124f6c50bcffed8e/pillow-12.1.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:079af2fb0c599c2ec144ba2c02766d1b55498e373b3ac64687e43849fbbef5bc", size = 8074733, upload-time = "2026-01-02T09:12:56.802Z" }, { url = "https://files.pythonhosted.org/packages/19/9f/80b411cbac4a732439e629a26ad3ef11907a8c7fc5377b7602f04f6fe4e7/pillow-12.1.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bdec5e43377761c5dbca620efb69a77f6855c5a379e32ac5b158f54c84212b14", size = 6381431, upload-time = "2026-01-02T09:12:58.823Z" }, @@ -669,12 +1231,64 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, ] +[[package]] +name = "propcache" +version = "0.5.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/44/c87281c333769159c50594f22610f77398a47ccbfbbf23074e744e86f87c/propcache-0.5.2.tar.gz", hash = "sha256:01c4fc7480cd0598bb4b57022df55b9ca296da7fc5a8760bd8451a7e63a7d427", size = 50208, upload-time = "2026-05-08T21:02:12.199Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4a/cb/e27bc2b2737a0bb49962b275efa051e8f1c35a936df7d5139b6b658b7dc9/propcache-0.5.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:806719138ecd720339a12410fb9614ac9b2b2d3a5fdf8235d56981c36f4039ba", size = 95887, upload-time = "2026-05-08T21:00:11.277Z" }, + { url = "https://files.pythonhosted.org/packages/2c/7d/49777a3e20b55863d4794384a38acd460c04157b0a00f8602b0d508b8431/propcache-0.5.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e5cbfac9f61484f7e9f3597775500cd3ebe8274e9b050c38f9525c77c97520bf", size = 55190, upload-time = "2026-05-08T21:00:13.935Z" }, + { url = "https://files.pythonhosted.org/packages/44/c7/085d0cd63062e84044e3f05797749c3f8e3938ff3aeb0eb2f69d43fafc91/propcache-0.5.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5dbc581d2814337da56222fab8dc5f161cd798a434e49bac27930aaef798e144", size = 59995, upload-time = "2026-05-08T21:00:15.526Z" }, + { url = "https://files.pythonhosted.org/packages/14/15/5574111ae50dd6e879456888c0eadd4c5a869959775854e18e18a6b345f3/propcache-0.5.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f328175a2cde1f0ff2c4ed8ce968b9dcfb55f3a7153f39e2957ed994da13476", size = 61639, upload-time = "2026-05-08T21:00:19.692Z" }, + { url = "https://files.pythonhosted.org/packages/04/ac/f076982cbe2195ee9cf32de5a1e46951d9fb399fc207f390562dd0fd8fb2/propcache-0.5.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:80168e2ebe4d3ec6599d10ad8f520304ae1cad9b6c5a95372aef1b66b7bfb53a", size = 60029, upload-time = "2026-05-08T21:00:22.713Z" }, + { url = "https://files.pythonhosted.org/packages/12/fd/77fe5936d8c3086ca9048f7f415f122ed82e53884a9ec193646b42deef06/propcache-0.5.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c80f4ba3e8f00189165999a742ee526ebeccedf6c3f7beb0c7df821e9772435a", size = 62514, upload-time = "2026-05-08T21:00:30.098Z" }, + { url = "https://files.pythonhosted.org/packages/c5/09/f049e45385503fe67db75a6b6186a7b9f0c3930366dc960522c312a825b1/propcache-0.5.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:099aaf4b4d1a02265b92a977edf00b5c4f63b3b17ac6de39b0d637c9cac0188a", size = 94457, upload-time = "2026-05-08T21:00:36.355Z" }, + { url = "https://files.pythonhosted.org/packages/a9/12/a6ba6482bb5ea3260c000c9b20881c95fa11c6b30173715668259f844ed7/propcache-0.5.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:fc299c129490f55f254cd90be0deca4764e36e9a7c08b4aa588479a3bbed3098", size = 54545, upload-time = "2026-05-08T21:00:39.319Z" }, + { url = "https://files.pythonhosted.org/packages/a9/19/7fa086f5764c59ec8a8e157cd93aa8497acc00aba9dcdec56bfffb32602d/propcache-0.5.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a6ae2198be502c10f09b2516e7b5d019816924bc3183a43ce792a7bd6625e6f4", size = 59886, upload-time = "2026-05-08T21:00:40.621Z" }, + { url = "https://files.pythonhosted.org/packages/8b/c6/979176efdaa3d239e36d503d5af63a0a773b36662ed8f52e5b6a6d9fd40e/propcache-0.5.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4db0ba63d693afd40d249bd93f842b5f144f8fcbb83de05660373bcf30517b1d", size = 61534, upload-time = "2026-05-08T21:00:44.507Z" }, + { url = "https://files.pythonhosted.org/packages/60/5a/28e5d9acbac1cc9ccb67045e8c1b943aa8d79fdf39c93bd73cacd68008ea/propcache-0.5.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d310c013aad2c72f1c3f2f8dd3279d460a858c551f97aeb8c63e4693cca7b4d2", size = 59994, upload-time = "2026-05-08T21:00:47.093Z" }, + { url = "https://files.pythonhosted.org/packages/92/56/f5c7d9b4b7595d5127da38974d791b2153f3d1eae6c674af3583ace92ad3/propcache-0.5.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:cfa21e036ce1e1db2be04ba3b85d2df1bb1702fa01932d984c5464c665228ff4", size = 62463, upload-time = "2026-05-08T21:00:54.303Z" }, + { url = "https://files.pythonhosted.org/packages/1b/82/c1d268bbbf2ef981c5bf0fbbe746db617c66e3bcefe431a1aa8943fbe23a/propcache-0.5.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:a592f5f3da71c8691c788c13cb6734b6d17663d2e1cb8caddf0673d01ef8847d", size = 98872, upload-time = "2026-05-08T21:00:59.889Z" }, + { url = "https://files.pythonhosted.org/packages/67/f0/9b90ca2a210b3d09bcfcd96ecd0f55545c091535abce2a45de2775cfd357/propcache-0.5.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:10734b5484ea113152ee25a91dccedf81631791805d2c9ccb054958e51842c94", size = 56696, upload-time = "2026-05-08T21:01:02.941Z" }, + { url = "https://files.pythonhosted.org/packages/9d/0e/6e9d4ba07c8e56e21ddec1e75f12148142b21ca83a51871babce095334f4/propcache-0.5.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cafca7e56c12bb02ae16d283742bef25a61122e9dab2b5b3f2ccbe589ce32164", size = 62378, upload-time = "2026-05-08T21:01:04.475Z" }, + { url = "https://files.pythonhosted.org/packages/83/e4/5c7462e50625f051f37fb38b8224f7639f667184bbd34424ec83819bb1b7/propcache-0.5.2-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f7467da8a9822bf1a55336f877340c5bcbd3c482afc43a99771169f74a26dedc", size = 63773, upload-time = "2026-05-08T21:01:08.514Z" }, + { url = "https://files.pythonhosted.org/packages/85/1e/a3a1a63116a2b8edb415a8bb9a6f0c34bd03830b1e18e8ce2904e1dc1cf4/propcache-0.5.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2f22cbbac9e26a8e864c0985ff1268d5d939d53d9d9411a9824279097e03a2cb", size = 62643, upload-time = "2026-05-08T21:01:11.132Z" }, + { url = "https://files.pythonhosted.org/packages/34/68/8bdb7bb7756d76e005490649d10e4a8369e610c74d619f71e1aedf889e9c/propcache-0.5.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:cef6cea3922890dd6c9654971001fa797b526c16ab5e1e46c05fd6f877be7568", size = 64964, upload-time = "2026-05-08T21:01:17.57Z" }, + { url = "https://files.pythonhosted.org/packages/e2/ea/23ee535d90ce8bcc465a3028eb3cc0ce3bd1005f4bb27710b30587de798d/propcache-0.5.2-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:46088abff4cba581dea21ae0467a480526cb25aa5f3c269e909f800328bc3999", size = 94662, upload-time = "2026-05-08T21:01:22.683Z" }, + { url = "https://files.pythonhosted.org/packages/63/b1/4260d67d6bd85e58a66b72d54ce15d5de789b6f3870cc6bedf8ff9667401/propcache-0.5.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:97797ebb098e670a2f92dd66f32897e30d7615b14e7f59711de23e30a9072539", size = 54650, upload-time = "2026-05-08T21:01:25.305Z" }, + { url = "https://files.pythonhosted.org/packages/70/06/2f46c318e3307cd7a6a7481def374ce838c0fe20084b39dd54b0879d0e99/propcache-0.5.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba57fffe4ac99c5d30076161b5866336d97600769bad35cc68f7774b15298a4e", size = 59912, upload-time = "2026-05-08T21:01:26.545Z" }, + { url = "https://files.pythonhosted.org/packages/2b/76/7f1bfd6afff4c5e38e36a3c6d68eb5f4b7311ea80baf693db78d95b603c4/propcache-0.5.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e00820e192c8dbebcafb383ebbf99030895f09905e7a0eb2e0340a0bcc2bc825", size = 61633, upload-time = "2026-05-08T21:01:31.068Z" }, + { url = "https://files.pythonhosted.org/packages/c5/01/814cfcafbcff954f94c01cf30e097ddc88a076b5440fbcf4570753437d40/propcache-0.5.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d4dc37dec6c6cdad0b57881a5658fd14fbf53e333b1a86cf86559f190e1d9ec4", size = 60069, upload-time = "2026-05-08T21:01:33.67Z" }, + { url = "https://files.pythonhosted.org/packages/8b/f3/38e66b1856e9bd079deea015bc4a55f7767c0e4db2f7dcf69e7e680ba4ce/propcache-0.5.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:51f96d685ab16e88cab128cd37a52c5da540809c8b879fa047731bfcb4ad35a4", size = 62570, upload-time = "2026-05-08T21:01:40.415Z" }, + { url = "https://files.pythonhosted.org/packages/8a/81/fadf555f42d3b762eea8a53950b0489fdc0aa9da5f8ed9e10ce0a4e01b48/propcache-0.5.2-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:4bc8ff1feffc6a61c7002ffe84634c41b822e104990ae009f44a0834430070bb", size = 99395, upload-time = "2026-05-08T21:01:45.883Z" }, + { url = "https://files.pythonhosted.org/packages/cb/73/daf935ea7048ddd7ec8eec5345b4a40b619d2d178b3c0a0900796bc3c794/propcache-0.5.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1b31822f4474c4036bae62de9402710051d431a606d6a0f907fec79935a071aa", size = 56914, upload-time = "2026-05-08T21:01:48.573Z" }, + { url = "https://files.pythonhosted.org/packages/79/9f/aba959b435ea18617edd7cf0a7ad0b9c574b8fc7e3d2cd55fb59cb255d33/propcache-0.5.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:13fef48778b5a2a756523fdb781326b028ca75e32858b04f2cdd19f394564917", size = 62567, upload-time = "2026-05-08T21:01:49.903Z" }, + { url = "https://files.pythonhosted.org/packages/47/f7/9f8122e3132e8e354ac41975ef8f1099be7d5a16bc7ae562734e993665c0/propcache-0.5.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cd645f03898405cabe694fb8bc35241e3a9c332ec85627584fe3de201452b335", size = 63985, upload-time = "2026-05-08T21:01:53.847Z" }, + { url = "https://files.pythonhosted.org/packages/5a/56/387e3f7dfce0a9233df41fb888aa1c30222cb4bbbf09537c02dd9bd85fe2/propcache-0.5.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7afa37062e6650640e932e4cc9297d81f9f42d9944029cc386b8247dea4da837", size = 62779, upload-time = "2026-05-08T21:01:57.489Z" }, + { url = "https://files.pythonhosted.org/packages/da/d3/3368efe79ab21f0cdf86ef49895811c9cc933131d4cde1f28a624e22e712/propcache-0.5.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cc49723e2f60d6b32a0f0b08a3fd6d13203c07f1cd9566cfce0f12a917c967a2", size = 65172, upload-time = "2026-05-08T21:02:04.745Z" }, + { url = "https://files.pythonhosted.org/packages/3a/ed/1cdcab6ba3d6ab7feca11fc14f0eeea80755bb53ef4e892079f31b10a25f/propcache-0.5.2-py3-none-any.whl", hash = "sha256:be1ddfcbb376e3de5d2e2db1d58d6d67463e6b4f9f040c000de8e300295465fe", size = 14036, upload-time = "2026-05-08T21:02:10.673Z" }, +] + +[[package]] +name = "proto-plus" +version = "1.28.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "protobuf", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c9/56/e647b0c675392d2da368da7b6f158f7368b18542fd6f7d7400a2f39de000/proto_plus-1.28.0.tar.gz", hash = "sha256:38e5696342835b08fc116f30a25665b29531cda9d5d5643e9b81fc312385abd9", size = 57221, upload-time = "2026-05-07T08:04:50.811Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7c/20/b122d4626976acb81132036d2ad1bb35a1a8775fceb837ec30964622516a/proto_plus-1.28.0-py3-none-any.whl", hash = "sha256:a630604310899e73c59ec302e5765c058d412b2f090b9c79c8822589f14955b8", size = 50410, upload-time = "2026-05-07T08:03:31.962Z" }, +] + [[package]] name = "protobuf" version = "6.33.3" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/cc/5c/f912bdebdd4af4160da6a2c2b1b3aaa1b8c578d0243ba8f694f93c7095f0/protobuf-6.33.3.tar.gz", hash = "sha256:c8794debeb402963fddff41a595e1f649bcd76616ba56c835645cab4539e810e", size = 444318, upload-time = "2026-01-09T23:05:02.79Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/5d/0ef28dded98973a26443a6a7bc49bff6206be8c57dc1d1e28e6c1147b879/protobuf-6.33.3-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:648b7b0144222eb06cf529a3d7b01333c5f30b4196773b682d388f04db373759", size = 427594, upload-time = "2026-01-09T23:04:53.358Z" }, { url = "https://files.pythonhosted.org/packages/c5/46/551c69b6ff1957bd703654342bfb776bb97db400bc80afc56fbb64e7c11d/protobuf-6.33.3-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:08a6ca12f60ba99097dd3625ef4275280f99c9037990e47ce9368826b159b890", size = 324469, upload-time = "2026-01-09T23:04:54.332Z" }, { url = "https://files.pythonhosted.org/packages/38/8c/6522b8e543ece46f645911c3cebe361d8460134c0fee02ddcf70ebf32999/protobuf-6.33.3-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:6fa9b5f4baa12257542273e5e6f3c3d3867b30bc2770c14ad9ac8315264bf986", size = 323298, upload-time = "2026-01-09T23:04:56.866Z" }, { url = "https://files.pythonhosted.org/packages/a6/b9/067b8a843569d5605ba6f7c039b9319720a974f82216cd623e13186d3078/protobuf-6.33.3-py3-none-any.whl", hash = "sha256:c2bf221076b0d463551efa2e1319f08d4cffcc5f0d864614ccd3d0e77a637794", size = 170518, upload-time = "2026-01-09T23:05:01.227Z" }, @@ -686,25 +1300,58 @@ version = "7.2.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/73/cb/09e5184fb5fc0358d110fc3ca7f6b1d033800734d34cac10f4136cfac10e/psutil-7.2.1.tar.gz", hash = "sha256:f7583aec590485b43ca601dd9cea0dcd65bd7bb21d30ef4ddbf4ea6b5ed1bdd3", size = 490253, upload-time = "2025-12-29T08:26:00.169Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/26/97/a58a4968f8990617decee234258a2b4fc7cd9e35668387646c1963e69f26/psutil-7.2.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:81442dac7abfc2f4f4385ea9e12ddf5a796721c0f6133260687fec5c3780fa49", size = 130132, upload-time = "2025-12-29T08:26:06.228Z" }, { url = "https://files.pythonhosted.org/packages/db/6d/ed44901e830739af5f72a85fa7ec5ff1edea7f81bfbf4875e409007149bd/psutil-7.2.1-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ea46c0d060491051d39f0d2cff4f98d5c72b288289f57a21556cc7d504db37fc", size = 180612, upload-time = "2025-12-29T08:26:08.276Z" }, { url = "https://files.pythonhosted.org/packages/c7/65/b628f8459bca4efbfae50d4bf3feaab803de9a160b9d5f3bd9295a33f0c2/psutil-7.2.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:35630d5af80d5d0d49cfc4d64c1c13838baf6717a13effb35869a5919b854cdf", size = 183201, upload-time = "2025-12-29T08:26:10.622Z" }, + { url = "https://files.pythonhosted.org/packages/c9/d2/935039c20e06f615d9ca6ca0ab756cf8408a19d298ffaa08666bc18dc805/psutil-7.2.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:3fce5f92c22b00cdefd1645aa58ab4877a01679e901555067b1bd77039aa589f", size = 130133, upload-time = "2025-12-29T08:26:18.009Z" }, { url = "https://files.pythonhosted.org/packages/77/69/19f1eb0e01d24c2b3eacbc2f78d3b5add8a89bf0bb69465bc8d563cc33de/psutil-7.2.1-cp314-cp314t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:93f3f7b0bb07711b49626e7940d6fe52aa9940ad86e8f7e74842e73189712129", size = 181518, upload-time = "2025-12-29T08:26:20.241Z" }, { url = "https://files.pythonhosted.org/packages/e1/6d/7e18b1b4fa13ad370787626c95887b027656ad4829c156bb6569d02f3262/psutil-7.2.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d34d2ca888208eea2b5c68186841336a7f5e0b990edec929be909353a202768a", size = 184348, upload-time = "2025-12-29T08:26:22.215Z" }, + { url = "https://files.pythonhosted.org/packages/c5/2c/78e4a789306a92ade5000da4f5de3255202c534acdadc3aac7b5458fadef/psutil-7.2.1-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:05cc68dbb8c174828624062e73078e7e35406f4ca2d0866c272c2410d8ef06d1", size = 128947, upload-time = "2025-12-29T08:26:29.548Z" }, { url = "https://files.pythonhosted.org/packages/29/f8/40e01c350ad9a2b3cb4e6adbcc8a83b17ee50dd5792102b6142385937db5/psutil-7.2.1-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5e38404ca2bb30ed7267a46c02f06ff842e92da3bb8c5bfdadbd35a5722314d8", size = 154694, upload-time = "2025-12-29T08:26:32.147Z" }, { url = "https://files.pythonhosted.org/packages/06/e4/b751cdf839c011a9714a783f120e6a86b7494eb70044d7d81a25a5cd295f/psutil-7.2.1-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ab2b98c9fc19f13f59628d94df5cc4cc4844bc572467d113a8b517d634e362c6", size = 156136, upload-time = "2025-12-29T08:26:34.079Z" }, { url = "https://files.pythonhosted.org/packages/44/ad/bbf6595a8134ee1e94a4487af3f132cef7fce43aef4a93b49912a48c3af7/psutil-7.2.1-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:f78baafb38436d5a128f837fab2d92c276dfb48af01a240b861ae02b2413ada8", size = 148108, upload-time = "2025-12-29T08:26:36.225Z" }, { url = "https://files.pythonhosted.org/packages/1c/15/dd6fd869753ce82ff64dcbc18356093471a5a5adf4f77ed1f805d473d859/psutil-7.2.1-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:99a4cd17a5fdd1f3d014396502daa70b5ec21bf4ffe38393e152f8e449757d67", size = 147402, upload-time = "2025-12-29T08:26:39.21Z" }, ] +[[package]] +name = "pyasn1" +version = "0.6.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5c/5f/6583902b6f79b399c9c40674ac384fd9cd77805f9e6205075f828ef11fb2/pyasn1-0.6.3.tar.gz", hash = "sha256:697a8ecd6d98891189184ca1fa05d1bb00e2f84b5977c481452050549c8a72cf", size = 148685, upload-time = "2026-03-17T01:06:53.382Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/a0/7d793dce3fa811fe047d6ae2431c672364b462850c6235ae306c0efd025f/pyasn1-0.6.3-py3-none-any.whl", hash = "sha256:a80184d120f0864a52a073acc6fc642847d0be408e7c7252f31390c0f4eadcde", size = 83997, upload-time = "2026-03-17T01:06:52.036Z" }, +] + +[[package]] +name = "pyasn1-modules" +version = "0.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyasn1", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e9/e6/78ebbb10a8c8e4b61a59249394a4a594c1a7af95593dc933a349c8d00964/pyasn1_modules-0.4.2.tar.gz", hash = "sha256:677091de870a80aae844b1ca6134f54652fa2c8c5a52aa396440ac3106e941e6", size = 307892, upload-time = "2025-03-28T02:41:22.17Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/47/8d/d529b5d697919ba8c11ad626e835d4039be708a35b0d22de83a269a6682c/pyasn1_modules-0.4.2-py3-none-any.whl", hash = "sha256:29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a", size = 181259, upload-time = "2025-03-28T02:41:19.028Z" }, +] + +[[package]] +name = "pycparser" +version = "3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", size = 103492, upload-time = "2026-01-21T14:26:51.89Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172, upload-time = "2026-01-21T14:26:50.693Z" }, +] + [[package]] name = "pydantic" version = "2.12.5" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "annotated-types", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "pydantic-core", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "typing-extensions", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "typing-inspection", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "annotated-types", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "pydantic-core", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "typing-extensions", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "typing-inspection", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/69/44/36f1a6e523abc58ae5f928898e4aca2e0ea509b5aa6f6f392a5d882be928/pydantic-2.12.5.tar.gz", hash = "sha256:4d351024c75c0f085a9febbb665ce8c0c6ec5d30e903bdb6394b7ede26aebb49", size = 821591, upload-time = "2025-11-26T15:11:46.471Z" } wheels = [ @@ -716,26 +1363,31 @@ name = "pydantic-core" version = "2.41.5" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "typing-extensions", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] 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/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" }, { url = "https://files.pythonhosted.org/packages/0d/76/941cc9f73529988688a665a5c0ecff1112b3d95ab48f81db5f7606f522d3/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eceb81a8d74f9267ef4081e246ffd6d129da5d87e37a77c9bde550cb04870c1c", size = 2075366, upload-time = "2025-11-04T13:40:09.804Z" }, { url = "https://files.pythonhosted.org/packages/b1/87/41f3202e4193e3bacfc2c065fab7706ebe81af46a83d3e27605029c1f5a6/pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c23e27686783f60290e36827f9c626e63154b82b116d7fe9adba1fda36da706c", size = 2132603, upload-time = "2025-11-04T13:40:13.868Z" }, { url = "https://files.pythonhosted.org/packages/cc/6a/ebf4b1d65d458f3cda6a7335d141305dfa19bdc61140a884d165a8a1bbc7/pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:bfea2a5f0b4d8d43adf9d7b8bf019fb46fdd10a2e5cde477fbcb9d1fa08c68e1", size = 2319068, upload-time = "2025-11-04T13:40:17.532Z" }, + { url = "https://files.pythonhosted.org/packages/94/02/abfa0e0bda67faa65fef1c84971c7e45928e108fe24333c81f3bfe35d5f5/pydantic_core-2.41.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:112e305c3314f40c93998e567879e887a3160bb8689ef3d2c04b6cc62c33ac34", size = 1896206, upload-time = "2025-11-04T13:40:27.099Z" }, { url = "https://files.pythonhosted.org/packages/15/df/a4c740c0943e93e6500f9eb23f4ca7ec9bf71b19e608ae5b579678c8d02f/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cbaad15cb0c90aa221d43c00e77bb33c93e8d36e0bf74760cd00e732d10a6a0", size = 1919307, upload-time = "2025-11-04T13:40:29.806Z" }, { url = "https://files.pythonhosted.org/packages/cf/4e/35a80cae583a37cf15604b44240e45c05e04e86f9cfd766623149297e971/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:406bf18d345822d6c21366031003612b9c77b3e29ffdb0f612367352aab7d586", size = 2073164, upload-time = "2025-11-04T13:40:40.289Z" }, { url = "https://files.pythonhosted.org/packages/75/c7/20bd7fc05f0c6ea2056a4565c6f36f8968c0924f19b7d97bbfea55780e73/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:01a3d0ab748ee531f4ea6c3e48ad9dac84ddba4b0d82291f87248f2f9de8d740", size = 2137788, upload-time = "2025-11-04T13:40:44.752Z" }, { url = "https://files.pythonhosted.org/packages/9c/59/013626bf8c78a5a5d9350d12e7697d3d4de951a75565496abd40ccd46bee/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:915c3d10f81bec3a74fbd4faebe8391013ba61e5a1a8d48c4455b923bdda7858", size = 2324852, upload-time = "2025-11-04T13:40:48.575Z" }, + { url = "https://files.pythonhosted.org/packages/74/1a/145646e5687e8d9a1e8d09acb278c8535ebe9e972e1f162ed338a622f193/pydantic_core-2.41.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1d1d9764366c73f996edd17abb6d9d7649a7eb690006ab6adbda117717099b14", size = 1891725, upload-time = "2025-11-04T13:40:58.807Z" }, { url = "https://files.pythonhosted.org/packages/23/04/e89c29e267b8060b40dca97bfc64a19b2a3cf99018167ea1677d96368273/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25e1c2af0fce638d5f1988b686f3b3ea8cd7de5f244ca147c777769e798a9cd1", size = 1915040, upload-time = "2025-11-04T13:41:00.853Z" }, { url = "https://files.pythonhosted.org/packages/4c/d2/ef2074dc020dd6e109611a8be4449b98cd25e1b9b8a303c2f0fca2f2bcf7/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22f0fb8c1c583a3b6f24df2470833b40207e907b90c928cc8d3594b76f874375", size = 2064877, upload-time = "2025-11-04T13:41:09.827Z" }, { url = "https://files.pythonhosted.org/packages/d3/9e/3ce66cebb929f3ced22be85d4c2399b8e85b622db77dad36b73c5387f8f8/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:0177272f88ab8312479336e1d777f6b124537d47f2123f89cb37e0accea97f90", size = 2138960, upload-time = "2025-11-04T13:41:14.627Z" }, { url = "https://files.pythonhosted.org/packages/3c/0d/f05e79471e889d74d3d88f5bd20d0ed189ad94c2423d81ff8d0000aab4ff/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:e56ba91f47764cc14f1daacd723e3e82d1a89d783f0f5afe9c364b8bb491ccdb", size = 2326039, upload-time = "2025-11-04T13:41:18.934Z" }, + { url = "https://files.pythonhosted.org/packages/bb/3d/6913dde84d5be21e284439676168b28d8bbba5600d838b9dca99de0fad71/pydantic_core-2.41.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b80aa5095cd3109962a298ce14110ae16b8c1aece8b72f9dafe81cf597ad80b3", size = 1863760, upload-time = "2025-11-04T13:41:31.055Z" }, { url = "https://files.pythonhosted.org/packages/5a/f0/e5e6b99d4191da102f2b0eb9687aaa7f5bea5d9964071a84effc3e40f997/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3006c3dd9ba34b0c094c544c6006cc79e87d8612999f1a5d43b769b89181f23c", size = 1878092, upload-time = "2025-11-04T13:41:33.21Z" }, { url = "https://files.pythonhosted.org/packages/aa/4e/2ae1aa85d6af35a39b236b1b1641de73f5a6ac4d5a7509f77b814885760c/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ff4321e56e879ee8d2a879501c8e469414d948f4aba74a2d4593184eb326660", size = 2041078, upload-time = "2025-11-04T13:41:42.323Z" }, { url = "https://files.pythonhosted.org/packages/02/7a/f999a6dcbcd0e5660bc348a3991c8915ce6599f4f2c6ac22f01d7a10816c/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:a39455728aabd58ceabb03c90e12f71fd30fa69615760a075b9fec596456ccc3", size = 2129560, upload-time = "2025-11-04T13:41:47.474Z" }, { url = "https://files.pythonhosted.org/packages/d9/02/3c562f3a51afd4d88fff8dffb1771b30cfdfd79befd9883ee094f5b6c0d8/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:2a5e06546e19f24c6a96a129142a75cee553cc018ffee48a460059b1185f4470", size = 2331955, upload-time = "2025-11-04T13:41:54.079Z" }, + { 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" }, ] @@ -754,10 +1406,10 @@ name = "pytest" version = "9.0.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "iniconfig", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "packaging", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "pluggy", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "pygments", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "iniconfig", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "packaging", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "pluggy", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "pygments", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/d1/db/7ef3487e0fb0049ddb5ce41d3a49c235bf9ad299b6a25d5780a89f19230f/pytest-9.0.2.tar.gz", hash = "sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11", size = 1568901, upload-time = "2025-12-06T21:30:51.014Z" } wheels = [ @@ -770,18 +1422,22 @@ 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/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" }, { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" }, { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" }, { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" }, + { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, + { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" }, { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" }, { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" }, + { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" }, { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" }, { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, @@ -793,9 +1449,9 @@ name = "qwix" version = "0.1.5" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "flax", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "jax", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "jaxlib", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "flax", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "jax", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "jaxlib", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/9a/6d/119d353c5a2597f8122c992466aaa69e102e6d8f59587a55e65517f34edb/qwix-0.1.5.tar.gz", hash = "sha256:935fefd41f2b26d0fe545e433bff658b1ee476c83b7c6e467e31f769d67a74e2", size = 74227, upload-time = "2025-12-12T01:12:03.809Z" } wheels = [ @@ -807,25 +1463,56 @@ name = "rdkit" version = "2025.9.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "pillow", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "numpy", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "pillow", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] wheels = [ + { url = "https://files.pythonhosted.org/packages/b9/36/7fe1d03eb502c263e0422c7b01c377bd236d024c9fd068cefdceadc8249b/rdkit-2025.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a9b59d42cae31d6b7c39b7a0018fd599bdd332fd79b136c19345a7a7d9d8cc10", size = 29549638, upload-time = "2026-01-31T12:07:44.828Z" }, { url = "https://files.pythonhosted.org/packages/7f/fe/48a1b8a77c144682be59f2ec0213609b5b55900a4f572c8c25b54d5aed61/rdkit-2025.9.4-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:86f3871783de1b8996832ec02ebcb350260ece4508f77cba32f0a11acdcdce0f", size = 35100276, upload-time = "2026-01-31T12:07:49.263Z" }, { url = "https://files.pythonhosted.org/packages/be/d1/c687917cf1cdf5c5412437a5f4a91921497c2d0ffeb827b23f5489a10842/rdkit-2025.9.4-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:79a081174c53498efb7d6d48737bc3803aaf04153d0c4d6b0ea132dfeec68b51", size = 36641090, upload-time = "2026-01-31T12:07:54.627Z" }, + { url = "https://files.pythonhosted.org/packages/30/1d/9012510c749551b575f8126c2597b2c7f146118e959d41122d354687bed1/rdkit-2025.9.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:80d9b1df028c835e9e54796195384efa165d042d8a98bb098040a4badb6ee7b4", size = 29548606, upload-time = "2026-01-31T12:08:02.553Z" }, { url = "https://files.pythonhosted.org/packages/8e/25/74d28e1bb5f36260f57955119ceef9c7259a01f35e737310b853d3abfa72/rdkit-2025.9.4-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:1a65e1a78357638b5533584c1418a1ddafbc1bd7dffde8a8e08135d54495b58e", size = 35098273, upload-time = "2026-01-31T12:08:06.188Z" }, { url = "https://files.pythonhosted.org/packages/7b/8b/a2bd32153a9c6526eb7db7aa848328927b2e37674ac5591f470ce3578ac0/rdkit-2025.9.4-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:19e3d3bb763c56831a8299974e209634d5f065e9cfb4ca67a79730d11bec233a", size = 36639736, upload-time = "2026-01-31T12:08:10.106Z" }, + { url = "https://files.pythonhosted.org/packages/54/68/d7d118b9af01c113f1f8d0dda66fbfd7f7f8d815a3da36dae5c3305a1c19/rdkit-2025.9.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:64091260e547fc632fc89cf1e8f2e14f31688b7824954470073baeecac69b6d0", size = 29564008, upload-time = "2026-01-31T12:08:17.503Z" }, { url = "https://files.pythonhosted.org/packages/64/a7/fb688b2ccae058a5226604a52be36d9becf2c85af2041231a3c3594eb082/rdkit-2025.9.4-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:90b5f9ce64e10c550bb313877a7cf27526aad981bb46aa94c2df123fb5fb9535", size = 35131961, upload-time = "2026-01-31T12:08:21.949Z" }, { url = "https://files.pythonhosted.org/packages/46/33/3e07254b69080b3c03fe931b33af47d5fe823961f294fbc544ce8710a5a9/rdkit-2025.9.4-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:5a1c827cd97488a2bf6d38f15811a03ebeb691f1f0427d063e739b03d8180f8c", size = 36651962, upload-time = "2026-01-31T12:08:26.426Z" }, ] +[[package]] +name = "requests" +version = "2.34.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "charset-normalizer", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "idna", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "urllib3", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 142856, upload-time = "2026-05-14T19:25:27.735Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = 73075, upload-time = "2026-05-14T19:25:26.443Z" }, +] + +[[package]] +name = "requests-oauthlib" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "oauthlib", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "requests", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/f2/05f29bc3913aea15eb670be136045bf5c5bbf4b99ecb839da9b422bb2c85/requests-oauthlib-2.0.0.tar.gz", hash = "sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9", size = 55650, upload-time = "2024-03-22T20:32:29.939Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl", hash = "sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36", size = 24179, upload-time = "2024-03-22T20:32:28.055Z" }, +] + [[package]] name = "rich" version = "14.2.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "markdown-it-py", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "pygments", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "markdown-it-py", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "pygments", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/fb/d2/8920e102050a0de7bfabeb4c4614a49248cf8d5d7a8d01885fbb24dc767a/rich-14.2.0.tar.gz", hash = "sha256:73ff50c7c0c1c77c8243079283f4edb376f0f6442433aecb8ce7e6d0b92d1fe4", size = 219990, upload-time = "2025-10-09T14:16:53.064Z" } wheels = [ @@ -837,26 +1524,36 @@ name = "scipy" version = "1.17.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "numpy", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/56/3e/9cca699f3486ce6bc12ff46dc2031f1ec8eb9ccc9a320fdaf925f1417426/scipy-1.17.0.tar.gz", hash = "sha256:2591060c8e648d8b96439e111ac41fd8342fdeff1876be2e19dea3fe8930454e", size = 30396830, upload-time = "2026-01-10T21:34:23.009Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/ed/1d/5057f812d4f6adc91a20a2d6f2ebcdb517fdbc87ae3acc5633c9b97c8ba5/scipy-1.17.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:88c22af9e5d5a4f9e027e26772cc7b5922fab8bcc839edb3ae33de404feebd9e", size = 27969012, upload-time = "2026-01-10T21:25:30.921Z" }, + { url = "https://files.pythonhosted.org/packages/e3/21/f6ec556c1e3b6ec4e088da667d9987bb77cc3ab3026511f427dc8451187d/scipy-1.17.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:f3cd947f20fe17013d401b64e857c6b2da83cae567adbb75b9dcba865abc66d8", size = 20140691, upload-time = "2026-01-10T21:25:34.802Z" }, { url = "https://files.pythonhosted.org/packages/4a/69/7c347e857224fcaf32a34a05183b9d8a7aca25f8f2d10b8a698b8388561a/scipy-1.17.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5194c445d0a1c7a6c1a4a4681b6b7c71baad98ff66d96b949097e7513c9d6742", size = 32724197, upload-time = "2026-01-10T21:25:44.084Z" }, { url = "https://files.pythonhosted.org/packages/d1/fe/66d73b76d378ba8cc2fe605920c0c75092e3a65ae746e1e767d9d020a75a/scipy-1.17.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9eeb9b5f5997f75507814ed9d298ab23f62cf79f5a3ef90031b1ee2506abdb5b", size = 35009148, upload-time = "2026-01-10T21:25:50.591Z" }, { url = "https://files.pythonhosted.org/packages/af/07/07dec27d9dc41c18d8c43c69e9e413431d20c53a0339c388bcf72f353c4b/scipy-1.17.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:40052543f7bbe921df4408f46003d6f01c6af109b9e2c8a66dd1cf6cf57f7d5d", size = 34798766, upload-time = "2026-01-10T21:25:59.41Z" }, { url = "https://files.pythonhosted.org/packages/81/61/0470810c8a093cdacd4ba7504b8a218fd49ca070d79eca23a615f5d9a0b0/scipy-1.17.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0cf46c8013fec9d3694dc572f0b54100c28405d55d3e2cb15e2895b25057996e", size = 37405953, upload-time = "2026-01-10T21:26:07.75Z" }, + { url = "https://files.pythonhosted.org/packages/b2/9a/9406aec58268d437636069419e6977af953d1e246df941d42d3720b7277b/scipy-1.17.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:1f9586a58039d7229ce77b52f8472c972448cded5736eaf102d5658bbac4c269", size = 27950385, upload-time = "2026-01-10T21:26:36.801Z" }, + { url = "https://files.pythonhosted.org/packages/4f/98/e7342709e17afdfd1b26b56ae499ef4939b45a23a00e471dfb5375eea205/scipy-1.17.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:9fad7d3578c877d606b1150135c2639e9de9cecd3705caa37b66862977cc3e72", size = 20122115, upload-time = "2026-01-10T21:26:42.107Z" }, { url = "https://files.pythonhosted.org/packages/c9/10/be13397a0e434f98e0c79552b2b584ae5bb1c8b2be95db421533bbca5369/scipy-1.17.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fe508b5690e9eaaa9467fc047f833af58f1152ae51a0d0aed67aa5801f4dd7d6", size = 32696338, upload-time = "2026-01-10T21:26:55.521Z" }, { url = "https://files.pythonhosted.org/packages/63/1e/12fbf2a3bb240161651c94bb5cdd0eae5d4e8cc6eaeceb74ab07b12a753d/scipy-1.17.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6680f2dfd4f6182e7d6db161344537da644d1cf85cf293f015c60a17ecf08752", size = 34977201, upload-time = "2026-01-10T21:27:03.501Z" }, { url = "https://files.pythonhosted.org/packages/19/5b/1a63923e23ccd20bd32156d7dd708af5bbde410daa993aa2500c847ab2d2/scipy-1.17.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:eec3842ec9ac9de5917899b277428886042a93db0b227ebbe3a333b64ec7643d", size = 34777384, upload-time = "2026-01-10T21:27:11.423Z" }, { url = "https://files.pythonhosted.org/packages/39/22/b5da95d74edcf81e540e467202a988c50fef41bd2011f46e05f72ba07df6/scipy-1.17.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d7425fcafbc09a03731e1bc05581f5fad988e48c6a861f441b7ab729a49a55ea", size = 37379586, upload-time = "2026-01-10T21:27:20.171Z" }, + { url = "https://files.pythonhosted.org/packages/76/bb/bbb392005abce039fb7e672cb78ac7d158700e826b0515cab6b5b60c26fb/scipy-1.17.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:819fc26862b4b3c73a60d486dbb919202f3d6d98c87cf20c223511429f2d1a97", size = 28365415, upload-time = "2026-01-10T21:27:34.26Z" }, + { url = "https://files.pythonhosted.org/packages/37/da/9d33196ecc99fba16a409c691ed464a3a283ac454a34a13a3a57c0d66f3a/scipy-1.17.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:363ad4ae2853d88ebcde3ae6ec46ccca903ea9835ee8ba543f12f575e7b07e4e", size = 20537232, upload-time = "2026-01-10T21:27:40.306Z" }, { url = "https://files.pythonhosted.org/packages/9b/9d/025cccdd738a72140efc582b1641d0dd4caf2e86c3fb127568dc80444e6e/scipy-1.17.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:130d12926ae34399d157de777472bf82e9061c60cc081372b3118edacafe1d00", size = 32815098, upload-time = "2026-01-10T21:27:54.389Z" }, { url = "https://files.pythonhosted.org/packages/48/5f/09b879619f8bca15ce392bfc1894bd9c54377e01d1b3f2f3b595a1b4d945/scipy-1.17.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6e886000eb4919eae3a44f035e63f0fd8b651234117e8f6f29bad1cd26e7bc45", size = 35031342, upload-time = "2026-01-10T21:28:03.012Z" }, { url = "https://files.pythonhosted.org/packages/f2/9a/f0f0a9f0aa079d2f106555b984ff0fbb11a837df280f04f71f056ea9c6e4/scipy-1.17.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:13c4096ac6bc31d706018f06a49abe0485f96499deb82066b94d19b02f664209", size = 34893199, upload-time = "2026-01-10T21:28:10.832Z" }, { url = "https://files.pythonhosted.org/packages/90/b8/4f0f5cf0c5ea4d7548424e6533e6b17d164f34a6e2fb2e43ffebb6697b06/scipy-1.17.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:cacbaddd91fcffde703934897c5cd2c7cb0371fac195d383f4e1f1c5d3f3bd04", size = 37438061, upload-time = "2026-01-10T21:28:19.684Z" }, + { url = "https://files.pythonhosted.org/packages/d6/2e/2349458c3ce445f53a6c93d4386b1c4c5c0c540917304c01222ff95ff317/scipy-1.17.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:4e00562e519c09da34c31685f6acc3aa384d4d50604db0f245c14e1b4488bfa2", size = 27967182, upload-time = "2026-01-10T21:29:04.107Z" }, + { url = "https://files.pythonhosted.org/packages/5e/7c/df525fbfa77b878d1cfe625249529514dc02f4fd5f45f0f6295676a76528/scipy-1.17.0-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:f7df7941d71314e60a481e02d5ebcb3f0185b8d799c70d03d8258f6c80f3d467", size = 20139125, upload-time = "2026-01-10T21:29:10.179Z" }, { url = "https://files.pythonhosted.org/packages/80/5c/ea5d239cda2dd3d31399424967a24d556cf409fbea7b5b21412b0fd0a44f/scipy-1.17.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a38c3337e00be6fd8a95b4ed66b5d988bac4ec888fd922c2ea9fe5fb1603dd67", size = 32757834, upload-time = "2026-01-10T21:29:23.406Z" }, { url = "https://files.pythonhosted.org/packages/b8/7e/8c917cc573310e5dc91cbeead76f1b600d3fb17cf0969db02c9cf92e3cfa/scipy-1.17.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00fb5f8ec8398ad90215008d8b6009c9db9fa924fd4c7d6be307c6f945f9cd73", size = 34995775, upload-time = "2026-01-10T21:29:31.915Z" }, { url = "https://files.pythonhosted.org/packages/c5/43/176c0c3c07b3f7df324e7cdd933d3e2c4898ca202b090bd5ba122f9fe270/scipy-1.17.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:f2a4942b0f5f7c23c7cd641a0ca1955e2ae83dedcff537e3a0259096635e186b", size = 34841240, upload-time = "2026-01-10T21:29:39.995Z" }, { url = "https://files.pythonhosted.org/packages/44/8c/d1f5f4b491160592e7f084d997de53a8e896a3ac01cd07e59f43ca222744/scipy-1.17.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:dbf133ced83889583156566d2bdf7a07ff89228fe0c0cb727f777de92092ec6b", size = 37394463, upload-time = "2026-01-10T21:29:48.723Z" }, + { url = "https://files.pythonhosted.org/packages/59/8e/2912a87f94a7d1f8b38aabc0faf74b82d3b6c9e22be991c49979f0eceed8/scipy-1.17.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:13e861634a2c480bd237deb69333ac79ea1941b94568d4b0efa5db5e263d4fd1", size = 28380854, upload-time = "2026-01-10T21:30:01.554Z" }, + { url = "https://files.pythonhosted.org/packages/bd/1c/874137a52dddab7d5d595c1887089a2125d27d0601fce8c0026a24a92a0b/scipy-1.17.0-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:eb2651271135154aa24f6481cbae5cc8af1f0dd46e6533fb7b56aa9727b6a232", size = 20552752, upload-time = "2026-01-10T21:30:05.93Z" }, { url = "https://files.pythonhosted.org/packages/7c/74/3498563a2c619e8a3ebb4d75457486c249b19b5b04a30600dfd9af06bea5/scipy-1.17.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5fb10d17e649e1446410895639f3385fd2bf4c3c7dfc9bea937bddcbc3d7b9ba", size = 32829770, upload-time = "2026-01-10T21:30:16.359Z" }, { url = "https://files.pythonhosted.org/packages/48/d1/7b50cedd8c6c9d6f706b4b36fa8544d829c712a75e370f763b318e9638c1/scipy-1.17.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8547e7c57f932e7354a2319fab613981cde910631979f74c9b542bb167a8b9db", size = 35051093, upload-time = "2026-01-10T21:30:22.987Z" }, { url = "https://files.pythonhosted.org/packages/e2/82/a2d684dfddb87ba1b3ea325df7c3293496ee9accb3a19abe9429bce94755/scipy-1.17.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:33af70d040e8af9d5e7a38b5ed3b772adddd281e3062ff23fec49e49681c38cf", size = 34909905, upload-time = "2026-01-10T21:30:28.704Z" }, @@ -869,10 +1566,14 @@ version = "3.20.2" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/41/f4/a1ac5ed32f7ed9a088d62a59d410d4c204b3b3815722e2ccfb491fa8251b/simplejson-3.20.2.tar.gz", hash = "sha256:5fe7a6ce14d1c300d80d08695b7f7e633de6cd72c80644021874d985b3393649", size = 85784, upload-time = "2025-09-26T16:29:36.64Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/9e/1a91e7614db0416885eab4136d49b7303de20528860ffdd798ce04d054db/simplejson-3.20.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4376d5acae0d1e91e78baeba4ee3cf22fbf6509d81539d01b94e0951d28ec2b6", size = 93523, upload-time = "2025-09-26T16:28:00.356Z" }, + { url = "https://files.pythonhosted.org/packages/ad/f1/efd09efcc1e26629e120fef59be059ce7841cc6e1f949a4db94f1ae8a918/simplejson-3.20.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:25ca2663d99328d51e5a138f22018e54c9162438d831e26cfc3458688616eca8", size = 75655, upload-time = "2025-09-26T16:28:03.037Z" }, { url = "https://files.pythonhosted.org/packages/97/ec/5c6db08e42f380f005d03944be1af1a6bd501cc641175429a1cbe7fb23b9/simplejson-3.20.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12a6b2816b6cab6c3fd273d43b1948bc9acf708272074c8858f579c394f4cbc9", size = 150335, upload-time = "2025-09-26T16:28:05.027Z" }, { url = "https://files.pythonhosted.org/packages/20/05/ed9b2571bbf38f1a2425391f18e3ac11cb1e91482c22d644a1640dea9da7/simplejson-3.20.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:979ce23ea663895ae39106946ef3d78527822d918a136dbc77b9e2b7f006237e", size = 152367, upload-time = "2025-09-26T16:28:08.921Z" }, { url = "https://files.pythonhosted.org/packages/81/2c/bad68b05dd43e93f77994b920505634d31ed239418eb6a88997d06599983/simplejson-3.20.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a2ba921b047bb029805726800819675249ef25d2f65fd0edb90639c5b1c3033c", size = 150205, upload-time = "2025-09-26T16:28:10.086Z" }, { url = "https://files.pythonhosted.org/packages/71/ad/d7f3c331fb930638420ac6d236db68e9f4c28dab9c03164c3cd0e7967e15/simplejson-3.20.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:30e590e133b06773f0dc9c3f82e567463df40598b660b5adf53eb1c488202544", size = 154367, upload-time = "2025-09-26T16:28:14.393Z" }, + { url = "https://files.pythonhosted.org/packages/5e/9e/f326d43f6bf47f4e7704a4426c36e044c6bedfd24e072fb8e27589a373a5/simplejson-3.20.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:90d311ba8fcd733a3677e0be21804827226a57144130ba01c3c6a325e887dd86", size = 93530, upload-time = "2025-09-26T16:28:18.07Z" }, + { url = "https://files.pythonhosted.org/packages/7a/4d/30dfef83b9ac48afae1cf1ab19c2867e27b8d22b5d9f8ca7ce5a0a157d8c/simplejson-3.20.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6b1d8d7c3e1a205c49e1aee6ba907dcb8ccea83651e6c3e2cb2062f1e52b0726", size = 75661, upload-time = "2025-09-26T16:28:20.219Z" }, { url = "https://files.pythonhosted.org/packages/09/1d/171009bd35c7099d72ef6afd4bb13527bab469965c968a17d69a203d62a6/simplejson-3.20.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:552f55745044a24c3cb7ec67e54234be56d5d6d0e054f2e4cf4fb3e297429be5", size = 150579, upload-time = "2025-09-26T16:28:21.337Z" }, { url = "https://files.pythonhosted.org/packages/43/f1/b392952200f3393bb06fbc4dd975fc63a6843261705839355560b7264eb2/simplejson-3.20.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:133ae2098a8e162c71da97cdab1f383afdd91373b7ff5fe65169b04167da976b", size = 152598, upload-time = "2025-09-26T16:28:24.962Z" }, { url = "https://files.pythonhosted.org/packages/f4/b4/d6b7279e52a3e9c0fa8c032ce6164e593e8d9cf390698ee981ed0864291b/simplejson-3.20.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7977640af7b7d5e6a852d26622057d428706a550f7f5083e7c4dd010a84d941f", size = 150498, upload-time = "2025-09-26T16:28:26.114Z" }, @@ -894,9 +1595,9 @@ name = "tensorboardx" version = "2.6.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "packaging", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "protobuf", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "numpy", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "packaging", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "protobuf", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/2b/c5/d4cc6e293fb837aaf9f76dd7745476aeba8ef7ef5146c3b3f9ee375fe7a5/tensorboardx-2.6.4.tar.gz", hash = "sha256:b163ccb7798b31100b9f5fa4d6bc22dad362d7065c2f24b51e50731adde86828", size = 4769801, upload-time = "2025-06-10T22:37:07.419Z" } wheels = [ @@ -908,42 +1609,46 @@ name = "tensorstore" version = "0.1.80" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "ml-dtypes", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "numpy", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "ml-dtypes", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "numpy", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/88/18/7b91daa9cf29dbb6bfdd603154f355c9069a9cd8c757038fe52b0f613611/tensorstore-0.1.80.tar.gz", hash = "sha256:4158fe76b96f62d12a37d7868150d836e089b5280b2bdd363c43c5d651f10e26", size = 7090032, upload-time = "2025-12-10T21:35:10.941Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/50/54/59a34fee963e46f9f401c54131bdc6a17d6cfb10e5a094d586d33ae273df/tensorstore-0.1.80-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f8b51d7e685bbb63f6becd7d2ac8634d5ab67ec7e53038e597182e2db2c7aa90", size = 14551674, upload-time = "2025-12-10T21:34:22.171Z" }, { url = "https://files.pythonhosted.org/packages/87/15/0734521f8b648e2c43a00f1bc99a7195646c9e4e31f64ab22a15ac84e75c/tensorstore-0.1.80-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:acb8d52fadcefafef4ef8ecca3fc99b1d0e3c5c5a888766484c3e39f050be7f5", size = 19013402, upload-time = "2025-12-10T21:34:24.961Z" }, { url = "https://files.pythonhosted.org/packages/48/85/55addd16896343ea2731388028945576060139dda3c68a15d6b00158ef6f/tensorstore-0.1.80-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bc28a58c580253a526a4b6d239d18181ef96f1e285a502dbb03ff15eeec07a5b", size = 21007488, upload-time = "2025-12-10T21:34:28.093Z" }, + { url = "https://files.pythonhosted.org/packages/94/03/19f45f6134bbb98d13f8de3160271aa4f49466e1a91000c6ab2eec7d9264/tensorstore-0.1.80-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a92505189731fcb03f1c69a84ea4460abb24204bfac1f339448a0621e7def77c", size = 14551401, upload-time = "2025-12-10T21:34:36.041Z" }, { url = "https://files.pythonhosted.org/packages/f7/fa/d5de3f1b711773e33a329b5fe11de1265b77a13f2a2447fe685ee5d0c1bc/tensorstore-0.1.80-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:de63843706fdfe9565a45567238c5b1e55a0b28bbde6524200b31d29043a9a16", size = 19013246, upload-time = "2025-12-10T21:34:38.507Z" }, { url = "https://files.pythonhosted.org/packages/87/ee/e874b5a495a7aa14817772a91095971f3a965a4cef5b52ad06a8e15c924f/tensorstore-0.1.80-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6c8dbbdd31cbb28eccfb23dbbd4218fe67bfc32e9cb452875a485b81031c949d", size = 21008391, upload-time = "2025-12-10T21:34:41.332Z" }, + { url = "https://files.pythonhosted.org/packages/9c/92/17a18eac2cfdb019c36b4362d1a5c614d769a78d10cad0aae3d368fefa0e/tensorstore-0.1.80-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:189d924eaec394c9331e284a9c513ed583e336472a925823b5151cb26f41d091", size = 14552217, upload-time = "2025-12-10T21:34:48.539Z" }, { url = "https://files.pythonhosted.org/packages/b6/df/71f317633a0cd5270b85d185ac5ce91a749930fc076205d3fae4f1f043ed/tensorstore-0.1.80-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:07e4a84bacf70b78305831897068a9b5ad30326e63bbeb92c4bf7e565fcf5e9e", size = 19020675, upload-time = "2025-12-10T21:34:51.168Z" }, { url = "https://files.pythonhosted.org/packages/2b/35/f03cdb5edf8e009ff73e48c0c3d0f692a70a7ffc5e393f2ea1761eff89b5/tensorstore-0.1.80-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d2b353b0bd53fedd77fc5a12a1c1a91cacc3cf59e3dd785529c5a54b31d1c7b1", size = 21009171, upload-time = "2025-12-10T21:34:53.979Z" }, + { url = "https://files.pythonhosted.org/packages/f7/c0/289b8979a08b477ce0622a6c13a59dbe8cda407e4c82c8b2ab0b4f8d1989/tensorstore-0.1.80-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:8cd11027b5a8b66db8d344085a31a1666c78621dac27039c4d571bc4974804a1", size = 14638072, upload-time = "2025-12-10T21:35:01.598Z" }, { url = "https://files.pythonhosted.org/packages/42/47/5c63024ced48e3f440c131babedef2f5398f48ab81c1aeee6c6193491d1c/tensorstore-0.1.80-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b7c5dd434bba4ee08fe46bbbdb25c60dd3d47ccb4b8561a9751cf1526da52b8", size = 19024739, upload-time = "2025-12-10T21:35:04.324Z" }, { url = "https://files.pythonhosted.org/packages/6e/16/d08ade819949e0622f27e949c15b09f7b86ac18f8ac7c4d8bdfb4a711076/tensorstore-0.1.80-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e93df6d34ff5f0f6be245f4d29b99a7c1eef8ad91b50686adf57a5eeea99cb74", size = 21024449, upload-time = "2025-12-10T21:35:08.149Z" }, ] [[package]] name = "tokamax" -version = "0.0.11" +version = "0.0.12" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "absl-py", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "einshape", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "immutabledict", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "jax", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "jaxlib", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "jaxtyping", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "pydantic", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "qwix", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "tensorboardx", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "tqdm", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "typeguard", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "typing-extensions", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "absl-py", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "einshape", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "immutabledict", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "jax", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "jaxlib", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "jaxtyping", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "pydantic", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "qwix", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "tensorboardx", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "tqdm", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "typeguard", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "typing-extensions", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/77/ef/262ad37c150d98bcf24ce9bed8ff39dd247ba079b85a5522d423475be49a/tokamax-0.0.11.tar.gz", hash = "sha256:bba14f9ec86df573c7993e7e1e809f924417598249afd9d3a459e0ee3135749f", size = 424560, upload-time = "2026-03-09T19:47:17.293Z" } +sdist = { url = "https://files.pythonhosted.org/packages/66/53/b4d83852433afe45d167c56bfc645a46e92a3ce6ad8d93668bc65c379a25/tokamax-0.0.12.tar.gz", hash = "sha256:5c7f4d2f54caed15455c7be5a769e446f760f7b730d41a4a6b916dc9bb423f97", size = 428604, upload-time = "2026-03-19T23:16:18.208Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/bb/61/6b2f5819373b989c975b82c591ca91e7e584e84d17b4487e47c76915b907/tokamax-0.0.11-py3-none-any.whl", hash = "sha256:ba90451944d4badc63a2110b7f183e5cb584375ed68364fc7cd6a98e27d004c3", size = 600218, upload-time = "2026-03-09T19:47:15.731Z" }, + { url = "https://files.pythonhosted.org/packages/d3/5c/c35d4183179b1d5eb96b287a9f7711d617ed0cc8b7066c2497581e5576f6/tokamax-0.0.12-py3-none-any.whl", hash = "sha256:2d60e8602d88a6d5ea64e2432694044e44978d46fc5b829f338a238a9746da03", size = 606602, upload-time = "2026-03-19T23:16:16.664Z" }, ] [[package]] @@ -969,7 +1674,7 @@ name = "treescope" version = "0.1.10" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "numpy", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f0/2a/d13d3c38862632742d2fe2f7ae307c431db06538fd05ca03020d207b5dcc/treescope-0.1.10.tar.gz", hash = "sha256:20f74656f34ab2d8716715013e8163a0da79bdc2554c16d5023172c50d27ea95", size = 138870, upload-time = "2025-08-08T05:43:48.048Z" } wheels = [ @@ -999,13 +1704,22 @@ name = "typing-inspection" version = "0.4.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "typing-extensions", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" }, ] +[[package]] +name = "urllib3" +version = "2.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602, upload-time = "2026-05-07T16:13:18.596Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087, upload-time = "2026-05-07T16:13:17.151Z" }, +] + [[package]] name = "wadler-lindig" version = "0.1.7" @@ -1015,6 +1729,44 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/8d/96/04e7b441807b26b794da5b11e59ed7f83b2cf8af202bd7eba8ad2fa6046e/wadler_lindig-0.1.7-py3-none-any.whl", hash = "sha256:e3ec83835570fd0a9509f969162aeb9c65618f998b1f42918cfc8d45122fe953", size = 20516, upload-time = "2025-06-18T07:00:41.684Z" }, ] +[[package]] +name = "yarl" +version = "1.24.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "multidict", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "propcache", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/79/12/1e8f37460ea0f7eb59c221fdaf0ed75e7ac43e97f8093b9c6f411df50a78/yarl-1.24.2.tar.gz", hash = "sha256:9ac374123c6fd7abf64d1fec93962b0bd4ee2c19751755a762a72dd96c0378f8", size = 210798, upload-time = "2026-05-19T21:31:05.599Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f0/da/866bcb01076ba49d2b42b309867bed3826421f1c479655eb7a607b44f20b/yarl-1.24.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:b975866c184564c827e0877380f0dae57dcca7e52782128381b72feff6dfceb8", size = 129957, upload-time = "2026-05-19T21:28:51.695Z" }, + { url = "https://files.pythonhosted.org/packages/29/b6/170e2b8d4e3bc30e6bfdcca53556537f5bf595e938632dfcb059311f3ff6/yarl-1.24.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8ae44649b00947634ab0dab2a374a638f52923a6e67083f2c156cd5cbd1a881d", size = 91688, upload-time = "2026-05-19T21:28:54.865Z" }, + { url = "https://files.pythonhosted.org/packages/fe/a5/c9f655d5553ea0b99fdac9d6a99ad3f9b3e73b8e5758bb46f58c9831f74c/yarl-1.24.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:507cc19f0b45454e2d6dcd62ff7d062b9f77a2812404e62dbdaec05b50faa035", size = 102902, upload-time = "2026-05-19T21:28:56.963Z" }, + { url = "https://files.pythonhosted.org/packages/7a/da/323a01c349bd5fb01bb6652e314d9bb218cee630a736bdb810ad50e4013f/yarl-1.24.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7e7ebcdef69dec6c6451e616f32b622a6d4a2e92b445c992f7c8e5274a6bbc4c", size = 105612, upload-time = "2026-05-19T21:29:04.247Z" }, + { url = "https://files.pythonhosted.org/packages/41/07/efabe5df87e96d7ad5959760b888344be48cd6884db127b407c6b5503adc/yarl-1.24.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3065657c80a2321225e804048597ad55658a7e76b32d6f5ee4074d04c50401db", size = 102333, upload-time = "2026-05-19T21:29:08.267Z" }, + { url = "https://files.pythonhosted.org/packages/48/2d/1c8d89c7c5f9cad9fb2902445d94e2ab1d7aa35de029afbb8ae95c42d00f/yarl-1.24.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e30dd55825dc554ec5b66a94953b8eda8745926514c5089dfcacecb9c99b5bd1", size = 105719, upload-time = "2026-05-19T21:29:18.367Z" }, + { url = "https://files.pythonhosted.org/packages/82/62/fcf0ce677f17e5c471c06311dd25964be38a4c586993632910d2e75278bc/yarl-1.24.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:491ac9141decf49ee8030199e1ee251cdff0e131f25678817ff6aa5f837a3536", size = 128978, upload-time = "2026-05-19T21:29:23.83Z" }, + { url = "https://files.pythonhosted.org/packages/c1/24/16748d5dab6daec8b0ed81ccec639a1cded0f18dcc62a4f696b4fe366c37/yarl-1.24.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cdfcce633b4a4bb8281913c57fcafd4b5933fbc19111a5e3930bbd299d6102f1", size = 91113, upload-time = "2026-05-19T21:29:26.928Z" }, + { url = "https://files.pythonhosted.org/packages/1b/66/b63fff7b71211e866624b21432d5943cbb633eb0c2872d9ee3070648f22c/yarl-1.24.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:863297ddede92ee49024e9a9b11ecb59f310ca85b60d8537f56bed9bbb5b1986", size = 103899, upload-time = "2026-05-19T21:29:28.842Z" }, + { url = "https://files.pythonhosted.org/packages/df/88/09c28dad91e662ccfaa1b78f1c57badde74fc9d0b23e74aef644750ecd73/yarl-1.24.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:91e72cf093fd833483a97ee648e0c053c7c629f51ff4a0e7edd84f806b0c5617", size = 107012, upload-time = "2026-05-19T21:29:36.216Z" }, + { url = "https://files.pythonhosted.org/packages/8e/9a/000b2b66c0d772a499fc531d21dab92dfeb73b640a12eed6ba89f49bb2d0/yarl-1.24.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e196952aacaf3b232e265ff02980b64d483dc0972bd49bcb061171ff22ac203a", size = 103620, upload-time = "2026-05-19T21:29:40.368Z" }, + { url = "https://files.pythonhosted.org/packages/e7/2c/d6a6c9a61549f7b6c7e6dc6937d195bcf069582b47b7200dcd0e7b256acf/yarl-1.24.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:810e19b685c8c3c5862f6a38160a1f4e4c0916c9390024ec347b6157a45a0992", size = 107362, upload-time = "2026-05-19T21:29:51Z" }, + { url = "https://files.pythonhosted.org/packages/40/0e/e08087695fc12789263821c5dc0f8dc52b5b17efd0887cacf419f8a43ba3/yarl-1.24.2-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:f9312b3c02d9b3d23840f67952913c9c8721d7f1b7db305289faefa878f364c2", size = 129670, upload-time = "2026-05-19T21:29:56.631Z" }, + { url = "https://files.pythonhosted.org/packages/ba/b1/5297bb6a7df4782f7605bffc43b31f5044070935fbbcaa6c705a07e6ac65/yarl-1.24.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0c3063e5c0a8e8e62fae6c2596fa01da1561e4cd1da6fec5789f5cf99a8aefd8", size = 91625, upload-time = "2026-05-19T21:30:00.412Z" }, + { url = "https://files.pythonhosted.org/packages/02/a7/45baabfff76829264e623b185cff0c340d7e11bf3e1cd9ea37e7d17934bd/yarl-1.24.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fecd17873a096036c1c87ab3486f1aef7f269ada7f23f7f856f93b1cc7744f14", size = 104574, upload-time = "2026-05-19T21:30:02.544Z" }, + { url = "https://files.pythonhosted.org/packages/c2/53/d81269aaafccea0d33396c03035de997b743f11e648e6e27a0df99c72980/yarl-1.24.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e51b2cf5ec89a8b8470177641ed62a3ba22d74e1e898e06ad53aa77972487208", size = 107338, upload-time = "2026-05-19T21:30:09.713Z" }, + { url = "https://files.pythonhosted.org/packages/14/18/04a4b5830b43ed5e4c5015b40e9f6241ad91487d71611061b4e111d6ac80/yarl-1.24.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:297a2fe352ecf858b30a98f87948746ec16f001d279f84aebdbd3bd965e2f1bd", size = 104272, upload-time = "2026-05-19T21:30:12.978Z" }, + { url = "https://files.pythonhosted.org/packages/e6/5c/ceea7ba98b65c8eb8d947fdc52f9bedfcd43c6a57c9e3c90c17be8f324a3/yarl-1.24.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ee8e3fb34513e8dc082b586ef4910c98335d43a6fab688cd44d4851bacfce3e8", size = 107589, upload-time = "2026-05-19T21:30:23.412Z" }, + { url = "https://files.pythonhosted.org/packages/9e/13/d5b8e2c8667db955bcb3de233f18798fefe7edf1d7429c2c9d4f9c401114/yarl-1.24.2-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:221ce1dd921ac4f603957f17d7c18c5cc0797fbb52f156941f92e04605d1d67b", size = 136248, upload-time = "2026-05-19T21:30:29.297Z" }, + { url = "https://files.pythonhosted.org/packages/95/b2/845cf2074a015e6fe0d0808cf1a2d9e868386c4220d657ebd8302b199043/yarl-1.24.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c557165320d6244ebe3a02431b2a201a20080e02f41f0cfa0ccc47a183765da8", size = 95272, upload-time = "2026-05-19T21:30:33.062Z" }, + { url = "https://files.pythonhosted.org/packages/fe/16/e69d4aa244aef45235ddfebc0e04036a6829842bc5a6a795aedc6c998d23/yarl-1.24.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:904065e6e85b1fa54d0d87438bd58c14c0bad97aad654ad1077fd9d87e8478ed", size = 101497, upload-time = "2026-05-19T21:30:34.842Z" }, + { url = "https://files.pythonhosted.org/packages/95/47/37cb5ff50c5e825d4d38e81bb04d1b7e96bf960f7ab89f9850b162f3f114/yarl-1.24.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:abb2759733d63a28b4956500a5dd57140f26486c92b2caedfb964ab7d9b79dbf", size = 103010, upload-time = "2026-05-19T21:30:43.985Z" }, + { url = "https://files.pythonhosted.org/packages/b9/d5/c8e86e120521e646013d02a8e3b8884392e28494be8f392366e50d208efc/yarl-1.24.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:86746bef442aa479107fe28132e1277237f9c24c2f00b0b0cf22b3ee0904f2bb", size = 101382, upload-time = "2026-05-19T21:30:48.085Z" }, + { url = "https://files.pythonhosted.org/packages/78/87/deb17b7049bbe74ea11a713b86f8f27800cc1c8648b0b797243ebb4830ba/yarl-1.24.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:7b3a85525f6e7eeabcfdd372862b21ee1915db1b498a04e8bf0e389b607ff0bd", size = 103410, upload-time = "2026-05-19T21:30:57.962Z" }, + { url = "https://files.pythonhosted.org/packages/fd/4d/4b880086bd0d3e034d25647be1d830afc3e3f610e98c4ab3490af6b1b6d5/yarl-1.24.2-py3-none-any.whl", hash = "sha256:2783d9226db8797636cd6896e4de81feed252d1db72265686c9558d97a4d94b9", size = 53576, upload-time = "2026-05-19T21:31:03.909Z" }, +] + [[package]] name = "zipp" version = "3.23.0" @@ -1030,18 +1782,21 @@ version = "0.25.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/fd/aa/3e0508d5a5dd96529cdc5a97011299056e14c6505b678fd58938792794b1/zstandard-0.25.0.tar.gz", hash = "sha256:7713e1179d162cf5c7906da876ec2ccb9c3a9dcbdffef0cc7f70c3667a205f0b", size = 711513, upload-time = "2025-09-14T22:15:54.002Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/aa/1c/d920d64b22f8dd028a8b90e2d756e431a5d86194caa78e3819c7bf53b4b3/zstandard-0.25.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:913cbd31a400febff93b564a23e17c3ed2d56c064006f54efec210d586171c00", size = 640436, upload-time = "2025-09-14T22:16:57.774Z" }, { url = "https://files.pythonhosted.org/packages/1e/15/efef5a2f204a64bdb5571e6161d49f7ef0fffdbca953a615efbec045f60f/zstandard-0.25.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6dffecc361d079bb48d7caef5d673c88c8988d3d33fb74ab95b7ee6da42652ea", size = 5063012, upload-time = "2025-09-14T22:17:01.156Z" }, { url = "https://files.pythonhosted.org/packages/53/60/7be26e610767316c028a2cbedb9a3beabdbe33e2182c373f71a1c0b88f36/zstandard-0.25.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5a56ba0db2d244117ed744dfa8f6f5b366e14148e00de44723413b2f3938a902", size = 5546993, upload-time = "2025-09-14T22:17:06.781Z" }, { url = "https://files.pythonhosted.org/packages/85/c7/3483ad9ff0662623f3648479b0380d2de5510abf00990468c286c6b04017/zstandard-0.25.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:10ef2a79ab8e2974e2075fb984e5b9806c64134810fac21576f0668e7ea19f8f", size = 5046806, upload-time = "2025-09-14T22:17:08.415Z" }, { url = "https://files.pythonhosted.org/packages/08/b3/206883dd25b8d1591a1caa44b54c2aad84badccf2f1de9e2d60a446f9a25/zstandard-0.25.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aaf21ba8fb76d102b696781bddaa0954b782536446083ae3fdaa6f16b25a1c4b", size = 5576659, upload-time = "2025-09-14T22:17:10.164Z" }, { url = "https://files.pythonhosted.org/packages/9d/31/76c0779101453e6c117b0ff22565865c54f48f8bd807df2b00c2c404b8e0/zstandard-0.25.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1869da9571d5e94a85a5e8d57e4e8807b175c9e4a6294e3b66fa4efb074d90f6", size = 4953933, upload-time = "2025-09-14T22:17:11.857Z" }, { url = "https://files.pythonhosted.org/packages/fc/5f/75aafd4b9d11b5407b641b8e41a57864097663699f23e9ad4dbb91dc6bfe/zstandard-0.25.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:474d2596a2dbc241a556e965fb76002c1ce655445e4e3bf38e5477d413165ffa", size = 5360237, upload-time = "2025-09-14T22:17:19.954Z" }, + { url = "https://files.pythonhosted.org/packages/3f/06/9ae96a3e5dcfd119377ba33d4c42a7d89da1efabd5cb3e366b156c45ff4d/zstandard-0.25.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a1a4ae2dec3993a32247995bdfe367fc3266da832d82f8438c8570f989753de1", size = 640440, upload-time = "2025-09-14T22:17:27.366Z" }, { url = "https://files.pythonhosted.org/packages/6d/db/ddb11011826ed7db9d0e485d13df79b58586bfdec56e5c84a928a9a78c1c/zstandard-0.25.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:bfc4e20784722098822e3eee42b8e576b379ed72cca4a7cb856ae733e62192ea", size = 5063001, upload-time = "2025-09-14T22:17:31.044Z" }, { url = "https://files.pythonhosted.org/packages/63/4b/e3678b4e776db00f9f7b2fe58e547e8928ef32727d7a1ff01dea010f3f13/zstandard-0.25.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8e735494da3db08694d26480f1493ad2cf86e99bdd53e8e9771b2752a5c0246a", size = 5547173, upload-time = "2025-09-14T22:17:36.084Z" }, { url = "https://files.pythonhosted.org/packages/4e/d5/ba05ed95c6b8ec30bd468dfeab20589f2cf709b5c940483e31d991f2ca58/zstandard-0.25.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3a39c94ad7866160a4a46d772e43311a743c316942037671beb264e395bdd611", size = 5046736, upload-time = "2025-09-14T22:17:37.891Z" }, { url = "https://files.pythonhosted.org/packages/50/d5/870aa06b3a76c73eced65c044b92286a3c4e00554005ff51962deef28e28/zstandard-0.25.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:172de1f06947577d3a3005416977cce6168f2261284c02080e7ad0185faeced3", size = 5576368, upload-time = "2025-09-14T22:17:40.206Z" }, { url = "https://files.pythonhosted.org/packages/5d/35/398dc2ffc89d304d59bc12f0fdd931b4ce455bddf7038a0a67733a25f550/zstandard-0.25.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3c83b0188c852a47cd13ef3bf9209fb0a77fa5374958b8c53aaa699398c6bd7b", size = 4954022, upload-time = "2025-09-14T22:17:41.879Z" }, { url = "https://files.pythonhosted.org/packages/b2/e5/fbd822d5c6f427cf158316d012c5a12f233473c2f9c5fe5ab1ae5d21f3d8/zstandard-0.25.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f187a0bb61b35119d1926aee039524d1f93aaf38a9916b8c4b78ac8514a0aaf", size = 5360113, upload-time = "2025-09-14T22:17:48.893Z" }, + { url = "https://files.pythonhosted.org/packages/8d/09/d0a2a14fc3439c5f874042dca72a79c70a532090b7ba0003be73fee37ae2/zstandard-0.25.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:05df5136bc5a011f33cd25bc9f506e7426c0c9b3f9954f056831ce68f3b6689f", size = 640658, upload-time = "2025-09-14T22:17:55.423Z" }, { url = "https://files.pythonhosted.org/packages/a4/86/a48e56320d0a17189ab7a42645387334fba2200e904ee47fc5a26c1fd8ca/zstandard-0.25.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:223415140608d0f0da010499eaa8ccdb9af210a543fac54bce15babbcfc78439", size = 5058095, upload-time = "2025-09-14T22:17:59.498Z" }, { url = "https://files.pythonhosted.org/packages/31/dc/cc50210e11e465c975462439a492516a73300ab8caa8f5e0902544fd748b/zstandard-0.25.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e09bb6252b6476d8d56100e8147b803befa9a12cea144bbe629dd508800d1ad0", size = 5560402, upload-time = "2025-09-14T22:18:05.954Z" }, { url = "https://files.pythonhosted.org/packages/c9/ae/56523ae9c142f0c08efd5e868a6da613ae76614eca1305259c3bf6a0ed43/zstandard-0.25.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a9ec8c642d1ec73287ae3e726792dd86c96f5681eb8df274a757bf62b750eae7", size = 4955108, upload-time = "2025-09-14T22:18:07.68Z" },