From ea54da7e6e0df0acef7a5b593e5c71e1026748a9 Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Tue, 26 Mar 2024 10:52:53 +0000 Subject: [PATCH 01/42] add plink converyt function, faff around with some tests --- malariagen_data/anoph/test-1.ipynb | 237 +++++++ malariagen_data/anoph/to_plink.py | 203 ++++++ malariagen_data/anopheles.py | 2 + malariagen_data/util.py | 6 +- notebooks/plink_convert.ipynb | 972 +++++++++++++++++++++++++++++ tests/anoph/test_snp_data.py | 1 + 6 files changed, 1419 insertions(+), 2 deletions(-) create mode 100644 malariagen_data/anoph/test-1.ipynb create mode 100644 malariagen_data/anoph/to_plink.py create mode 100644 notebooks/plink_convert.ipynb diff --git a/malariagen_data/anoph/test-1.ipynb b/malariagen_data/anoph/test-1.ipynb new file mode 100644 index 000000000..cac9d8fdb --- /dev/null +++ b/malariagen_data/anoph/test-1.ipynb @@ -0,0 +1,237 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'base_params' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[1], line 162\u001b[0m\n\u001b[1;32m 140\u001b[0m bed_reader\u001b[38;5;241m.\u001b[39mto_bed(\n\u001b[1;32m 141\u001b[0m filepath\u001b[38;5;241m=\u001b[39mbed_file_path,\n\u001b[1;32m 142\u001b[0m val\u001b[38;5;241m=\u001b[39mval,\n\u001b[1;32m 143\u001b[0m properties\u001b[38;5;241m=\u001b[39mproperties,\n\u001b[1;32m 144\u001b[0m count_A1\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m,\n\u001b[1;32m 145\u001b[0m )\n\u001b[1;32m 147\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m plink_file_path\n\u001b[1;32m 149\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mbiallelic_snps_to_plink\u001b[39m(\n\u001b[1;32m 150\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 151\u001b[0m results_dir,\n\u001b[1;32m 152\u001b[0m region: base_params\u001b[38;5;241m.\u001b[39mregions,\n\u001b[1;32m 153\u001b[0m n_snps: base_params\u001b[38;5;241m.\u001b[39mn_snps,\n\u001b[1;32m 154\u001b[0m thin_offset: base_params\u001b[38;5;241m.\u001b[39mthin_offset \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m,\n\u001b[1;32m 155\u001b[0m sample_sets: Optional[base_params\u001b[38;5;241m.\u001b[39msample_sets] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 156\u001b[0m sample_query: Optional[base_params\u001b[38;5;241m.\u001b[39msample_query] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 157\u001b[0m sample_indices: Optional[base_params\u001b[38;5;241m.\u001b[39msample_indices] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 158\u001b[0m site_mask: Optional[base_params\u001b[38;5;241m.\u001b[39msite_mask] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 159\u001b[0m min_minor_ac: Optional[base_params\u001b[38;5;241m.\u001b[39mmin_minor_ac] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 160\u001b[0m max_missing_an: Optional[base_params\u001b[38;5;241m.\u001b[39mmax_missing_an] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 161\u001b[0m random_seed: base_params\u001b[38;5;241m.\u001b[39mrandom_seed \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m42\u001b[39m,\n\u001b[0;32m--> 162\u001b[0m inline_array: base_params\u001b[38;5;241m.\u001b[39minline_array \u001b[38;5;241m=\u001b[39m \u001b[43mbase_params\u001b[49m\u001b[38;5;241m.\u001b[39minline_array_default,\n\u001b[1;32m 163\u001b[0m chunks: base_params\u001b[38;5;241m.\u001b[39mchunks \u001b[38;5;241m=\u001b[39m base_params\u001b[38;5;241m.\u001b[39mchunks_default,\n\u001b[1;32m 164\u001b[0m ):\n\u001b[1;32m 166\u001b[0m params \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mdict\u001b[39m(\n\u001b[1;32m 167\u001b[0m results_dir\u001b[38;5;241m=\u001b[39mresults_dir,\n\u001b[1;32m 168\u001b[0m region\u001b[38;5;241m=\u001b[39mregion,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 177\u001b[0m random_seed\u001b[38;5;241m=\u001b[39mrandom_seed,\n\u001b[1;32m 178\u001b[0m )\n\u001b[1;32m 179\u001b[0m \u001b[38;5;66;03m#for the sake of getting this going \u001b[39;00m\n\u001b[1;32m 180\u001b[0m \u001b[38;5;66;03m#and also because i expect sanjay and ali will rework most of this, i will forgo the type checks until later\u001b[39;00m\n", + "\u001b[0;31mNameError\u001b[0m: name 'base_params' is not defined" + ] + } + ], + "source": [ + "import malariagen_data\n", + "from collections import Counter\n", + "from typing import Optional, Tuple\n", + "\n", + "import allel # type: ignore\n", + "import numpy as np\n", + "import os\n", + "import bed_reader\n", + "from dask.diagnostics import ProgressBar\n", + "# import bokeh.plotting\n", + "\n", + "#from .snp_data import AnophelesSnpData\n", + "#from ..util import hash_columns, check_types, CacheMiss\n", + "#from . import base_params\n", + "#from .base_params import DEFAULT\n", + "\n", + "def _create_plink_outfile(\n", + " self,\n", + " *,\n", + " results_dir,\n", + " region,\n", + " n_snps,\n", + " min_minor_ac,\n", + " thin_offset,\n", + " max_missing_an,\n", + "):\n", + " return f\"{results_dir}/{region}.{n_snps}.{min_minor_ac}.{thin_offset}.{max_missing_an}\"\n", + "\n", + "def _biallelic_snps_to_plink(\n", + " #_ means internal function\n", + " #loads biallelic diplotypes and selects segregating sites among them, converts to plink\n", + " self,\n", + " *,\n", + " results_dir,\n", + " region,\n", + " n_snps,\n", + " thin_offset,\n", + " sample_sets,\n", + " sample_query,\n", + " sample_indices,\n", + " site_mask,\n", + " min_minor_ac,\n", + " max_missing_an,\n", + " random_seed,\n", + " inline_array,\n", + " chunks,\n", + "):\n", + " \n", + " #first define output file\n", + " plink_file_path = self._create_plink_outfile(\n", + " results_dir=results_dir,\n", + " region=region,\n", + " n_snps=n_snps,\n", + " thin_offset=thin_offset,\n", + " min_minor_ac=min_minor_ac,\n", + " max_missing_an=max_missing_an,\n", + " )\n", + "\n", + " bed_file_path = f\"{plink_file_path}.bed\"\n", + " if os.path.exists(bed_file_path):\n", + " return plink_file_path\n", + "\n", + " #get snps\n", + " ds_snps = self.biallelic_snp_calls(\n", + " n_snps=n_snps,\n", + " region=region,\n", + " thin_offset=thin_offset,\n", + " sample_sets=sample_sets,\n", + " sample_query=sample_query,\n", + " sample_indices=sample_indices,\n", + " site_mask=site_mask,\n", + " min_minor_ac=min_minor_ac,\n", + " max_missing_an=max_missing_an,\n", + " random_seed=random_seed,\n", + " inline_array=inline_array,\n", + " chunks=chunks,\n", + " )\n", + "\n", + "\n", + " #filter snps on segregating sites\n", + " with self._spinner(\"Subsetting to segregating sites\"):\n", + " gt = ds_snps[\"call_genotype\"].data.compute()\n", + " print(\"count alleles\")\n", + " with ProgressBar():\n", + " ac = allel.GenotypeArray(gt).count_alleles(max_allele=3)\n", + " print(\"ascertain segregating sites\")\n", + " n_chroms = ds_snps.dims[\"samples\"] * 2\n", + " an_called = ac.sum(axis=1)\n", + " an_missing = n_chroms - an_called\n", + " min_ref_ac = min_minor_ac\n", + " max_ref_ac = n_chroms - min_minor_ac\n", + " # here we choose segregating sites\n", + " loc_sites = (\n", + " (ac[:, 0] >= min_ref_ac)\n", + " & (ac[:, 0] <= max_ref_ac)\n", + " & (an_missing <= max_missing_an)\n", + " )\n", + " print(f\"ascertained {np.count_nonzero(loc_sites):,} sites\")\n", + "\n", + "\n", + " #set up dataset with required vars for plink conversion\n", + " print(\"Set up dataset\")\n", + " ds_snps_asc = (\n", + " ds_snps[[\"variant_contig\", \"variant_position\", \"variant_allele\", \"sample_id\", \"call_genotype\"]]\n", + " .isel(alleles=slice(0, 2))\n", + " .sel(variants=loc_sites)\n", + " )\n", + "\n", + " #compute gt ref counts\n", + " with self._spinner(\"Computing genotype ref counts\"):\n", + " gn_ref = allel.GenotypeDaskArray(gt).to_n_ref(fill=-127) #what does the fill do\n", + " with ProgressBar():\n", + " gn_ref = gn_ref.compute()\n", + "\n", + " print(\"Ensure genotypes vary\")\n", + " loc_var = np.any(gn_ref != gn_ref[:, 0, np.newaxis], axis=1)\n", + " print(f\"final no. variants {np.count_nonzero(loc_var)}\")\n", + "\n", + "\n", + " print(\"Load final data\")\n", + " with ProgressBar():\n", + " ds_snps_final = (\n", + " ds_snps_asc[[\"variant_contig\", \"variant_position\", \"variant_allele\", \"sample_id\"]]\n", + " .isel(variants=loc_var)\n", + " )\n", + "\n", + " #init vars for input to bed reader\n", + " gn_ref_final = gn_ref[loc_var]\n", + " val = gn_ref_final.T\n", + " alleles = ds_snps_final[\"variant_allele\"].values\n", + " properties = {\n", + " \"iid\": ds_snps_final[\"sample_id\"].values,\n", + " \"chromosome\": ds_snps_final[\"variant_contig\"].values,\n", + " \"bp_position\": ds_snps_final[\"variant_position\"].values,\n", + " \"allele_1\": alleles[:, 0],\n", + " \"allele_2\": alleles[:, 1],\n", + " }\n", + "\n", + " print(f\"write plink files to {plink_file_path}\")\n", + " bed_reader.to_bed(\n", + " filepath=bed_file_path,\n", + " val=val,\n", + " properties=properties,\n", + " count_A1=True,\n", + " )\n", + "\n", + " return plink_file_path\n", + "\n", + "def biallelic_snps_to_plink(\n", + " self,\n", + " results_dir,\n", + " region: base_params.regions,\n", + " n_snps: base_params.n_snps,\n", + " thin_offset = 0,\n", + " sample_sets: Optional[base_params.sample_sets] = None,\n", + " sample_query: Optional[base_params.sample_query] = None,\n", + " sample_indices: Optional[base_params.sample_indices] = None,\n", + " site_mask: Optional[base_params.site_mask] = None,\n", + " min_minor_ac: Optional[base_params.min_minor_ac] = None,\n", + " max_missing_an: Optional[base_params.max_missing_an] = None,\n", + " random_seed: base_params.random_seed = 42,\n", + " inline_array: base_params.inline_array = base_params.inline_array_default,\n", + " chunks: base_params.chunks = base_params.chunks_default,\n", + "):\n", + " \n", + " params = dict(\n", + " results_dir=results_dir,\n", + " region=region,\n", + " n_snps=n_snps,\n", + " thin_offset=thin_offset,\n", + " sample_sets=sample_sets,\n", + " sample_query=sample_query,\n", + " sample_indices=sample_indices,\n", + " site_mask=site_mask,\n", + " min_minor_ac=min_minor_ac,\n", + " max_missing_an=max_missing_an,\n", + " random_seed=random_seed,\n", + " )\n", + " #for the sake of getting this going \n", + " #and also because i expect sanjay and ali will rework most of this, i will forgo the type checks until later\n", + "\n", + " filepath = self._biallelic_snps_to_plink(\n", + " inline_array=inline_array, chunks=chunks, **params\n", + " )\n", + " return filepath" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "malariagen_plink", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.10" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/malariagen_data/anoph/to_plink.py b/malariagen_data/anoph/to_plink.py new file mode 100644 index 000000000..0537af25c --- /dev/null +++ b/malariagen_data/anoph/to_plink.py @@ -0,0 +1,203 @@ +from typing import Optional + +import allel # type: ignore +import numpy as np +import os +import bed_reader +from dask.diagnostics import ProgressBar +# import bokeh.plotting + +from .snp_data import AnophelesSnpData +from . import base_params + + +# So far all of this has been copied from Sanjay's g123 notebook as it loads snp data with some optional filters. +class PlinkConverter( + # ADMIXTURE is the main reason I want to convert malaariagen SNP data to PLINK format, and it uses genotype data. + AnophelesSnpData, +): + def __init__( + self, + **kwargs, + ): + # N.B., this class is designed to work cooperatively, and + # so it's important that any remaining parameters are passed + # to the superclass constructor. + super().__init__(**kwargs) + + def _create_plink_outfile( + self, + *, + results_dir, + region, + n_snps, + min_minor_ac, + thin_offset, + max_missing_an, + ): + return f"{results_dir}/{region}.{n_snps}.{min_minor_ac}.{thin_offset}.{max_missing_an}" + + def _biallelic_snps_to_plink( + # _ means internal function + # loads biallelic diplotypes and selects segregating sites among them, converts to plink + self, + *, + results_dir, + region, + n_snps, + thin_offset, + sample_sets, + sample_query, + sample_indices, + site_mask, + min_minor_ac, + max_missing_an, + random_seed, + inline_array, + chunks, + ): + # first define output file + plink_file_path = self._create_plink_outfile( + results_dir=results_dir, + region=region, + n_snps=n_snps, + thin_offset=thin_offset, + min_minor_ac=min_minor_ac, + max_missing_an=max_missing_an, + ) + + bed_file_path = f"{plink_file_path}.bed" + if os.path.exists(bed_file_path): + return plink_file_path + + # get snps + ds_snps = self.snp_calls( + region=region, + sample_sets=sample_sets, + sample_query=sample_query, + sample_indices=sample_indices, + site_mask=site_mask, + # min_minor_ac=min_minor_ac, + # max_missing_an=max_missing_an, + random_seed=random_seed, + inline_array=inline_array, + chunks=chunks, + ) + + # filter snps on segregating sites + with self._spinner("Subsetting to segregating sites"): + gt = ds_snps["call_genotype"].data.compute() + print("count alleles") + with ProgressBar(): + ac = allel.GenotypeArray(gt).count_alleles(max_allele=3) + print("ascertain segregating sites") + n_chroms = ds_snps.dims["samples"] * 2 + an_called = ac.sum(axis=1) + an_missing = n_chroms - an_called + min_ref_ac = min_minor_ac + max_ref_ac = n_chroms - min_minor_ac + # here we choose segregating sites + loc_sites = ( # put in is_biallelic + (ac[:, 0] >= min_ref_ac) + & (ac[:, 0] <= max_ref_ac) + & (an_missing <= max_missing_an) + ) + print(f"ascertained {np.count_nonzero(loc_sites):,} sites") + + print("thin sites") + ix_sites = np.nonzero(loc_sites)[0] + thin_step = max(ix_sites.shape[0] // n_snps, 1) + ix_sites_thinned = ix_sites[thin_offset::thin_step] + print(f"thinned to {np.count_nonzero(ix_sites_thinned):,} sites") + + # set up dataset with required vars for plink conversion + print("Set up dataset") + ds_snps_asc = ( + ds_snps[ + [ + "variant_contig", + "variant_position", + "variant_allele", + "sample_id", + "call_genotype", + ] + ] + .isel(alleles=slice(0, 2)) + .sel(variants=ix_sites_thinned) + ) + + # compute gt ref counts + with self._spinner("Computing genotype ref counts"): + gt_asc = ds_snps_asc["call_genotype"].data.compute() + gn_ref = allel.GenotypeDaskArray(gt_asc).to_n_ref(fill=-127) + with ProgressBar(): + gn_ref = gn_ref.compute() + + print("Ensure genotypes vary") + loc_var = np.any(gn_ref != gn_ref[:, 0, np.newaxis], axis=1) + print(f"final no. variants {np.count_nonzero(loc_var)}") + + print("Load final data") + with ProgressBar(): + ds_snps_final = ds_snps_asc[ + ["variant_contig", "variant_position", "variant_allele", "sample_id"] + ].isel(variants=loc_var) + + # init vars for input to bed reader + gn_ref_final = gn_ref[loc_var] + val = gn_ref_final.T + alleles = ds_snps_final["variant_allele"].values + properties = { + "iid": ds_snps_final["sample_id"].values, + "chromosome": ds_snps_final["variant_contig"].values, + "bp_position": ds_snps_final["variant_position"].values, + "allele_1": alleles[:, 0], + "allele_2": alleles[:, 1], + } + + print(f"write plink files to {plink_file_path}") + bed_reader.to_bed( + filepath=bed_file_path, + val=val, + properties=properties, + count_A1=True, + ) + + return plink_file_path + + def biallelic_snps_to_plink( + self, + results_dir, + region: base_params.regions, + n_snps: base_params.n_snps, + thin_offset: base_params.thin_offset = 0, + sample_sets: Optional[base_params.sample_sets] = None, + sample_query: Optional[base_params.sample_query] = None, + sample_indices: Optional[base_params.sample_indices] = None, + site_mask: Optional[base_params.site_mask] = None, + min_minor_ac: Optional[base_params.min_minor_ac] = 0, + max_missing_an: Optional[base_params.max_missing_an] = 0, + random_seed: base_params.random_seed = 42, + inline_array: base_params.inline_array = base_params.inline_array_default, + chunks: base_params.chunks = base_params.chunks_default, + ): + params = dict( + results_dir=results_dir, + region=region, + n_snps=n_snps, + thin_offset=thin_offset, + sample_sets=sample_sets, + sample_query=sample_query, + sample_indices=sample_indices, + site_mask=site_mask, + min_minor_ac=min_minor_ac, + max_missing_an=max_missing_an, + random_seed=random_seed, + ) + # for the sake of getting this going + # and also because i expect sanjay and ali will rework most of this, i will forgo the type checks until later + + filepath = self._biallelic_snps_to_plink( + inline_array=inline_array, chunks=chunks, **params + ) + return filepath diff --git a/malariagen_data/anopheles.py b/malariagen_data/anopheles.py index 1962031e8..c5da16e79 100644 --- a/malariagen_data/anopheles.py +++ b/malariagen_data/anopheles.py @@ -49,6 +49,7 @@ from .anoph.pca import AnophelesPca from .anoph.sample_metadata import AnophelesSampleMetadata, locate_cohorts from .anoph.snp_data import AnophelesSnpData +from .anoph.to_plink import PlinkConverter from .anoph.g123 import AnophelesG123Analysis from .anoph.fst import AnophelesFstAnalysis from .anoph.h12 import AnophelesH12Analysis @@ -105,6 +106,7 @@ class AnophelesDataResource( AnophelesG123Analysis, AnophelesFstAnalysis, AnophelesSnpFrequencyAnalysis, + PlinkConverter, AnophelesPca, AnophelesIgv, AnophelesCnvData, diff --git a/malariagen_data/util.py b/malariagen_data/util.py index 35360c29e..886d67d89 100644 --- a/malariagen_data/util.py +++ b/malariagen_data/util.py @@ -1267,7 +1267,7 @@ def trim_alleles(ac): return mapping -@numba.njit +@numba.njit # if using debugger remove this decorator def apply_allele_mapping(x, mapping, max_allele): """Transform an array x, where the columns correspond to alleles, according to an allele mapping. @@ -1279,7 +1279,9 @@ def apply_allele_mapping(x, mapping, max_allele): n_sites = x.shape[0] n_alleles = x.shape[1] assert mapping.shape[0] == n_sites - assert mapping.shape[1] == n_alleles + assert ( + mapping.shape[1] == n_alleles + ) # these are not the same, work out what's going on - try running code with debugger? or print statementsd # Create output array. out = np.empty(shape=(n_sites, max_allele + 1), dtype=x.dtype) diff --git a/notebooks/plink_convert.ipynb b/notebooks/plink_convert.ipynb new file mode 100644 index 000000000..a3201ccab --- /dev/null +++ b/notebooks/plink_convert.ipynb @@ -0,0 +1,972 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import malariagen_data\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "application/javascript": "(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\nconst JS_MIME_TYPE = 'application/javascript';\n const HTML_MIME_TYPE = 'text/html';\n const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n const CLASS_NAME = 'output_bokeh rendered_html';\n\n /**\n * Render data to the DOM node\n */\n function render(props, node) {\n const script = document.createElement(\"script\");\n node.appendChild(script);\n }\n\n /**\n * Handle when an output is cleared or removed\n */\n function handleClearOutput(event, handle) {\n const cell = handle.cell;\n\n const id = cell.output_area._bokeh_element_id;\n const server_id = cell.output_area._bokeh_server_id;\n // Clean up Bokeh references\n if (id != null && id in Bokeh.index) {\n Bokeh.index[id].model.document.clear();\n delete Bokeh.index[id];\n }\n\n if (server_id !== undefined) {\n // Clean up Bokeh references\n const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n cell.notebook.kernel.execute(cmd_clean, {\n iopub: {\n output: function(msg) {\n const id = msg.content.text.trim();\n if (id in Bokeh.index) {\n Bokeh.index[id].model.document.clear();\n delete Bokeh.index[id];\n }\n }\n }\n });\n // Destroy server and session\n const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n cell.notebook.kernel.execute(cmd_destroy);\n }\n }\n\n /**\n * Handle when a new output is added\n */\n function handleAddOutput(event, handle) {\n const output_area = handle.output_area;\n const output = handle.output;\n\n // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n return\n }\n\n const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n\n if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n // store reference to embed id on output_area\n output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n }\n if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n const bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n const script_attrs = bk_div.children[0].attributes;\n for (let i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n }\n\n function register_renderer(events, OutputArea) {\n\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n const toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[toinsert.length - 1]);\n element.append(toinsert);\n return toinsert\n }\n\n /* Handle when an output is cleared or removed */\n events.on('clear_output.CodeCell', handleClearOutput);\n events.on('delete.Cell', handleClearOutput);\n\n /* Handle when a new output is added */\n events.on('output_added.OutputArea', handleAddOutput);\n\n /**\n * Register the mime type and append_mime function with output_area\n */\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n /* Is output safe? */\n safe: true,\n /* Index of renderer in `output_area.display_order` */\n index: 0\n });\n }\n\n // register the mime type if in Jupyter Notebook environment and previously unregistered\n if (root.Jupyter !== undefined) {\n const events = require('base/js/events');\n const OutputArea = require('notebook/js/outputarea').OutputArea;\n\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n }\n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"
\\n\"+\n \"

\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

\\n\"+\n \"\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
\"}};\n\n function display_loaded() {\n const el = document.getElementById(null);\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.1.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.1.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.1.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.1.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-3.1.1.min.js\"];\n const css_urls = [];\n\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {\n }\n ];\n\n function run_inline_js() {\n if (root.Bokeh !== undefined || force === true) {\n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(null)).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));", + "application/vnd.bokehjs_load.v0+json": "" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ag3 = malariagen_data.Ag3(pre=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Subsetting to segregating sites: ⠏ (0:00:01.62) count alleles\n", + "Subsetting to segregating sites: ⠴ (0:00:02.14) ascertain segregating sites\n", + "Subsetting to segregating sites: ⠦ (0:00:02.22) ascertained 1,089,159 sites\n", + "thin sites \n", + "thinned to 2,002 sites\n", + "Set up dataset\n", + "[########################################] | 100% Completed | 103.94 ms\n", + "Ensure genotypes vary \n", + "final no. variants 138\n", + "Load final data\n", + "write plink files to /Users/dennistpw/Projects/malariagen-data-python//2L:100000-2000000.2000.0.0.0\n" + ] + }, + { + "data": { + "text/plain": [ + "'/Users/dennistpw/Projects/malariagen-data-python//2L:100000-2000000.2000.0.0.0'" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ag3.biallelic_snps_to_plink(results_dir='/Users/dennistpw/Projects/malariagen-data-python/',\n", + " region='2L:100000-2000000',\n", + " n_snps=2000,\n", + " sample_sets='AG1000G-AO',\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "from collections import Counter\n", + "from typing import Optional, Tuple\n", + "\n", + "import allel # type: ignore\n", + "import numpy as np\n", + "import os\n", + "#import bed_reader\n", + "from dask.diagnostics import ProgressBar\n", + "# import bokeh.plotting\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "import allel\n", + "region='2L:100000-2000000'\n", + "n_snps=2000\n", + "sample_sets='AG1000G-AO'\n", + "ds_snps = ag3.snp_calls(\n", + " sample_sets='AG1000G-AO',\n", + " region=region)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray 'variant_allele' (variants: 1677564, alleles: 4)>\n",
+       "array([[b'C', b'A', b'T', b'G'],\n",
+       "       [b'G', b'A', b'C', b'T'],\n",
+       "       [b'C', b'A', b'T', b'G'],\n",
+       "       ...,\n",
+       "       [b'A', b'C', b'T', b'G'],\n",
+       "       [b'A', b'C', b'T', b'G'],\n",
+       "       [b'A', b'C', b'T', b'G']], dtype='|S1')\n",
+       "Coordinates:\n",
+       "    variant_position  (variants) int32 100000 100001 100002 ... 1999999 2000000\n",
+       "    variant_contig    (variants) uint8 1 1 1 1 1 1 1 1 1 1 ... 1 1 1 1 1 1 1 1 1\n",
+       "Dimensions without coordinates: variants, alleles
" + ], + "text/plain": [ + "\n", + "array([[b'C', b'A', b'T', b'G'],\n", + " [b'G', b'A', b'C', b'T'],\n", + " [b'C', b'A', b'T', b'G'],\n", + " ...,\n", + " [b'A', b'C', b'T', b'G'],\n", + " [b'A', b'C', b'T', b'G'],\n", + " [b'A', b'C', b'T', b'G']], dtype='|S1')\n", + "Coordinates:\n", + " variant_position (variants) int32 100000 100001 100002 ... 1999999 2000000\n", + " variant_contig (variants) uint8 1 1 1 1 1 1 1 1 1 1 ... 1 1 1 1 1 1 1 1 1\n", + "Dimensions without coordinates: variants, alleles" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ds_snps['variant_allele'].compute()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "count alleles\n", + "ascertain segregating sites\n", + "ascertained 1,089,159 sites\n" + ] + } + ], + "source": [ + "gt = ds_snps[\"call_genotype\"].data.compute()\n", + "print(\"count alleles\")\n", + "with ProgressBar():\n", + " ac = allel.GenotypeArray(gt).count_alleles(max_allele=3)\n", + " print(\"ascertain segregating sites\")\n", + " n_chroms = ds_snps.dims[\"samples\"] * 2\n", + " an_called = ac.sum(axis=1)\n", + " an_missing = n_chroms - an_called\n", + " min_ref_ac = 0\n", + " max_ref_ac = n_chroms - 0\n", + " # here we choose segregating sites\n", + " loc_sites = (\n", + " (ac[:, 0] >= min_ref_ac)\n", + " & (ac[:, 0] <= max_ref_ac)\n", + " & (an_missing <= 0)\n", + " )\n", + "print(f\"ascertained {np.count_nonzero(loc_sites):,} sites\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Set up dataset\n", + "[########################################] | 100% Completed | 698.99 ms\n", + "Ensure genotypes vary\n", + "final no. variants 67780\n", + "Load final data\n" + ] + } + ], + "source": [ + "#set up dataset with required vars for plink conversion\n", + "print(\"Set up dataset\")\n", + "ds_snps_asc = (\n", + " ds_snps[[\"variant_contig\", \"variant_position\", \"variant_allele\", \"sample_id\", \"call_genotype\"]]\n", + " .isel(alleles=slice(0, 2))\n", + " .sel(variants=loc_sites)\n", + " )\n", + "\n", + "#compute gt ref counts\n", + "gt_asc = ds_snps_asc[\"call_genotype\"].data.compute()\n", + "gn_ref = allel.GenotypeDaskArray(gt_asc).to_n_ref(fill=-127) #what does the fill do\n", + "with ProgressBar():\n", + " gn_ref = gn_ref.compute()\n", + "\n", + "print(\"Ensure genotypes vary\")\n", + "loc_var = np.any(gn_ref != gn_ref[:, 0, np.newaxis], axis=1)\n", + "print(f\"final no. variants {np.count_nonzero(loc_var)}\")\n", + "\n", + "\n", + "print(\"Load final data\")\n", + "with ProgressBar():\n", + " ds_snps_final = (\n", + " ds_snps_asc[[\"variant_contig\", \"variant_position\", \"variant_allele\", \"sample_id\"]]\n", + " .isel(variants=loc_var)\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [], + "source": [ + "def apply_allele_mapping(x, mapping, max_allele):\n", + " \"\"\"Transform an array x, where the columns correspond to alleles,\n", + " according to an allele mapping.\n", + "\n", + " Values from columns in x will be move to different columns in the\n", + " output according to the allele index mapping given.\n", + "\n", + " \"\"\"\n", + " n_sites = x.shape[0]\n", + " n_alleles = x.shape[1]\n", + " assert mapping.shape[0] == n_sites\n", + " assert mapping.shape[1] == n_alleles\n", + "\n", + " # Create output array.\n", + " out = np.empty(shape=(n_sites, max_allele + 1), dtype=x.dtype)\n", + "\n", + " # Iterate over sites.\n", + " for i in range(n_sites):\n", + " # Iterate over alleles.\n", + " for allele_index in range(n_alleles):\n", + " # Find the new index for this allele.\n", + " new_allele_index = mapping[i, allele_index]\n", + "\n", + " # Copy data to the new allele index.\n", + " if new_allele_index >= 0 and new_allele_index <= max_allele:\n", + " out[i, new_allele_index] = x[i, allele_index]\n", + "\n", + " return out\n", + "\n", + "def trim_alleles(ac):\n", + " \"\"\"Remap allele indices to trim out unobserved alleles.\n", + "\n", + " The idea here is that our SNP data includes alleles which\n", + " may not ever be observed, or may not be observed within a\n", + " particular subset of the data. For convenience, it is useful\n", + " to retain only alleles which are observed.\n", + "\n", + " Here we use a given set of allele counts (ac) to identify\n", + " observed alleles and derive a mapping from old allele\n", + " indices to a new set of allele indices.\n", + "\n", + " For example, if alleles 0 and 2 are observed at a given\n", + " site in ac, then 0 will be mapped to 0 and 2 will be mapped\n", + " to 1.\n", + "\n", + " Similarly, if alleles 1 and 3 are observed at a given site\n", + " in ac, then 1 will be mapped to 0 and 3 will be mapped to 1.\n", + "\n", + " \"\"\"\n", + "\n", + " n_variants = ac.shape[0]\n", + " n_alleles = ac.shape[1]\n", + "\n", + " # Create the output array - this is an allele mapping array,\n", + " # that specifies how to recode allele indices.\n", + " mapping = np.empty((n_variants, n_alleles), dtype=np.int32)\n", + "\n", + " # The value of -1 indicates that there is no mapping for\n", + " # a given allele. We fill with -1 so we can then set\n", + " # values where we do observe alleles and can define a\n", + " # mapping.\n", + " mapping[:] = -1\n", + "\n", + " # Iterate over variants.\n", + " for i in range(n_variants):\n", + " # This will be the new index that we are mapping this allele to, if the\n", + " # allele is observed.\n", + " new_allele_index = 0\n", + "\n", + " # Iterate over columns (alleles) in the input array.\n", + " for allele_index in range(n_alleles):\n", + " # Access the count for the jth allele.\n", + " c = ac[i, allele_index]\n", + " if c > 0:\n", + " # We have found a non-zero allele count, remap the allele.\n", + " mapping[i, allele_index] = new_allele_index\n", + "\n", + " # Increment to be ready for the next allele.\n", + " new_allele_index += 1\n", + "\n", + " return mapping" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [], + "source": [ + "region='2L:1001000-2009000',\n" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [], + "source": [ + "ds = ag3.snp_calls(\n", + " region=region,\n", + " sample_sets=sample_sets\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "6ffc36a40b02468e99c7c63e6c186a10", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Compute SNP allele counts: 0%| | 0/20 [00:00 2\u001b[0m variant_allele \u001b[38;5;241m=\u001b[39m \u001b[43mds_bi\u001b[49m[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mvariant_allele\u001b[39m\u001b[38;5;124m\"\u001b[39m]\u001b[38;5;241m.\u001b[39mdata\n\u001b[1;32m 3\u001b[0m variant_allele \u001b[38;5;241m=\u001b[39m variant_allele\u001b[38;5;241m.\u001b[39mrechunk((variant_allele\u001b[38;5;241m.\u001b[39mchunks[\u001b[38;5;241m0\u001b[39m], \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m))\n\u001b[1;32m 4\u001b[0m variant_allele_out \u001b[38;5;241m=\u001b[39m da\u001b[38;5;241m.\u001b[39mmap_blocks(\n\u001b[1;32m 5\u001b[0m \u001b[38;5;28;01mlambda\u001b[39;00m block: apply_allele_mapping(block, allele_mapping, max_allele\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1\u001b[39m),\n\u001b[1;32m 6\u001b[0m variant_allele,\n\u001b[1;32m 7\u001b[0m dtype\u001b[38;5;241m=\u001b[39mvariant_allele\u001b[38;5;241m.\u001b[39mdtype,\n\u001b[1;32m 8\u001b[0m chunks\u001b[38;5;241m=\u001b[39m(variant_allele\u001b[38;5;241m.\u001b[39mchunks[\u001b[38;5;241m0\u001b[39m], [\u001b[38;5;241m2\u001b[39m]),\n\u001b[1;32m 9\u001b[0m )\n", + "\u001b[0;31mNameError\u001b[0m: name 'ds_bi' is not defined" + ] + } + ], + "source": [ + "import dask.array as da\n", + "variant_allele = ds_bi[\"variant_allele\"].data\n", + "variant_allele = variant_allele.rechunk((variant_allele.chunks[0], -1))\n", + "variant_allele_out = da.map_blocks(\n", + " lambda block: apply_allele_mapping(block, allele_mapping, max_allele=1),\n", + " variant_allele,\n", + " dtype=variant_allele.dtype,\n", + " chunks=(variant_allele.chunks[0], [2]),\n", + ")\n", + "data_vars[\"variant_allele\"] = (\"variants\", \"alleles\"), variant_allele_out\n", + "\n", + "# Store allele counts, transformed, so we don't have to recompute.\n", + "#ac_out = apply_allele_mapping(ac_bi, allele_mapping, max_allele=1)\n", + "#data_vars[\"variant_allele_count\"] = (\"variants\", \"alleles\"), ac_out" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [], + "source": [ + "variant_allele = ds_bi[\"variant_allele\"].data\n", + "variant_allele = variant_allele.rechunk((variant_allele.chunks[0], -1))" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[b'T', b'A', b'C', b'G'],\n", + " [b'G', b'A', b'C', b'T'],\n", + " [b'T', b'A', b'C', b'G'],\n", + " ...,\n", + " [b'G', b'A', b'C', b'T'],\n", + " [b'C', b'A', b'T', b'G'],\n", + " [b'A', b'C', b'T', b'G']], dtype='|S1')" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "variant_allele.compute()" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[b'T', b'A', b'C', b'G'],\n", + " [b'G', b'A', b'C', b'T'],\n", + " [b'T', b'A', b'C', b'G'],\n", + " ...,\n", + " [b'G', b'A', b'C', b'T'],\n", + " [b'C', b'A', b'T', b'G'],\n", + " [b'A', b'C', b'T', b'G']], dtype='|S1')" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "variant_allele = variant_allele.rechunk((variant_allele.chunks[0], -1))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + " ds = self.snp_calls(\n", + " region=region,\n", + " sample_sets=sample_sets,\n", + " sample_query=sample_query,\n", + " sample_indices=sample_indices,\n", + " site_mask=site_mask,\n", + " site_class=site_class,\n", + " cohort_size=cohort_size,\n", + " min_cohort_size=min_cohort_size,\n", + " max_cohort_size=max_cohort_size,\n", + " random_seed=random_seed,\n", + " inline_array=inline_array,\n", + " chunks=chunks,\n", + " )\n", + "\n", + " with self._spinner(\"Prepare biallelic SNP calls\"):\n", + " # Subset to biallelic sites.\n", + " ds_bi = ds.isel(variants=loc_bi)\n", + "\n", + " # Start building a new dataset.\n", + " coords: Dict[str, Any] = dict()\n", + " data_vars: Dict[str, Any] = dict()\n", + "\n", + " # Store sample IDs.\n", + " coords[\"sample_id\"] = (\"samples\",), ds_bi[\"sample_id\"].data\n", + "\n", + " # Store contig.\n", + " coords[\"variant_contig\"] = (\"variants\",), ds_bi[\"variant_contig\"].data\n", + "\n", + " # Store position.\n", + " coords[\"variant_position\"] = (\"variants\",), ds_bi[\"variant_position\"].data\n", + "\n", + " # Store alleles, transformed.\n", + " variant_allele = ds_bi[\"variant_allele\"].data\n", + " variant_allele = variant_allele.rechunk((variant_allele.chunks[0], -1))\n", + " variant_allele_out = da.map_blocks(\n", + " lambda block: apply_allele_mapping(block, allele_mapping, max_allele=1),\n", + " variant_allele,\n", + " dtype=variant_allele.dtype,\n", + " chunks=(variant_allele.chunks[0], [2]),\n", + " )\n", + " data_vars[\"variant_allele\"] = (\"variants\", \"alleles\"), variant_allele_out\n", + "\n", + " # Store allele counts, transformed, so we don't have to recompute.\n", + " ac_out = apply_allele_mapping(ac_bi, allele_mapping, max_allele=1)\n", + " data_vars[\"variant_allele_count\"] = (\"variants\", \"alleles\"), ac_out\n", + "\n", + " # Store genotype calls, transformed.\n", + " gt = ds_bi[\"call_genotype\"].data\n", + " gt_out = allel.GenotypeDaskArray(gt).map_alleles(allele_mapping)\n", + " data_vars[\"call_genotype\"] = (\n", + " (\n", + " \"variants\",\n", + " \"samples\",\n", + " \"ploidy\",\n", + " ),\n", + " gt_out.values,\n", + " )" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "malariagen_plink", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.19" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/tests/anoph/test_snp_data.py b/tests/anoph/test_snp_data.py index 3766a58d1..b1df61f70 100644 --- a/tests/anoph/test_snp_data.py +++ b/tests/anoph/test_snp_data.py @@ -90,6 +90,7 @@ def test_open_snp_sites(fixture, api: AnophelesSnpData): assert "variants" in contig_grp variants = contig_grp["variants"] assert "POS" in variants + assert False assert "REF" in variants assert "ALT" in variants From 6afd6080b5f731e8104d31189ef8542f0aa585ba Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Thu, 11 Apr 2024 09:44:23 +0100 Subject: [PATCH 02/42] temp fix for avoiding error in mapping all-allele -> biallelic alleles, avoids using dask --- .gitignore | 1 + malariagen_data/anoph/snp_data.py | 13 +- malariagen_data/util.py | 2 +- notebooks/plink_convert.ipynb | 538 +++++++----------------------- 4 files changed, 137 insertions(+), 417 deletions(-) diff --git a/.gitignore b/.gitignore index 1bbe43524..fbd8a3074 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +debugging_biallelic_snp_calls.ipynb .idea .vscode __pycache__ diff --git a/malariagen_data/anoph/snp_data.py b/malariagen_data/anoph/snp_data.py index 18ae5c3e9..c331a1b58 100644 --- a/malariagen_data/anoph/snp_data.py +++ b/malariagen_data/anoph/snp_data.py @@ -1625,11 +1625,14 @@ def biallelic_snp_calls( # Store alleles, transformed. variant_allele = ds_bi["variant_allele"].data variant_allele = variant_allele.rechunk((variant_allele.chunks[0], -1)) - variant_allele_out = da.map_blocks( - lambda block: apply_allele_mapping(block, allele_mapping, max_allele=1), - variant_allele, - dtype=variant_allele.dtype, - chunks=(variant_allele.chunks[0], [2]), + # variant_allele_out = da.map_blocks( + # lambda block: apply_allele_mapping(block, allele_mapping, max_allele=1), + # variant_allele, + # dtype=variant_allele.dtype, + # chunks=(variant_allele.chunks[0], [2]), + # ) + variant_allele_out = apply_allele_mapping( + variant_allele.compute(), allele_mapping, max_allele=1 ) data_vars["variant_allele"] = ("variants", "alleles"), variant_allele_out diff --git a/malariagen_data/util.py b/malariagen_data/util.py index 886d67d89..cfa3bed96 100644 --- a/malariagen_data/util.py +++ b/malariagen_data/util.py @@ -1267,7 +1267,7 @@ def trim_alleles(ac): return mapping -@numba.njit # if using debugger remove this decorator +@numba.njit def apply_allele_mapping(x, mapping, max_allele): """Transform an array x, where the columns correspond to alleles, according to an allele mapping. diff --git a/notebooks/plink_convert.ipynb b/notebooks/plink_convert.ipynb index a3201ccab..07c403ead 100644 --- a/notebooks/plink_convert.ipynb +++ b/notebooks/plink_convert.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -11,7 +11,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -24,85 +24,97 @@ } ], "source": [ - "ag3 = malariagen_data.Ag3(pre=True)" + "ag3 = malariagen_data.Ag3(pre=True)\n", + "\n", + "ag3.biallelic_snps_to_plink(results_dir='/Users/dennistpw/Projects/malariagen-data-python/',\n", + " region='2L:100000-2000000',\n", + " n_snps=2000,\n", + " sample_sets='AG1000G-AO',\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "region='2L:1001000-2009000',\n" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [], + "source": [ + "ds = ag3.snp_calls(\n", + " region=region,\n", + " sample_sets=sample_sets\n", + ")" ] }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 59, "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Subsetting to segregating sites: ⠏ (0:00:01.62) count alleles\n", - "Subsetting to segregating sites: ⠴ (0:00:02.14) ascertain segregating sites\n", - "Subsetting to segregating sites: ⠦ (0:00:02.22) ascertained 1,089,159 sites\n", - "thin sites \n", - "thinned to 2,002 sites\n", - "Set up dataset\n", - "[########################################] | 100% Completed | 103.94 ms\n", - "Ensure genotypes vary \n", - "final no. variants 138\n", - "Load final data\n", - "write plink files to /Users/dennistpw/Projects/malariagen-data-python//2L:100000-2000000.2000.0.0.0\n" - ] - }, { "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "4f5d7aa458d54e93af6242af7790dc9b", + "version_major": 2, + "version_minor": 0 + }, "text/plain": [ - "'/Users/dennistpw/Projects/malariagen-data-python//2L:100000-2000000.2000.0.0.0'" + "Compute SNP allele counts: 0%| | 0/30 [00:00
<xarray.DataArray 'variant_allele' (variants: 1677564, alleles: 4)>\n",
-       "array([[b'C', b'A', b'T', b'G'],\n",
+       "
<xarray.DataArray 'variant_allele' (variants: 120913, alleles: 4)>\n",
+       "array([[b'G', b'A', b'C', b'T'],\n",
+       "       [b'A', b'C', b'T', b'G'],\n",
        "       [b'G', b'A', b'C', b'T'],\n",
-       "       [b'C', b'A', b'T', b'G'],\n",
        "       ...,\n",
-       "       [b'A', b'C', b'T', b'G'],\n",
-       "       [b'A', b'C', b'T', b'G'],\n",
-       "       [b'A', b'C', b'T', b'G']], dtype='|S1')\n",
+       "       [b'G', b'A', b'C', b'T'],\n",
+       "       [b'C', b'A', b'T', b'G'],\n",
+       "       [b'T', b'A', b'C', b'G']], dtype='|S1')\n",
        "Coordinates:\n",
-       "    variant_position  (variants) int32 100000 100001 100002 ... 1999999 2000000\n",
+       "    variant_position  (variants) int32 100092 100095 100109 ... 1999872 1999929\n",
        "    variant_contig    (variants) uint8 1 1 1 1 1 1 1 1 1 1 ... 1 1 1 1 1 1 1 1 1\n",
-       "Dimensions without coordinates: variants, alleles
    • variant_position
      (variants)
      int32
      100092 100095 ... 1999872 1999929
      array([ 100092,  100095,  100109, ..., 1999839, 1999872, 1999929],\n",
      +       "      dtype=int32)
    • variant_contig
      (variants)
      uint8
      1 1 1 1 1 1 1 1 ... 1 1 1 1 1 1 1 1
      array([1, 1, 1, ..., 1, 1, 1], dtype=uint8)
    • " ], "text/plain": [ - "\n", - "array([[b'C', b'A', b'T', b'G'],\n", + "\n", + "array([[b'G', b'A', b'C', b'T'],\n", + " [b'A', b'C', b'T', b'G'],\n", " [b'G', b'A', b'C', b'T'],\n", - " [b'C', b'A', b'T', b'G'],\n", " ...,\n", - " [b'A', b'C', b'T', b'G'],\n", - " [b'A', b'C', b'T', b'G'],\n", - " [b'A', b'C', b'T', b'G']], dtype='|S1')\n", + " [b'G', b'A', b'C', b'T'],\n", + " [b'C', b'A', b'T', b'G'],\n", + " [b'T', b'A', b'C', b'G']], dtype='|S1')\n", "Coordinates:\n", - " variant_position (variants) int32 100000 100001 100002 ... 1999999 2000000\n", + " variant_position (variants) int32 100092 100095 100109 ... 1999872 1999929\n", " variant_contig (variants) uint8 1 1 1 1 1 1 1 1 1 1 ... 1 1 1 1 1 1 1 1 1\n", "Dimensions without coordinates: variants, alleles" ] }, - "execution_count": 51, + "execution_count": 94, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "ds_snps['variant_allele'].compute()" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "count alleles\n", - "ascertain segregating sites\n", - "ascertained 1,089,159 sites\n" - ] - } - ], - "source": [ - "gt = ds_snps[\"call_genotype\"].data.compute()\n", - "print(\"count alleles\")\n", - "with ProgressBar():\n", - " ac = allel.GenotypeArray(gt).count_alleles(max_allele=3)\n", - " print(\"ascertain segregating sites\")\n", - " n_chroms = ds_snps.dims[\"samples\"] * 2\n", - " an_called = ac.sum(axis=1)\n", - " an_missing = n_chroms - an_called\n", - " min_ref_ac = 0\n", - " max_ref_ac = n_chroms - 0\n", - " # here we choose segregating sites\n", - " loc_sites = (\n", - " (ac[:, 0] >= min_ref_ac)\n", - " & (ac[:, 0] <= max_ref_ac)\n", - " & (an_missing <= 0)\n", - " )\n", - "print(f\"ascertained {np.count_nonzero(loc_sites):,} sites\")\n" + "ds_bi['variant_allele'].compute()" ] }, { "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Set up dataset\n", - "[########################################] | 100% Completed | 698.99 ms\n", - "Ensure genotypes vary\n", - "final no. variants 67780\n", - "Load final data\n" - ] - } - ], - "source": [ - "#set up dataset with required vars for plink conversion\n", - "print(\"Set up dataset\")\n", - "ds_snps_asc = (\n", - " ds_snps[[\"variant_contig\", \"variant_position\", \"variant_allele\", \"sample_id\", \"call_genotype\"]]\n", - " .isel(alleles=slice(0, 2))\n", - " .sel(variants=loc_sites)\n", - " )\n", - "\n", - "#compute gt ref counts\n", - "gt_asc = ds_snps_asc[\"call_genotype\"].data.compute()\n", - "gn_ref = allel.GenotypeDaskArray(gt_asc).to_n_ref(fill=-127) #what does the fill do\n", - "with ProgressBar():\n", - " gn_ref = gn_ref.compute()\n", - "\n", - "print(\"Ensure genotypes vary\")\n", - "loc_var = np.any(gn_ref != gn_ref[:, 0, np.newaxis], axis=1)\n", - "print(f\"final no. variants {np.count_nonzero(loc_var)}\")\n", - "\n", - "\n", - "print(\"Load final data\")\n", - "with ProgressBar():\n", - " ds_snps_final = (\n", - " ds_snps_asc[[\"variant_contig\", \"variant_position\", \"variant_allele\", \"sample_id\"]]\n", - " .isel(variants=loc_var)\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "metadata": {}, - "outputs": [], - "source": [ - "def apply_allele_mapping(x, mapping, max_allele):\n", - " \"\"\"Transform an array x, where the columns correspond to alleles,\n", - " according to an allele mapping.\n", - "\n", - " Values from columns in x will be move to different columns in the\n", - " output according to the allele index mapping given.\n", - "\n", - " \"\"\"\n", - " n_sites = x.shape[0]\n", - " n_alleles = x.shape[1]\n", - " assert mapping.shape[0] == n_sites\n", - " assert mapping.shape[1] == n_alleles\n", - "\n", - " # Create output array.\n", - " out = np.empty(shape=(n_sites, max_allele + 1), dtype=x.dtype)\n", - "\n", - " # Iterate over sites.\n", - " for i in range(n_sites):\n", - " # Iterate over alleles.\n", - " for allele_index in range(n_alleles):\n", - " # Find the new index for this allele.\n", - " new_allele_index = mapping[i, allele_index]\n", - "\n", - " # Copy data to the new allele index.\n", - " if new_allele_index >= 0 and new_allele_index <= max_allele:\n", - " out[i, new_allele_index] = x[i, allele_index]\n", - "\n", - " return out\n", - "\n", - "def trim_alleles(ac):\n", - " \"\"\"Remap allele indices to trim out unobserved alleles.\n", - "\n", - " The idea here is that our SNP data includes alleles which\n", - " may not ever be observed, or may not be observed within a\n", - " particular subset of the data. For convenience, it is useful\n", - " to retain only alleles which are observed.\n", - "\n", - " Here we use a given set of allele counts (ac) to identify\n", - " observed alleles and derive a mapping from old allele\n", - " indices to a new set of allele indices.\n", - "\n", - " For example, if alleles 0 and 2 are observed at a given\n", - " site in ac, then 0 will be mapped to 0 and 2 will be mapped\n", - " to 1.\n", - "\n", - " Similarly, if alleles 1 and 3 are observed at a given site\n", - " in ac, then 1 will be mapped to 0 and 3 will be mapped to 1.\n", - "\n", - " \"\"\"\n", - "\n", - " n_variants = ac.shape[0]\n", - " n_alleles = ac.shape[1]\n", - "\n", - " # Create the output array - this is an allele mapping array,\n", - " # that specifies how to recode allele indices.\n", - " mapping = np.empty((n_variants, n_alleles), dtype=np.int32)\n", - "\n", - " # The value of -1 indicates that there is no mapping for\n", - " # a given allele. We fill with -1 so we can then set\n", - " # values where we do observe alleles and can define a\n", - " # mapping.\n", - " mapping[:] = -1\n", - "\n", - " # Iterate over variants.\n", - " for i in range(n_variants):\n", - " # This will be the new index that we are mapping this allele to, if the\n", - " # allele is observed.\n", - " new_allele_index = 0\n", - "\n", - " # Iterate over columns (alleles) in the input array.\n", - " for allele_index in range(n_alleles):\n", - " # Access the count for the jth allele.\n", - " c = ac[i, allele_index]\n", - " if c > 0:\n", - " # We have found a non-zero allele count, remap the allele.\n", - " mapping[i, allele_index] = new_allele_index\n", - "\n", - " # Increment to be ready for the next allele.\n", - " new_allele_index += 1\n", - "\n", - " return mapping" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "metadata": {}, - "outputs": [], - "source": [ - "region='2L:1001000-2009000',\n" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "metadata": {}, - "outputs": [], - "source": [ - "ds = ag3.snp_calls(\n", - " region=region,\n", - " sample_sets=sample_sets\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "6ffc36a40b02468e99c7c63e6c186a10", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Compute SNP allele counts: 0%| | 0/20 [00:00 2\u001b[0m variant_allele \u001b[38;5;241m=\u001b[39m \u001b[43mds_bi\u001b[49m[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mvariant_allele\u001b[39m\u001b[38;5;124m\"\u001b[39m]\u001b[38;5;241m.\u001b[39mdata\n\u001b[1;32m 3\u001b[0m variant_allele \u001b[38;5;241m=\u001b[39m variant_allele\u001b[38;5;241m.\u001b[39mrechunk((variant_allele\u001b[38;5;241m.\u001b[39mchunks[\u001b[38;5;241m0\u001b[39m], \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m))\n\u001b[1;32m 4\u001b[0m variant_allele_out \u001b[38;5;241m=\u001b[39m da\u001b[38;5;241m.\u001b[39mmap_blocks(\n\u001b[1;32m 5\u001b[0m \u001b[38;5;28;01mlambda\u001b[39;00m block: apply_allele_mapping(block, allele_mapping, max_allele\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1\u001b[39m),\n\u001b[1;32m 6\u001b[0m variant_allele,\n\u001b[1;32m 7\u001b[0m dtype\u001b[38;5;241m=\u001b[39mvariant_allele\u001b[38;5;241m.\u001b[39mdtype,\n\u001b[1;32m 8\u001b[0m chunks\u001b[38;5;241m=\u001b[39m(variant_allele\u001b[38;5;241m.\u001b[39mchunks[\u001b[38;5;241m0\u001b[39m], [\u001b[38;5;241m2\u001b[39m]),\n\u001b[1;32m 9\u001b[0m )\n", - "\u001b[0;31mNameError\u001b[0m: name 'ds_bi' is not defined" + "\u001b[0;31mAssertionError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[90], line 10\u001b[0m\n\u001b[1;32m 3\u001b[0m variant_allele \u001b[38;5;241m=\u001b[39m variant_allele\u001b[38;5;241m.\u001b[39mrechunk((variant_allele\u001b[38;5;241m.\u001b[39mchunks[\u001b[38;5;241m0\u001b[39m], \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m))\n\u001b[1;32m 4\u001b[0m variant_allele_out \u001b[38;5;241m=\u001b[39m da\u001b[38;5;241m.\u001b[39mmap_blocks(\n\u001b[1;32m 5\u001b[0m \u001b[38;5;28;01mlambda\u001b[39;00m block: apply_allele_mapping(block, allele_mapping, max_allele\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1\u001b[39m),\n\u001b[1;32m 6\u001b[0m variant_allele,\n\u001b[1;32m 7\u001b[0m dtype\u001b[38;5;241m=\u001b[39mvariant_allele\u001b[38;5;241m.\u001b[39mdtype,\n\u001b[1;32m 8\u001b[0m chunks\u001b[38;5;241m=\u001b[39m(variant_allele\u001b[38;5;241m.\u001b[39mchunks[\u001b[38;5;241m0\u001b[39m], [\u001b[38;5;241m2\u001b[39m]),\n\u001b[1;32m 9\u001b[0m )\n\u001b[0;32m---> 10\u001b[0m \u001b[43mvariant_allele_out\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcompute\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 11\u001b[0m \u001b[38;5;66;03m# Store allele counts, transformed, so we don't have to recompute.\u001b[39;00m\n\u001b[1;32m 12\u001b[0m \u001b[38;5;66;03m#ac_out = apply_allele_mapping(ac_bi, allele_mapping, max_allele=1)\u001b[39;00m\n\u001b[1;32m 13\u001b[0m \u001b[38;5;66;03m#data_vars[\"variant_allele_count\"] = (\"variants\", \"alleles\"), ac_out\u001b[39;00m\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/dask/base.py:314\u001b[0m, in \u001b[0;36mDaskMethodsMixin.compute\u001b[0;34m(self, **kwargs)\u001b[0m\n\u001b[1;32m 290\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mcompute\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 291\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Compute this dask collection\u001b[39;00m\n\u001b[1;32m 292\u001b[0m \n\u001b[1;32m 293\u001b[0m \u001b[38;5;124;03m This turns a lazy Dask collection into its in-memory equivalent.\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 312\u001b[0m \u001b[38;5;124;03m dask.compute\u001b[39;00m\n\u001b[1;32m 313\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 314\u001b[0m (result,) \u001b[38;5;241m=\u001b[39m \u001b[43mcompute\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtraverse\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 315\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m result\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/dask/base.py:599\u001b[0m, in \u001b[0;36mcompute\u001b[0;34m(traverse, optimize_graph, scheduler, get, *args, **kwargs)\u001b[0m\n\u001b[1;32m 596\u001b[0m keys\u001b[38;5;241m.\u001b[39mappend(x\u001b[38;5;241m.\u001b[39m__dask_keys__())\n\u001b[1;32m 597\u001b[0m postcomputes\u001b[38;5;241m.\u001b[39mappend(x\u001b[38;5;241m.\u001b[39m__dask_postcompute__())\n\u001b[0;32m--> 599\u001b[0m results \u001b[38;5;241m=\u001b[39m \u001b[43mschedule\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdsk\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkeys\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 600\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m repack([f(r, \u001b[38;5;241m*\u001b[39ma) \u001b[38;5;28;01mfor\u001b[39;00m r, (f, a) \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mzip\u001b[39m(results, postcomputes)])\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/dask/threaded.py:89\u001b[0m, in \u001b[0;36mget\u001b[0;34m(dsk, keys, cache, num_workers, pool, **kwargs)\u001b[0m\n\u001b[1;32m 86\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(pool, multiprocessing\u001b[38;5;241m.\u001b[39mpool\u001b[38;5;241m.\u001b[39mPool):\n\u001b[1;32m 87\u001b[0m pool \u001b[38;5;241m=\u001b[39m MultiprocessingPoolExecutor(pool)\n\u001b[0;32m---> 89\u001b[0m results \u001b[38;5;241m=\u001b[39m \u001b[43mget_async\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 90\u001b[0m \u001b[43m \u001b[49m\u001b[43mpool\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msubmit\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 91\u001b[0m \u001b[43m \u001b[49m\u001b[43mpool\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_max_workers\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 92\u001b[0m \u001b[43m \u001b[49m\u001b[43mdsk\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 93\u001b[0m \u001b[43m \u001b[49m\u001b[43mkeys\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 94\u001b[0m \u001b[43m \u001b[49m\u001b[43mcache\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcache\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 95\u001b[0m \u001b[43m \u001b[49m\u001b[43mget_id\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m_thread_get_id\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 96\u001b[0m \u001b[43m \u001b[49m\u001b[43mpack_exception\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpack_exception\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 97\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 98\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 100\u001b[0m \u001b[38;5;66;03m# Cleanup pools associated to dead threads\u001b[39;00m\n\u001b[1;32m 101\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m pools_lock:\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/dask/local.py:511\u001b[0m, in \u001b[0;36mget_async\u001b[0;34m(submit, num_workers, dsk, result, cache, get_id, rerun_exceptions_locally, pack_exception, raise_exception, callbacks, dumps, loads, chunksize, **kwargs)\u001b[0m\n\u001b[1;32m 509\u001b[0m _execute_task(task, data) \u001b[38;5;66;03m# Re-execute locally\u001b[39;00m\n\u001b[1;32m 510\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 511\u001b[0m \u001b[43mraise_exception\u001b[49m\u001b[43m(\u001b[49m\u001b[43mexc\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtb\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 512\u001b[0m res, worker_id \u001b[38;5;241m=\u001b[39m loads(res_info)\n\u001b[1;32m 513\u001b[0m state[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcache\u001b[39m\u001b[38;5;124m\"\u001b[39m][key] \u001b[38;5;241m=\u001b[39m res\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/dask/local.py:319\u001b[0m, in \u001b[0;36mreraise\u001b[0;34m(exc, tb)\u001b[0m\n\u001b[1;32m 317\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m exc\u001b[38;5;241m.\u001b[39m__traceback__ \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m tb:\n\u001b[1;32m 318\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m exc\u001b[38;5;241m.\u001b[39mwith_traceback(tb)\n\u001b[0;32m--> 319\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m exc\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/dask/local.py:224\u001b[0m, in \u001b[0;36mexecute_task\u001b[0;34m(key, task_info, dumps, loads, get_id, pack_exception)\u001b[0m\n\u001b[1;32m 222\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 223\u001b[0m task, data \u001b[38;5;241m=\u001b[39m loads(task_info)\n\u001b[0;32m--> 224\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[43m_execute_task\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtask\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdata\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 225\u001b[0m \u001b[38;5;28mid\u001b[39m \u001b[38;5;241m=\u001b[39m get_id()\n\u001b[1;32m 226\u001b[0m result \u001b[38;5;241m=\u001b[39m dumps((result, \u001b[38;5;28mid\u001b[39m))\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/dask/core.py:119\u001b[0m, in \u001b[0;36m_execute_task\u001b[0;34m(arg, cache, dsk)\u001b[0m\n\u001b[1;32m 115\u001b[0m func, args \u001b[38;5;241m=\u001b[39m arg[\u001b[38;5;241m0\u001b[39m], arg[\u001b[38;5;241m1\u001b[39m:]\n\u001b[1;32m 116\u001b[0m \u001b[38;5;66;03m# Note: Don't assign the subtask results to a variable. numpy detects\u001b[39;00m\n\u001b[1;32m 117\u001b[0m \u001b[38;5;66;03m# temporaries by their reference count and can execute certain\u001b[39;00m\n\u001b[1;32m 118\u001b[0m \u001b[38;5;66;03m# operations in-place.\u001b[39;00m\n\u001b[0;32m--> 119\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m_execute_task\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcache\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43ma\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 120\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m ishashable(arg):\n\u001b[1;32m 121\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m arg\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/dask/optimization.py:990\u001b[0m, in \u001b[0;36mSubgraphCallable.__call__\u001b[0;34m(self, *args)\u001b[0m\n\u001b[1;32m 988\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(args) \u001b[38;5;241m==\u001b[39m \u001b[38;5;28mlen\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39minkeys):\n\u001b[1;32m 989\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mExpected \u001b[39m\u001b[38;5;132;01m%d\u001b[39;00m\u001b[38;5;124m args, got \u001b[39m\u001b[38;5;132;01m%d\u001b[39;00m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m%\u001b[39m (\u001b[38;5;28mlen\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39minkeys), \u001b[38;5;28mlen\u001b[39m(args)))\n\u001b[0;32m--> 990\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mcore\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdsk\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moutkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mdict\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mzip\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minkeys\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/dask/core.py:149\u001b[0m, in \u001b[0;36mget\u001b[0;34m(dsk, out, cache)\u001b[0m\n\u001b[1;32m 147\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m key \u001b[38;5;129;01min\u001b[39;00m toposort(dsk):\n\u001b[1;32m 148\u001b[0m task \u001b[38;5;241m=\u001b[39m dsk[key]\n\u001b[0;32m--> 149\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[43m_execute_task\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtask\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcache\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 150\u001b[0m cache[key] \u001b[38;5;241m=\u001b[39m result\n\u001b[1;32m 151\u001b[0m result \u001b[38;5;241m=\u001b[39m _execute_task(out, cache)\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/dask/core.py:119\u001b[0m, in \u001b[0;36m_execute_task\u001b[0;34m(arg, cache, dsk)\u001b[0m\n\u001b[1;32m 115\u001b[0m func, args \u001b[38;5;241m=\u001b[39m arg[\u001b[38;5;241m0\u001b[39m], arg[\u001b[38;5;241m1\u001b[39m:]\n\u001b[1;32m 116\u001b[0m \u001b[38;5;66;03m# Note: Don't assign the subtask results to a variable. numpy detects\u001b[39;00m\n\u001b[1;32m 117\u001b[0m \u001b[38;5;66;03m# temporaries by their reference count and can execute certain\u001b[39;00m\n\u001b[1;32m 118\u001b[0m \u001b[38;5;66;03m# operations in-place.\u001b[39;00m\n\u001b[0;32m--> 119\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m_execute_task\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcache\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43ma\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 120\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m ishashable(arg):\n\u001b[1;32m 121\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m arg\n", + "Cell \u001b[0;32mIn[90], line 5\u001b[0m, in \u001b[0;36m\u001b[0;34m(block)\u001b[0m\n\u001b[1;32m 2\u001b[0m variant_allele \u001b[38;5;241m=\u001b[39m ds_bi[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mvariant_allele\u001b[39m\u001b[38;5;124m\"\u001b[39m]\u001b[38;5;241m.\u001b[39mdata\n\u001b[1;32m 3\u001b[0m variant_allele \u001b[38;5;241m=\u001b[39m variant_allele\u001b[38;5;241m.\u001b[39mrechunk((variant_allele\u001b[38;5;241m.\u001b[39mchunks[\u001b[38;5;241m0\u001b[39m], \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m))\n\u001b[1;32m 4\u001b[0m variant_allele_out \u001b[38;5;241m=\u001b[39m da\u001b[38;5;241m.\u001b[39mmap_blocks(\n\u001b[0;32m----> 5\u001b[0m \u001b[38;5;28;01mlambda\u001b[39;00m block: \u001b[43mapply_allele_mapping\u001b[49m\u001b[43m(\u001b[49m\u001b[43mblock\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mallele_mapping\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmax_allele\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m)\u001b[49m,\n\u001b[1;32m 6\u001b[0m variant_allele,\n\u001b[1;32m 7\u001b[0m dtype\u001b[38;5;241m=\u001b[39mvariant_allele\u001b[38;5;241m.\u001b[39mdtype,\n\u001b[1;32m 8\u001b[0m chunks\u001b[38;5;241m=\u001b[39m(variant_allele\u001b[38;5;241m.\u001b[39mchunks[\u001b[38;5;241m0\u001b[39m], [\u001b[38;5;241m2\u001b[39m]),\n\u001b[1;32m 9\u001b[0m )\n\u001b[1;32m 10\u001b[0m variant_allele_out\u001b[38;5;241m.\u001b[39mcompute()\n\u001b[1;32m 11\u001b[0m \u001b[38;5;66;03m# Store allele counts, transformed, so we don't have to recompute.\u001b[39;00m\n\u001b[1;32m 12\u001b[0m \u001b[38;5;66;03m#ac_out = apply_allele_mapping(ac_bi, allele_mapping, max_allele=1)\u001b[39;00m\n\u001b[1;32m 13\u001b[0m \u001b[38;5;66;03m#data_vars[\"variant_allele_count\"] = (\"variants\", \"alleles\"), ac_out\u001b[39;00m\n", + "Cell \u001b[0;32mIn[57], line 11\u001b[0m, in \u001b[0;36mapply_allele_mapping\u001b[0;34m(x, mapping, max_allele)\u001b[0m\n\u001b[1;32m 9\u001b[0m n_sites \u001b[38;5;241m=\u001b[39m x\u001b[38;5;241m.\u001b[39mshape[\u001b[38;5;241m0\u001b[39m]\n\u001b[1;32m 10\u001b[0m n_alleles \u001b[38;5;241m=\u001b[39m x\u001b[38;5;241m.\u001b[39mshape[\u001b[38;5;241m1\u001b[39m]\n\u001b[0;32m---> 11\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m mapping\u001b[38;5;241m.\u001b[39mshape[\u001b[38;5;241m0\u001b[39m] \u001b[38;5;241m==\u001b[39m n_sites\n\u001b[1;32m 12\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m mapping\u001b[38;5;241m.\u001b[39mshape[\u001b[38;5;241m1\u001b[39m] \u001b[38;5;241m==\u001b[39m n_alleles\n\u001b[1;32m 14\u001b[0m \u001b[38;5;66;03m# Create output array.\u001b[39;00m\n", + "\u001b[0;31mAssertionError\u001b[0m: " ] } ], @@ -812,139 +602,65 @@ " dtype=variant_allele.dtype,\n", " chunks=(variant_allele.chunks[0], [2]),\n", ")\n", - "data_vars[\"variant_allele\"] = (\"variants\", \"alleles\"), variant_allele_out\n", - "\n", + "variant_allele_out.compute()\n", "# Store allele counts, transformed, so we don't have to recompute.\n", "#ac_out = apply_allele_mapping(ac_bi, allele_mapping, max_allele=1)\n", "#data_vars[\"variant_allele_count\"] = (\"variants\", \"alleles\"), ac_out" ] }, { - "cell_type": "code", - "execution_count": 64, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "variant_allele = ds_bi[\"variant_allele\"].data\n", - "variant_allele = variant_allele.rechunk((variant_allele.chunks[0], -1))" + "When we try to select only biallelic snps, we\n", + "- count the number of alleles\n", + "- select only" ] }, { "cell_type": "code", - "execution_count": 67, + "execution_count": 95, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "array([[b'T', b'A', b'C', b'G'],\n", - " [b'G', b'A', b'C', b'T'],\n", - " [b'T', b'A', b'C', b'G'],\n", + "array([[ 0, 1, -1, -1],\n", + " [ 0, -1, -1, 1],\n", + " [ 0, 1, -1, -1],\n", " ...,\n", - " [b'G', b'A', b'C', b'T'],\n", - " [b'C', b'A', b'T', b'G'],\n", - " [b'A', b'C', b'T', b'G']], dtype='|S1')" + " [ 0, -1, -1, 1],\n", + " [ 0, -1, 1, -1],\n", + " [ 0, -1, 1, -1]], dtype=int32)" ] }, - "execution_count": 67, + "execution_count": 95, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "variant_allele.compute()" + "allele_mapping" ] }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 92, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "array([[b'T', b'A', b'C', b'G'],\n", - " [b'G', b'A', b'C', b'T'],\n", - " [b'T', b'A', b'C', b'G'],\n", - " ...,\n", - " [b'G', b'A', b'C', b'T'],\n", - " [b'C', b'A', b'T', b'G'],\n", - " [b'A', b'C', b'T', b'G']], dtype='|S1')" + "120913" ] }, - "execution_count": 32, + "execution_count": 92, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "variant_allele = variant_allele.rechunk((variant_allele.chunks[0], -1))\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - " ds = self.snp_calls(\n", - " region=region,\n", - " sample_sets=sample_sets,\n", - " sample_query=sample_query,\n", - " sample_indices=sample_indices,\n", - " site_mask=site_mask,\n", - " site_class=site_class,\n", - " cohort_size=cohort_size,\n", - " min_cohort_size=min_cohort_size,\n", - " max_cohort_size=max_cohort_size,\n", - " random_seed=random_seed,\n", - " inline_array=inline_array,\n", - " chunks=chunks,\n", - " )\n", - "\n", - " with self._spinner(\"Prepare biallelic SNP calls\"):\n", - " # Subset to biallelic sites.\n", - " ds_bi = ds.isel(variants=loc_bi)\n", - "\n", - " # Start building a new dataset.\n", - " coords: Dict[str, Any] = dict()\n", - " data_vars: Dict[str, Any] = dict()\n", - "\n", - " # Store sample IDs.\n", - " coords[\"sample_id\"] = (\"samples\",), ds_bi[\"sample_id\"].data\n", - "\n", - " # Store contig.\n", - " coords[\"variant_contig\"] = (\"variants\",), ds_bi[\"variant_contig\"].data\n", - "\n", - " # Store position.\n", - " coords[\"variant_position\"] = (\"variants\",), ds_bi[\"variant_position\"].data\n", - "\n", - " # Store alleles, transformed.\n", - " variant_allele = ds_bi[\"variant_allele\"].data\n", - " variant_allele = variant_allele.rechunk((variant_allele.chunks[0], -1))\n", - " variant_allele_out = da.map_blocks(\n", - " lambda block: apply_allele_mapping(block, allele_mapping, max_allele=1),\n", - " variant_allele,\n", - " dtype=variant_allele.dtype,\n", - " chunks=(variant_allele.chunks[0], [2]),\n", - " )\n", - " data_vars[\"variant_allele\"] = (\"variants\", \"alleles\"), variant_allele_out\n", - "\n", - " # Store allele counts, transformed, so we don't have to recompute.\n", - " ac_out = apply_allele_mapping(ac_bi, allele_mapping, max_allele=1)\n", - " data_vars[\"variant_allele_count\"] = (\"variants\", \"alleles\"), ac_out\n", - "\n", - " # Store genotype calls, transformed.\n", - " gt = ds_bi[\"call_genotype\"].data\n", - " gt_out = allel.GenotypeDaskArray(gt).map_alleles(allele_mapping)\n", - " data_vars[\"call_genotype\"] = (\n", - " (\n", - " \"variants\",\n", - " \"samples\",\n", - " \"ploidy\",\n", - " ),\n", - " gt_out.values,\n", - " )" + "variant_allele.shape[0]" ] } ], From 32686409f3d0efa3953d4c3bf3672d29a55c0c16 Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Thu, 11 Apr 2024 11:52:34 +0100 Subject: [PATCH 03/42] updated plink converter to use biallelic_snp_calls with tmp. amended variant_allele mapping --- malariagen_data/anoph/to_plink.py | 18 +- notebooks/plink_convert.ipynb | 529 ++---------------------------- 2 files changed, 29 insertions(+), 518 deletions(-) diff --git a/malariagen_data/anoph/to_plink.py b/malariagen_data/anoph/to_plink.py index 0537af25c..010ad6375 100644 --- a/malariagen_data/anoph/to_plink.py +++ b/malariagen_data/anoph/to_plink.py @@ -71,7 +71,7 @@ def _biallelic_snps_to_plink( return plink_file_path # get snps - ds_snps = self.snp_calls( + ds_snps = self.biallelic_snp_calls( region=region, sample_sets=sample_sets, sample_query=sample_query, @@ -82,6 +82,7 @@ def _biallelic_snps_to_plink( random_seed=random_seed, inline_array=inline_array, chunks=chunks, + n_snps=n_snps, ) # filter snps on segregating sites @@ -104,11 +105,11 @@ def _biallelic_snps_to_plink( ) print(f"ascertained {np.count_nonzero(loc_sites):,} sites") - print("thin sites") - ix_sites = np.nonzero(loc_sites)[0] - thin_step = max(ix_sites.shape[0] // n_snps, 1) - ix_sites_thinned = ix_sites[thin_offset::thin_step] - print(f"thinned to {np.count_nonzero(ix_sites_thinned):,} sites") + # print("thin sites") + # ix_sites = np.nonzero(loc_sites)[0] + # thin_step = max(ix_sites.shape[0] // n_snps, 1) + # ix_sites_thinned = ix_sites[thin_offset::thin_step] + # print(f"thinned to {np.count_nonzero(ix_sites_thinned):,} sites") # set up dataset with required vars for plink conversion print("Set up dataset") @@ -121,9 +122,8 @@ def _biallelic_snps_to_plink( "sample_id", "call_genotype", ] - ] - .isel(alleles=slice(0, 2)) - .sel(variants=ix_sites_thinned) + ].isel(alleles=slice(0, 2)) + # .sel(variants=ix_sites_thinned) ) # compute gt ref counts diff --git a/notebooks/plink_convert.ipynb b/notebooks/plink_convert.ipynb index 07c403ead..473da2c85 100644 --- a/notebooks/plink_convert.ipynb +++ b/notebooks/plink_convert.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -11,18 +11,9 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": "(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\nconst JS_MIME_TYPE = 'application/javascript';\n const HTML_MIME_TYPE = 'text/html';\n const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n const CLASS_NAME = 'output_bokeh rendered_html';\n\n /**\n * Render data to the DOM node\n */\n function render(props, node) {\n const script = document.createElement(\"script\");\n node.appendChild(script);\n }\n\n /**\n * Handle when an output is cleared or removed\n */\n function handleClearOutput(event, handle) {\n const cell = handle.cell;\n\n const id = cell.output_area._bokeh_element_id;\n const server_id = cell.output_area._bokeh_server_id;\n // Clean up Bokeh references\n if (id != null && id in Bokeh.index) {\n Bokeh.index[id].model.document.clear();\n delete Bokeh.index[id];\n }\n\n if (server_id !== undefined) {\n // Clean up Bokeh references\n const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n cell.notebook.kernel.execute(cmd_clean, {\n iopub: {\n output: function(msg) {\n const id = msg.content.text.trim();\n if (id in Bokeh.index) {\n Bokeh.index[id].model.document.clear();\n delete Bokeh.index[id];\n }\n }\n }\n });\n // Destroy server and session\n const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n cell.notebook.kernel.execute(cmd_destroy);\n }\n }\n\n /**\n * Handle when a new output is added\n */\n function handleAddOutput(event, handle) {\n const output_area = handle.output_area;\n const output = handle.output;\n\n // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n return\n }\n\n const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n\n if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n // store reference to embed id on output_area\n output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n }\n if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n const bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n const script_attrs = bk_div.children[0].attributes;\n for (let i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n }\n\n function register_renderer(events, OutputArea) {\n\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n const toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[toinsert.length - 1]);\n element.append(toinsert);\n return toinsert\n }\n\n /* Handle when an output is cleared or removed */\n events.on('clear_output.CodeCell', handleClearOutput);\n events.on('delete.Cell', handleClearOutput);\n\n /* Handle when a new output is added */\n events.on('output_added.OutputArea', handleAddOutput);\n\n /**\n * Register the mime type and append_mime function with output_area\n */\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n /* Is output safe? */\n safe: true,\n /* Index of renderer in `output_area.display_order` */\n index: 0\n });\n }\n\n // register the mime type if in Jupyter Notebook environment and previously unregistered\n if (root.Jupyter !== undefined) {\n const events = require('base/js/events');\n const OutputArea = require('notebook/js/outputarea').OutputArea;\n\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n }\n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"
      \\n\"+\n \"

      \\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

      \\n\"+\n \"
        \\n\"+\n \"
      • re-rerun `output_notebook()` to attempt to load from CDN again, or
      • \\n\"+\n \"
      • use INLINE resources instead, as so:
      • \\n\"+\n \"
      \\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
      \"}};\n\n function display_loaded() {\n const el = document.getElementById(null);\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.1.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.1.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.1.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.1.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-3.1.1.min.js\"];\n const css_urls = [];\n\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {\n }\n ];\n\n function run_inline_js() {\n if (root.Bokeh !== undefined || force === true) {\n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(null)).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));", - "application/vnd.bokehjs_load.v0+json": "" - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "ag3 = malariagen_data.Ag3(pre=True)\n", "\n", @@ -35,14 +26,14 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -51,7 +42,7 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -63,31 +54,9 @@ }, { "cell_type": "code", - "execution_count": 59, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "4f5d7aa458d54e93af6242af7790dc9b", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Compute SNP allele counts: 0%| | 0/30 [00:00\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
      <xarray.DataArray 'variant_allele' (variants: 120913, alleles: 4)>\n",
      -       "array([[b'G', b'A', b'C', b'T'],\n",
      -       "       [b'A', b'C', b'T', b'G'],\n",
      -       "       [b'G', b'A', b'C', b'T'],\n",
      -       "       ...,\n",
      -       "       [b'G', b'A', b'C', b'T'],\n",
      -       "       [b'C', b'A', b'T', b'G'],\n",
      -       "       [b'T', b'A', b'C', b'G']], dtype='|S1')\n",
      -       "Coordinates:\n",
      -       "    variant_position  (variants) int32 100092 100095 100109 ... 1999872 1999929\n",
      -       "    variant_contig    (variants) uint8 1 1 1 1 1 1 1 1 1 1 ... 1 1 1 1 1 1 1 1 1\n",
      -       "Dimensions without coordinates: variants, alleles
      " - ], - "text/plain": [ - "\n", - "array([[b'G', b'A', b'C', b'T'],\n", - " [b'A', b'C', b'T', b'G'],\n", - " [b'G', b'A', b'C', b'T'],\n", - " ...,\n", - " [b'G', b'A', b'C', b'T'],\n", - " [b'C', b'A', b'T', b'G'],\n", - " [b'T', b'A', b'C', b'G']], dtype='|S1')\n", - "Coordinates:\n", - " variant_position (variants) int32 100092 100095 100109 ... 1999872 1999929\n", - " variant_contig (variants) uint8 1 1 1 1 1 1 1 1 1 1 ... 1 1 1 1 1 1 1 1 1\n", - "Dimensions without coordinates: variants, alleles" - ] - }, - "execution_count": 94, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "ds_bi['variant_allele'].compute()" ] }, { "cell_type": "code", - "execution_count": 67, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -538,7 +101,7 @@ }, { "cell_type": "code", - "execution_count": 68, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -549,7 +112,7 @@ }, { "cell_type": "code", - "execution_count": 69, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -565,33 +128,9 @@ }, { "cell_type": "code", - "execution_count": 90, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "ename": "AssertionError", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mAssertionError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[90], line 10\u001b[0m\n\u001b[1;32m 3\u001b[0m variant_allele \u001b[38;5;241m=\u001b[39m variant_allele\u001b[38;5;241m.\u001b[39mrechunk((variant_allele\u001b[38;5;241m.\u001b[39mchunks[\u001b[38;5;241m0\u001b[39m], \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m))\n\u001b[1;32m 4\u001b[0m variant_allele_out \u001b[38;5;241m=\u001b[39m da\u001b[38;5;241m.\u001b[39mmap_blocks(\n\u001b[1;32m 5\u001b[0m \u001b[38;5;28;01mlambda\u001b[39;00m block: apply_allele_mapping(block, allele_mapping, max_allele\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1\u001b[39m),\n\u001b[1;32m 6\u001b[0m variant_allele,\n\u001b[1;32m 7\u001b[0m dtype\u001b[38;5;241m=\u001b[39mvariant_allele\u001b[38;5;241m.\u001b[39mdtype,\n\u001b[1;32m 8\u001b[0m chunks\u001b[38;5;241m=\u001b[39m(variant_allele\u001b[38;5;241m.\u001b[39mchunks[\u001b[38;5;241m0\u001b[39m], [\u001b[38;5;241m2\u001b[39m]),\n\u001b[1;32m 9\u001b[0m )\n\u001b[0;32m---> 10\u001b[0m \u001b[43mvariant_allele_out\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcompute\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 11\u001b[0m \u001b[38;5;66;03m# Store allele counts, transformed, so we don't have to recompute.\u001b[39;00m\n\u001b[1;32m 12\u001b[0m \u001b[38;5;66;03m#ac_out = apply_allele_mapping(ac_bi, allele_mapping, max_allele=1)\u001b[39;00m\n\u001b[1;32m 13\u001b[0m \u001b[38;5;66;03m#data_vars[\"variant_allele_count\"] = (\"variants\", \"alleles\"), ac_out\u001b[39;00m\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/dask/base.py:314\u001b[0m, in \u001b[0;36mDaskMethodsMixin.compute\u001b[0;34m(self, **kwargs)\u001b[0m\n\u001b[1;32m 290\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mcompute\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 291\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Compute this dask collection\u001b[39;00m\n\u001b[1;32m 292\u001b[0m \n\u001b[1;32m 293\u001b[0m \u001b[38;5;124;03m This turns a lazy Dask collection into its in-memory equivalent.\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 312\u001b[0m \u001b[38;5;124;03m dask.compute\u001b[39;00m\n\u001b[1;32m 313\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 314\u001b[0m (result,) \u001b[38;5;241m=\u001b[39m \u001b[43mcompute\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtraverse\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 315\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m result\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/dask/base.py:599\u001b[0m, in \u001b[0;36mcompute\u001b[0;34m(traverse, optimize_graph, scheduler, get, *args, **kwargs)\u001b[0m\n\u001b[1;32m 596\u001b[0m keys\u001b[38;5;241m.\u001b[39mappend(x\u001b[38;5;241m.\u001b[39m__dask_keys__())\n\u001b[1;32m 597\u001b[0m postcomputes\u001b[38;5;241m.\u001b[39mappend(x\u001b[38;5;241m.\u001b[39m__dask_postcompute__())\n\u001b[0;32m--> 599\u001b[0m results \u001b[38;5;241m=\u001b[39m \u001b[43mschedule\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdsk\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkeys\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 600\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m repack([f(r, \u001b[38;5;241m*\u001b[39ma) \u001b[38;5;28;01mfor\u001b[39;00m r, (f, a) \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mzip\u001b[39m(results, postcomputes)])\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/dask/threaded.py:89\u001b[0m, in \u001b[0;36mget\u001b[0;34m(dsk, keys, cache, num_workers, pool, **kwargs)\u001b[0m\n\u001b[1;32m 86\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(pool, multiprocessing\u001b[38;5;241m.\u001b[39mpool\u001b[38;5;241m.\u001b[39mPool):\n\u001b[1;32m 87\u001b[0m pool \u001b[38;5;241m=\u001b[39m MultiprocessingPoolExecutor(pool)\n\u001b[0;32m---> 89\u001b[0m results \u001b[38;5;241m=\u001b[39m \u001b[43mget_async\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 90\u001b[0m \u001b[43m \u001b[49m\u001b[43mpool\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msubmit\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 91\u001b[0m \u001b[43m \u001b[49m\u001b[43mpool\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_max_workers\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 92\u001b[0m \u001b[43m \u001b[49m\u001b[43mdsk\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 93\u001b[0m \u001b[43m \u001b[49m\u001b[43mkeys\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 94\u001b[0m \u001b[43m \u001b[49m\u001b[43mcache\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcache\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 95\u001b[0m \u001b[43m \u001b[49m\u001b[43mget_id\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m_thread_get_id\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 96\u001b[0m \u001b[43m \u001b[49m\u001b[43mpack_exception\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpack_exception\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 97\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 98\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 100\u001b[0m \u001b[38;5;66;03m# Cleanup pools associated to dead threads\u001b[39;00m\n\u001b[1;32m 101\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m pools_lock:\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/dask/local.py:511\u001b[0m, in \u001b[0;36mget_async\u001b[0;34m(submit, num_workers, dsk, result, cache, get_id, rerun_exceptions_locally, pack_exception, raise_exception, callbacks, dumps, loads, chunksize, **kwargs)\u001b[0m\n\u001b[1;32m 509\u001b[0m _execute_task(task, data) \u001b[38;5;66;03m# Re-execute locally\u001b[39;00m\n\u001b[1;32m 510\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 511\u001b[0m \u001b[43mraise_exception\u001b[49m\u001b[43m(\u001b[49m\u001b[43mexc\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtb\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 512\u001b[0m res, worker_id \u001b[38;5;241m=\u001b[39m loads(res_info)\n\u001b[1;32m 513\u001b[0m state[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcache\u001b[39m\u001b[38;5;124m\"\u001b[39m][key] \u001b[38;5;241m=\u001b[39m res\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/dask/local.py:319\u001b[0m, in \u001b[0;36mreraise\u001b[0;34m(exc, tb)\u001b[0m\n\u001b[1;32m 317\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m exc\u001b[38;5;241m.\u001b[39m__traceback__ \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m tb:\n\u001b[1;32m 318\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m exc\u001b[38;5;241m.\u001b[39mwith_traceback(tb)\n\u001b[0;32m--> 319\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m exc\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/dask/local.py:224\u001b[0m, in \u001b[0;36mexecute_task\u001b[0;34m(key, task_info, dumps, loads, get_id, pack_exception)\u001b[0m\n\u001b[1;32m 222\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 223\u001b[0m task, data \u001b[38;5;241m=\u001b[39m loads(task_info)\n\u001b[0;32m--> 224\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[43m_execute_task\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtask\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdata\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 225\u001b[0m \u001b[38;5;28mid\u001b[39m \u001b[38;5;241m=\u001b[39m get_id()\n\u001b[1;32m 226\u001b[0m result \u001b[38;5;241m=\u001b[39m dumps((result, \u001b[38;5;28mid\u001b[39m))\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/dask/core.py:119\u001b[0m, in \u001b[0;36m_execute_task\u001b[0;34m(arg, cache, dsk)\u001b[0m\n\u001b[1;32m 115\u001b[0m func, args \u001b[38;5;241m=\u001b[39m arg[\u001b[38;5;241m0\u001b[39m], arg[\u001b[38;5;241m1\u001b[39m:]\n\u001b[1;32m 116\u001b[0m \u001b[38;5;66;03m# Note: Don't assign the subtask results to a variable. numpy detects\u001b[39;00m\n\u001b[1;32m 117\u001b[0m \u001b[38;5;66;03m# temporaries by their reference count and can execute certain\u001b[39;00m\n\u001b[1;32m 118\u001b[0m \u001b[38;5;66;03m# operations in-place.\u001b[39;00m\n\u001b[0;32m--> 119\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m_execute_task\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcache\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43ma\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 120\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m ishashable(arg):\n\u001b[1;32m 121\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m arg\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/dask/optimization.py:990\u001b[0m, in \u001b[0;36mSubgraphCallable.__call__\u001b[0;34m(self, *args)\u001b[0m\n\u001b[1;32m 988\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(args) \u001b[38;5;241m==\u001b[39m \u001b[38;5;28mlen\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39minkeys):\n\u001b[1;32m 989\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mExpected \u001b[39m\u001b[38;5;132;01m%d\u001b[39;00m\u001b[38;5;124m args, got \u001b[39m\u001b[38;5;132;01m%d\u001b[39;00m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m%\u001b[39m (\u001b[38;5;28mlen\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39minkeys), \u001b[38;5;28mlen\u001b[39m(args)))\n\u001b[0;32m--> 990\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mcore\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdsk\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moutkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mdict\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mzip\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minkeys\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/dask/core.py:149\u001b[0m, in \u001b[0;36mget\u001b[0;34m(dsk, out, cache)\u001b[0m\n\u001b[1;32m 147\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m key \u001b[38;5;129;01min\u001b[39;00m toposort(dsk):\n\u001b[1;32m 148\u001b[0m task \u001b[38;5;241m=\u001b[39m dsk[key]\n\u001b[0;32m--> 149\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[43m_execute_task\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtask\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcache\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 150\u001b[0m cache[key] \u001b[38;5;241m=\u001b[39m result\n\u001b[1;32m 151\u001b[0m result \u001b[38;5;241m=\u001b[39m _execute_task(out, cache)\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/dask/core.py:119\u001b[0m, in \u001b[0;36m_execute_task\u001b[0;34m(arg, cache, dsk)\u001b[0m\n\u001b[1;32m 115\u001b[0m func, args \u001b[38;5;241m=\u001b[39m arg[\u001b[38;5;241m0\u001b[39m], arg[\u001b[38;5;241m1\u001b[39m:]\n\u001b[1;32m 116\u001b[0m \u001b[38;5;66;03m# Note: Don't assign the subtask results to a variable. numpy detects\u001b[39;00m\n\u001b[1;32m 117\u001b[0m \u001b[38;5;66;03m# temporaries by their reference count and can execute certain\u001b[39;00m\n\u001b[1;32m 118\u001b[0m \u001b[38;5;66;03m# operations in-place.\u001b[39;00m\n\u001b[0;32m--> 119\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m_execute_task\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcache\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43ma\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 120\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m ishashable(arg):\n\u001b[1;32m 121\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m arg\n", - "Cell \u001b[0;32mIn[90], line 5\u001b[0m, in \u001b[0;36m\u001b[0;34m(block)\u001b[0m\n\u001b[1;32m 2\u001b[0m variant_allele \u001b[38;5;241m=\u001b[39m ds_bi[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mvariant_allele\u001b[39m\u001b[38;5;124m\"\u001b[39m]\u001b[38;5;241m.\u001b[39mdata\n\u001b[1;32m 3\u001b[0m variant_allele \u001b[38;5;241m=\u001b[39m variant_allele\u001b[38;5;241m.\u001b[39mrechunk((variant_allele\u001b[38;5;241m.\u001b[39mchunks[\u001b[38;5;241m0\u001b[39m], \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m))\n\u001b[1;32m 4\u001b[0m variant_allele_out \u001b[38;5;241m=\u001b[39m da\u001b[38;5;241m.\u001b[39mmap_blocks(\n\u001b[0;32m----> 5\u001b[0m \u001b[38;5;28;01mlambda\u001b[39;00m block: \u001b[43mapply_allele_mapping\u001b[49m\u001b[43m(\u001b[49m\u001b[43mblock\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mallele_mapping\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmax_allele\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m)\u001b[49m,\n\u001b[1;32m 6\u001b[0m variant_allele,\n\u001b[1;32m 7\u001b[0m dtype\u001b[38;5;241m=\u001b[39mvariant_allele\u001b[38;5;241m.\u001b[39mdtype,\n\u001b[1;32m 8\u001b[0m chunks\u001b[38;5;241m=\u001b[39m(variant_allele\u001b[38;5;241m.\u001b[39mchunks[\u001b[38;5;241m0\u001b[39m], [\u001b[38;5;241m2\u001b[39m]),\n\u001b[1;32m 9\u001b[0m )\n\u001b[1;32m 10\u001b[0m variant_allele_out\u001b[38;5;241m.\u001b[39mcompute()\n\u001b[1;32m 11\u001b[0m \u001b[38;5;66;03m# Store allele counts, transformed, so we don't have to recompute.\u001b[39;00m\n\u001b[1;32m 12\u001b[0m \u001b[38;5;66;03m#ac_out = apply_allele_mapping(ac_bi, allele_mapping, max_allele=1)\u001b[39;00m\n\u001b[1;32m 13\u001b[0m \u001b[38;5;66;03m#data_vars[\"variant_allele_count\"] = (\"variants\", \"alleles\"), ac_out\u001b[39;00m\n", - "Cell \u001b[0;32mIn[57], line 11\u001b[0m, in \u001b[0;36mapply_allele_mapping\u001b[0;34m(x, mapping, max_allele)\u001b[0m\n\u001b[1;32m 9\u001b[0m n_sites \u001b[38;5;241m=\u001b[39m x\u001b[38;5;241m.\u001b[39mshape[\u001b[38;5;241m0\u001b[39m]\n\u001b[1;32m 10\u001b[0m n_alleles \u001b[38;5;241m=\u001b[39m x\u001b[38;5;241m.\u001b[39mshape[\u001b[38;5;241m1\u001b[39m]\n\u001b[0;32m---> 11\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m mapping\u001b[38;5;241m.\u001b[39mshape[\u001b[38;5;241m0\u001b[39m] \u001b[38;5;241m==\u001b[39m n_sites\n\u001b[1;32m 12\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m mapping\u001b[38;5;241m.\u001b[39mshape[\u001b[38;5;241m1\u001b[39m] \u001b[38;5;241m==\u001b[39m n_alleles\n\u001b[1;32m 14\u001b[0m \u001b[38;5;66;03m# Create output array.\u001b[39;00m\n", - "\u001b[0;31mAssertionError\u001b[0m: " - ] - } - ], + "outputs": [], "source": [ "import dask.array as da\n", "variant_allele = ds_bi[\"variant_allele\"].data\n", @@ -619,46 +158,18 @@ }, { "cell_type": "code", - "execution_count": 95, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[ 0, 1, -1, -1],\n", - " [ 0, -1, -1, 1],\n", - " [ 0, 1, -1, -1],\n", - " ...,\n", - " [ 0, -1, -1, 1],\n", - " [ 0, -1, 1, -1],\n", - " [ 0, -1, 1, -1]], dtype=int32)" - ] - }, - "execution_count": 95, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "allele_mapping" ] }, { "cell_type": "code", - "execution_count": 92, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "120913" - ] - }, - "execution_count": 92, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "variant_allele.shape[0]" ] From 5e502bf46d5ed5bdf148ddfccbd2ffd83c701e21 Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Thu, 8 Aug 2024 09:18:59 +0100 Subject: [PATCH 04/42] Added chunking of allele_mapping array so that da.map blocks works Removed numba decorator for the apply_allele_mapping function, for now --- malariagen_data/anoph/snp_data.py | 24 ++++++++++++++++-------- malariagen_data/util.py | 6 ++---- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/malariagen_data/anoph/snp_data.py b/malariagen_data/anoph/snp_data.py index 7b0200914..57668462e 100644 --- a/malariagen_data/anoph/snp_data.py +++ b/malariagen_data/anoph/snp_data.py @@ -1627,15 +1627,23 @@ def biallelic_snp_calls( # Store alleles, transformed. variant_allele = ds_bi["variant_allele"].data variant_allele = variant_allele.rechunk((variant_allele.chunks[0], -1)) - # variant_allele_out = da.map_blocks( - # lambda block: apply_allele_mapping(block, allele_mapping, max_allele=1), - # variant_allele, - # dtype=variant_allele.dtype, - # chunks=(variant_allele.chunks[0], [2]), - # ) - variant_allele_out = apply_allele_mapping( - variant_allele.compute(), allele_mapping, max_allele=1 + + # Chunk allele mapping according to same variant_allele. + allele_mapping_chunked = da.from_array( + allele_mapping, chunks=variant_allele.chunks ) + + # Apply allele mapping blockwise to variant_allele. + variant_allele_out = da.map_blocks( + lambda allele, map: apply_allele_mapping(allele, map, max_allele=1), + variant_allele, + allele_mapping_chunked, + dtype=variant_allele.dtype, + chunks=(variant_allele.chunks[0], [2]), + ) + # variant_allele_out = apply_allele_mapping( + # variant_allele.compute(), allele_mapping, max_allele=1 + # ) data_vars["variant_allele"] = ("variants", "alleles"), variant_allele_out # Store allele counts, transformed, so we don't have to recompute. diff --git a/malariagen_data/util.py b/malariagen_data/util.py index 1221bae66..7c2a657d5 100644 --- a/malariagen_data/util.py +++ b/malariagen_data/util.py @@ -1348,7 +1348,7 @@ def trim_alleles(ac): return mapping -@numba.njit +# @numba.njit def apply_allele_mapping(x, mapping, max_allele): """Transform an array x, where the columns correspond to alleles, according to an allele mapping. @@ -1360,9 +1360,7 @@ def apply_allele_mapping(x, mapping, max_allele): n_sites = x.shape[0] n_alleles = x.shape[1] assert mapping.shape[0] == n_sites - assert ( - mapping.shape[1] == n_alleles - ) # these are not the same, work out what's going on - try running code with debugger? or print statementsd + assert mapping.shape[1] == n_alleles # Create output array. out = np.empty(shape=(n_sites, max_allele + 1), dtype=x.dtype) From 31f64693b54b06abc9134e47cc6e8010d41ac009 Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Thu, 8 Aug 2024 09:29:23 +0100 Subject: [PATCH 05/42] numba works fine --- malariagen_data/util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/malariagen_data/util.py b/malariagen_data/util.py index 7c2a657d5..d1fd46363 100644 --- a/malariagen_data/util.py +++ b/malariagen_data/util.py @@ -1348,7 +1348,7 @@ def trim_alleles(ac): return mapping -# @numba.njit +@numba.njit def apply_allele_mapping(x, mapping, max_allele): """Transform an array x, where the columns correspond to alleles, according to an allele mapping. From 4ef5e9c82678d23eef261ff73a40541a436cc839 Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Fri, 9 Aug 2024 08:10:53 +0100 Subject: [PATCH 06/42] clear up notebook --- notebooks/plink_convert.ipynb | 165 +--------------------------------- 1 file changed, 4 insertions(+), 161 deletions(-) diff --git a/notebooks/plink_convert.ipynb b/notebooks/plink_convert.ipynb index 473da2c85..f6768f7b5 100644 --- a/notebooks/plink_convert.ipynb +++ b/notebooks/plink_convert.ipynb @@ -6,172 +6,15 @@ "metadata": {}, "outputs": [], "source": [ - "import malariagen_data\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ + "import malariagen_data\n", + "\n", "ag3 = malariagen_data.Ag3(pre=True)\n", "\n", "ag3.biallelic_snps_to_plink(results_dir='/Users/dennistpw/Projects/malariagen-data-python/',\n", " region='2L:100000-2000000',\n", " n_snps=2000,\n", " sample_sets='AG1000G-AO',\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "region='2L:1001000-2009000',\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ds = ag3.snp_calls(\n", - " region=region,\n", - " sample_sets=sample_sets\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Perform an allele count.\n", - "ac = ag3.snp_allele_counts(\n", - " region=region,\n", - " sample_sets=sample_sets\n", - ")\n", - "\n", - "# Locate biallelic SNPs.\n", - "loc_bi = allel.AlleleCountsArray(ac).is_biallelic()\n", - "\n", - "# Remap alleles to squeeze out unobserved alleles.\n", - "ac_bi = ac[loc_bi]\n", - "allele_mapping = trim_alleles(ac_bi)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ds_bi = ds.isel(variants=loc_bi)\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ds_bi['variant_allele'].compute()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from typing import Any, Dict, List, Optional, Tuple, Union\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Start building a new dataset.\n", - "coords: Dict[str, Any] = dict()\n", - "data_vars: Dict[str, Any] = dict()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Store sample IDs.\n", - "coords[\"sample_id\"] = (\"samples\",), ds_bi[\"sample_id\"].data\n", - "\n", - "# Store contig.\n", - "coords[\"variant_contig\"] = (\"variants\",), ds_bi[\"variant_contig\"].data\n", - "\n", - "# Store position.\n", - "coords[\"variant_position\"] = (\"variants\",), ds_bi[\"variant_position\"].data" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import dask.array as da\n", - "variant_allele = ds_bi[\"variant_allele\"].data\n", - "variant_allele = variant_allele.rechunk((variant_allele.chunks[0], -1))\n", - "variant_allele_out = da.map_blocks(\n", - " lambda block: apply_allele_mapping(block, allele_mapping, max_allele=1),\n", - " variant_allele,\n", - " dtype=variant_allele.dtype,\n", - " chunks=(variant_allele.chunks[0], [2]),\n", - ")\n", - "variant_allele_out.compute()\n", - "# Store allele counts, transformed, so we don't have to recompute.\n", - "#ac_out = apply_allele_mapping(ac_bi, allele_mapping, max_allele=1)\n", - "#data_vars[\"variant_allele_count\"] = (\"variants\", \"alleles\"), ac_out" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "When we try to select only biallelic snps, we\n", - "- count the number of alleles\n", - "- select only" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "allele_mapping" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "variant_allele.shape[0]" + " )\n" ] } ], @@ -191,7 +34,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.19" + "version": "3.10.10" } }, "nbformat": 4, From af4743380e08d5c6555da9390971f4aa2edbe07f Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Tue, 27 Aug 2024 13:30:20 +0100 Subject: [PATCH 07/42] remove dud notebook, tidy up to_plink.py --- malariagen_data/anoph/test-1.ipynb | 237 ----------------------------- malariagen_data/anoph/to_plink.py | 59 +++---- notebooks/plink_convert.ipynb | 126 ++++++++++++++- output.png | Bin 0 -> 328529 bytes 4 files changed, 139 insertions(+), 283 deletions(-) delete mode 100644 malariagen_data/anoph/test-1.ipynb create mode 100644 output.png diff --git a/malariagen_data/anoph/test-1.ipynb b/malariagen_data/anoph/test-1.ipynb deleted file mode 100644 index cac9d8fdb..000000000 --- a/malariagen_data/anoph/test-1.ipynb +++ /dev/null @@ -1,237 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'base_params' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[1], line 162\u001b[0m\n\u001b[1;32m 140\u001b[0m bed_reader\u001b[38;5;241m.\u001b[39mto_bed(\n\u001b[1;32m 141\u001b[0m filepath\u001b[38;5;241m=\u001b[39mbed_file_path,\n\u001b[1;32m 142\u001b[0m val\u001b[38;5;241m=\u001b[39mval,\n\u001b[1;32m 143\u001b[0m properties\u001b[38;5;241m=\u001b[39mproperties,\n\u001b[1;32m 144\u001b[0m count_A1\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m,\n\u001b[1;32m 145\u001b[0m )\n\u001b[1;32m 147\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m plink_file_path\n\u001b[1;32m 149\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mbiallelic_snps_to_plink\u001b[39m(\n\u001b[1;32m 150\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 151\u001b[0m results_dir,\n\u001b[1;32m 152\u001b[0m region: base_params\u001b[38;5;241m.\u001b[39mregions,\n\u001b[1;32m 153\u001b[0m n_snps: base_params\u001b[38;5;241m.\u001b[39mn_snps,\n\u001b[1;32m 154\u001b[0m thin_offset: base_params\u001b[38;5;241m.\u001b[39mthin_offset \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m,\n\u001b[1;32m 155\u001b[0m sample_sets: Optional[base_params\u001b[38;5;241m.\u001b[39msample_sets] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 156\u001b[0m sample_query: Optional[base_params\u001b[38;5;241m.\u001b[39msample_query] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 157\u001b[0m sample_indices: Optional[base_params\u001b[38;5;241m.\u001b[39msample_indices] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 158\u001b[0m site_mask: Optional[base_params\u001b[38;5;241m.\u001b[39msite_mask] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 159\u001b[0m min_minor_ac: Optional[base_params\u001b[38;5;241m.\u001b[39mmin_minor_ac] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 160\u001b[0m max_missing_an: Optional[base_params\u001b[38;5;241m.\u001b[39mmax_missing_an] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 161\u001b[0m random_seed: base_params\u001b[38;5;241m.\u001b[39mrandom_seed \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m42\u001b[39m,\n\u001b[0;32m--> 162\u001b[0m inline_array: base_params\u001b[38;5;241m.\u001b[39minline_array \u001b[38;5;241m=\u001b[39m \u001b[43mbase_params\u001b[49m\u001b[38;5;241m.\u001b[39minline_array_default,\n\u001b[1;32m 163\u001b[0m chunks: base_params\u001b[38;5;241m.\u001b[39mchunks \u001b[38;5;241m=\u001b[39m base_params\u001b[38;5;241m.\u001b[39mchunks_default,\n\u001b[1;32m 164\u001b[0m ):\n\u001b[1;32m 166\u001b[0m params \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mdict\u001b[39m(\n\u001b[1;32m 167\u001b[0m results_dir\u001b[38;5;241m=\u001b[39mresults_dir,\n\u001b[1;32m 168\u001b[0m region\u001b[38;5;241m=\u001b[39mregion,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 177\u001b[0m random_seed\u001b[38;5;241m=\u001b[39mrandom_seed,\n\u001b[1;32m 178\u001b[0m )\n\u001b[1;32m 179\u001b[0m \u001b[38;5;66;03m#for the sake of getting this going \u001b[39;00m\n\u001b[1;32m 180\u001b[0m \u001b[38;5;66;03m#and also because i expect sanjay and ali will rework most of this, i will forgo the type checks until later\u001b[39;00m\n", - "\u001b[0;31mNameError\u001b[0m: name 'base_params' is not defined" - ] - } - ], - "source": [ - "import malariagen_data\n", - "from collections import Counter\n", - "from typing import Optional, Tuple\n", - "\n", - "import allel # type: ignore\n", - "import numpy as np\n", - "import os\n", - "import bed_reader\n", - "from dask.diagnostics import ProgressBar\n", - "# import bokeh.plotting\n", - "\n", - "#from .snp_data import AnophelesSnpData\n", - "#from ..util import hash_columns, check_types, CacheMiss\n", - "#from . import base_params\n", - "#from .base_params import DEFAULT\n", - "\n", - "def _create_plink_outfile(\n", - " self,\n", - " *,\n", - " results_dir,\n", - " region,\n", - " n_snps,\n", - " min_minor_ac,\n", - " thin_offset,\n", - " max_missing_an,\n", - "):\n", - " return f\"{results_dir}/{region}.{n_snps}.{min_minor_ac}.{thin_offset}.{max_missing_an}\"\n", - "\n", - "def _biallelic_snps_to_plink(\n", - " #_ means internal function\n", - " #loads biallelic diplotypes and selects segregating sites among them, converts to plink\n", - " self,\n", - " *,\n", - " results_dir,\n", - " region,\n", - " n_snps,\n", - " thin_offset,\n", - " sample_sets,\n", - " sample_query,\n", - " sample_indices,\n", - " site_mask,\n", - " min_minor_ac,\n", - " max_missing_an,\n", - " random_seed,\n", - " inline_array,\n", - " chunks,\n", - "):\n", - " \n", - " #first define output file\n", - " plink_file_path = self._create_plink_outfile(\n", - " results_dir=results_dir,\n", - " region=region,\n", - " n_snps=n_snps,\n", - " thin_offset=thin_offset,\n", - " min_minor_ac=min_minor_ac,\n", - " max_missing_an=max_missing_an,\n", - " )\n", - "\n", - " bed_file_path = f\"{plink_file_path}.bed\"\n", - " if os.path.exists(bed_file_path):\n", - " return plink_file_path\n", - "\n", - " #get snps\n", - " ds_snps = self.biallelic_snp_calls(\n", - " n_snps=n_snps,\n", - " region=region,\n", - " thin_offset=thin_offset,\n", - " sample_sets=sample_sets,\n", - " sample_query=sample_query,\n", - " sample_indices=sample_indices,\n", - " site_mask=site_mask,\n", - " min_minor_ac=min_minor_ac,\n", - " max_missing_an=max_missing_an,\n", - " random_seed=random_seed,\n", - " inline_array=inline_array,\n", - " chunks=chunks,\n", - " )\n", - "\n", - "\n", - " #filter snps on segregating sites\n", - " with self._spinner(\"Subsetting to segregating sites\"):\n", - " gt = ds_snps[\"call_genotype\"].data.compute()\n", - " print(\"count alleles\")\n", - " with ProgressBar():\n", - " ac = allel.GenotypeArray(gt).count_alleles(max_allele=3)\n", - " print(\"ascertain segregating sites\")\n", - " n_chroms = ds_snps.dims[\"samples\"] * 2\n", - " an_called = ac.sum(axis=1)\n", - " an_missing = n_chroms - an_called\n", - " min_ref_ac = min_minor_ac\n", - " max_ref_ac = n_chroms - min_minor_ac\n", - " # here we choose segregating sites\n", - " loc_sites = (\n", - " (ac[:, 0] >= min_ref_ac)\n", - " & (ac[:, 0] <= max_ref_ac)\n", - " & (an_missing <= max_missing_an)\n", - " )\n", - " print(f\"ascertained {np.count_nonzero(loc_sites):,} sites\")\n", - "\n", - "\n", - " #set up dataset with required vars for plink conversion\n", - " print(\"Set up dataset\")\n", - " ds_snps_asc = (\n", - " ds_snps[[\"variant_contig\", \"variant_position\", \"variant_allele\", \"sample_id\", \"call_genotype\"]]\n", - " .isel(alleles=slice(0, 2))\n", - " .sel(variants=loc_sites)\n", - " )\n", - "\n", - " #compute gt ref counts\n", - " with self._spinner(\"Computing genotype ref counts\"):\n", - " gn_ref = allel.GenotypeDaskArray(gt).to_n_ref(fill=-127) #what does the fill do\n", - " with ProgressBar():\n", - " gn_ref = gn_ref.compute()\n", - "\n", - " print(\"Ensure genotypes vary\")\n", - " loc_var = np.any(gn_ref != gn_ref[:, 0, np.newaxis], axis=1)\n", - " print(f\"final no. variants {np.count_nonzero(loc_var)}\")\n", - "\n", - "\n", - " print(\"Load final data\")\n", - " with ProgressBar():\n", - " ds_snps_final = (\n", - " ds_snps_asc[[\"variant_contig\", \"variant_position\", \"variant_allele\", \"sample_id\"]]\n", - " .isel(variants=loc_var)\n", - " )\n", - "\n", - " #init vars for input to bed reader\n", - " gn_ref_final = gn_ref[loc_var]\n", - " val = gn_ref_final.T\n", - " alleles = ds_snps_final[\"variant_allele\"].values\n", - " properties = {\n", - " \"iid\": ds_snps_final[\"sample_id\"].values,\n", - " \"chromosome\": ds_snps_final[\"variant_contig\"].values,\n", - " \"bp_position\": ds_snps_final[\"variant_position\"].values,\n", - " \"allele_1\": alleles[:, 0],\n", - " \"allele_2\": alleles[:, 1],\n", - " }\n", - "\n", - " print(f\"write plink files to {plink_file_path}\")\n", - " bed_reader.to_bed(\n", - " filepath=bed_file_path,\n", - " val=val,\n", - " properties=properties,\n", - " count_A1=True,\n", - " )\n", - "\n", - " return plink_file_path\n", - "\n", - "def biallelic_snps_to_plink(\n", - " self,\n", - " results_dir,\n", - " region: base_params.regions,\n", - " n_snps: base_params.n_snps,\n", - " thin_offset = 0,\n", - " sample_sets: Optional[base_params.sample_sets] = None,\n", - " sample_query: Optional[base_params.sample_query] = None,\n", - " sample_indices: Optional[base_params.sample_indices] = None,\n", - " site_mask: Optional[base_params.site_mask] = None,\n", - " min_minor_ac: Optional[base_params.min_minor_ac] = None,\n", - " max_missing_an: Optional[base_params.max_missing_an] = None,\n", - " random_seed: base_params.random_seed = 42,\n", - " inline_array: base_params.inline_array = base_params.inline_array_default,\n", - " chunks: base_params.chunks = base_params.chunks_default,\n", - "):\n", - " \n", - " params = dict(\n", - " results_dir=results_dir,\n", - " region=region,\n", - " n_snps=n_snps,\n", - " thin_offset=thin_offset,\n", - " sample_sets=sample_sets,\n", - " sample_query=sample_query,\n", - " sample_indices=sample_indices,\n", - " site_mask=site_mask,\n", - " min_minor_ac=min_minor_ac,\n", - " max_missing_an=max_missing_an,\n", - " random_seed=random_seed,\n", - " )\n", - " #for the sake of getting this going \n", - " #and also because i expect sanjay and ali will rework most of this, i will forgo the type checks until later\n", - "\n", - " filepath = self._biallelic_snps_to_plink(\n", - " inline_array=inline_array, chunks=chunks, **params\n", - " )\n", - " return filepath" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "malariagen_plink", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.10" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/malariagen_data/anoph/to_plink.py b/malariagen_data/anoph/to_plink.py index 010ad6375..a814f53ae 100644 --- a/malariagen_data/anoph/to_plink.py +++ b/malariagen_data/anoph/to_plink.py @@ -5,15 +5,12 @@ import os import bed_reader from dask.diagnostics import ProgressBar -# import bokeh.plotting from .snp_data import AnophelesSnpData from . import base_params -# So far all of this has been copied from Sanjay's g123 notebook as it loads snp data with some optional filters. class PlinkConverter( - # ADMIXTURE is the main reason I want to convert malaariagen SNP data to PLINK format, and it uses genotype data. AnophelesSnpData, ): def __init__( @@ -38,8 +35,6 @@ def _create_plink_outfile( return f"{results_dir}/{region}.{n_snps}.{min_minor_ac}.{thin_offset}.{max_missing_an}" def _biallelic_snps_to_plink( - # _ means internal function - # loads biallelic diplotypes and selects segregating sites among them, converts to plink self, *, results_dir, @@ -56,7 +51,7 @@ def _biallelic_snps_to_plink( inline_array, chunks, ): - # first define output file + # Define output file plink_file_path = self._create_plink_outfile( results_dir=results_dir, region=region, @@ -70,22 +65,20 @@ def _biallelic_snps_to_plink( if os.path.exists(bed_file_path): return plink_file_path - # get snps + # Get snps ds_snps = self.biallelic_snp_calls( region=region, sample_sets=sample_sets, sample_query=sample_query, sample_indices=sample_indices, site_mask=site_mask, - # min_minor_ac=min_minor_ac, - # max_missing_an=max_missing_an, random_seed=random_seed, inline_array=inline_array, chunks=chunks, n_snps=n_snps, ) - # filter snps on segregating sites + # Filter SNPs for segregating sites only with self._spinner("Subsetting to segregating sites"): gt = ds_snps["call_genotype"].data.compute() print("count alleles") @@ -97,53 +90,40 @@ def _biallelic_snps_to_plink( an_missing = n_chroms - an_called min_ref_ac = min_minor_ac max_ref_ac = n_chroms - min_minor_ac - # here we choose segregating sites - loc_sites = ( # put in is_biallelic + loc_sites = ( (ac[:, 0] >= min_ref_ac) & (ac[:, 0] <= max_ref_ac) & (an_missing <= max_missing_an) ) print(f"ascertained {np.count_nonzero(loc_sites):,} sites") - # print("thin sites") - # ix_sites = np.nonzero(loc_sites)[0] - # thin_step = max(ix_sites.shape[0] // n_snps, 1) - # ix_sites_thinned = ix_sites[thin_offset::thin_step] - # print(f"thinned to {np.count_nonzero(ix_sites_thinned):,} sites") - - # set up dataset with required vars for plink conversion + # Set up dataset with required vars for plink conversion print("Set up dataset") - ds_snps_asc = ( - ds_snps[ - [ - "variant_contig", - "variant_position", - "variant_allele", - "sample_id", - "call_genotype", - ] - ].isel(alleles=slice(0, 2)) - # .sel(variants=ix_sites_thinned) - ) - - # compute gt ref counts + ds_snps_asc = ds_snps[ + [ + "variant_contig", + "variant_position", + "variant_allele", + "sample_id", + "call_genotype", + ] + ].isel(alleles=slice(0, 2)) + + # Compute gt ref counts with self._spinner("Computing genotype ref counts"): gt_asc = ds_snps_asc["call_genotype"].data.compute() gn_ref = allel.GenotypeDaskArray(gt_asc).to_n_ref(fill=-127) with ProgressBar(): gn_ref = gn_ref.compute() - print("Ensure genotypes vary") loc_var = np.any(gn_ref != gn_ref[:, 0, np.newaxis], axis=1) - print(f"final no. variants {np.count_nonzero(loc_var)}") - print("Load final data") with ProgressBar(): ds_snps_final = ds_snps_asc[ ["variant_contig", "variant_position", "variant_allele", "sample_id"] ].isel(variants=loc_var) - # init vars for input to bed reader + # Init vars for input to bed reader gn_ref_final = gn_ref[loc_var] val = gn_ref_final.T alleles = ds_snps_final["variant_allele"].values @@ -155,7 +135,6 @@ def _biallelic_snps_to_plink( "allele_2": alleles[:, 1], } - print(f"write plink files to {plink_file_path}") bed_reader.to_bed( filepath=bed_file_path, val=val, @@ -163,6 +142,8 @@ def _biallelic_snps_to_plink( count_A1=True, ) + print(f"PLINK files written to to: {plink_file_path}") + return plink_file_path def biallelic_snps_to_plink( @@ -194,8 +175,6 @@ def biallelic_snps_to_plink( max_missing_an=max_missing_an, random_seed=random_seed, ) - # for the sake of getting this going - # and also because i expect sanjay and ali will rework most of this, i will forgo the type checks until later filepath = self._biallelic_snps_to_plink( inline_array=inline_array, chunks=chunks, **params diff --git a/notebooks/plink_convert.ipynb b/notebooks/plink_convert.ipynb index f6768f7b5..e4c75a525 100644 --- a/notebooks/plink_convert.ipynb +++ b/notebooks/plink_convert.ipynb @@ -2,19 +2,133 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "application/javascript": "(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\nconst JS_MIME_TYPE = 'application/javascript';\n const HTML_MIME_TYPE = 'text/html';\n const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n const CLASS_NAME = 'output_bokeh rendered_html';\n\n /**\n * Render data to the DOM node\n */\n function render(props, node) {\n const script = document.createElement(\"script\");\n node.appendChild(script);\n }\n\n /**\n * Handle when an output is cleared or removed\n */\n function handleClearOutput(event, handle) {\n const cell = handle.cell;\n\n const id = cell.output_area._bokeh_element_id;\n const server_id = cell.output_area._bokeh_server_id;\n // Clean up Bokeh references\n if (id != null && id in Bokeh.index) {\n Bokeh.index[id].model.document.clear();\n delete Bokeh.index[id];\n }\n\n if (server_id !== undefined) {\n // Clean up Bokeh references\n const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n cell.notebook.kernel.execute(cmd_clean, {\n iopub: {\n output: function(msg) {\n const id = msg.content.text.trim();\n if (id in Bokeh.index) {\n Bokeh.index[id].model.document.clear();\n delete Bokeh.index[id];\n }\n }\n }\n });\n // Destroy server and session\n const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n cell.notebook.kernel.execute(cmd_destroy);\n }\n }\n\n /**\n * Handle when a new output is added\n */\n function handleAddOutput(event, handle) {\n const output_area = handle.output_area;\n const output = handle.output;\n\n // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n return\n }\n\n const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n\n if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n // store reference to embed id on output_area\n output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n }\n if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n const bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n const script_attrs = bk_div.children[0].attributes;\n for (let i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n }\n\n function register_renderer(events, OutputArea) {\n\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n const toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[toinsert.length - 1]);\n element.append(toinsert);\n return toinsert\n }\n\n /* Handle when an output is cleared or removed */\n events.on('clear_output.CodeCell', handleClearOutput);\n events.on('delete.Cell', handleClearOutput);\n\n /* Handle when a new output is added */\n events.on('output_added.OutputArea', handleAddOutput);\n\n /**\n * Register the mime type and append_mime function with output_area\n */\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n /* Is output safe? */\n safe: true,\n /* Index of renderer in `output_area.display_order` */\n index: 0\n });\n }\n\n // register the mime type if in Jupyter Notebook environment and previously unregistered\n if (root.Jupyter !== undefined) {\n const events = require('base/js/events');\n const OutputArea = require('notebook/js/outputarea').OutputArea;\n\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n }\n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"
      \\n\"+\n \"

      \\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

      \\n\"+\n \"
        \\n\"+\n \"
      • re-rerun `output_notebook()` to attempt to load from CDN again, or
      • \\n\"+\n \"
      • use INLINE resources instead, as so:
      • \\n\"+\n \"
      \\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
      \"}};\n\n function display_loaded() {\n const el = document.getElementById(null);\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.1.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.1.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.1.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.1.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-3.1.1.min.js\"];\n const css_urls = [];\n\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {\n }\n ];\n\n function run_inline_js() {\n if (root.Bokeh !== undefined || force === true) {\n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(null)).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));", + "application/vnd.bokehjs_load.v0+json": "" + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "_request non-retriable exception: Anonymous caller does not have storage.objects.list access to the Google Cloud Storage bucket. Permission 'storage.objects.list' denied on resource (or it may not exist)., 401\n", + "Traceback (most recent call last):\n", + " File \"/Users/dennistpw/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/retry.py\", line 123, in retry_request\n", + " return await func(*args, **kwargs)\n", + " File \"/Users/dennistpw/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/core.py\", line 430, in _request\n", + " validate_response(status, contents, path, args)\n", + " File \"/Users/dennistpw/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/retry.py\", line 110, in validate_response\n", + " raise HttpError(error)\n", + "gcsfs.retry.HttpError: Anonymous caller does not have storage.objects.list access to the Google Cloud Storage bucket. Permission 'storage.objects.list' denied on resource (or it may not exist)., 401\n" + ] + }, + { + "ename": "HttpError", + "evalue": "Anonymous caller does not have storage.objects.list access to the Google Cloud Storage bucket. Permission 'storage.objects.list' denied on resource (or it may not exist)., 401", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mHttpError\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/IPython/core/formatters.py:708\u001b[0m, in \u001b[0;36mPlainTextFormatter.__call__\u001b[0;34m(self, obj)\u001b[0m\n\u001b[1;32m 701\u001b[0m stream \u001b[38;5;241m=\u001b[39m StringIO()\n\u001b[1;32m 702\u001b[0m printer \u001b[38;5;241m=\u001b[39m pretty\u001b[38;5;241m.\u001b[39mRepresentationPrinter(stream, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mverbose,\n\u001b[1;32m 703\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmax_width, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mnewline,\n\u001b[1;32m 704\u001b[0m max_seq_length\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmax_seq_length,\n\u001b[1;32m 705\u001b[0m singleton_pprinters\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msingleton_printers,\n\u001b[1;32m 706\u001b[0m type_pprinters\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtype_printers,\n\u001b[1;32m 707\u001b[0m deferred_pprinters\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdeferred_printers)\n\u001b[0;32m--> 708\u001b[0m \u001b[43mprinter\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpretty\u001b[49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 709\u001b[0m printer\u001b[38;5;241m.\u001b[39mflush()\n\u001b[1;32m 710\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m stream\u001b[38;5;241m.\u001b[39mgetvalue()\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/IPython/lib/pretty.py:410\u001b[0m, in \u001b[0;36mRepresentationPrinter.pretty\u001b[0;34m(self, obj)\u001b[0m\n\u001b[1;32m 407\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m meth(obj, \u001b[38;5;28mself\u001b[39m, cycle)\n\u001b[1;32m 408\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mcls\u001b[39m \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mobject\u001b[39m \\\n\u001b[1;32m 409\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mcallable\u001b[39m(\u001b[38;5;28mcls\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__dict__\u001b[39m\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m__repr__\u001b[39m\u001b[38;5;124m'\u001b[39m)):\n\u001b[0;32m--> 410\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_repr_pprint\u001b[49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcycle\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 412\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m _default_pprint(obj, \u001b[38;5;28mself\u001b[39m, cycle)\n\u001b[1;32m 413\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/IPython/lib/pretty.py:778\u001b[0m, in \u001b[0;36m_repr_pprint\u001b[0;34m(obj, p, cycle)\u001b[0m\n\u001b[1;32m 776\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"A pprint that just redirects to the normal repr function.\"\"\"\u001b[39;00m\n\u001b[1;32m 777\u001b[0m \u001b[38;5;66;03m# Find newlines and replace them with p.break_()\u001b[39;00m\n\u001b[0;32m--> 778\u001b[0m output \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mrepr\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 779\u001b[0m lines \u001b[38;5;241m=\u001b[39m output\u001b[38;5;241m.\u001b[39msplitlines()\n\u001b[1;32m 780\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m p\u001b[38;5;241m.\u001b[39mgroup():\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/malariagen_data/ag3.py:206\u001b[0m, in \u001b[0;36mAg3.__repr__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 204\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__repr__\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m 205\u001b[0m text \u001b[38;5;241m=\u001b[39m (\n\u001b[0;32m--> 206\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 207\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mStorage URL : \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_url\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 208\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mData releases available : \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m, \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;241m.\u001b[39mjoin(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mreleases)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 209\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mResults cache : \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_results_cache\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 210\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCohorts analysis : \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cohorts_analysis\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 211\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mAIM analysis : \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_aim_analysis\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 212\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mSite filters analysis : \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_site_filters_analysis\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 213\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mSoftware version : malariagen_data \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mmalariagen_data\u001b[38;5;241m.\u001b[39m__version__\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 214\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mClient location : \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mclient_location\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 215\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m---\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 216\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mPlease note that data are subject to terms of use,\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 217\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mfor more information see https://www.malariagen.net/data\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 218\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mor contact data@malariagen.net. For API documentation see \u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 219\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhttps://malariagen.github.io/malariagen-data-python/v\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mmalariagen_data\u001b[38;5;241m.\u001b[39m__version__\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m/Ag3.html\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 220\u001b[0m )\n\u001b[1;32m 221\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m text\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/malariagen_data/anoph/base.py:272\u001b[0m, in \u001b[0;36mAnophelesBase.releases\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 270\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cache_releases \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 271\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_pre:\n\u001b[0;32m--> 272\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cache_releases \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_discover_releases\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 273\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 274\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cache_releases \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_public_releases()\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/malariagen_data/anoph/base.py:253\u001b[0m, in \u001b[0;36mAnophelesBase._discover_releases\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 245\u001b[0m \u001b[38;5;129m@doc\u001b[39m(\n\u001b[1;32m 246\u001b[0m summary\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\"\"\u001b[39m\n\u001b[1;32m 247\u001b[0m \u001b[38;5;124m Here we discover which releases are available, by listing the storage\u001b[39m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 251\u001b[0m )\n\u001b[1;32m 252\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_discover_releases\u001b[39m(\u001b[38;5;28mself\u001b[39m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Tuple[\u001b[38;5;28mstr\u001b[39m, \u001b[38;5;241m.\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;241m.\u001b[39m]:\n\u001b[0;32m--> 253\u001b[0m sub_dirs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28msorted\u001b[39m([p\u001b[38;5;241m.\u001b[39msplit(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m/\u001b[39m\u001b[38;5;124m\"\u001b[39m)[\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m] \u001b[38;5;28;01mfor\u001b[39;00m p \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_fs\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mls\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_base_path\u001b[49m\u001b[43m)\u001b[49m])\n\u001b[1;32m 254\u001b[0m discovered_releases \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mtuple\u001b[39m(\n\u001b[1;32m 255\u001b[0m \u001b[38;5;28msorted\u001b[39m(\n\u001b[1;32m 256\u001b[0m [\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 263\u001b[0m )\n\u001b[1;32m 264\u001b[0m )\n\u001b[1;32m 265\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m discovered_releases\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/fsspec/asyn.py:118\u001b[0m, in \u001b[0;36msync_wrapper..wrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 115\u001b[0m \u001b[38;5;129m@functools\u001b[39m\u001b[38;5;241m.\u001b[39mwraps(func)\n\u001b[1;32m 116\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mwrapper\u001b[39m(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 117\u001b[0m \u001b[38;5;28mself\u001b[39m \u001b[38;5;241m=\u001b[39m obj \u001b[38;5;129;01mor\u001b[39;00m args[\u001b[38;5;241m0\u001b[39m]\n\u001b[0;32m--> 118\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43msync\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mloop\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfunc\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/fsspec/asyn.py:103\u001b[0m, in \u001b[0;36msync\u001b[0;34m(loop, func, timeout, *args, **kwargs)\u001b[0m\n\u001b[1;32m 101\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m FSTimeoutError \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mreturn_result\u001b[39;00m\n\u001b[1;32m 102\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(return_result, \u001b[38;5;167;01mBaseException\u001b[39;00m):\n\u001b[0;32m--> 103\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m return_result\n\u001b[1;32m 104\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 105\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m return_result\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/fsspec/asyn.py:56\u001b[0m, in \u001b[0;36m_runner\u001b[0;34m(event, coro, result, timeout)\u001b[0m\n\u001b[1;32m 54\u001b[0m coro \u001b[38;5;241m=\u001b[39m asyncio\u001b[38;5;241m.\u001b[39mwait_for(coro, timeout\u001b[38;5;241m=\u001b[39mtimeout)\n\u001b[1;32m 55\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m---> 56\u001b[0m result[\u001b[38;5;241m0\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mawait\u001b[39;00m coro\n\u001b[1;32m 57\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m ex:\n\u001b[1;32m 58\u001b[0m result[\u001b[38;5;241m0\u001b[39m] \u001b[38;5;241m=\u001b[39m ex\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/core.py:995\u001b[0m, in \u001b[0;36mGCSFileSystem._ls\u001b[0;34m(self, path, detail, prefix, versions, refresh, **kwargs)\u001b[0m\n\u001b[1;32m 993\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 994\u001b[0m out \u001b[38;5;241m=\u001b[39m []\n\u001b[0;32m--> 995\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m entry \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28;01mawait\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_list_objects(\n\u001b[1;32m 996\u001b[0m path, prefix\u001b[38;5;241m=\u001b[39mprefix, versions\u001b[38;5;241m=\u001b[39mversions, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs\n\u001b[1;32m 997\u001b[0m ):\n\u001b[1;32m 998\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m versions \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mgeneration\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;129;01min\u001b[39;00m entry:\n\u001b[1;32m 999\u001b[0m entry \u001b[38;5;241m=\u001b[39m entry\u001b[38;5;241m.\u001b[39mcopy()\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/core.py:564\u001b[0m, in \u001b[0;36mGCSFileSystem._list_objects\u001b[0;34m(self, path, prefix, versions, **kwargs)\u001b[0m\n\u001b[1;32m 561\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m key:\n\u001b[1;32m 562\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m\n\u001b[0;32m--> 564\u001b[0m items, prefixes \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mawait\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_do_list_objects(\n\u001b[1;32m 565\u001b[0m path, prefix\u001b[38;5;241m=\u001b[39mprefix, versions\u001b[38;5;241m=\u001b[39mversions, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs\n\u001b[1;32m 566\u001b[0m )\n\u001b[1;32m 568\u001b[0m pseudodirs \u001b[38;5;241m=\u001b[39m [\n\u001b[1;32m 569\u001b[0m {\n\u001b[1;32m 570\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mbucket\u001b[39m\u001b[38;5;124m\"\u001b[39m: bucket,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 576\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m prefix \u001b[38;5;129;01min\u001b[39;00m prefixes\n\u001b[1;32m 577\u001b[0m ]\n\u001b[1;32m 578\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (items \u001b[38;5;241m+\u001b[39m pseudodirs):\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/core.py:638\u001b[0m, in \u001b[0;36mGCSFileSystem._do_list_objects\u001b[0;34m(self, path, max_results, delimiter, prefix, versions, **kwargs)\u001b[0m\n\u001b[1;32m 626\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mawait\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_concurrent_list_objects_helper(\n\u001b[1;32m 627\u001b[0m items\u001b[38;5;241m=\u001b[39mitems,\n\u001b[1;32m 628\u001b[0m bucket\u001b[38;5;241m=\u001b[39mbucket,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 632\u001b[0m page_size\u001b[38;5;241m=\u001b[39mdefault_page_size,\n\u001b[1;32m 633\u001b[0m )\n\u001b[1;32m 635\u001b[0m \u001b[38;5;66;03m# If the user has not configured inventory report, proceed to use\u001b[39;00m\n\u001b[1;32m 636\u001b[0m \u001b[38;5;66;03m# sequential listing.\u001b[39;00m\n\u001b[1;32m 637\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 638\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mawait\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_sequential_list_objects_helper(\n\u001b[1;32m 639\u001b[0m bucket\u001b[38;5;241m=\u001b[39mbucket,\n\u001b[1;32m 640\u001b[0m delimiter\u001b[38;5;241m=\u001b[39mdelimiter,\n\u001b[1;32m 641\u001b[0m start_offset\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 642\u001b[0m end_offset\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 643\u001b[0m prefix\u001b[38;5;241m=\u001b[39mprefix,\n\u001b[1;32m 644\u001b[0m versions\u001b[38;5;241m=\u001b[39mversions,\n\u001b[1;32m 645\u001b[0m page_size\u001b[38;5;241m=\u001b[39mdefault_page_size,\n\u001b[1;32m 646\u001b[0m )\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/core.py:732\u001b[0m, in \u001b[0;36mGCSFileSystem._sequential_list_objects_helper\u001b[0;34m(self, bucket, delimiter, start_offset, end_offset, prefix, versions, page_size)\u001b[0m\n\u001b[1;32m 729\u001b[0m prefixes \u001b[38;5;241m=\u001b[39m []\n\u001b[1;32m 730\u001b[0m items \u001b[38;5;241m=\u001b[39m []\n\u001b[0;32m--> 732\u001b[0m page \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mawait\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_call(\n\u001b[1;32m 733\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mGET\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 734\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mb/\u001b[39m\u001b[38;5;132;01m{}\u001b[39;00m\u001b[38;5;124m/o\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 735\u001b[0m bucket,\n\u001b[1;32m 736\u001b[0m delimiter\u001b[38;5;241m=\u001b[39mdelimiter,\n\u001b[1;32m 737\u001b[0m prefix\u001b[38;5;241m=\u001b[39mprefix,\n\u001b[1;32m 738\u001b[0m startOffset\u001b[38;5;241m=\u001b[39mstart_offset,\n\u001b[1;32m 739\u001b[0m endOffset\u001b[38;5;241m=\u001b[39mend_offset,\n\u001b[1;32m 740\u001b[0m maxResults\u001b[38;5;241m=\u001b[39mpage_size,\n\u001b[1;32m 741\u001b[0m json_out\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m,\n\u001b[1;32m 742\u001b[0m versions\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtrue\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m versions \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 743\u001b[0m )\n\u001b[1;32m 745\u001b[0m prefixes\u001b[38;5;241m.\u001b[39mextend(page\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mprefixes\u001b[39m\u001b[38;5;124m\"\u001b[39m, []))\n\u001b[1;32m 746\u001b[0m items\u001b[38;5;241m.\u001b[39mextend(page\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mitems\u001b[39m\u001b[38;5;124m\"\u001b[39m, []))\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/core.py:437\u001b[0m, in \u001b[0;36mGCSFileSystem._call\u001b[0;34m(self, method, path, json_out, info_out, *args, **kwargs)\u001b[0m\n\u001b[1;32m 433\u001b[0m \u001b[38;5;28;01masync\u001b[39;00m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_call\u001b[39m(\n\u001b[1;32m 434\u001b[0m \u001b[38;5;28mself\u001b[39m, method, path, \u001b[38;5;241m*\u001b[39margs, json_out\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m, info_out\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs\n\u001b[1;32m 435\u001b[0m ):\n\u001b[1;32m 436\u001b[0m logger\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mmethod\u001b[38;5;241m.\u001b[39mupper()\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mpath\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m, \u001b[39m\u001b[38;5;132;01m{\u001b[39;00margs\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m, \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mkwargs\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mheaders\u001b[39m\u001b[38;5;124m'\u001b[39m)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m--> 437\u001b[0m status, headers, info, contents \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mawait\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_request(\n\u001b[1;32m 438\u001b[0m method, path, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs\n\u001b[1;32m 439\u001b[0m )\n\u001b[1;32m 440\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m json_out:\n\u001b[1;32m 441\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m json\u001b[38;5;241m.\u001b[39mloads(contents)\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/decorator.py:221\u001b[0m, in \u001b[0;36mdecorate..fun\u001b[0;34m(*args, **kw)\u001b[0m\n\u001b[1;32m 219\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m kwsyntax:\n\u001b[1;32m 220\u001b[0m args, kw \u001b[38;5;241m=\u001b[39m fix(args, kw, sig)\n\u001b[0;32m--> 221\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mawait\u001b[39;00m caller(func, \u001b[38;5;241m*\u001b[39m(extras \u001b[38;5;241m+\u001b[39m args), \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkw)\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/retry.py:158\u001b[0m, in \u001b[0;36mretry_request\u001b[0;34m(func, retries, *args, **kwargs)\u001b[0m\n\u001b[1;32m 156\u001b[0m \u001b[38;5;28;01mcontinue\u001b[39;00m\n\u001b[1;32m 157\u001b[0m logger\u001b[38;5;241m.\u001b[39mexception(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mfunc\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m non-retriable exception: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00me\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m--> 158\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m e\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/retry.py:123\u001b[0m, in \u001b[0;36mretry_request\u001b[0;34m(func, retries, *args, **kwargs)\u001b[0m\n\u001b[1;32m 121\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m retry \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m0\u001b[39m:\n\u001b[1;32m 122\u001b[0m \u001b[38;5;28;01mawait\u001b[39;00m asyncio\u001b[38;5;241m.\u001b[39msleep(\u001b[38;5;28mmin\u001b[39m(random\u001b[38;5;241m.\u001b[39mrandom() \u001b[38;5;241m+\u001b[39m \u001b[38;5;241m2\u001b[39m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m (retry \u001b[38;5;241m-\u001b[39m \u001b[38;5;241m1\u001b[39m), \u001b[38;5;241m32\u001b[39m))\n\u001b[0;32m--> 123\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mawait\u001b[39;00m func(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 124\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (\n\u001b[1;32m 125\u001b[0m HttpError,\n\u001b[1;32m 126\u001b[0m requests\u001b[38;5;241m.\u001b[39mexceptions\u001b[38;5;241m.\u001b[39mRequestException,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 129\u001b[0m aiohttp\u001b[38;5;241m.\u001b[39mclient_exceptions\u001b[38;5;241m.\u001b[39mClientError,\n\u001b[1;32m 130\u001b[0m ) \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 131\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (\n\u001b[1;32m 132\u001b[0m \u001b[38;5;28misinstance\u001b[39m(e, HttpError)\n\u001b[1;32m 133\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m e\u001b[38;5;241m.\u001b[39mcode \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m400\u001b[39m\n\u001b[1;32m 134\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrequester pays\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;129;01min\u001b[39;00m e\u001b[38;5;241m.\u001b[39mmessage\n\u001b[1;32m 135\u001b[0m ):\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/core.py:430\u001b[0m, in \u001b[0;36mGCSFileSystem._request\u001b[0;34m(self, method, path, headers, json, data, *args, **kwargs)\u001b[0m\n\u001b[1;32m 427\u001b[0m info \u001b[38;5;241m=\u001b[39m r\u001b[38;5;241m.\u001b[39mrequest_info \u001b[38;5;66;03m# for debug only\u001b[39;00m\n\u001b[1;32m 428\u001b[0m contents \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mawait\u001b[39;00m r\u001b[38;5;241m.\u001b[39mread()\n\u001b[0;32m--> 430\u001b[0m \u001b[43mvalidate_response\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstatus\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcontents\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpath\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 431\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m status, headers, info, contents\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/retry.py:110\u001b[0m, in \u001b[0;36mvalidate_response\u001b[0;34m(status, content, path, args)\u001b[0m\n\u001b[1;32m 108\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mBad Request: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mpath\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;132;01m{\u001b[39;00mmsg\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 109\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m error:\n\u001b[0;32m--> 110\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m HttpError(error)\n\u001b[1;32m 111\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m status:\n\u001b[1;32m 112\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m HttpError({\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcode\u001b[39m\u001b[38;5;124m\"\u001b[39m: status, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmessage\u001b[39m\u001b[38;5;124m\"\u001b[39m: msg}) \u001b[38;5;66;03m# text-like\u001b[39;00m\n", + "\u001b[0;31mHttpError\u001b[0m: Anonymous caller does not have storage.objects.list access to the Google Cloud Storage bucket. Permission 'storage.objects.list' denied on resource (or it may not exist)., 401" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "_request non-retriable exception: Anonymous caller does not have storage.objects.list access to the Google Cloud Storage bucket. Permission 'storage.objects.list' denied on resource (or it may not exist)., 401\n", + "Traceback (most recent call last):\n", + " File \"/Users/dennistpw/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/retry.py\", line 123, in retry_request\n", + " return await func(*args, **kwargs)\n", + " File \"/Users/dennistpw/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/core.py\", line 430, in _request\n", + " validate_response(status, contents, path, args)\n", + " File \"/Users/dennistpw/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/retry.py\", line 110, in validate_response\n", + " raise HttpError(error)\n", + "gcsfs.retry.HttpError: Anonymous caller does not have storage.objects.list access to the Google Cloud Storage bucket. Permission 'storage.objects.list' denied on resource (or it may not exist)., 401\n" + ] + }, + { + "ename": "HttpError", + "evalue": "Anonymous caller does not have storage.objects.list access to the Google Cloud Storage bucket. Permission 'storage.objects.list' denied on resource (or it may not exist)., 401", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mHttpError\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/IPython/core/formatters.py:344\u001b[0m, in \u001b[0;36mBaseFormatter.__call__\u001b[0;34m(self, obj)\u001b[0m\n\u001b[1;32m 342\u001b[0m method \u001b[38;5;241m=\u001b[39m get_real_method(obj, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mprint_method)\n\u001b[1;32m 343\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m method \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m--> 344\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mmethod\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 345\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 346\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/malariagen_data/ag3.py:248\u001b[0m, in \u001b[0;36mAg3._repr_html_\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 223\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_repr_html_\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m 224\u001b[0m html \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\"\"\u001b[39m\n\u001b[1;32m 225\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 226\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 227\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 228\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 229\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 230\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 236\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 237\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 238\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 239\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 242\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 243\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 244\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 245\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[0;32m--> 248\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 249\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 250\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 251\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 254\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 255\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 256\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 257\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 260\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 261\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 262\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 263\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 266\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 267\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 268\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 269\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 272\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 273\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 274\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 275\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 278\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 279\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 280\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 281\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 284\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 285\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 286\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 287\u001b[0m \u001b[38;5;124m
      MalariaGEN Ag3 API client
      \u001b[39m\n\u001b[1;32m 231\u001b[0m \u001b[38;5;124m Please note that data are subject to terms of use,\u001b[39m\n\u001b[1;32m 232\u001b[0m \u001b[38;5;124m for more information see \u001b[39m\n\u001b[1;32m 233\u001b[0m \u001b[38;5;124m the MalariaGEN website or contact data@malariagen.net.\u001b[39m\n\u001b[1;32m 234\u001b[0m \u001b[38;5;124m See also the Ag3 API docs.\u001b[39m\n\u001b[1;32m 235\u001b[0m \u001b[38;5;124m
      \u001b[39m\n\u001b[1;32m 240\u001b[0m \u001b[38;5;124m Storage URL\u001b[39m\n\u001b[1;32m 241\u001b[0m \u001b[38;5;124m \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_url\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m
      \u001b[39m\n\u001b[1;32m 246\u001b[0m \u001b[38;5;124m Data releases available\u001b[39m\n\u001b[1;32m 247\u001b[0m \u001b[38;5;124m \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m, \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;241m.\u001b[39mjoin(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mreleases)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m
      \u001b[39m\n\u001b[1;32m 252\u001b[0m \u001b[38;5;124m Results cache\u001b[39m\n\u001b[1;32m 253\u001b[0m \u001b[38;5;124m \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_results_cache\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m
      \u001b[39m\n\u001b[1;32m 258\u001b[0m \u001b[38;5;124m Cohorts analysis\u001b[39m\n\u001b[1;32m 259\u001b[0m \u001b[38;5;124m \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cohorts_analysis\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m
      \u001b[39m\n\u001b[1;32m 264\u001b[0m \u001b[38;5;124m AIM analysis\u001b[39m\n\u001b[1;32m 265\u001b[0m \u001b[38;5;124m \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_aim_analysis\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m
      \u001b[39m\n\u001b[1;32m 270\u001b[0m \u001b[38;5;124m Site filters analysis\u001b[39m\n\u001b[1;32m 271\u001b[0m \u001b[38;5;124m \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_site_filters_analysis\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m
      \u001b[39m\n\u001b[1;32m 276\u001b[0m \u001b[38;5;124m Software version\u001b[39m\n\u001b[1;32m 277\u001b[0m \u001b[38;5;124m malariagen_data \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mmalariagen_data\u001b[38;5;241m.\u001b[39m__version__\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m
      \u001b[39m\n\u001b[1;32m 282\u001b[0m \u001b[38;5;124m Client location\u001b[39m\n\u001b[1;32m 283\u001b[0m \u001b[38;5;124m \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mclient_location\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m
      \u001b[39m\n\u001b[1;32m 288\u001b[0m \u001b[38;5;124m \u001b[39m\u001b[38;5;124m\"\"\"\u001b[39m\n\u001b[1;32m 289\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m html\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/malariagen_data/anoph/base.py:272\u001b[0m, in \u001b[0;36mAnophelesBase.releases\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 270\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cache_releases \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 271\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_pre:\n\u001b[0;32m--> 272\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cache_releases \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_discover_releases\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 273\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 274\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cache_releases \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_public_releases()\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/malariagen_data/anoph/base.py:253\u001b[0m, in \u001b[0;36mAnophelesBase._discover_releases\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 245\u001b[0m \u001b[38;5;129m@doc\u001b[39m(\n\u001b[1;32m 246\u001b[0m summary\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\"\"\u001b[39m\n\u001b[1;32m 247\u001b[0m \u001b[38;5;124m Here we discover which releases are available, by listing the storage\u001b[39m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 251\u001b[0m )\n\u001b[1;32m 252\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_discover_releases\u001b[39m(\u001b[38;5;28mself\u001b[39m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Tuple[\u001b[38;5;28mstr\u001b[39m, \u001b[38;5;241m.\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;241m.\u001b[39m]:\n\u001b[0;32m--> 253\u001b[0m sub_dirs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28msorted\u001b[39m([p\u001b[38;5;241m.\u001b[39msplit(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m/\u001b[39m\u001b[38;5;124m\"\u001b[39m)[\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m] \u001b[38;5;28;01mfor\u001b[39;00m p \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_fs\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mls\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_base_path\u001b[49m\u001b[43m)\u001b[49m])\n\u001b[1;32m 254\u001b[0m discovered_releases \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mtuple\u001b[39m(\n\u001b[1;32m 255\u001b[0m \u001b[38;5;28msorted\u001b[39m(\n\u001b[1;32m 256\u001b[0m [\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 263\u001b[0m )\n\u001b[1;32m 264\u001b[0m )\n\u001b[1;32m 265\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m discovered_releases\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/fsspec/asyn.py:118\u001b[0m, in \u001b[0;36msync_wrapper..wrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 115\u001b[0m \u001b[38;5;129m@functools\u001b[39m\u001b[38;5;241m.\u001b[39mwraps(func)\n\u001b[1;32m 116\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mwrapper\u001b[39m(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 117\u001b[0m \u001b[38;5;28mself\u001b[39m \u001b[38;5;241m=\u001b[39m obj \u001b[38;5;129;01mor\u001b[39;00m args[\u001b[38;5;241m0\u001b[39m]\n\u001b[0;32m--> 118\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43msync\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mloop\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfunc\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/fsspec/asyn.py:103\u001b[0m, in \u001b[0;36msync\u001b[0;34m(loop, func, timeout, *args, **kwargs)\u001b[0m\n\u001b[1;32m 101\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m FSTimeoutError \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mreturn_result\u001b[39;00m\n\u001b[1;32m 102\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(return_result, \u001b[38;5;167;01mBaseException\u001b[39;00m):\n\u001b[0;32m--> 103\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m return_result\n\u001b[1;32m 104\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 105\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m return_result\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/fsspec/asyn.py:56\u001b[0m, in \u001b[0;36m_runner\u001b[0;34m(event, coro, result, timeout)\u001b[0m\n\u001b[1;32m 54\u001b[0m coro \u001b[38;5;241m=\u001b[39m asyncio\u001b[38;5;241m.\u001b[39mwait_for(coro, timeout\u001b[38;5;241m=\u001b[39mtimeout)\n\u001b[1;32m 55\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m---> 56\u001b[0m result[\u001b[38;5;241m0\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mawait\u001b[39;00m coro\n\u001b[1;32m 57\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m ex:\n\u001b[1;32m 58\u001b[0m result[\u001b[38;5;241m0\u001b[39m] \u001b[38;5;241m=\u001b[39m ex\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/core.py:995\u001b[0m, in \u001b[0;36mGCSFileSystem._ls\u001b[0;34m(self, path, detail, prefix, versions, refresh, **kwargs)\u001b[0m\n\u001b[1;32m 993\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 994\u001b[0m out \u001b[38;5;241m=\u001b[39m []\n\u001b[0;32m--> 995\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m entry \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28;01mawait\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_list_objects(\n\u001b[1;32m 996\u001b[0m path, prefix\u001b[38;5;241m=\u001b[39mprefix, versions\u001b[38;5;241m=\u001b[39mversions, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs\n\u001b[1;32m 997\u001b[0m ):\n\u001b[1;32m 998\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m versions \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mgeneration\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;129;01min\u001b[39;00m entry:\n\u001b[1;32m 999\u001b[0m entry \u001b[38;5;241m=\u001b[39m entry\u001b[38;5;241m.\u001b[39mcopy()\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/core.py:564\u001b[0m, in \u001b[0;36mGCSFileSystem._list_objects\u001b[0;34m(self, path, prefix, versions, **kwargs)\u001b[0m\n\u001b[1;32m 561\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m key:\n\u001b[1;32m 562\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m\n\u001b[0;32m--> 564\u001b[0m items, prefixes \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mawait\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_do_list_objects(\n\u001b[1;32m 565\u001b[0m path, prefix\u001b[38;5;241m=\u001b[39mprefix, versions\u001b[38;5;241m=\u001b[39mversions, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs\n\u001b[1;32m 566\u001b[0m )\n\u001b[1;32m 568\u001b[0m pseudodirs \u001b[38;5;241m=\u001b[39m [\n\u001b[1;32m 569\u001b[0m {\n\u001b[1;32m 570\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mbucket\u001b[39m\u001b[38;5;124m\"\u001b[39m: bucket,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 576\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m prefix \u001b[38;5;129;01min\u001b[39;00m prefixes\n\u001b[1;32m 577\u001b[0m ]\n\u001b[1;32m 578\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (items \u001b[38;5;241m+\u001b[39m pseudodirs):\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/core.py:638\u001b[0m, in \u001b[0;36mGCSFileSystem._do_list_objects\u001b[0;34m(self, path, max_results, delimiter, prefix, versions, **kwargs)\u001b[0m\n\u001b[1;32m 626\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mawait\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_concurrent_list_objects_helper(\n\u001b[1;32m 627\u001b[0m items\u001b[38;5;241m=\u001b[39mitems,\n\u001b[1;32m 628\u001b[0m bucket\u001b[38;5;241m=\u001b[39mbucket,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 632\u001b[0m page_size\u001b[38;5;241m=\u001b[39mdefault_page_size,\n\u001b[1;32m 633\u001b[0m )\n\u001b[1;32m 635\u001b[0m \u001b[38;5;66;03m# If the user has not configured inventory report, proceed to use\u001b[39;00m\n\u001b[1;32m 636\u001b[0m \u001b[38;5;66;03m# sequential listing.\u001b[39;00m\n\u001b[1;32m 637\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 638\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mawait\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_sequential_list_objects_helper(\n\u001b[1;32m 639\u001b[0m bucket\u001b[38;5;241m=\u001b[39mbucket,\n\u001b[1;32m 640\u001b[0m delimiter\u001b[38;5;241m=\u001b[39mdelimiter,\n\u001b[1;32m 641\u001b[0m start_offset\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 642\u001b[0m end_offset\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 643\u001b[0m prefix\u001b[38;5;241m=\u001b[39mprefix,\n\u001b[1;32m 644\u001b[0m versions\u001b[38;5;241m=\u001b[39mversions,\n\u001b[1;32m 645\u001b[0m page_size\u001b[38;5;241m=\u001b[39mdefault_page_size,\n\u001b[1;32m 646\u001b[0m )\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/core.py:732\u001b[0m, in \u001b[0;36mGCSFileSystem._sequential_list_objects_helper\u001b[0;34m(self, bucket, delimiter, start_offset, end_offset, prefix, versions, page_size)\u001b[0m\n\u001b[1;32m 729\u001b[0m prefixes \u001b[38;5;241m=\u001b[39m []\n\u001b[1;32m 730\u001b[0m items \u001b[38;5;241m=\u001b[39m []\n\u001b[0;32m--> 732\u001b[0m page \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mawait\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_call(\n\u001b[1;32m 733\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mGET\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 734\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mb/\u001b[39m\u001b[38;5;132;01m{}\u001b[39;00m\u001b[38;5;124m/o\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 735\u001b[0m bucket,\n\u001b[1;32m 736\u001b[0m delimiter\u001b[38;5;241m=\u001b[39mdelimiter,\n\u001b[1;32m 737\u001b[0m prefix\u001b[38;5;241m=\u001b[39mprefix,\n\u001b[1;32m 738\u001b[0m startOffset\u001b[38;5;241m=\u001b[39mstart_offset,\n\u001b[1;32m 739\u001b[0m endOffset\u001b[38;5;241m=\u001b[39mend_offset,\n\u001b[1;32m 740\u001b[0m maxResults\u001b[38;5;241m=\u001b[39mpage_size,\n\u001b[1;32m 741\u001b[0m json_out\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m,\n\u001b[1;32m 742\u001b[0m versions\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtrue\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m versions \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 743\u001b[0m )\n\u001b[1;32m 745\u001b[0m prefixes\u001b[38;5;241m.\u001b[39mextend(page\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mprefixes\u001b[39m\u001b[38;5;124m\"\u001b[39m, []))\n\u001b[1;32m 746\u001b[0m items\u001b[38;5;241m.\u001b[39mextend(page\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mitems\u001b[39m\u001b[38;5;124m\"\u001b[39m, []))\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/core.py:437\u001b[0m, in \u001b[0;36mGCSFileSystem._call\u001b[0;34m(self, method, path, json_out, info_out, *args, **kwargs)\u001b[0m\n\u001b[1;32m 433\u001b[0m \u001b[38;5;28;01masync\u001b[39;00m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_call\u001b[39m(\n\u001b[1;32m 434\u001b[0m \u001b[38;5;28mself\u001b[39m, method, path, \u001b[38;5;241m*\u001b[39margs, json_out\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m, info_out\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs\n\u001b[1;32m 435\u001b[0m ):\n\u001b[1;32m 436\u001b[0m logger\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mmethod\u001b[38;5;241m.\u001b[39mupper()\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mpath\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m, \u001b[39m\u001b[38;5;132;01m{\u001b[39;00margs\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m, \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mkwargs\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mheaders\u001b[39m\u001b[38;5;124m'\u001b[39m)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m--> 437\u001b[0m status, headers, info, contents \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mawait\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_request(\n\u001b[1;32m 438\u001b[0m method, path, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs\n\u001b[1;32m 439\u001b[0m )\n\u001b[1;32m 440\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m json_out:\n\u001b[1;32m 441\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m json\u001b[38;5;241m.\u001b[39mloads(contents)\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/decorator.py:221\u001b[0m, in \u001b[0;36mdecorate..fun\u001b[0;34m(*args, **kw)\u001b[0m\n\u001b[1;32m 219\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m kwsyntax:\n\u001b[1;32m 220\u001b[0m args, kw \u001b[38;5;241m=\u001b[39m fix(args, kw, sig)\n\u001b[0;32m--> 221\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mawait\u001b[39;00m caller(func, \u001b[38;5;241m*\u001b[39m(extras \u001b[38;5;241m+\u001b[39m args), \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkw)\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/retry.py:158\u001b[0m, in \u001b[0;36mretry_request\u001b[0;34m(func, retries, *args, **kwargs)\u001b[0m\n\u001b[1;32m 156\u001b[0m \u001b[38;5;28;01mcontinue\u001b[39;00m\n\u001b[1;32m 157\u001b[0m logger\u001b[38;5;241m.\u001b[39mexception(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mfunc\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m non-retriable exception: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00me\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m--> 158\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m e\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/retry.py:123\u001b[0m, in \u001b[0;36mretry_request\u001b[0;34m(func, retries, *args, **kwargs)\u001b[0m\n\u001b[1;32m 121\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m retry \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m0\u001b[39m:\n\u001b[1;32m 122\u001b[0m \u001b[38;5;28;01mawait\u001b[39;00m asyncio\u001b[38;5;241m.\u001b[39msleep(\u001b[38;5;28mmin\u001b[39m(random\u001b[38;5;241m.\u001b[39mrandom() \u001b[38;5;241m+\u001b[39m \u001b[38;5;241m2\u001b[39m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m (retry \u001b[38;5;241m-\u001b[39m \u001b[38;5;241m1\u001b[39m), \u001b[38;5;241m32\u001b[39m))\n\u001b[0;32m--> 123\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mawait\u001b[39;00m func(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 124\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (\n\u001b[1;32m 125\u001b[0m HttpError,\n\u001b[1;32m 126\u001b[0m requests\u001b[38;5;241m.\u001b[39mexceptions\u001b[38;5;241m.\u001b[39mRequestException,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 129\u001b[0m aiohttp\u001b[38;5;241m.\u001b[39mclient_exceptions\u001b[38;5;241m.\u001b[39mClientError,\n\u001b[1;32m 130\u001b[0m ) \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 131\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (\n\u001b[1;32m 132\u001b[0m \u001b[38;5;28misinstance\u001b[39m(e, HttpError)\n\u001b[1;32m 133\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m e\u001b[38;5;241m.\u001b[39mcode \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m400\u001b[39m\n\u001b[1;32m 134\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrequester pays\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;129;01min\u001b[39;00m e\u001b[38;5;241m.\u001b[39mmessage\n\u001b[1;32m 135\u001b[0m ):\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/core.py:430\u001b[0m, in \u001b[0;36mGCSFileSystem._request\u001b[0;34m(self, method, path, headers, json, data, *args, **kwargs)\u001b[0m\n\u001b[1;32m 427\u001b[0m info \u001b[38;5;241m=\u001b[39m r\u001b[38;5;241m.\u001b[39mrequest_info \u001b[38;5;66;03m# for debug only\u001b[39;00m\n\u001b[1;32m 428\u001b[0m contents \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mawait\u001b[39;00m r\u001b[38;5;241m.\u001b[39mread()\n\u001b[0;32m--> 430\u001b[0m \u001b[43mvalidate_response\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstatus\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcontents\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpath\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 431\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m status, headers, info, contents\n", + "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/retry.py:110\u001b[0m, in \u001b[0;36mvalidate_response\u001b[0;34m(status, content, path, args)\u001b[0m\n\u001b[1;32m 108\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mBad Request: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mpath\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;132;01m{\u001b[39;00mmsg\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 109\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m error:\n\u001b[0;32m--> 110\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m HttpError(error)\n\u001b[1;32m 111\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m status:\n\u001b[1;32m 112\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m HttpError({\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcode\u001b[39m\u001b[38;5;124m\"\u001b[39m: status, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmessage\u001b[39m\u001b[38;5;124m\"\u001b[39m: msg}) \u001b[38;5;66;03m# text-like\u001b[39;00m\n", + "\u001b[0;31mHttpError\u001b[0m: Anonymous caller does not have storage.objects.list access to the Google Cloud Storage bucket. Permission 'storage.objects.list' denied on resource (or it may not exist)., 401" + ] + } + ], "source": [ "import malariagen_data\n", "\n", - "ag3 = malariagen_data.Ag3(pre=True)\n", - "\n", + "ag3 = malariagen_data.Ag3(pre=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "ename": "AttributeError", + "evalue": "'Ag3' object has no attribute 'biallelic_snps_to_plink'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[7], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mag3\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbiallelic_snps_to_plink\u001b[49m(results_dir\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m/Users/dennistpw/Projects/malariagen-data-python/\u001b[39m\u001b[38;5;124m'\u001b[39m,\n\u001b[1;32m 2\u001b[0m region\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m2L:100000-2000000\u001b[39m\u001b[38;5;124m'\u001b[39m,\n\u001b[1;32m 3\u001b[0m n_snps\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m2000\u001b[39m,\n\u001b[1;32m 4\u001b[0m sample_sets\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mAG1000G-AO\u001b[39m\u001b[38;5;124m'\u001b[39m,\n\u001b[1;32m 5\u001b[0m )\n", + "\u001b[0;31mAttributeError\u001b[0m: 'Ag3' object has no attribute 'biallelic_snps_to_plink'" + ] + } + ], + "source": [ "ag3.biallelic_snps_to_plink(results_dir='/Users/dennistpw/Projects/malariagen-data-python/',\n", " region='2L:100000-2000000',\n", " n_snps=2000,\n", " sample_sets='AG1000G-AO',\n", - " )\n" + " )" ] } ], @@ -34,7 +148,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.10" + "version": "3.8.19" } }, "nbformat": 4, diff --git a/output.png b/output.png new file mode 100644 index 0000000000000000000000000000000000000000..fbabf4f10ee375b11bdbfbcf7337749357188f7e GIT binary patch literal 328529 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℞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%0DkAUW0fjR+I{1(I(YZriVF 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 z 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

      FOgveN-oI>j1h(TYu=t%2Vv%S|hzlNe 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%0DQ1x94V*Q+8dl2s&wKMUTz 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 Jo{ZVUe*t5cHz5E3 literal 0 HcmV?d00001 From 96eb15758adfa2efead1ac87b39bbc01d23511c0 Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Thu, 19 Sep 2024 10:47:41 +0800 Subject: [PATCH 08/42] add plink converter test --- .gitignore | 1 - output.png | Bin 328529 -> 0 bytes tests/anoph/test_plink_converter.py | 88 ++++++++++++++++++++++++++++ 3 files changed, 88 insertions(+), 1 deletion(-) delete mode 100644 output.png create mode 100644 tests/anoph/test_plink_converter.py diff --git a/.gitignore b/.gitignore index e6599ea92..f0fbdb3cc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ -debugging_biallelic_snp_calls.ipynb .idea .vscode __pycache__ diff --git a/output.png b/output.png deleted file mode 100644 index fbabf4f10ee375b11bdbfbcf7337749357188f7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 328529 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℞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%0DkAUW0fjR+I{1(I(YZriVF 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 z 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

      FOgveN-oI>j1h(TYu=t%2Vv%S|hzlNe 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%0DQ1x94V*Q+8dl2s&wKMUTz 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 Jo{ZVUe*t5cHz5E3 diff --git a/tests/anoph/test_plink_converter.py b/tests/anoph/test_plink_converter.py new file mode 100644 index 000000000..b1d14a224 --- /dev/null +++ b/tests/anoph/test_plink_converter.py @@ -0,0 +1,88 @@ +import random +import pytest +from pytest_cases import parametrize_with_cases + +from malariagen_data import af1 as _af1 +from malariagen_data import ag3 as _ag3 +from malariagen_data.anoph.to_plink import PlinkConverter + + +@pytest.fixture +def ag3_sim_api(ag3_sim_fixture): + return PlinkConverter( + url=ag3_sim_fixture.url, + config_path=_ag3.CONFIG_PATH, + major_version_number=_ag3.MAJOR_VERSION_NUMBER, + major_version_path=_ag3.MAJOR_VERSION_PATH, + pre=True, + aim_metadata_dtype={ + "aim_species_fraction_arab": "float64", + "aim_species_fraction_colu": "float64", + "aim_species_fraction_colu_no2l": "float64", + "aim_species_gambcolu_arabiensis": object, + "aim_species_gambiae_coluzzii": object, + "aim_species": object, + }, + gff_gene_type="gene", + gff_gene_name_attribute="Name", + gff_default_attributes=("ID", "Parent", "Name", "description"), + default_site_mask="gamb_colu_arab", + results_cache=ag3_sim_fixture.results_cache_path.as_posix(), + taxon_colors=_ag3.TAXON_COLORS, + virtual_contigs=_ag3.VIRTUAL_CONTIGS, + ) + + +@pytest.fixture +def af1_sim_api(af1_sim_fixture): + return PlinkConverter( + url=af1_sim_fixture.url, + config_path=_af1.CONFIG_PATH, + major_version_number=_af1.MAJOR_VERSION_NUMBER, + major_version_path=_af1.MAJOR_VERSION_PATH, + pre=False, + gff_gene_type="protein_coding_gene", + gff_gene_name_attribute="Note", + gff_default_attributes=("ID", "Parent", "Note", "description"), + default_site_mask="funestus", + results_cache=af1_sim_fixture.results_cache_path.as_posix(), + taxon_colors=_af1.TAXON_COLORS, + ) + + +# N.B., here we use pytest_cases to parametrize tests. Each +# function whose name begins with "case_" defines a set of +# inputs to the test functions. See the documentation for +# pytest_cases for more information, e.g.: +# +# https://smarie.github.io/python-pytest-cases/#basic-usage +# +# We use this approach here because we want to use fixtures +# as test parameters, which is otherwise hard to do with +# pytest alone. + + +def case_ag3_sim(ag3_sim_fixture, ag3_sim_api): + return ag3_sim_fixture, ag3_sim_api + + +def case_af1_sim(af1_sim_fixture, af1_sim_api): + return af1_sim_fixture, af1_sim_api + + +@parametrize_with_cases("fixture,api", cases=".") +def test_plink_converter(fixture, api: PlinkConverter, tmp_path): + # Parameters for selecting input data, filtering, and converting. + all_sample_sets = api.sample_sets()["sample_set"].to_list() + plink_params = dict( + results_dir=tmp_path, + region=random.choice(api.contigs), + n_snps=100, + min_minor_ac=1, + thin_offset=1, + max_missing_an=1, + sample_sets=random.sample(all_sample_sets, 2), + site_mask=random.choice((None,) + api.site_mask_ids), + ) + # make the file + api.biallelic_snps_to_plink(**plink_params) From 98700e3d7b03be710261a4af841c8ca1631cdd2b Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Thu, 19 Sep 2024 11:03:49 +0800 Subject: [PATCH 09/42] update plink converter test to include test for created files --- tests/anoph/test_plink_converter.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/tests/anoph/test_plink_converter.py b/tests/anoph/test_plink_converter.py index b1d14a224..dcb768440 100644 --- a/tests/anoph/test_plink_converter.py +++ b/tests/anoph/test_plink_converter.py @@ -6,6 +6,8 @@ from malariagen_data import ag3 as _ag3 from malariagen_data.anoph.to_plink import PlinkConverter +import os + @pytest.fixture def ag3_sim_api(ag3_sim_fixture): @@ -77,12 +79,22 @@ def test_plink_converter(fixture, api: PlinkConverter, tmp_path): plink_params = dict( results_dir=tmp_path, region=random.choice(api.contigs), - n_snps=100, + n_snps=500, min_minor_ac=1, thin_offset=1, max_missing_an=1, sample_sets=random.sample(all_sample_sets, 2), site_mask=random.choice((None,) + api.site_mask_ids), ) - # make the file + # Make the plink files api.biallelic_snps_to_plink(**plink_params) + + # Check to see if bed, bim, fam output files exist + file_path = f"{tmp_path}/{plink_params['region']}.{plink_params['n_snps']}.{plink_params['min_minor_ac']}.{plink_params['thin_offset']}.{plink_params['max_missing_an']}" + + if os.path.exists(f"{file_path}.bed"): + pass + if os.path.exists(f"{file_path}.bim"): + pass + if os.path.exists(f"{file_path}.fam"): + pass From 6db9db83d65c5c9909116cdee8ecfd57721e252c Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Thu, 19 Sep 2024 12:31:23 +0800 Subject: [PATCH 10/42] tidy, add tests, refactor snp_data call --- malariagen_data/anoph/snp_data.py | 3 --- malariagen_data/anoph/to_plink.py | 29 +++++++---------------------- tests/anoph/test_snp_data.py | 1 - 3 files changed, 7 insertions(+), 26 deletions(-) diff --git a/malariagen_data/anoph/snp_data.py b/malariagen_data/anoph/snp_data.py index 57668462e..18012caca 100644 --- a/malariagen_data/anoph/snp_data.py +++ b/malariagen_data/anoph/snp_data.py @@ -1641,9 +1641,6 @@ def biallelic_snp_calls( dtype=variant_allele.dtype, chunks=(variant_allele.chunks[0], [2]), ) - # variant_allele_out = apply_allele_mapping( - # variant_allele.compute(), allele_mapping, max_allele=1 - # ) data_vars["variant_allele"] = ("variants", "alleles"), variant_allele_out # Store allele counts, transformed, so we don't have to recompute. diff --git a/malariagen_data/anoph/to_plink.py b/malariagen_data/anoph/to_plink.py index a814f53ae..88157d528 100644 --- a/malariagen_data/anoph/to_plink.py +++ b/malariagen_data/anoph/to_plink.py @@ -72,33 +72,16 @@ def _biallelic_snps_to_plink( sample_query=sample_query, sample_indices=sample_indices, site_mask=site_mask, + min_minor_ac=min_minor_ac, + max_missing_an=max_missing_an, + n_snps=n_snps, + thin_offset=thin_offset, random_seed=random_seed, inline_array=inline_array, chunks=chunks, - n_snps=n_snps, ) - # Filter SNPs for segregating sites only - with self._spinner("Subsetting to segregating sites"): - gt = ds_snps["call_genotype"].data.compute() - print("count alleles") - with ProgressBar(): - ac = allel.GenotypeArray(gt).count_alleles(max_allele=3) - print("ascertain segregating sites") - n_chroms = ds_snps.dims["samples"] * 2 - an_called = ac.sum(axis=1) - an_missing = n_chroms - an_called - min_ref_ac = min_minor_ac - max_ref_ac = n_chroms - min_minor_ac - loc_sites = ( - (ac[:, 0] >= min_ref_ac) - & (ac[:, 0] <= max_ref_ac) - & (an_missing <= max_missing_an) - ) - print(f"ascertained {np.count_nonzero(loc_sites):,} sites") - # Set up dataset with required vars for plink conversion - print("Set up dataset") ds_snps_asc = ds_snps[ [ "variant_contig", @@ -107,7 +90,7 @@ def _biallelic_snps_to_plink( "sample_id", "call_genotype", ] - ].isel(alleles=slice(0, 2)) + ].isel(alleles=slice(0, 2)) # .sel(variants=ix_sites_thinned) # Compute gt ref counts with self._spinner("Computing genotype ref counts"): @@ -116,8 +99,10 @@ def _biallelic_snps_to_plink( with ProgressBar(): gn_ref = gn_ref.compute() + # Ensure genotypes vary loc_var = np.any(gn_ref != gn_ref[:, 0, np.newaxis], axis=1) + # Load final data with ProgressBar(): ds_snps_final = ds_snps_asc[ ["variant_contig", "variant_position", "variant_allele", "sample_id"] diff --git a/tests/anoph/test_snp_data.py b/tests/anoph/test_snp_data.py index 17e635861..19576a6d3 100644 --- a/tests/anoph/test_snp_data.py +++ b/tests/anoph/test_snp_data.py @@ -88,7 +88,6 @@ def test_open_snp_sites(fixture, api: AnophelesSnpData): assert "variants" in contig_grp variants = contig_grp["variants"] assert "POS" in variants - assert False assert "REF" in variants assert "ALT" in variants From 03ab293607ed076a3b4e896d419e91c26f0629e8 Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Mon, 7 Oct 2024 11:28:29 +0800 Subject: [PATCH 11/42] Tidy tests and remove allelism selection from converter, add tests to check that dimensions and contect of exported dummy data are correct --- malariagen_data/anoph/to_plink.py | 2 +- pyproject.toml | 1 + tests/anoph/test_plink_converter.py | 64 ++++++++++++++++++++++------- 3 files changed, 52 insertions(+), 15 deletions(-) diff --git a/malariagen_data/anoph/to_plink.py b/malariagen_data/anoph/to_plink.py index 88157d528..05ec3d506 100644 --- a/malariagen_data/anoph/to_plink.py +++ b/malariagen_data/anoph/to_plink.py @@ -90,7 +90,7 @@ def _biallelic_snps_to_plink( "sample_id", "call_genotype", ] - ].isel(alleles=slice(0, 2)) # .sel(variants=ix_sites_thinned) + ] # Compute gt ref counts with self._spinner("Computing genotype ref counts"): diff --git a/pyproject.toml b/pyproject.toml index c8b26e80f..f8416b045 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,6 +35,7 @@ BioPython = "*" scikit-allel = "1.3.8" xarray = "*" plotly = "*" +bed_reader = "*" # https://github.com/bokeh/bokeh/issues/12614 # bokeh 3.0 has a problem with stretch sizing modes bokeh = ">=3.1.0" diff --git a/tests/anoph/test_plink_converter.py b/tests/anoph/test_plink_converter.py index dcb768440..5425b04ca 100644 --- a/tests/anoph/test_plink_converter.py +++ b/tests/anoph/test_plink_converter.py @@ -7,6 +7,7 @@ from malariagen_data.anoph.to_plink import PlinkConverter import os +import bed_reader @pytest.fixture @@ -76,25 +77,60 @@ def case_af1_sim(af1_sim_fixture, af1_sim_api): def test_plink_converter(fixture, api: PlinkConverter, tmp_path): # Parameters for selecting input data, filtering, and converting. all_sample_sets = api.sample_sets()["sample_set"].to_list() - plink_params = dict( - results_dir=tmp_path, + + data_params = dict( region=random.choice(api.contigs), - n_snps=500, - min_minor_ac=1, - thin_offset=1, - max_missing_an=1, sample_sets=random.sample(all_sample_sets, 2), site_mask=random.choice((None,) + api.site_mask_ids), + min_minor_ac=1, + max_missing_an=1, + thin_offset=1, + random_seed=random.randint(1, 2000), ) - # Make the plink files + + # Load a ds containing the randomly generated samples and regions to get the number of available snps to subset from. + ds = api.biallelic_snp_calls( + **data_params, + ) + + n_snps_available = ds.sizes["variants"] + n_snps = random.randint(1, n_snps_available) + + # Define plink params. + plink_params = dict(results_dir=tmp_path, n_snps=n_snps, **data_params) + + # Make the plink files. api.biallelic_snps_to_plink(**plink_params) - # Check to see if bed, bim, fam output files exist + # Test to see if bed, bim, fam output files exist. file_path = f"{tmp_path}/{plink_params['region']}.{plink_params['n_snps']}.{plink_params['min_minor_ac']}.{plink_params['thin_offset']}.{plink_params['max_missing_an']}" - if os.path.exists(f"{file_path}.bed"): - pass - if os.path.exists(f"{file_path}.bim"): - pass - if os.path.exists(f"{file_path}.fam"): - pass + assert os.path.exists(f"{file_path}.bed") + assert os.path.exists(f"{file_path}.bim") + assert os.path.exists(f"{file_path}.fam") + + # Read bed, bim, and fam files (bed_reader searches for the .bim and.fam files matching the prefix of the .bed file). + bed = bed_reader.open_bed(f"{file_path}.bed") + + # Load a ds containing the same data exported to PLINK to test against. + ds_test = api.biallelic_snp_calls( + **data_params, + n_snps=n_snps, + ) + + # Test to make sure that the rows and columns (no. variants and no. samples) of the .bed file match. + assert bed.shape[1] == ds_test.variant_position.shape[0] + assert bed.shape[0] == ds_test.samples.shape[0] + + # Test to see if sample_id is exported correctly (stored in the .fam file). + assert set(bed.iid) == set(ds_test.sample_id.values) + + # Test to see if variant position is exported to the.bim correctly. + assert set(bed.bp_position) == set(ds_test.variant_position.values) + + # Test to make sure chromosome ID is exported to the .bim file correctly (coerce to str to match types). + assert set(bed.chromosome) == set(ds_test.variant_contig.values.astype(str)) + + # Test to make sure that the major and minor allele are exported to the .bim file as expected (coerce to str to match types). + assert set(bed.allele_1) == set(ds_test.variant_allele.values[:, 0].astype(str)) + assert set(bed.allele_2) == set(ds_test.variant_allele.values[:, 1].astype(str)) From e7a35c809eeb3bde0bbf78e142a89d0c1fe6f25e Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Mon, 7 Oct 2024 11:39:56 +0800 Subject: [PATCH 12/42] move bedreader to bottom of pyproject list --- pyproject.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index f8416b045..a6adb2b24 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,7 +35,6 @@ BioPython = "*" scikit-allel = "1.3.8" xarray = "*" plotly = "*" -bed_reader = "*" # https://github.com/bokeh/bokeh/issues/12614 # bokeh 3.0 has a problem with stretch sizing modes bokeh = ">=3.1.0" @@ -64,6 +63,8 @@ orjson = "*" yaspin = "*" # provides efficient neighbour-joining tree implementation biotite = "*" +bed_reader = "*" + [tool.poetry.dev-dependencies] pytest = "*" From 63352088f2ddefeb7d9f1d5d8239dc9bc501ce64 Mon Sep 17 00:00:00 2001 From: Jon Brenas <51911846+jonbrenas@users.noreply.github.com> Date: Wed, 16 Oct 2024 08:34:02 +0100 Subject: [PATCH 13/42] Change the default chunks value. --- malariagen_data/anoph/to_plink.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/malariagen_data/anoph/to_plink.py b/malariagen_data/anoph/to_plink.py index 05ec3d506..994ca6566 100644 --- a/malariagen_data/anoph/to_plink.py +++ b/malariagen_data/anoph/to_plink.py @@ -145,7 +145,7 @@ def biallelic_snps_to_plink( max_missing_an: Optional[base_params.max_missing_an] = 0, random_seed: base_params.random_seed = 42, inline_array: base_params.inline_array = base_params.inline_array_default, - chunks: base_params.chunks = base_params.chunks_default, + chunks: base_params.chunks = base_params.native_chunks, ): params = dict( results_dir=results_dir, From c84cd1a237062a9033a9ecfcbe1633c455c9ed4d Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Fri, 18 Oct 2024 18:35:47 +1000 Subject: [PATCH 14/42] checkout changes from upstream to snpdata.py --- malariagen_data/anoph/snp_data.py | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/malariagen_data/anoph/snp_data.py b/malariagen_data/anoph/snp_data.py index ced0ee8bb..dea586a34 100644 --- a/malariagen_data/anoph/snp_data.py +++ b/malariagen_data/anoph/snp_data.py @@ -1669,23 +1669,9 @@ def biallelic_snp_calls( coords["variant_position"] = ("variants",), variant_position # Store alleles, transformed. - - variant_allele = ds_bi["variant_allele"].data - variant_allele = variant_allele.rechunk((variant_allele.chunks[0], -1)) - - # Chunk allele mapping according to same variant_allele. - allele_mapping_chunked = da.from_array( - allele_mapping, chunks=variant_allele.chunks - ) - - # Apply allele mapping blockwise to variant_allele. - variant_allele_out = da.map_blocks( - lambda allele, map: apply_allele_mapping(allele, map, max_allele=1), - variant_allele, - allele_mapping_chunked, - dtype=variant_allele.dtype, - chunks=(variant_allele.chunks[0], [2]), - + variant_allele_dask = ds_bi["variant_allele"].data + variant_allele_out = dask_apply_allele_mapping( + variant_allele_dask, allele_mapping, max_allele=1 ) data_vars["variant_allele"] = ("variants", "alleles"), variant_allele_out From 51f9174fe64a27a3ab23db609e6a6e465b9e8488 Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Wed, 13 Nov 2024 15:14:49 -0600 Subject: [PATCH 15/42] Update tests/anoph/test_plink_converter.py Co-authored-by: Alistair Miles --- tests/anoph/test_plink_converter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/anoph/test_plink_converter.py b/tests/anoph/test_plink_converter.py index 5425b04ca..1a65408d4 100644 --- a/tests/anoph/test_plink_converter.py +++ b/tests/anoph/test_plink_converter.py @@ -123,7 +123,7 @@ def test_plink_converter(fixture, api: PlinkConverter, tmp_path): assert bed.shape[0] == ds_test.samples.shape[0] # Test to see if sample_id is exported correctly (stored in the .fam file). - assert set(bed.iid) == set(ds_test.sample_id.values) + assert_array_equal(bed.iid, ds_test.sample_id.values) # Test to see if variant position is exported to the.bim correctly. assert set(bed.bp_position) == set(ds_test.variant_position.values) From ae7d4746aec0bffa485cd34271f898cbacb41dbf Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Wed, 13 Nov 2024 15:15:11 -0600 Subject: [PATCH 16/42] Update malariagen_data/anoph/to_plink.py Co-authored-by: Alistair Miles --- malariagen_data/anoph/to_plink.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/malariagen_data/anoph/to_plink.py b/malariagen_data/anoph/to_plink.py index 994ca6566..36adec6e9 100644 --- a/malariagen_data/anoph/to_plink.py +++ b/malariagen_data/anoph/to_plink.py @@ -93,11 +93,10 @@ def _biallelic_snps_to_plink( ] # Compute gt ref counts - with self._spinner("Computing genotype ref counts"): - gt_asc = ds_snps_asc["call_genotype"].data.compute() + with self._dask_progress("Computing genotype ref counts"): + gt_asc = ds_snps_asc["call_genotype"].data # dask array gn_ref = allel.GenotypeDaskArray(gt_asc).to_n_ref(fill=-127) - with ProgressBar(): - gn_ref = gn_ref.compute() + gn_ref = gn_ref.compute() # Ensure genotypes vary loc_var = np.any(gn_ref != gn_ref[:, 0, np.newaxis], axis=1) From e33bfcd4f5becd5da900a7e2ca4121f6004d4eaa Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Wed, 13 Nov 2024 15:15:23 -0600 Subject: [PATCH 17/42] Update malariagen_data/anoph/to_plink.py Co-authored-by: Alistair Miles --- malariagen_data/anoph/to_plink.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/malariagen_data/anoph/to_plink.py b/malariagen_data/anoph/to_plink.py index 36adec6e9..e9f1fb545 100644 --- a/malariagen_data/anoph/to_plink.py +++ b/malariagen_data/anoph/to_plink.py @@ -102,10 +102,7 @@ def _biallelic_snps_to_plink( loc_var = np.any(gn_ref != gn_ref[:, 0, np.newaxis], axis=1) # Load final data - with ProgressBar(): - ds_snps_final = ds_snps_asc[ - ["variant_contig", "variant_position", "variant_allele", "sample_id"] - ].isel(variants=loc_var) + ds_snps_final = dask_compress_dataset(ds_snps_asc, loc_var, dim="variants") # Init vars for input to bed reader gn_ref_final = gn_ref[loc_var] From 23ff3dfc74e5300f9b435169eaf7020f76f116bf Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Wed, 13 Nov 2024 15:15:36 -0600 Subject: [PATCH 18/42] Update malariagen_data/anoph/to_plink.py Co-authored-by: Alistair Miles --- malariagen_data/anoph/to_plink.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/malariagen_data/anoph/to_plink.py b/malariagen_data/anoph/to_plink.py index e9f1fb545..f1890c13d 100644 --- a/malariagen_data/anoph/to_plink.py +++ b/malariagen_data/anoph/to_plink.py @@ -107,14 +107,15 @@ def _biallelic_snps_to_plink( # Init vars for input to bed reader gn_ref_final = gn_ref[loc_var] val = gn_ref_final.T - alleles = ds_snps_final["variant_allele"].values - properties = { - "iid": ds_snps_final["sample_id"].values, - "chromosome": ds_snps_final["variant_contig"].values, - "bp_position": ds_snps_final["variant_position"].values, - "allele_1": alleles[:, 0], - "allele_2": alleles[:, 1], - } + with self._spinner("Prepare output data"): + alleles = ds_snps_final["variant_allele"].values + properties = { + "iid": ds_snps_final["sample_id"].values, + "chromosome": ds_snps_final["variant_contig"].values, + "bp_position": ds_snps_final["variant_position"].values, + "allele_1": alleles[:, 0], + "allele_2": alleles[:, 1], + } bed_reader.to_bed( filepath=bed_file_path, From f2ceb4619ca665c50bcd41604d98e3c89fb6eef8 Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Wed, 13 Nov 2024 15:23:25 -0600 Subject: [PATCH 19/42] update plink converter --- malariagen_data/anoph/to_plink.py | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/malariagen_data/anoph/to_plink.py b/malariagen_data/anoph/to_plink.py index 994ca6566..bacfe4229 100644 --- a/malariagen_data/anoph/to_plink.py +++ b/malariagen_data/anoph/to_plink.py @@ -82,19 +82,10 @@ def _biallelic_snps_to_plink( ) # Set up dataset with required vars for plink conversion - ds_snps_asc = ds_snps[ - [ - "variant_contig", - "variant_position", - "variant_allele", - "sample_id", - "call_genotype", - ] - ] # Compute gt ref counts with self._spinner("Computing genotype ref counts"): - gt_asc = ds_snps_asc["call_genotype"].data.compute() + gt_asc = ds_snps["call_genotype"].data.compute() gn_ref = allel.GenotypeDaskArray(gt_asc).to_n_ref(fill=-127) with ProgressBar(): gn_ref = gn_ref.compute() @@ -104,9 +95,7 @@ def _biallelic_snps_to_plink( # Load final data with ProgressBar(): - ds_snps_final = ds_snps_asc[ - ["variant_contig", "variant_position", "variant_allele", "sample_id"] - ].isel(variants=loc_var) + ds_snps_final = ds_snps.isel(variants=loc_var) # Init vars for input to bed reader gn_ref_final = gn_ref[loc_var] From df75274a6ec806257b22eb00f444482b812957d5 Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Wed, 13 Nov 2024 15:59:22 -0600 Subject: [PATCH 20/42] fix to_plink.py --- malariagen_data/anoph/to_plink.py | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/malariagen_data/anoph/to_plink.py b/malariagen_data/anoph/to_plink.py index bacfe4229..d4fcaf09e 100644 --- a/malariagen_data/anoph/to_plink.py +++ b/malariagen_data/anoph/to_plink.py @@ -4,8 +4,8 @@ import numpy as np import os import bed_reader -from dask.diagnostics import ProgressBar +from util import dask_compress_dataset from .snp_data import AnophelesSnpData from . import base_params @@ -84,30 +84,29 @@ def _biallelic_snps_to_plink( # Set up dataset with required vars for plink conversion # Compute gt ref counts - with self._spinner("Computing genotype ref counts"): - gt_asc = ds_snps["call_genotype"].data.compute() + with self._dask_progress("Computing genotype ref counts"): + gt_asc = ds_snps["call_genotype"].data # dask array gn_ref = allel.GenotypeDaskArray(gt_asc).to_n_ref(fill=-127) - with ProgressBar(): - gn_ref = gn_ref.compute() + gn_ref = gn_ref.compute() # Ensure genotypes vary loc_var = np.any(gn_ref != gn_ref[:, 0, np.newaxis], axis=1) # Load final data - with ProgressBar(): - ds_snps_final = ds_snps.isel(variants=loc_var) + ds_snps_final = dask_compress_dataset(ds_snps, loc_var, dim="variants") # Init vars for input to bed reader gn_ref_final = gn_ref[loc_var] val = gn_ref_final.T - alleles = ds_snps_final["variant_allele"].values - properties = { - "iid": ds_snps_final["sample_id"].values, - "chromosome": ds_snps_final["variant_contig"].values, - "bp_position": ds_snps_final["variant_position"].values, - "allele_1": alleles[:, 0], - "allele_2": alleles[:, 1], - } + with self._spinner("Prepare output data"): + alleles = ds_snps_final["variant_allele"].values + properties = { + "iid": ds_snps_final["sample_id"].values, + "chromosome": ds_snps_final["variant_contig"].values, + "bp_position": ds_snps_final["variant_position"].values, + "allele_1": alleles[:, 0], + "allele_2": alleles[:, 1], + } bed_reader.to_bed( filepath=bed_file_path, From 2c137524ee733c62aaed0322a53ae2963786d32b Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Wed, 13 Nov 2024 16:01:08 -0600 Subject: [PATCH 21/42] fix to_plink and tests --- tests/anoph/test_plink_converter.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/anoph/test_plink_converter.py b/tests/anoph/test_plink_converter.py index 5425b04ca..0ad90de26 100644 --- a/tests/anoph/test_plink_converter.py +++ b/tests/anoph/test_plink_converter.py @@ -9,6 +9,8 @@ import os import bed_reader +from numpy.testing import assert_array_equal + @pytest.fixture def ag3_sim_api(ag3_sim_fixture): @@ -123,7 +125,7 @@ def test_plink_converter(fixture, api: PlinkConverter, tmp_path): assert bed.shape[0] == ds_test.samples.shape[0] # Test to see if sample_id is exported correctly (stored in the .fam file). - assert set(bed.iid) == set(ds_test.sample_id.values) + assert_array_equal(bed.iid, ds_test.sample_id.values) # Test to see if variant position is exported to the.bim correctly. assert set(bed.bp_position) == set(ds_test.variant_position.values) From 90e72d5af9f1eebf94360e4a8bdfa7d22349f95e Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Wed, 13 Nov 2024 16:07:35 -0600 Subject: [PATCH 22/42] update ac and an params to be same as pca, replace out dir --- malariagen_data/anoph/to_plink.py | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/malariagen_data/anoph/to_plink.py b/malariagen_data/anoph/to_plink.py index d4fcaf09e..7936206e6 100644 --- a/malariagen_data/anoph/to_plink.py +++ b/malariagen_data/anoph/to_plink.py @@ -8,6 +8,7 @@ from util import dask_compress_dataset from .snp_data import AnophelesSnpData from . import base_params +from . import pca_params class PlinkConverter( @@ -25,19 +26,19 @@ def __init__( def _create_plink_outfile( self, *, - results_dir, + output_dir, region, n_snps, min_minor_ac, thin_offset, max_missing_an, ): - return f"{results_dir}/{region}.{n_snps}.{min_minor_ac}.{thin_offset}.{max_missing_an}" + return f"{output_dir}/{region}.{n_snps}.{min_minor_ac}.{thin_offset}.{max_missing_an}" def _biallelic_snps_to_plink( self, *, - results_dir, + output_dir, region, n_snps, thin_offset, @@ -53,7 +54,7 @@ def _biallelic_snps_to_plink( ): # Define output file plink_file_path = self._create_plink_outfile( - results_dir=results_dir, + output_dir=output_dir, region=region, n_snps=n_snps, thin_offset=thin_offset, @@ -115,13 +116,11 @@ def _biallelic_snps_to_plink( count_A1=True, ) - print(f"PLINK files written to to: {plink_file_path}") - return plink_file_path def biallelic_snps_to_plink( self, - results_dir, + output_dir, region: base_params.regions, n_snps: base_params.n_snps, thin_offset: base_params.thin_offset = 0, @@ -129,14 +128,18 @@ def biallelic_snps_to_plink( sample_query: Optional[base_params.sample_query] = None, sample_indices: Optional[base_params.sample_indices] = None, site_mask: Optional[base_params.site_mask] = None, - min_minor_ac: Optional[base_params.min_minor_ac] = 0, - max_missing_an: Optional[base_params.max_missing_an] = 0, + min_minor_ac: Optional[ + base_params.min_minor_ac + ] = pca_params.min_minor_ac_default, + max_missing_an: Optional[ + base_params.max_missing_an + ] = pca_params.max_missing_an_default, random_seed: base_params.random_seed = 42, inline_array: base_params.inline_array = base_params.inline_array_default, chunks: base_params.chunks = base_params.native_chunks, ): params = dict( - results_dir=results_dir, + output_dir=output_dir, region=region, n_snps=n_snps, thin_offset=thin_offset, From 51d6c56073b0ad4ad9e67827350c1e9a32b5524f Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Thu, 14 Nov 2024 10:06:14 -0600 Subject: [PATCH 23/42] added overwrite param --- malariagen_data/anoph/to_plink.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/malariagen_data/anoph/to_plink.py b/malariagen_data/anoph/to_plink.py index 7936206e6..a1bffac2b 100644 --- a/malariagen_data/anoph/to_plink.py +++ b/malariagen_data/anoph/to_plink.py @@ -42,6 +42,7 @@ def _biallelic_snps_to_plink( region, n_snps, thin_offset, + overwrite, sample_sets, sample_query, sample_indices, @@ -63,8 +64,11 @@ def _biallelic_snps_to_plink( ) bed_file_path = f"{plink_file_path}.bed" + + # Check to see if file exists and if overwrite is set to false, return existing file if os.path.exists(bed_file_path): - return plink_file_path + if not overwrite: + return plink_file_path # Get snps ds_snps = self.biallelic_snp_calls( @@ -124,6 +128,7 @@ def biallelic_snps_to_plink( region: base_params.regions, n_snps: base_params.n_snps, thin_offset: base_params.thin_offset = 0, + overwrite=False, sample_sets: Optional[base_params.sample_sets] = None, sample_query: Optional[base_params.sample_query] = None, sample_indices: Optional[base_params.sample_indices] = None, @@ -143,6 +148,7 @@ def biallelic_snps_to_plink( region=region, n_snps=n_snps, thin_offset=thin_offset, + overwrite=overwrite, sample_sets=sample_sets, sample_query=sample_query, sample_indices=sample_indices, From ebb7ae84b7b37153577aed24a85e9974931d474e Mon Sep 17 00:00:00 2001 From: Alistair Miles Date: Tue, 19 Nov 2024 12:01:01 +0000 Subject: [PATCH 24/42] Add Tristan Dennis as author --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index d16bbdfb5..10c460564 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,6 +13,7 @@ authors = [ "Nace Kranjc ", "Kelly Bennett ", "Sanjay Nagi ", + "Tristan Dennis ", ] license = "MIT" From fc70d08091b7a6d83555f8d4d3d993c1893eb33e Mon Sep 17 00:00:00 2001 From: Alistair Miles Date: Tue, 19 Nov 2024 12:24:19 +0000 Subject: [PATCH 25/42] poetry update --- poetry.lock | 1581 ++++++++++++++++++++++++++------------------------- 1 file changed, 800 insertions(+), 781 deletions(-) diff --git a/poetry.lock b/poetry.lock index f10468191..f807774c6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -31,112 +31,98 @@ files = [ [[package]] name = "aiohttp" -version = "3.10.10" +version = "3.11.4" description = "Async http client/server framework (asyncio)" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "aiohttp-3.10.10-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:be7443669ae9c016b71f402e43208e13ddf00912f47f623ee5994e12fc7d4b3f"}, - {file = "aiohttp-3.10.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7b06b7843929e41a94ea09eb1ce3927865387e3e23ebe108e0d0d09b08d25be9"}, - {file = "aiohttp-3.10.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:333cf6cf8e65f6a1e06e9eb3e643a0c515bb850d470902274239fea02033e9a8"}, - {file = "aiohttp-3.10.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:274cfa632350225ce3fdeb318c23b4a10ec25c0e2c880eff951a3842cf358ac1"}, - {file = "aiohttp-3.10.10-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d9e5e4a85bdb56d224f412d9c98ae4cbd032cc4f3161818f692cd81766eee65a"}, - {file = "aiohttp-3.10.10-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b606353da03edcc71130b52388d25f9a30a126e04caef1fd637e31683033abd"}, - {file = "aiohttp-3.10.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab5a5a0c7a7991d90446a198689c0535be89bbd6b410a1f9a66688f0880ec026"}, - {file = "aiohttp-3.10.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:578a4b875af3e0daaf1ac6fa983d93e0bbfec3ead753b6d6f33d467100cdc67b"}, - {file = "aiohttp-3.10.10-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8105fd8a890df77b76dd3054cddf01a879fc13e8af576805d667e0fa0224c35d"}, - {file = "aiohttp-3.10.10-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3bcd391d083f636c06a68715e69467963d1f9600f85ef556ea82e9ef25f043f7"}, - {file = "aiohttp-3.10.10-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fbc6264158392bad9df19537e872d476f7c57adf718944cc1e4495cbabf38e2a"}, - {file = "aiohttp-3.10.10-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e48d5021a84d341bcaf95c8460b152cfbad770d28e5fe14a768988c461b821bc"}, - {file = "aiohttp-3.10.10-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2609e9ab08474702cc67b7702dbb8a80e392c54613ebe80db7e8dbdb79837c68"}, - {file = "aiohttp-3.10.10-cp310-cp310-win32.whl", hash = "sha256:84afcdea18eda514c25bc68b9af2a2b1adea7c08899175a51fe7c4fb6d551257"}, - {file = "aiohttp-3.10.10-cp310-cp310-win_amd64.whl", hash = "sha256:9c72109213eb9d3874f7ac8c0c5fa90e072d678e117d9061c06e30c85b4cf0e6"}, - {file = "aiohttp-3.10.10-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c30a0eafc89d28e7f959281b58198a9fa5e99405f716c0289b7892ca345fe45f"}, - {file = "aiohttp-3.10.10-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:258c5dd01afc10015866114e210fb7365f0d02d9d059c3c3415382ab633fcbcb"}, - {file = "aiohttp-3.10.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:15ecd889a709b0080f02721255b3f80bb261c2293d3c748151274dfea93ac871"}, - {file = "aiohttp-3.10.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3935f82f6f4a3820270842e90456ebad3af15810cf65932bd24da4463bc0a4c"}, - {file = "aiohttp-3.10.10-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:413251f6fcf552a33c981c4709a6bba37b12710982fec8e558ae944bfb2abd38"}, - {file = "aiohttp-3.10.10-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d1720b4f14c78a3089562b8875b53e36b51c97c51adc53325a69b79b4b48ebcb"}, - {file = "aiohttp-3.10.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:679abe5d3858b33c2cf74faec299fda60ea9de62916e8b67e625d65bf069a3b7"}, - {file = "aiohttp-3.10.10-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:79019094f87c9fb44f8d769e41dbb664d6e8fcfd62f665ccce36762deaa0e911"}, - {file = "aiohttp-3.10.10-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:fe2fb38c2ed905a2582948e2de560675e9dfbee94c6d5ccdb1301c6d0a5bf092"}, - {file = "aiohttp-3.10.10-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:a3f00003de6eba42d6e94fabb4125600d6e484846dbf90ea8e48a800430cc142"}, - {file = "aiohttp-3.10.10-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:1bbb122c557a16fafc10354b9d99ebf2f2808a660d78202f10ba9d50786384b9"}, - {file = "aiohttp-3.10.10-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:30ca7c3b94708a9d7ae76ff281b2f47d8eaf2579cd05971b5dc681db8caac6e1"}, - {file = "aiohttp-3.10.10-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:df9270660711670e68803107d55c2b5949c2e0f2e4896da176e1ecfc068b974a"}, - {file = "aiohttp-3.10.10-cp311-cp311-win32.whl", hash = "sha256:aafc8ee9b742ce75044ae9a4d3e60e3d918d15a4c2e08a6c3c3e38fa59b92d94"}, - {file = "aiohttp-3.10.10-cp311-cp311-win_amd64.whl", hash = "sha256:362f641f9071e5f3ee6f8e7d37d5ed0d95aae656adf4ef578313ee585b585959"}, - {file = "aiohttp-3.10.10-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:9294bbb581f92770e6ed5c19559e1e99255e4ca604a22c5c6397b2f9dd3ee42c"}, - {file = "aiohttp-3.10.10-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a8fa23fe62c436ccf23ff930149c047f060c7126eae3ccea005f0483f27b2e28"}, - {file = "aiohttp-3.10.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5c6a5b8c7926ba5d8545c7dd22961a107526562da31a7a32fa2456baf040939f"}, - {file = "aiohttp-3.10.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:007ec22fbc573e5eb2fb7dec4198ef8f6bf2fe4ce20020798b2eb5d0abda6138"}, - {file = "aiohttp-3.10.10-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9627cc1a10c8c409b5822a92d57a77f383b554463d1884008e051c32ab1b3742"}, - {file = "aiohttp-3.10.10-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:50edbcad60d8f0e3eccc68da67f37268b5144ecc34d59f27a02f9611c1d4eec7"}, - {file = "aiohttp-3.10.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a45d85cf20b5e0d0aa5a8dca27cce8eddef3292bc29d72dcad1641f4ed50aa16"}, - {file = "aiohttp-3.10.10-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0b00807e2605f16e1e198f33a53ce3c4523114059b0c09c337209ae55e3823a8"}, - {file = "aiohttp-3.10.10-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f2d4324a98062be0525d16f768a03e0bbb3b9fe301ceee99611dc9a7953124e6"}, - {file = "aiohttp-3.10.10-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:438cd072f75bb6612f2aca29f8bd7cdf6e35e8f160bc312e49fbecab77c99e3a"}, - {file = "aiohttp-3.10.10-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:baa42524a82f75303f714108fea528ccacf0386af429b69fff141ffef1c534f9"}, - {file = "aiohttp-3.10.10-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:a7d8d14fe962153fc681f6366bdec33d4356f98a3e3567782aac1b6e0e40109a"}, - {file = "aiohttp-3.10.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c1277cd707c465cd09572a774559a3cc7c7a28802eb3a2a9472588f062097205"}, - {file = "aiohttp-3.10.10-cp312-cp312-win32.whl", hash = "sha256:59bb3c54aa420521dc4ce3cc2c3fe2ad82adf7b09403fa1f48ae45c0cbde6628"}, - {file = "aiohttp-3.10.10-cp312-cp312-win_amd64.whl", hash = "sha256:0e1b370d8007c4ae31ee6db7f9a2fe801a42b146cec80a86766e7ad5c4a259cf"}, - {file = "aiohttp-3.10.10-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ad7593bb24b2ab09e65e8a1d385606f0f47c65b5a2ae6c551db67d6653e78c28"}, - {file = "aiohttp-3.10.10-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1eb89d3d29adaf533588f209768a9c02e44e4baf832b08118749c5fad191781d"}, - {file = "aiohttp-3.10.10-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3fe407bf93533a6fa82dece0e74dbcaaf5d684e5a51862887f9eaebe6372cd79"}, - {file = "aiohttp-3.10.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50aed5155f819873d23520919e16703fc8925e509abbb1a1491b0087d1cd969e"}, - {file = "aiohttp-3.10.10-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4f05e9727ce409358baa615dbeb9b969db94324a79b5a5cea45d39bdb01d82e6"}, - {file = "aiohttp-3.10.10-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dffb610a30d643983aeb185ce134f97f290f8935f0abccdd32c77bed9388b42"}, - {file = "aiohttp-3.10.10-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa6658732517ddabe22c9036479eabce6036655ba87a0224c612e1ae6af2087e"}, - {file = "aiohttp-3.10.10-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:741a46d58677d8c733175d7e5aa618d277cd9d880301a380fd296975a9cdd7bc"}, - {file = "aiohttp-3.10.10-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e00e3505cd80440f6c98c6d69269dcc2a119f86ad0a9fd70bccc59504bebd68a"}, - {file = "aiohttp-3.10.10-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ffe595f10566f8276b76dc3a11ae4bb7eba1aac8ddd75811736a15b0d5311414"}, - {file = "aiohttp-3.10.10-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:bdfcf6443637c148c4e1a20c48c566aa694fa5e288d34b20fcdc58507882fed3"}, - {file = "aiohttp-3.10.10-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:d183cf9c797a5291e8301790ed6d053480ed94070637bfaad914dd38b0981f67"}, - {file = "aiohttp-3.10.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:77abf6665ae54000b98b3c742bc6ea1d1fb31c394bcabf8b5d2c1ac3ebfe7f3b"}, - {file = "aiohttp-3.10.10-cp313-cp313-win32.whl", hash = "sha256:4470c73c12cd9109db8277287d11f9dd98f77fc54155fc71a7738a83ffcc8ea8"}, - {file = "aiohttp-3.10.10-cp313-cp313-win_amd64.whl", hash = "sha256:486f7aabfa292719a2753c016cc3a8f8172965cabb3ea2e7f7436c7f5a22a151"}, - {file = "aiohttp-3.10.10-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:1b66ccafef7336a1e1f0e389901f60c1d920102315a56df85e49552308fc0486"}, - {file = "aiohttp-3.10.10-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:acd48d5b80ee80f9432a165c0ac8cbf9253eaddb6113269a5e18699b33958dbb"}, - {file = "aiohttp-3.10.10-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3455522392fb15ff549d92fbf4b73b559d5e43dc522588f7eb3e54c3f38beee7"}, - {file = "aiohttp-3.10.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45c3b868724137f713a38376fef8120c166d1eadd50da1855c112fe97954aed8"}, - {file = "aiohttp-3.10.10-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:da1dee8948d2137bb51fbb8a53cce6b1bcc86003c6b42565f008438b806cccd8"}, - {file = "aiohttp-3.10.10-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c5ce2ce7c997e1971b7184ee37deb6ea9922ef5163c6ee5aa3c274b05f9e12fa"}, - {file = "aiohttp-3.10.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28529e08fde6f12eba8677f5a8608500ed33c086f974de68cc65ab218713a59d"}, - {file = "aiohttp-3.10.10-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f7db54c7914cc99d901d93a34704833568d86c20925b2762f9fa779f9cd2e70f"}, - {file = "aiohttp-3.10.10-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:03a42ac7895406220124c88911ebee31ba8b2d24c98507f4a8bf826b2937c7f2"}, - {file = "aiohttp-3.10.10-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:7e338c0523d024fad378b376a79faff37fafb3c001872a618cde1d322400a572"}, - {file = "aiohttp-3.10.10-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:038f514fe39e235e9fef6717fbf944057bfa24f9b3db9ee551a7ecf584b5b480"}, - {file = "aiohttp-3.10.10-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:64f6c17757251e2b8d885d728b6433d9d970573586a78b78ba8929b0f41d045a"}, - {file = "aiohttp-3.10.10-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:93429602396f3383a797a2a70e5f1de5df8e35535d7806c9f91df06f297e109b"}, - {file = "aiohttp-3.10.10-cp38-cp38-win32.whl", hash = "sha256:c823bc3971c44ab93e611ab1a46b1eafeae474c0c844aff4b7474287b75fe49c"}, - {file = "aiohttp-3.10.10-cp38-cp38-win_amd64.whl", hash = "sha256:54ca74df1be3c7ca1cf7f4c971c79c2daf48d9aa65dea1a662ae18926f5bc8ce"}, - {file = "aiohttp-3.10.10-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:01948b1d570f83ee7bbf5a60ea2375a89dfb09fd419170e7f5af029510033d24"}, - {file = "aiohttp-3.10.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9fc1500fd2a952c5c8e3b29aaf7e3cc6e27e9cfc0a8819b3bce48cc1b849e4cc"}, - {file = "aiohttp-3.10.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f614ab0c76397661b90b6851a030004dac502e48260ea10f2441abd2207fbcc7"}, - {file = "aiohttp-3.10.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00819de9e45d42584bed046314c40ea7e9aea95411b38971082cad449392b08c"}, - {file = "aiohttp-3.10.10-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05646ebe6b94cc93407b3bf34b9eb26c20722384d068eb7339de802154d61bc5"}, - {file = "aiohttp-3.10.10-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:998f3bd3cfc95e9424a6acd7840cbdd39e45bc09ef87533c006f94ac47296090"}, - {file = "aiohttp-3.10.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9010c31cd6fa59438da4e58a7f19e4753f7f264300cd152e7f90d4602449762"}, - {file = "aiohttp-3.10.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ea7ffc6d6d6f8a11e6f40091a1040995cdff02cfc9ba4c2f30a516cb2633554"}, - {file = "aiohttp-3.10.10-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ef9c33cc5cbca35808f6c74be11eb7f5f6b14d2311be84a15b594bd3e58b5527"}, - {file = "aiohttp-3.10.10-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ce0cdc074d540265bfeb31336e678b4e37316849d13b308607efa527e981f5c2"}, - {file = "aiohttp-3.10.10-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:597a079284b7ee65ee102bc3a6ea226a37d2b96d0418cc9047490f231dc09fe8"}, - {file = "aiohttp-3.10.10-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:7789050d9e5d0c309c706953e5e8876e38662d57d45f936902e176d19f1c58ab"}, - {file = "aiohttp-3.10.10-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e7f8b04d83483577fd9200461b057c9f14ced334dcb053090cea1da9c8321a91"}, - {file = "aiohttp-3.10.10-cp39-cp39-win32.whl", hash = "sha256:c02a30b904282777d872266b87b20ed8cc0d1501855e27f831320f471d54d983"}, - {file = "aiohttp-3.10.10-cp39-cp39-win_amd64.whl", hash = "sha256:edfe3341033a6b53a5c522c802deb2079eee5cbfbb0af032a55064bd65c73a23"}, - {file = "aiohttp-3.10.10.tar.gz", hash = "sha256:0631dd7c9f0822cc61c88586ca76d5b5ada26538097d0f1df510b082bad3411a"}, + {file = "aiohttp-3.11.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a60f8206818e3582c999c999c799ab068e14f1870ade47d1fe8536dbfd88010b"}, + {file = "aiohttp-3.11.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e5786e5926f888ce3a996d38d9c9b8f9306f399edb1f1ca3ce7760dab9b1043c"}, + {file = "aiohttp-3.11.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:262e45dbd7f1829bcb024259f65b2cf69d1ef5b37626af6955a1c487613aeb3a"}, + {file = "aiohttp-3.11.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:696adff3594bd449e0fe287441062bdc6f5300928426275b39ed27884ba083a7"}, + {file = "aiohttp-3.11.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6dd1411ecfc070af4df129e81fe42c799d95d81c29c22d2c3e4341d974c38f1a"}, + {file = "aiohttp-3.11.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:06defa9017ab50d215446ebbee294e07eb2fcee72d9a909a08192cfacbd43a08"}, + {file = "aiohttp-3.11.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4bc936d10b8fa3f2aa66e59e034085208b588442263400ddb042703d0db99421"}, + {file = "aiohttp-3.11.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:769457243dc4bc902d376cd14c5c7ec234a4faadb4f283dc2738f004cce9a9e1"}, + {file = "aiohttp-3.11.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a360c18b2cb391fec9585ba1efc55150e2fbc6100308113117dfea521e810d8"}, + {file = "aiohttp-3.11.4-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3e9fd9c11299d6d230eb2669fd1ed0238d33970e36b495b0432ace7f157fc931"}, + {file = "aiohttp-3.11.4-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:0ccbe8ece8a7796ef41b86a3240034c5918d9b324c2ae48fa0be33565e297c64"}, + {file = "aiohttp-3.11.4-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:9a8b6b3c788a8a6f88f5ce23d729cfde7a2ccebbeb09db0822ef266de0445a27"}, + {file = "aiohttp-3.11.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cbe3e356523d0b336543996f92a0e65f760be82447db21c95c60392c8075ff5c"}, + {file = "aiohttp-3.11.4-cp310-cp310-win32.whl", hash = "sha256:a54424050d1eb36edfef913b1bc8552d52a37864c0ea7df3e1e764663e11053a"}, + {file = "aiohttp-3.11.4-cp310-cp310-win_amd64.whl", hash = "sha256:a51f983d91edae7777b5a2af8e5d83224ba01284502c6874a17647ad6cbf0211"}, + {file = "aiohttp-3.11.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:89261fee04715083ef3b5a0d222b094021793c1728b8ff21da361c79f6384095"}, + {file = "aiohttp-3.11.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4ef6eb1367046fb22085f10c5c84ea2efd0d836ad8088306d652ab1d743faf9e"}, + {file = "aiohttp-3.11.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d68bb99bc6a4b0a3eceb95a246f5a0262e600e094b5178c2b1ab0f4bcbae6729"}, + {file = "aiohttp-3.11.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a550b4ff70d06c15057d75ddad89a3e7c496e0609d28c567c20b61cd1265c0a6"}, + {file = "aiohttp-3.11.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9b41e0fb3b415beccd6d0c6e5f3ee34b7952cd76120a1db3e45507b83dc5ef81"}, + {file = "aiohttp-3.11.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8feffa8396724116be5bc05bf4fcba0c738cbe908c82a95f71371e32b28cd2ca"}, + {file = "aiohttp-3.11.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1dd5b7947e23a08c70d4c1924809b91211f14136ffd13d303dc487913cfebfeb"}, + {file = "aiohttp-3.11.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ab5c6a521b156edef13a57a6d524903c547573ff8101e3d1bbe9ee1b97267973"}, + {file = "aiohttp-3.11.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:010bc9606f798eda8ef071759c7b163893071502bcaedc7d5dc49f9d8f12e553"}, + {file = "aiohttp-3.11.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e7d182164aebad4e2faf2742ee7486d4af73d933461adbd8f183ac9b1837323c"}, + {file = "aiohttp-3.11.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:88e681c0d17bb285d2ccbb73ae77ef86339b632ee7967044c2284411120b9730"}, + {file = "aiohttp-3.11.4-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0d2cea21ec05b832e9f6a2390b23d32ce5575f6cf4812bd171d4493f59c101fe"}, + {file = "aiohttp-3.11.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:635397b5b4de2397f8136f8fd15c8ebee560e36473195c7aa992ffb8e46acdd3"}, + {file = "aiohttp-3.11.4-cp311-cp311-win32.whl", hash = "sha256:cb2d5a24586b508f658ddd710f7d4b7e4f5656cb5d569aeb1f432c1c3704347a"}, + {file = "aiohttp-3.11.4-cp311-cp311-win_amd64.whl", hash = "sha256:ee081375d10fa2f3f7b0d050c8b9c1ae23190e1d9be256035bf8a41059c4df3a"}, + {file = "aiohttp-3.11.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:5cd60673be31449c63f59886f3581478bbdfaddd87e7394a4d73ad134d9be9b9"}, + {file = "aiohttp-3.11.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4ff6105856ae688b29d5daaede1256f5e02e9d5cb3059f8f5ef55d975c2e6992"}, + {file = "aiohttp-3.11.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b169507c98b924fd68b82ae366c285daf6d22456835294c329c3226d61e1f69d"}, + {file = "aiohttp-3.11.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec84106c8b7ff347be06bf579c298a23b6d1d2225c57273a8cd502f257125d4"}, + {file = "aiohttp-3.11.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:03d53b0888f984f4f0c216a37577ee7e7b1ed1dac89cdd2fde61bf2ccb32009b"}, + {file = "aiohttp-3.11.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:822dedad93947fcb1096cc41ee8fd32e9f652777561a37c740e5335699f01cea"}, + {file = "aiohttp-3.11.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aef239c307f3a3f830933d612c0aef4ad4b3aa9ce5233a0954262a00f5c379f1"}, + {file = "aiohttp-3.11.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49eb5a0338f141ef32299d48f1415486f47953d37b0c7fa6d778b73b66f3a7e2"}, + {file = "aiohttp-3.11.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7be4efe60e9bddf78ee165a296e80170147282081e1366f0580cf4cc0fb1182f"}, + {file = "aiohttp-3.11.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:66e83a9a1131f0060aaedcc57f1a7e489898b6c3607eededccc7a9f80b95bdb4"}, + {file = "aiohttp-3.11.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a7986fb988314fd2225c1ecab45fd457e1f2c097dcc3c0aacd2a7aec7486beb6"}, + {file = "aiohttp-3.11.4-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:a34c30e1461da3a69c5bdcfce44418b6f969e1e68ebf367edfa5eaab380abf7a"}, + {file = "aiohttp-3.11.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:cb4c676ab99ca2dd231928d481e19cd540155dff36e70e613179c4927bd520b8"}, + {file = "aiohttp-3.11.4-cp312-cp312-win32.whl", hash = "sha256:d40d9a740053cb7fef72442fa7bd699060ff4c710971ebdb8dd7c8b36417570f"}, + {file = "aiohttp-3.11.4-cp312-cp312-win_amd64.whl", hash = "sha256:365df6cf2ad144479ba0e0b58abdc5276923676d34da4c1c45613a80d2aac130"}, + {file = "aiohttp-3.11.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f307632f3eaa676f8c2f5df11e4c00ad47dfa79b06cb2fa39156a4e9c6821bdb"}, + {file = "aiohttp-3.11.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:cc2d64b1747efa183ced57b6bce53c9ea8e16e53419e389051b2a214ad0ed051"}, + {file = "aiohttp-3.11.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f37ece590451ecffc815f2eb41f07191d1a31a0404361d1ae2ed532e05c86da4"}, + {file = "aiohttp-3.11.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b10b316413c80a4dcc5228c092a8d019e4b75d4efbca8988cb5b67ae9fa56881"}, + {file = "aiohttp-3.11.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:beaed1b2d03033dd301a7b67430f03c8255d6856a269c20995a0292de596519e"}, + {file = "aiohttp-3.11.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:518578d6821c942362daa14a56f26b739abeede6e408b0b83e27dfcde17730f7"}, + {file = "aiohttp-3.11.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1e09bc44a1abbd96f55d15330d6cab80459cb8b06a0b656efd712ce47a3710d"}, + {file = "aiohttp-3.11.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ae8480148d696dae49126e97568333fc01493069ad46a94b82f69c7a33197ea"}, + {file = "aiohttp-3.11.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b71aab89800fa2eaeb28923ee05e7e56c28dab4ebdba524db06e963431bf6192"}, + {file = "aiohttp-3.11.4-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:821c9c640d3dc456c6a7b005e38bc5af05326b6a08ce91a068719934d108a1bb"}, + {file = "aiohttp-3.11.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:d60255f3ed71aa14a2e75383543ca31bd362fdc7f0d2eafc060d85a9051598df"}, + {file = "aiohttp-3.11.4-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:9788781f57fb732426ae74b9955b899e677ce42b848e60a11be29358fb20c976"}, + {file = "aiohttp-3.11.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:94acecf2eee13a45f627ed25a28f5a7f2db66b90ff94cd7a1e9cc1ad32cddd43"}, + {file = "aiohttp-3.11.4-cp313-cp313-win32.whl", hash = "sha256:d0fd6510c6d67d08ec80d9ba10cd340a8cfb0dd33436c858ed38d4564abb27c7"}, + {file = "aiohttp-3.11.4-cp313-cp313-win_amd64.whl", hash = "sha256:474f7266a61d1c3218ef4ec0325747884b2d5a13fab5bff5dd3b55d9c849406a"}, + {file = "aiohttp-3.11.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cfe8646a24856624c1eb7649da99333f0d7e75d9cf7c155ea870957d24b7c63c"}, + {file = "aiohttp-3.11.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e69d9869df50dd591228c62fbb3923d6124517d6bfc47a804492813888b497be"}, + {file = "aiohttp-3.11.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:eb4f1fe110332651c00d2df160978cf1be70896ed9e612ff7c7e67955091b2c4"}, + {file = "aiohttp-3.11.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d97668595bf03299148ea968fed2195cc76ad063aeec8161731aa6a5dbc2f675"}, + {file = "aiohttp-3.11.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c0b3378dc294ad6ec6c038ed57164165e0b83ef5f61eee72f6eefccd7df34b8"}, + {file = "aiohttp-3.11.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0898a77298dc24eef368511d98e551e0b2db293fa9b40c982f4d5ab4d8d2a3a"}, + {file = "aiohttp-3.11.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ecdf43ddde709c336a655c8b3858c56af8f7402de2572001a5a99f7bebf2f78"}, + {file = "aiohttp-3.11.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12bf9c139dfa004b65d2d71906abc593dcafe78a508f33d56c1ca9d87b18337f"}, + {file = "aiohttp-3.11.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2d978a95e4b58ef1fd937fbe347ab397c79ba24e17912595b54faafb88b9b937"}, + {file = "aiohttp-3.11.4-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1e32517c01905e0f4e665c3f3a495868ad996a32c243fcd917587d740253d589"}, + {file = "aiohttp-3.11.4-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:4275160583df18158e0d6789797ad314a14ae611b98933fbe7d7a1c3dcc6bad4"}, + {file = "aiohttp-3.11.4-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:1ff7afc3c461bd9217e2b8a90ddbe5edd94687d5a331c4ae6166dca5876d1a4b"}, + {file = "aiohttp-3.11.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:83bd5aa621b732a0ca1aa3490abd2b010247c4677371a804431935aeedf26e74"}, + {file = "aiohttp-3.11.4-cp39-cp39-win32.whl", hash = "sha256:542a4610571b0affc6e13dda9357235f5f1f2ad9859acc69b188eb53901292d6"}, + {file = "aiohttp-3.11.4-cp39-cp39-win_amd64.whl", hash = "sha256:a468b1b9d5499cbfd0411f5d28adbe651c90508540fdaefb4b7a2171a837a88d"}, + {file = "aiohttp-3.11.4.tar.gz", hash = "sha256:9d95cce8bb010597b3f2217155befe4708e0538d3548aa08d640ebf54e3f57cb"}, ] [package.dependencies] aiohappyeyeballs = ">=2.3.0" aiosignal = ">=1.1.2" -async-timeout = {version = ">=4.0,<5.0", markers = "python_version < \"3.11\""} +async-timeout = {version = ">=4.0,<6.0", markers = "python_version < \"3.11\""} attrs = ">=17.3.0" frozenlist = ">=1.1.1" multidict = ">=4.5,<7.0" -yarl = ">=1.12.0,<2.0" +propcache = ">=0.2.0" +yarl = ">=1.17.0,<2.0" [package.extras] speedups = ["Brotli", "aiodns (>=3.2.0)", "brotlicffi"] @@ -168,19 +154,20 @@ files = [ [[package]] name = "anjl" -version = "1.2.1" +version = "1.4.0" description = "A neighbour-joining library for Python." optional = false python-versions = "<3.13,>=3.10" files = [ - {file = "anjl-1.2.1-py3-none-any.whl", hash = "sha256:ccaa19121f78da68c85fe3d3f67155b9c6cd8659a11a7f47d091de1caa536205"}, - {file = "anjl-1.2.1.tar.gz", hash = "sha256:407134457e8a3215217ec62e473f5ffb7178d1df68e5b5d6a6a6cc64e89bae1e"}, + {file = "anjl-1.4.0-py3-none-any.whl", hash = "sha256:062d9b6d3d565a61a0b691fa6ae1e268e28a9ef2271d12259c1b6d42b0a1abea"}, + {file = "anjl-1.4.0.tar.gz", hash = "sha256:830d6b6233d3bc9cd5631da7a8ee798e348949a07429fae87e492659b5960fba"}, ] [package.dependencies] numba = ">=0.60.0" numpy = "*" numpydoc_decorator = "*" +packaging = "*" pandas = "*" plotly = "*" @@ -340,13 +327,13 @@ typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} [[package]] name = "async-timeout" -version = "4.0.3" +version = "5.0.1" description = "Timeout context manager for asyncio programs" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, - {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, + {file = "async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c"}, + {file = "async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3"}, ] [[package]] @@ -403,6 +390,46 @@ charset-normalizer = ["charset-normalizer"] html5lib = ["html5lib"] lxml = ["lxml"] +[[package]] +name = "bed-reader" +version = "1.0.6" +description = "Read and write the PLINK BED format, simply and efficiently." +optional = false +python-versions = "*" +files = [ + {file = "bed_reader-1.0.6-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:5f2e812dea71cf9aebbf8b1bf00149600948fdbf4bbdb8805c4a4ed4b1597aba"}, + {file = "bed_reader-1.0.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7753e3e9dcd4210aadfc071ece22264c4fef1bd53b31d34bd63ce11f217954d5"}, + {file = "bed_reader-1.0.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8138196648e662ab5ea69a6fd06e551f0d1b2b55344094e240726f97eeaaa41"}, + {file = "bed_reader-1.0.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c03a90c9efb828a4dbdbf31890b5bc946a67bb32e0d192c6585081774053aea2"}, + {file = "bed_reader-1.0.6-cp310-none-win_amd64.whl", hash = "sha256:34b65289f1fea7dc84acad9d1c73c33829b4328baf80a5889a195a6c9e650b8d"}, + {file = "bed_reader-1.0.6-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0fde94c3ca944fa0691c0e6ffb7e79c50c53a7cefb296e644715843604e9d3a1"}, + {file = "bed_reader-1.0.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d58f5f6a8fd1206a46428ca047a1c42043d2034f706acf318cbabaea25249e6d"}, + {file = "bed_reader-1.0.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0dd7fc1a85cd442cc12a0d2d5dbc060372c0a28db2a7018146d99d549c58ef"}, + {file = "bed_reader-1.0.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19091f5401921897b19522d96595c7372aae946ea9707fcee579f4c0b2c754f1"}, + {file = "bed_reader-1.0.6-cp311-none-win_amd64.whl", hash = "sha256:c506b7e97262788a64ae6ff6a8e8b4bfc25b2193375b23074f27695a57b6af55"}, + {file = "bed_reader-1.0.6-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:e04914691064f6d575ce8c9b5faa6f40ee97a26254658ccd156d354a13ca0ee6"}, + {file = "bed_reader-1.0.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1a770eb69067558528bedbb19768c6006e0837c826d31703031b6c29cfd27f29"}, + {file = "bed_reader-1.0.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e74ba041f0ca1a7abcde5db6024a2f83668dee73d4e620b74bfbcebae776c022"}, + {file = "bed_reader-1.0.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4452a2a07de8f35a7395ae0257f46faf0493998a232cda54011ed59e41243afc"}, + {file = "bed_reader-1.0.6-cp312-none-win_amd64.whl", hash = "sha256:a2d75855e2bf0f7f209a2085c30bcbc2c712d0f0aa978078d57d07d7ff6c424c"}, + {file = "bed_reader-1.0.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c49afb7beb8e8b6264f8654f4ffabb10eba5bd4c4804f0c4831f8962e54fa9b5"}, + {file = "bed_reader-1.0.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa5ae0474fbdee2097de7f6cee76b7b8baa8158c63e8e0b59440e663c164eacd"}, + {file = "bed_reader-1.0.6-cp313-none-win_amd64.whl", hash = "sha256:77bb57b565a9bb30ec8adcd952e4973774b80e12ba51895286e7751372d58892"}, + {file = "bed_reader-1.0.6-cp37-none-win_amd64.whl", hash = "sha256:4fb3cbfd9ed82f6a656ee09fca031ae8971293fd0b5c396440f5022dd3b58710"}, + {file = "bed_reader-1.0.6-cp38-none-win_amd64.whl", hash = "sha256:fc0b15b04b18790fa5d13411252bce648dee4984ad57365ba81120f370fa2485"}, + {file = "bed_reader-1.0.6-cp39-none-win_amd64.whl", hash = "sha256:907111f11c96525c3cf807bef1c0c519a1a80333981aa015a7345b8c1d29f9cf"}, + {file = "bed_reader-1.0.6.tar.gz", hash = "sha256:d6b439730d422590b6608908f049afd35113be562a41e70e4f06acf1375f11b1"}, +] + +[package.dependencies] +numpy = ">=1.13.3" + +[package.extras] +dev = ["limix-sphinx-theme (>=0.0.4)", "maturin (>=1.5.0)", "pandas (>=0.25.1)", "pytest", "pytest-cov", "pytest-datadir", "pytest-doctestplus", "pytest-sphinx (>=0.2.2)", "recommonmark (>=0.7.1)", "ruff (>=0.1.0)", "sphinx (>=6.2.1)", "sphinx-autoapi (>=3.0.0)"] +min-dev = ["numpy (>=1.13.3)", "pytest", "pytest-datadir"] +samples = ["pooch (>=1.5.0)"] +sparse = ["scipy (>=1.4)"] + [[package]] name = "biopython" version = "1.84" @@ -442,42 +469,41 @@ numpy = "*" [[package]] name = "bleach" -version = "6.1.0" +version = "6.2.0" description = "An easy safelist-based HTML-sanitizing tool." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "bleach-6.1.0-py3-none-any.whl", hash = "sha256:3225f354cfc436b9789c66c4ee030194bee0568fbf9cbdad3bc8b5c26c5f12b6"}, - {file = "bleach-6.1.0.tar.gz", hash = "sha256:0a31f1837963c41d46bbf1331b8778e1308ea0791db03cc4e7357b97cf42a8fe"}, + {file = "bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e"}, + {file = "bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f"}, ] [package.dependencies] -six = ">=1.9.0" webencodings = "*" [package.extras] -css = ["tinycss2 (>=1.1.0,<1.3)"] +css = ["tinycss2 (>=1.1.0,<1.5)"] [[package]] name = "blinker" -version = "1.8.2" +version = "1.9.0" description = "Fast, simple object-to-object and broadcast signaling" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "blinker-1.8.2-py3-none-any.whl", hash = "sha256:1779309f71bf239144b9399d06ae925637cf6634cf6bd131104184531bf67c01"}, - {file = "blinker-1.8.2.tar.gz", hash = "sha256:8f77b09d3bf7c795e969e9486f39c2c5e9c39d4ee07424be2bc594ece9642d83"}, + {file = "blinker-1.9.0-py3-none-any.whl", hash = "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc"}, + {file = "blinker-1.9.0.tar.gz", hash = "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf"}, ] [[package]] name = "bokeh" -version = "3.6.0" +version = "3.6.1" description = "Interactive plots and applications in the browser from Python" optional = false python-versions = ">=3.10" files = [ - {file = "bokeh-3.6.0-py3-none-any.whl", hash = "sha256:699e0df76cdfe54b5f574738647bd0ce230fa44fa0fcda5923e1f0f550f83d74"}, - {file = "bokeh-3.6.0.tar.gz", hash = "sha256:0032dc1e76ad097b07626e51584685ff48c65481fbaaad105663b1046165867a"}, + {file = "bokeh-3.6.1-py3-none-any.whl", hash = "sha256:6a97271bd4cc5b32c5bc7aa9c1c0dbe0beb0a8da2a22193e57c73f0c88d2075a"}, + {file = "bokeh-3.6.1.tar.gz", hash = "sha256:04d3fb5fac871423f38e4535838164cd90c3d32e707bcb74c8bf991ed28878fc"}, ] [package.dependencies] @@ -786,76 +812,65 @@ test = ["pytest"] [[package]] name = "contourpy" -version = "1.3.0" +version = "1.3.1" description = "Python library for calculating contours of 2D quadrilateral grids" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" files = [ - {file = "contourpy-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:880ea32e5c774634f9fcd46504bf9f080a41ad855f4fef54f5380f5133d343c7"}, - {file = "contourpy-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:76c905ef940a4474a6289c71d53122a4f77766eef23c03cd57016ce19d0f7b42"}, - {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92f8557cbb07415a4d6fa191f20fd9d2d9eb9c0b61d1b2f52a8926e43c6e9af7"}, - {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:36f965570cff02b874773c49bfe85562b47030805d7d8360748f3eca570f4cab"}, - {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cacd81e2d4b6f89c9f8a5b69b86490152ff39afc58a95af002a398273e5ce589"}, - {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69375194457ad0fad3a839b9e29aa0b0ed53bb54db1bfb6c3ae43d111c31ce41"}, - {file = "contourpy-1.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a52040312b1a858b5e31ef28c2e865376a386c60c0e248370bbea2d3f3b760d"}, - {file = "contourpy-1.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3faeb2998e4fcb256542e8a926d08da08977f7f5e62cf733f3c211c2a5586223"}, - {file = "contourpy-1.3.0-cp310-cp310-win32.whl", hash = "sha256:36e0cff201bcb17a0a8ecc7f454fe078437fa6bda730e695a92f2d9932bd507f"}, - {file = "contourpy-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:87ddffef1dbe5e669b5c2440b643d3fdd8622a348fe1983fad7a0f0ccb1cd67b"}, - {file = "contourpy-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0fa4c02abe6c446ba70d96ece336e621efa4aecae43eaa9b030ae5fb92b309ad"}, - {file = "contourpy-1.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:834e0cfe17ba12f79963861e0f908556b2cedd52e1f75e6578801febcc6a9f49"}, - {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbc4c3217eee163fa3984fd1567632b48d6dfd29216da3ded3d7b844a8014a66"}, - {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4865cd1d419e0c7a7bf6de1777b185eebdc51470800a9f42b9e9decf17762081"}, - {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:303c252947ab4b14c08afeb52375b26781ccd6a5ccd81abcdfc1fafd14cf93c1"}, - {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637f674226be46f6ba372fd29d9523dd977a291f66ab2a74fbeb5530bb3f445d"}, - {file = "contourpy-1.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:76a896b2f195b57db25d6b44e7e03f221d32fe318d03ede41f8b4d9ba1bff53c"}, - {file = "contourpy-1.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e1fd23e9d01591bab45546c089ae89d926917a66dceb3abcf01f6105d927e2cb"}, - {file = "contourpy-1.3.0-cp311-cp311-win32.whl", hash = "sha256:d402880b84df3bec6eab53cd0cf802cae6a2ef9537e70cf75e91618a3801c20c"}, - {file = "contourpy-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:6cb6cc968059db9c62cb35fbf70248f40994dfcd7aa10444bbf8b3faeb7c2d67"}, - {file = "contourpy-1.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:570ef7cf892f0afbe5b2ee410c507ce12e15a5fa91017a0009f79f7d93a1268f"}, - {file = "contourpy-1.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:da84c537cb8b97d153e9fb208c221c45605f73147bd4cadd23bdae915042aad6"}, - {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0be4d8425bfa755e0fd76ee1e019636ccc7c29f77a7c86b4328a9eb6a26d0639"}, - {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c0da700bf58f6e0b65312d0a5e695179a71d0163957fa381bb3c1f72972537c"}, - {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb8b141bb00fa977d9122636b16aa67d37fd40a3d8b52dd837e536d64b9a4d06"}, - {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3634b5385c6716c258d0419c46d05c8aa7dc8cb70326c9a4fb66b69ad2b52e09"}, - {file = "contourpy-1.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0dce35502151b6bd35027ac39ba6e5a44be13a68f55735c3612c568cac3805fd"}, - {file = "contourpy-1.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:aea348f053c645100612b333adc5983d87be69acdc6d77d3169c090d3b01dc35"}, - {file = "contourpy-1.3.0-cp312-cp312-win32.whl", hash = "sha256:90f73a5116ad1ba7174341ef3ea5c3150ddf20b024b98fb0c3b29034752c8aeb"}, - {file = "contourpy-1.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:b11b39aea6be6764f84360fce6c82211a9db32a7c7de8fa6dd5397cf1d079c3b"}, - {file = "contourpy-1.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3e1c7fa44aaae40a2247e2e8e0627f4bea3dd257014764aa644f319a5f8600e3"}, - {file = "contourpy-1.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:364174c2a76057feef647c802652f00953b575723062560498dc7930fc9b1cb7"}, - {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32b238b3b3b649e09ce9aaf51f0c261d38644bdfa35cbaf7b263457850957a84"}, - {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d51fca85f9f7ad0b65b4b9fe800406d0d77017d7270d31ec3fb1cc07358fdea0"}, - {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:732896af21716b29ab3e988d4ce14bc5133733b85956316fb0c56355f398099b"}, - {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d73f659398a0904e125280836ae6f88ba9b178b2fed6884f3b1f95b989d2c8da"}, - {file = "contourpy-1.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c6c7c2408b7048082932cf4e641fa3b8ca848259212f51c8c59c45aa7ac18f14"}, - {file = "contourpy-1.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f317576606de89da6b7e0861cf6061f6146ead3528acabff9236458a6ba467f8"}, - {file = "contourpy-1.3.0-cp313-cp313-win32.whl", hash = "sha256:31cd3a85dbdf1fc002280c65caa7e2b5f65e4a973fcdf70dd2fdcb9868069294"}, - {file = "contourpy-1.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:4553c421929ec95fb07b3aaca0fae668b2eb5a5203d1217ca7c34c063c53d087"}, - {file = "contourpy-1.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:345af746d7766821d05d72cb8f3845dfd08dd137101a2cb9b24de277d716def8"}, - {file = "contourpy-1.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3bb3808858a9dc68f6f03d319acd5f1b8a337e6cdda197f02f4b8ff67ad2057b"}, - {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:420d39daa61aab1221567b42eecb01112908b2cab7f1b4106a52caaec8d36973"}, - {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d63ee447261e963af02642ffcb864e5a2ee4cbfd78080657a9880b8b1868e18"}, - {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:167d6c890815e1dac9536dca00828b445d5d0df4d6a8c6adb4a7ec3166812fa8"}, - {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:710a26b3dc80c0e4febf04555de66f5fd17e9cf7170a7b08000601a10570bda6"}, - {file = "contourpy-1.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:75ee7cb1a14c617f34a51d11fa7524173e56551646828353c4af859c56b766e2"}, - {file = "contourpy-1.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:33c92cdae89ec5135d036e7218e69b0bb2851206077251f04a6c4e0e21f03927"}, - {file = "contourpy-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a11077e395f67ffc2c44ec2418cfebed032cd6da3022a94fc227b6faf8e2acb8"}, - {file = "contourpy-1.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e8134301d7e204c88ed7ab50028ba06c683000040ede1d617298611f9dc6240c"}, - {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e12968fdfd5bb45ffdf6192a590bd8ddd3ba9e58360b29683c6bb71a7b41edca"}, - {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fd2a0fc506eccaaa7595b7e1418951f213cf8255be2600f1ea1b61e46a60c55f"}, - {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4cfb5c62ce023dfc410d6059c936dcf96442ba40814aefbfa575425a3a7f19dc"}, - {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68a32389b06b82c2fdd68276148d7b9275b5f5cf13e5417e4252f6d1a34f72a2"}, - {file = "contourpy-1.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:94e848a6b83da10898cbf1311a815f770acc9b6a3f2d646f330d57eb4e87592e"}, - {file = "contourpy-1.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d78ab28a03c854a873787a0a42254a0ccb3cb133c672f645c9f9c8f3ae9d0800"}, - {file = "contourpy-1.3.0-cp39-cp39-win32.whl", hash = "sha256:81cb5ed4952aae6014bc9d0421dec7c5835c9c8c31cdf51910b708f548cf58e5"}, - {file = "contourpy-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:14e262f67bd7e6eb6880bc564dcda30b15e351a594657e55b7eec94b6ef72843"}, - {file = "contourpy-1.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fe41b41505a5a33aeaed2a613dccaeaa74e0e3ead6dd6fd3a118fb471644fd6c"}, - {file = "contourpy-1.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eca7e17a65f72a5133bdbec9ecf22401c62bcf4821361ef7811faee695799779"}, - {file = "contourpy-1.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ec4dc6bf570f5b22ed0d7efba0dfa9c5b9e0431aeea7581aa217542d9e809a4"}, - {file = "contourpy-1.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:00ccd0dbaad6d804ab259820fa7cb0b8036bda0686ef844d24125d8287178ce0"}, - {file = "contourpy-1.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ca947601224119117f7c19c9cdf6b3ab54c5726ef1d906aa4a69dfb6dd58102"}, - {file = "contourpy-1.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c6ec93afeb848a0845a18989da3beca3eec2c0f852322efe21af1931147d12cb"}, - {file = "contourpy-1.3.0.tar.gz", hash = "sha256:7ffa0db17717a8ffb127efd0c95a4362d996b892c2904db72428d5b52e1938a4"}, + {file = "contourpy-1.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a045f341a77b77e1c5de31e74e966537bba9f3c4099b35bf4c2e3939dd54cdab"}, + {file = "contourpy-1.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:500360b77259914f7805af7462e41f9cb7ca92ad38e9f94d6c8641b089338124"}, + {file = "contourpy-1.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2f926efda994cdf3c8d3fdb40b9962f86edbc4457e739277b961eced3d0b4c1"}, + {file = "contourpy-1.3.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:adce39d67c0edf383647a3a007de0a45fd1b08dedaa5318404f1a73059c2512b"}, + {file = "contourpy-1.3.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abbb49fb7dac584e5abc6636b7b2a7227111c4f771005853e7d25176daaf8453"}, + {file = "contourpy-1.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0cffcbede75c059f535725c1680dfb17b6ba8753f0c74b14e6a9c68c29d7ea3"}, + {file = "contourpy-1.3.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ab29962927945d89d9b293eabd0d59aea28d887d4f3be6c22deaefbb938a7277"}, + {file = "contourpy-1.3.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:974d8145f8ca354498005b5b981165b74a195abfae9a8129df3e56771961d595"}, + {file = "contourpy-1.3.1-cp310-cp310-win32.whl", hash = "sha256:ac4578ac281983f63b400f7fe6c101bedc10651650eef012be1ccffcbacf3697"}, + {file = "contourpy-1.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:174e758c66bbc1c8576992cec9599ce8b6672b741b5d336b5c74e35ac382b18e"}, + {file = "contourpy-1.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3e8b974d8db2c5610fb4e76307e265de0edb655ae8169e8b21f41807ccbeec4b"}, + {file = "contourpy-1.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:20914c8c973f41456337652a6eeca26d2148aa96dd7ac323b74516988bea89fc"}, + {file = "contourpy-1.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19d40d37c1c3a4961b4619dd9d77b12124a453cc3d02bb31a07d58ef684d3d86"}, + {file = "contourpy-1.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:113231fe3825ebf6f15eaa8bc1f5b0ddc19d42b733345eae0934cb291beb88b6"}, + {file = "contourpy-1.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4dbbc03a40f916a8420e420d63e96a1258d3d1b58cbdfd8d1f07b49fcbd38e85"}, + {file = "contourpy-1.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a04ecd68acbd77fa2d39723ceca4c3197cb2969633836ced1bea14e219d077c"}, + {file = "contourpy-1.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c414fc1ed8ee1dbd5da626cf3710c6013d3d27456651d156711fa24f24bd1291"}, + {file = "contourpy-1.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:31c1b55c1f34f80557d3830d3dd93ba722ce7e33a0b472cba0ec3b6535684d8f"}, + {file = "contourpy-1.3.1-cp311-cp311-win32.whl", hash = "sha256:f611e628ef06670df83fce17805c344710ca5cde01edfdc72751311da8585375"}, + {file = "contourpy-1.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:b2bdca22a27e35f16794cf585832e542123296b4687f9fd96822db6bae17bfc9"}, + {file = "contourpy-1.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0ffa84be8e0bd33410b17189f7164c3589c229ce5db85798076a3fa136d0e509"}, + {file = "contourpy-1.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805617228ba7e2cbbfb6c503858e626ab528ac2a32a04a2fe88ffaf6b02c32bc"}, + {file = "contourpy-1.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ade08d343436a94e633db932e7e8407fe7de8083967962b46bdfc1b0ced39454"}, + {file = "contourpy-1.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:47734d7073fb4590b4a40122b35917cd77be5722d80683b249dac1de266aac80"}, + {file = "contourpy-1.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2ba94a401342fc0f8b948e57d977557fbf4d515f03c67682dd5c6191cb2d16ec"}, + {file = "contourpy-1.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efa874e87e4a647fd2e4f514d5e91c7d493697127beb95e77d2f7561f6905bd9"}, + {file = "contourpy-1.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1bf98051f1045b15c87868dbaea84f92408337d4f81d0e449ee41920ea121d3b"}, + {file = "contourpy-1.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:61332c87493b00091423e747ea78200659dc09bdf7fd69edd5e98cef5d3e9a8d"}, + {file = "contourpy-1.3.1-cp312-cp312-win32.whl", hash = "sha256:e914a8cb05ce5c809dd0fe350cfbb4e881bde5e2a38dc04e3afe1b3e58bd158e"}, + {file = "contourpy-1.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:08d9d449a61cf53033612cb368f3a1b26cd7835d9b8cd326647efe43bca7568d"}, + {file = "contourpy-1.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a761d9ccfc5e2ecd1bf05534eda382aa14c3e4f9205ba5b1684ecfe400716ef2"}, + {file = "contourpy-1.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:523a8ee12edfa36f6d2a49407f705a6ef4c5098de4f498619787e272de93f2d5"}, + {file = "contourpy-1.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece6df05e2c41bd46776fbc712e0996f7c94e0d0543af1656956d150c4ca7c81"}, + {file = "contourpy-1.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:573abb30e0e05bf31ed067d2f82500ecfdaec15627a59d63ea2d95714790f5c2"}, + {file = "contourpy-1.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9fa36448e6a3a1a9a2ba23c02012c43ed88905ec80163f2ffe2421c7192a5d7"}, + {file = "contourpy-1.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ea9924d28fc5586bf0b42d15f590b10c224117e74409dd7a0be3b62b74a501c"}, + {file = "contourpy-1.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5b75aa69cb4d6f137b36f7eb2ace9280cfb60c55dc5f61c731fdf6f037f958a3"}, + {file = "contourpy-1.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:041b640d4ec01922083645a94bb3b2e777e6b626788f4095cf21abbe266413c1"}, + {file = "contourpy-1.3.1-cp313-cp313-win32.whl", hash = "sha256:36987a15e8ace5f58d4d5da9dca82d498c2bbb28dff6e5d04fbfcc35a9cb3a82"}, + {file = "contourpy-1.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:a7895f46d47671fa7ceec40f31fae721da51ad34bdca0bee83e38870b1f47ffd"}, + {file = "contourpy-1.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9ddeb796389dadcd884c7eb07bd14ef12408aaae358f0e2ae24114d797eede30"}, + {file = "contourpy-1.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:19c1555a6801c2f084c7ddc1c6e11f02eb6a6016ca1318dd5452ba3f613a1751"}, + {file = "contourpy-1.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:841ad858cff65c2c04bf93875e384ccb82b654574a6d7f30453a04f04af71342"}, + {file = "contourpy-1.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4318af1c925fb9a4fb190559ef3eec206845f63e80fb603d47f2d6d67683901c"}, + {file = "contourpy-1.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:14c102b0eab282427b662cb590f2e9340a9d91a1c297f48729431f2dcd16e14f"}, + {file = "contourpy-1.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05e806338bfeaa006acbdeba0ad681a10be63b26e1b17317bfac3c5d98f36cda"}, + {file = "contourpy-1.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4d76d5993a34ef3df5181ba3c92fabb93f1eaa5729504fb03423fcd9f3177242"}, + {file = "contourpy-1.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:89785bb2a1980c1bd87f0cb1517a71cde374776a5f150936b82580ae6ead44a1"}, + {file = "contourpy-1.3.1-cp313-cp313t-win32.whl", hash = "sha256:8eb96e79b9f3dcadbad2a3891672f81cdcab7f95b27f28f1c67d75f045b6b4f1"}, + {file = "contourpy-1.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:287ccc248c9e0d0566934e7d606201abd74761b5703d804ff3df8935f523d546"}, + {file = "contourpy-1.3.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b457d6430833cee8e4b8e9b6f07aa1c161e5e0d52e118dc102c8f9bd7dd060d6"}, + {file = "contourpy-1.3.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb76c1a154b83991a3cbbf0dfeb26ec2833ad56f95540b442c73950af2013750"}, + {file = "contourpy-1.3.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:44a29502ca9c7b5ba389e620d44f2fbe792b1fb5734e8b931ad307071ec58c53"}, + {file = "contourpy-1.3.1.tar.gz", hash = "sha256:dfd97abd83335045a913e3bcc4a09c0ceadbe66580cf573fe961f4a825efa699"}, ] [package.dependencies] @@ -870,73 +885,73 @@ test-no-images = ["pytest", "pytest-cov", "pytest-rerunfailures", "pytest-xdist" [[package]] name = "coverage" -version = "7.6.4" +version = "7.6.7" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.9" files = [ - {file = "coverage-7.6.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5f8ae553cba74085db385d489c7a792ad66f7f9ba2ee85bfa508aeb84cf0ba07"}, - {file = "coverage-7.6.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8165b796df0bd42e10527a3f493c592ba494f16ef3c8b531288e3d0d72c1f6f0"}, - {file = "coverage-7.6.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7c8b95bf47db6d19096a5e052ffca0a05f335bc63cef281a6e8fe864d450a72"}, - {file = "coverage-7.6.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ed9281d1b52628e81393f5eaee24a45cbd64965f41857559c2b7ff19385df51"}, - {file = "coverage-7.6.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0809082ee480bb8f7416507538243c8863ac74fd8a5d2485c46f0f7499f2b491"}, - {file = "coverage-7.6.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d541423cdd416b78626b55f123412fcf979d22a2c39fce251b350de38c15c15b"}, - {file = "coverage-7.6.4-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:58809e238a8a12a625c70450b48e8767cff9eb67c62e6154a642b21ddf79baea"}, - {file = "coverage-7.6.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c9b8e184898ed014884ca84c70562b4a82cbc63b044d366fedc68bc2b2f3394a"}, - {file = "coverage-7.6.4-cp310-cp310-win32.whl", hash = "sha256:6bd818b7ea14bc6e1f06e241e8234508b21edf1b242d49831831a9450e2f35fa"}, - {file = "coverage-7.6.4-cp310-cp310-win_amd64.whl", hash = "sha256:06babbb8f4e74b063dbaeb74ad68dfce9186c595a15f11f5d5683f748fa1d172"}, - {file = "coverage-7.6.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:73d2b73584446e66ee633eaad1a56aad577c077f46c35ca3283cd687b7715b0b"}, - {file = "coverage-7.6.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:51b44306032045b383a7a8a2c13878de375117946d68dcb54308111f39775a25"}, - {file = "coverage-7.6.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b3fb02fe73bed561fa12d279a417b432e5b50fe03e8d663d61b3d5990f29546"}, - {file = "coverage-7.6.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed8fe9189d2beb6edc14d3ad19800626e1d9f2d975e436f84e19efb7fa19469b"}, - {file = "coverage-7.6.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b369ead6527d025a0fe7bd3864e46dbee3aa8f652d48df6174f8d0bac9e26e0e"}, - {file = "coverage-7.6.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ade3ca1e5f0ff46b678b66201f7ff477e8fa11fb537f3b55c3f0568fbfe6e718"}, - {file = "coverage-7.6.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:27fb4a050aaf18772db513091c9c13f6cb94ed40eacdef8dad8411d92d9992db"}, - {file = "coverage-7.6.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4f704f0998911abf728a7783799444fcbbe8261c4a6c166f667937ae6a8aa522"}, - {file = "coverage-7.6.4-cp311-cp311-win32.whl", hash = "sha256:29155cd511ee058e260db648b6182c419422a0d2e9a4fa44501898cf918866cf"}, - {file = "coverage-7.6.4-cp311-cp311-win_amd64.whl", hash = "sha256:8902dd6a30173d4ef09954bfcb24b5d7b5190cf14a43170e386979651e09ba19"}, - {file = "coverage-7.6.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:12394842a3a8affa3ba62b0d4ab7e9e210c5e366fbac3e8b2a68636fb19892c2"}, - {file = "coverage-7.6.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2b6b4c83d8e8ea79f27ab80778c19bc037759aea298da4b56621f4474ffeb117"}, - {file = "coverage-7.6.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d5b8007f81b88696d06f7df0cb9af0d3b835fe0c8dbf489bad70b45f0e45613"}, - {file = "coverage-7.6.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b57b768feb866f44eeed9f46975f3d6406380275c5ddfe22f531a2bf187eda27"}, - {file = "coverage-7.6.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5915fcdec0e54ee229926868e9b08586376cae1f5faa9bbaf8faf3561b393d52"}, - {file = "coverage-7.6.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0b58c672d14f16ed92a48db984612f5ce3836ae7d72cdd161001cc54512571f2"}, - {file = "coverage-7.6.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:2fdef0d83a2d08d69b1f2210a93c416d54e14d9eb398f6ab2f0a209433db19e1"}, - {file = "coverage-7.6.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8cf717ee42012be8c0cb205dbbf18ffa9003c4cbf4ad078db47b95e10748eec5"}, - {file = "coverage-7.6.4-cp312-cp312-win32.whl", hash = "sha256:7bb92c539a624cf86296dd0c68cd5cc286c9eef2d0c3b8b192b604ce9de20a17"}, - {file = "coverage-7.6.4-cp312-cp312-win_amd64.whl", hash = "sha256:1032e178b76a4e2b5b32e19d0fd0abbce4b58e77a1ca695820d10e491fa32b08"}, - {file = "coverage-7.6.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:023bf8ee3ec6d35af9c1c6ccc1d18fa69afa1cb29eaac57cb064dbb262a517f9"}, - {file = "coverage-7.6.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b0ac3d42cb51c4b12df9c5f0dd2f13a4f24f01943627120ec4d293c9181219ba"}, - {file = "coverage-7.6.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8fe4984b431f8621ca53d9380901f62bfb54ff759a1348cd140490ada7b693c"}, - {file = "coverage-7.6.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5fbd612f8a091954a0c8dd4c0b571b973487277d26476f8480bfa4b2a65b5d06"}, - {file = "coverage-7.6.4-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dacbc52de979f2823a819571f2e3a350a7e36b8cb7484cdb1e289bceaf35305f"}, - {file = "coverage-7.6.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dab4d16dfef34b185032580e2f2f89253d302facba093d5fa9dbe04f569c4f4b"}, - {file = "coverage-7.6.4-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:862264b12ebb65ad8d863d51f17758b1684560b66ab02770d4f0baf2ff75da21"}, - {file = "coverage-7.6.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5beb1ee382ad32afe424097de57134175fea3faf847b9af002cc7895be4e2a5a"}, - {file = "coverage-7.6.4-cp313-cp313-win32.whl", hash = "sha256:bf20494da9653f6410213424f5f8ad0ed885e01f7e8e59811f572bdb20b8972e"}, - {file = "coverage-7.6.4-cp313-cp313-win_amd64.whl", hash = "sha256:182e6cd5c040cec0a1c8d415a87b67ed01193ed9ad458ee427741c7d8513d963"}, - {file = "coverage-7.6.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a181e99301a0ae128493a24cfe5cfb5b488c4e0bf2f8702091473d033494d04f"}, - {file = "coverage-7.6.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:df57bdbeffe694e7842092c5e2e0bc80fff7f43379d465f932ef36f027179806"}, - {file = "coverage-7.6.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bcd1069e710600e8e4cf27f65c90c7843fa8edfb4520fb0ccb88894cad08b11"}, - {file = "coverage-7.6.4-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:99b41d18e6b2a48ba949418db48159d7a2e81c5cc290fc934b7d2380515bd0e3"}, - {file = "coverage-7.6.4-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6b1e54712ba3474f34b7ef7a41e65bd9037ad47916ccb1cc78769bae324c01a"}, - {file = "coverage-7.6.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:53d202fd109416ce011578f321460795abfe10bb901b883cafd9b3ef851bacfc"}, - {file = "coverage-7.6.4-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:c48167910a8f644671de9f2083a23630fbf7a1cb70ce939440cd3328e0919f70"}, - {file = "coverage-7.6.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:cc8ff50b50ce532de2fa7a7daae9dd12f0a699bfcd47f20945364e5c31799fef"}, - {file = "coverage-7.6.4-cp313-cp313t-win32.whl", hash = "sha256:b8d3a03d9bfcaf5b0141d07a88456bb6a4c3ce55c080712fec8418ef3610230e"}, - {file = "coverage-7.6.4-cp313-cp313t-win_amd64.whl", hash = "sha256:f3ddf056d3ebcf6ce47bdaf56142af51bb7fad09e4af310241e9db7a3a8022e1"}, - {file = "coverage-7.6.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9cb7fa111d21a6b55cbf633039f7bc2749e74932e3aa7cb7333f675a58a58bf3"}, - {file = "coverage-7.6.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:11a223a14e91a4693d2d0755c7a043db43d96a7450b4f356d506c2562c48642c"}, - {file = "coverage-7.6.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a413a096c4cbac202433c850ee43fa326d2e871b24554da8327b01632673a076"}, - {file = "coverage-7.6.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00a1d69c112ff5149cabe60d2e2ee948752c975d95f1e1096742e6077affd376"}, - {file = "coverage-7.6.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f76846299ba5c54d12c91d776d9605ae33f8ae2b9d1d3c3703cf2db1a67f2c0"}, - {file = "coverage-7.6.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fe439416eb6380de434886b00c859304338f8b19f6f54811984f3420a2e03858"}, - {file = "coverage-7.6.4-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:0294ca37f1ba500667b1aef631e48d875ced93ad5e06fa665a3295bdd1d95111"}, - {file = "coverage-7.6.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6f01ba56b1c0e9d149f9ac85a2f999724895229eb36bd997b61e62999e9b0901"}, - {file = "coverage-7.6.4-cp39-cp39-win32.whl", hash = "sha256:bc66f0bf1d7730a17430a50163bb264ba9ded56739112368ba985ddaa9c3bd09"}, - {file = "coverage-7.6.4-cp39-cp39-win_amd64.whl", hash = "sha256:c481b47f6b5845064c65a7bc78bc0860e635a9b055af0df46fdf1c58cebf8e8f"}, - {file = "coverage-7.6.4-pp39.pp310-none-any.whl", hash = "sha256:3c65d37f3a9ebb703e710befdc489a38683a5b152242664b973a7b7b22348a4e"}, - {file = "coverage-7.6.4.tar.gz", hash = "sha256:29fc0f17b1d3fea332f8001d4558f8214af7f1d87a345f3a133c901d60347c73"}, + {file = "coverage-7.6.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:108bb458827765d538abcbf8288599fee07d2743357bdd9b9dad456c287e121e"}, + {file = "coverage-7.6.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c973b2fe4dc445cb865ab369df7521df9c27bf40715c837a113edaa2aa9faf45"}, + {file = "coverage-7.6.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c6b24007c4bcd0b19fac25763a7cac5035c735ae017e9a349b927cfc88f31c1"}, + {file = "coverage-7.6.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:acbb8af78f8f91b3b51f58f288c0994ba63c646bc1a8a22ad072e4e7e0a49f1c"}, + {file = "coverage-7.6.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad32a981bcdedb8d2ace03b05e4fd8dace8901eec64a532b00b15217d3677dd2"}, + {file = "coverage-7.6.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:34d23e28ccb26236718a3a78ba72744212aa383141961dd6825f6595005c8b06"}, + {file = "coverage-7.6.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e25bacb53a8c7325e34d45dddd2f2fbae0dbc230d0e2642e264a64e17322a777"}, + {file = "coverage-7.6.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:af05bbba896c4472a29408455fe31b3797b4d8648ed0a2ccac03e074a77e2314"}, + {file = "coverage-7.6.7-cp310-cp310-win32.whl", hash = "sha256:796c9b107d11d2d69e1849b2dfe41730134b526a49d3acb98ca02f4985eeff7a"}, + {file = "coverage-7.6.7-cp310-cp310-win_amd64.whl", hash = "sha256:987a8e3da7da4eed10a20491cf790589a8e5e07656b6dc22d3814c4d88faf163"}, + {file = "coverage-7.6.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7e61b0e77ff4dddebb35a0e8bb5a68bf0f8b872407d8d9f0c726b65dfabe2469"}, + {file = "coverage-7.6.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1a5407a75ca4abc20d6252efeb238377a71ce7bda849c26c7a9bece8680a5d99"}, + {file = "coverage-7.6.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df002e59f2d29e889c37abd0b9ee0d0e6e38c24f5f55d71ff0e09e3412a340ec"}, + {file = "coverage-7.6.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:673184b3156cba06154825f25af33baa2671ddae6343f23175764e65a8c4c30b"}, + {file = "coverage-7.6.7-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e69ad502f1a2243f739f5bd60565d14a278be58be4c137d90799f2c263e7049a"}, + {file = "coverage-7.6.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:60dcf7605c50ea72a14490d0756daffef77a5be15ed1b9fea468b1c7bda1bc3b"}, + {file = "coverage-7.6.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:9c2eb378bebb2c8f65befcb5147877fc1c9fbc640fc0aad3add759b5df79d55d"}, + {file = "coverage-7.6.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3c0317288f032221d35fa4cbc35d9f4923ff0dfd176c79c9b356e8ef8ef2dff4"}, + {file = "coverage-7.6.7-cp311-cp311-win32.whl", hash = "sha256:951aade8297358f3618a6e0660dc74f6b52233c42089d28525749fc8267dccd2"}, + {file = "coverage-7.6.7-cp311-cp311-win_amd64.whl", hash = "sha256:5e444b8e88339a2a67ce07d41faabb1d60d1004820cee5a2c2b54e2d8e429a0f"}, + {file = "coverage-7.6.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f07ff574986bc3edb80e2c36391678a271d555f91fd1d332a1e0f4b5ea4b6ea9"}, + {file = "coverage-7.6.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:49ed5ee4109258973630c1f9d099c7e72c5c36605029f3a91fe9982c6076c82b"}, + {file = "coverage-7.6.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3e8796434a8106b3ac025fd15417315d7a58ee3e600ad4dbcfddc3f4b14342c"}, + {file = "coverage-7.6.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3b925300484a3294d1c70f6b2b810d6526f2929de954e5b6be2bf8caa1f12c1"}, + {file = "coverage-7.6.7-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c42ec2c522e3ddd683dec5cdce8e62817afb648caedad9da725001fa530d354"}, + {file = "coverage-7.6.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0266b62cbea568bd5e93a4da364d05de422110cbed5056d69339bd5af5685433"}, + {file = "coverage-7.6.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e5f2a0f161d126ccc7038f1f3029184dbdf8f018230af17ef6fd6a707a5b881f"}, + {file = "coverage-7.6.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c132b5a22821f9b143f87446805e13580b67c670a548b96da945a8f6b4f2efbb"}, + {file = "coverage-7.6.7-cp312-cp312-win32.whl", hash = "sha256:7c07de0d2a110f02af30883cd7dddbe704887617d5c27cf373362667445a4c76"}, + {file = "coverage-7.6.7-cp312-cp312-win_amd64.whl", hash = "sha256:fd49c01e5057a451c30c9b892948976f5d38f2cbd04dc556a82743ba8e27ed8c"}, + {file = "coverage-7.6.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:46f21663e358beae6b368429ffadf14ed0a329996248a847a4322fb2e35d64d3"}, + {file = "coverage-7.6.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:40cca284c7c310d622a1677f105e8507441d1bb7c226f41978ba7c86979609ab"}, + {file = "coverage-7.6.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77256ad2345c29fe59ae861aa11cfc74579c88d4e8dbf121cbe46b8e32aec808"}, + {file = "coverage-7.6.7-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:87ea64b9fa52bf395272e54020537990a28078478167ade6c61da7ac04dc14bc"}, + {file = "coverage-7.6.7-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d608a7808793e3615e54e9267519351c3ae204a6d85764d8337bd95993581a8"}, + {file = "coverage-7.6.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdd94501d65adc5c24f8a1a0eda110452ba62b3f4aeaba01e021c1ed9cb8f34a"}, + {file = "coverage-7.6.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:82c809a62e953867cf57e0548c2b8464207f5f3a6ff0e1e961683e79b89f2c55"}, + {file = "coverage-7.6.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bb684694e99d0b791a43e9fc0fa58efc15ec357ac48d25b619f207c41f2fd384"}, + {file = "coverage-7.6.7-cp313-cp313-win32.whl", hash = "sha256:963e4a08cbb0af6623e61492c0ec4c0ec5c5cf74db5f6564f98248d27ee57d30"}, + {file = "coverage-7.6.7-cp313-cp313-win_amd64.whl", hash = "sha256:14045b8bfd5909196a90da145a37f9d335a5d988a83db34e80f41e965fb7cb42"}, + {file = "coverage-7.6.7-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:f2c7a045eef561e9544359a0bf5784b44e55cefc7261a20e730baa9220c83413"}, + {file = "coverage-7.6.7-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5dd4e4a49d9c72a38d18d641135d2fb0bdf7b726ca60a103836b3d00a1182acd"}, + {file = "coverage-7.6.7-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c95e0fa3d1547cb6f021ab72f5c23402da2358beec0a8e6d19a368bd7b0fb37"}, + {file = "coverage-7.6.7-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f63e21ed474edd23f7501f89b53280014436e383a14b9bd77a648366c81dce7b"}, + {file = "coverage-7.6.7-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ead9b9605c54d15be228687552916c89c9683c215370c4a44f1f217d2adcc34d"}, + {file = "coverage-7.6.7-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:0573f5cbf39114270842d01872952d301027d2d6e2d84013f30966313cadb529"}, + {file = "coverage-7.6.7-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:e2c8e3384c12dfa19fa9a52f23eb091a8fad93b5b81a41b14c17c78e23dd1d8b"}, + {file = "coverage-7.6.7-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:70a56a2ec1869e6e9fa69ef6b76b1a8a7ef709972b9cc473f9ce9d26b5997ce3"}, + {file = "coverage-7.6.7-cp313-cp313t-win32.whl", hash = "sha256:dbba8210f5067398b2c4d96b4e64d8fb943644d5eb70be0d989067c8ca40c0f8"}, + {file = "coverage-7.6.7-cp313-cp313t-win_amd64.whl", hash = "sha256:dfd14bcae0c94004baba5184d1c935ae0d1231b8409eb6c103a5fd75e8ecdc56"}, + {file = "coverage-7.6.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:37a15573f988b67f7348916077c6d8ad43adb75e478d0910957394df397d2874"}, + {file = "coverage-7.6.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b6cce5c76985f81da3769c52203ee94722cd5d5889731cd70d31fee939b74bf0"}, + {file = "coverage-7.6.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ab9763d291a17b527ac6fd11d1a9a9c358280adb320e9c2672a97af346ac2c"}, + {file = "coverage-7.6.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6cf96ceaa275f071f1bea3067f8fd43bec184a25a962c754024c973af871e1b7"}, + {file = "coverage-7.6.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aee9cf6b0134d6f932d219ce253ef0e624f4fa588ee64830fcba193269e4daa3"}, + {file = "coverage-7.6.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2bc3e45c16564cc72de09e37413262b9f99167803e5e48c6156bccdfb22c8327"}, + {file = "coverage-7.6.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:623e6965dcf4e28a3debaa6fcf4b99ee06d27218f46d43befe4db1c70841551c"}, + {file = "coverage-7.6.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:850cfd2d6fc26f8346f422920ac204e1d28814e32e3a58c19c91980fa74d8289"}, + {file = "coverage-7.6.7-cp39-cp39-win32.whl", hash = "sha256:c296263093f099da4f51b3dff1eff5d4959b527d4f2f419e16508c5da9e15e8c"}, + {file = "coverage-7.6.7-cp39-cp39-win_amd64.whl", hash = "sha256:90746521206c88bdb305a4bf3342b1b7316ab80f804d40c536fc7d329301ee13"}, + {file = "coverage-7.6.7-pp39.pp310-none-any.whl", hash = "sha256:0ddcb70b3a3a57581b450571b31cb774f23eb9519c2aaa6176d3a84c9fc57671"}, + {file = "coverage-7.6.7.tar.gz", hash = "sha256:d79d4826e41441c9a118ff045e4bccb9fdbdcb1d02413e7ea6eb5c87b5439d24"}, ] [package.dependencies] @@ -947,13 +962,13 @@ toml = ["tomli"] [[package]] name = "dash" -version = "2.18.1" +version = "2.18.2" description = "A Python framework for building reactive web-apps. Developed by Plotly." optional = false python-versions = ">=3.8" files = [ - {file = "dash-2.18.1-py3-none-any.whl", hash = "sha256:07c4513bb5f79a4b936847a0b49afc21dbd4b001ff77ea78d4d836043e211a07"}, - {file = "dash-2.18.1.tar.gz", hash = "sha256:ffdf89690d734f6851ef1cb344222826ffb11ad2214ab9172668bf8aadd75d12"}, + {file = "dash-2.18.2-py3-none-any.whl", hash = "sha256:0ce0479d1bc958e934630e2de7023b8a4558f23ce1f9f5a4b34b65eb3903a869"}, + {file = "dash-2.18.2.tar.gz", hash = "sha256:20e8404f73d0fe88ce2eae33c25bbc513cbe52f30d23a401fa5f24dbb44296c8"}, ] [package.dependencies] @@ -1029,13 +1044,13 @@ files = [ [[package]] name = "dask" -version = "2024.10.0" +version = "2024.11.2" description = "Parallel PyData with Task Scheduling" optional = false python-versions = ">=3.10" files = [ - {file = "dask-2024.10.0-py3-none-any.whl", hash = "sha256:1ddc27c7967e134b4f8296a488521485a5ac4927cc63e2abfa0b24227b93217f"}, - {file = "dask-2024.10.0.tar.gz", hash = "sha256:dfd3efec5d8d8340fb647d0347637133030cad261b714623cc27de286e9db037"}, + {file = "dask-2024.11.2-py3-none-any.whl", hash = "sha256:6115c4b76015e8d9d9c2922b6a0a1c850e283fb7fee74eebbd2e28e9c117c30d"}, + {file = "dask-2024.11.2.tar.gz", hash = "sha256:9a72bee3f149ff89bc492340d4bcba33d5dd3e3a9d471d2b4b3872f2d71ddaae"}, ] [package.dependencies] @@ -1054,42 +1069,42 @@ array = ["numpy (>=1.24)"] complete = ["dask[array,dataframe,diagnostics,distributed]", "lz4 (>=4.3.2)", "pyarrow (>=14.0.1)"] dataframe = ["dask-expr (>=1.1,<1.2)", "dask[array]", "pandas (>=2.0)"] diagnostics = ["bokeh (>=3.1.0)", "jinja2 (>=2.10.3)"] -distributed = ["distributed (==2024.10.0)"] +distributed = ["distributed (==2024.11.2)"] test = ["pandas[test]", "pre-commit", "pytest", "pytest-cov", "pytest-rerunfailures", "pytest-timeout", "pytest-xdist"] [[package]] name = "debugpy" -version = "1.8.7" +version = "1.8.8" description = "An implementation of the Debug Adapter Protocol for Python" optional = false python-versions = ">=3.8" files = [ - {file = "debugpy-1.8.7-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:95fe04a573b8b22896c404365e03f4eda0ce0ba135b7667a1e57bd079793b96b"}, - {file = "debugpy-1.8.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:628a11f4b295ffb4141d8242a9bb52b77ad4a63a2ad19217a93be0f77f2c28c9"}, - {file = "debugpy-1.8.7-cp310-cp310-win32.whl", hash = "sha256:85ce9c1d0eebf622f86cc68618ad64bf66c4fc3197d88f74bb695a416837dd55"}, - {file = "debugpy-1.8.7-cp310-cp310-win_amd64.whl", hash = "sha256:29e1571c276d643757ea126d014abda081eb5ea4c851628b33de0c2b6245b037"}, - {file = "debugpy-1.8.7-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:caf528ff9e7308b74a1749c183d6808ffbedbb9fb6af78b033c28974d9b8831f"}, - {file = "debugpy-1.8.7-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cba1d078cf2e1e0b8402e6bda528bf8fda7ccd158c3dba6c012b7897747c41a0"}, - {file = "debugpy-1.8.7-cp311-cp311-win32.whl", hash = "sha256:171899588bcd412151e593bd40d9907133a7622cd6ecdbdb75f89d1551df13c2"}, - {file = "debugpy-1.8.7-cp311-cp311-win_amd64.whl", hash = "sha256:6e1c4ffb0c79f66e89dfd97944f335880f0d50ad29525dc792785384923e2211"}, - {file = "debugpy-1.8.7-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:4d27d842311353ede0ad572600c62e4bcd74f458ee01ab0dd3a1a4457e7e3706"}, - {file = "debugpy-1.8.7-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:703c1fd62ae0356e194f3e7b7a92acd931f71fe81c4b3be2c17a7b8a4b546ec2"}, - {file = "debugpy-1.8.7-cp312-cp312-win32.whl", hash = "sha256:2f729228430ef191c1e4df72a75ac94e9bf77413ce5f3f900018712c9da0aaca"}, - {file = "debugpy-1.8.7-cp312-cp312-win_amd64.whl", hash = "sha256:45c30aaefb3e1975e8a0258f5bbd26cd40cde9bfe71e9e5a7ac82e79bad64e39"}, - {file = "debugpy-1.8.7-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:d050a1ec7e925f514f0f6594a1e522580317da31fbda1af71d1530d6ea1f2b40"}, - {file = "debugpy-1.8.7-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2f4349a28e3228a42958f8ddaa6333d6f8282d5edaea456070e48609c5983b7"}, - {file = "debugpy-1.8.7-cp313-cp313-win32.whl", hash = "sha256:11ad72eb9ddb436afb8337891a986302e14944f0f755fd94e90d0d71e9100bba"}, - {file = "debugpy-1.8.7-cp313-cp313-win_amd64.whl", hash = "sha256:2efb84d6789352d7950b03d7f866e6d180284bc02c7e12cb37b489b7083d81aa"}, - {file = "debugpy-1.8.7-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:4b908291a1d051ef3331484de8e959ef3e66f12b5e610c203b5b75d2725613a7"}, - {file = "debugpy-1.8.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da8df5b89a41f1fd31503b179d0a84a5fdb752dddd5b5388dbd1ae23cda31ce9"}, - {file = "debugpy-1.8.7-cp38-cp38-win32.whl", hash = "sha256:b12515e04720e9e5c2216cc7086d0edadf25d7ab7e3564ec8b4521cf111b4f8c"}, - {file = "debugpy-1.8.7-cp38-cp38-win_amd64.whl", hash = "sha256:93176e7672551cb5281577cdb62c63aadc87ec036f0c6a486f0ded337c504596"}, - {file = "debugpy-1.8.7-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:90d93e4f2db442f8222dec5ec55ccfc8005821028982f1968ebf551d32b28907"}, - {file = "debugpy-1.8.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6db2a370e2700557a976eaadb16243ec9c91bd46f1b3bb15376d7aaa7632c81"}, - {file = "debugpy-1.8.7-cp39-cp39-win32.whl", hash = "sha256:a6cf2510740e0c0b4a40330640e4b454f928c7b99b0c9dbf48b11efba08a8cda"}, - {file = "debugpy-1.8.7-cp39-cp39-win_amd64.whl", hash = "sha256:6a9d9d6d31846d8e34f52987ee0f1a904c7baa4912bf4843ab39dadf9b8f3e0d"}, - {file = "debugpy-1.8.7-py2.py3-none-any.whl", hash = "sha256:57b00de1c8d2c84a61b90880f7e5b6deaf4c312ecbde3a0e8912f2a56c4ac9ae"}, - {file = "debugpy-1.8.7.zip", hash = "sha256:18b8f731ed3e2e1df8e9cdaa23fb1fc9c24e570cd0081625308ec51c82efe42e"}, + {file = "debugpy-1.8.8-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:e59b1607c51b71545cb3496876544f7186a7a27c00b436a62f285603cc68d1c6"}, + {file = "debugpy-1.8.8-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6531d952b565b7cb2fbd1ef5df3d333cf160b44f37547a4e7cf73666aca5d8d"}, + {file = "debugpy-1.8.8-cp310-cp310-win32.whl", hash = "sha256:b01f4a5e5c5fb1d34f4ccba99a20ed01eabc45a4684f4948b5db17a319dfb23f"}, + {file = "debugpy-1.8.8-cp310-cp310-win_amd64.whl", hash = "sha256:535f4fb1c024ddca5913bb0eb17880c8f24ba28aa2c225059db145ee557035e9"}, + {file = "debugpy-1.8.8-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:c399023146e40ae373753a58d1be0a98bf6397fadc737b97ad612886b53df318"}, + {file = "debugpy-1.8.8-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:09cc7b162586ea2171eea055985da2702b0723f6f907a423c9b2da5996ad67ba"}, + {file = "debugpy-1.8.8-cp311-cp311-win32.whl", hash = "sha256:eea8821d998ebeb02f0625dd0d76839ddde8cbf8152ebbe289dd7acf2cdc6b98"}, + {file = "debugpy-1.8.8-cp311-cp311-win_amd64.whl", hash = "sha256:d4483836da2a533f4b1454dffc9f668096ac0433de855f0c22cdce8c9f7e10c4"}, + {file = "debugpy-1.8.8-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:0cc94186340be87b9ac5a707184ec8f36547fb66636d1029ff4f1cc020e53996"}, + {file = "debugpy-1.8.8-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64674e95916e53c2e9540a056e5f489e0ad4872645399d778f7c598eacb7b7f9"}, + {file = "debugpy-1.8.8-cp312-cp312-win32.whl", hash = "sha256:5c6e885dbf12015aed73770f29dec7023cb310d0dc2ba8bfbeb5c8e43f80edc9"}, + {file = "debugpy-1.8.8-cp312-cp312-win_amd64.whl", hash = "sha256:19ffbd84e757a6ca0113574d1bf5a2298b3947320a3e9d7d8dc3377f02d9f864"}, + {file = "debugpy-1.8.8-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:705cd123a773d184860ed8dae99becd879dfec361098edbefb5fc0d3683eb804"}, + {file = "debugpy-1.8.8-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:890fd16803f50aa9cb1a9b9b25b5ec321656dd6b78157c74283de241993d086f"}, + {file = "debugpy-1.8.8-cp313-cp313-win32.whl", hash = "sha256:90244598214bbe704aa47556ec591d2f9869ff9e042e301a2859c57106649add"}, + {file = "debugpy-1.8.8-cp313-cp313-win_amd64.whl", hash = "sha256:4b93e4832fd4a759a0c465c967214ed0c8a6e8914bced63a28ddb0dd8c5f078b"}, + {file = "debugpy-1.8.8-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:143ef07940aeb8e7316de48f5ed9447644da5203726fca378f3a6952a50a9eae"}, + {file = "debugpy-1.8.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f95651bdcbfd3b27a408869a53fbefcc2bcae13b694daee5f1365b1b83a00113"}, + {file = "debugpy-1.8.8-cp38-cp38-win32.whl", hash = "sha256:26b461123a030e82602a750fb24d7801776aa81cd78404e54ab60e8b5fecdad5"}, + {file = "debugpy-1.8.8-cp38-cp38-win_amd64.whl", hash = "sha256:f3cbf1833e644a3100eadb6120f25be8a532035e8245584c4f7532937edc652a"}, + {file = "debugpy-1.8.8-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:53709d4ec586b525724819dc6af1a7703502f7e06f34ded7157f7b1f963bb854"}, + {file = "debugpy-1.8.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a9c013077a3a0000e83d97cf9cc9328d2b0bbb31f56b0e99ea3662d29d7a6a2"}, + {file = "debugpy-1.8.8-cp39-cp39-win32.whl", hash = "sha256:ffe94dd5e9a6739a75f0b85316dc185560db3e97afa6b215628d1b6a17561cb2"}, + {file = "debugpy-1.8.8-cp39-cp39-win_amd64.whl", hash = "sha256:5c0e5a38c7f9b481bf31277d2f74d2109292179081f11108e668195ef926c0f9"}, + {file = "debugpy-1.8.8-py2.py3-none-any.whl", hash = "sha256:ec684553aba5b4066d4de510859922419febc710df7bba04fe9e7ef3de15d34f"}, + {file = "debugpy-1.8.8.zip", hash = "sha256:e6355385db85cbd666be703a96ab7351bc9e6c61d694893206f8001e22aee091"}, ] [[package]] @@ -1141,19 +1156,19 @@ files = [ [[package]] name = "distributed" -version = "2024.10.0" +version = "2024.11.2" description = "Distributed scheduler for Dask" optional = false python-versions = ">=3.10" files = [ - {file = "distributed-2024.10.0-py3-none-any.whl", hash = "sha256:b97b227f1edb5d5c7b8784786debdf624870118d3a91b57cdcea3a77e8136a1a"}, - {file = "distributed-2024.10.0.tar.gz", hash = "sha256:d08e7fd7acdecf0f058edf35f28889fc43412031d7601a5df69f108a37a8ffc1"}, + {file = "distributed-2024.11.2-py3-none-any.whl", hash = "sha256:a455ae031689aee151172b3492de5dd637b67531720619c171df988974985cdf"}, + {file = "distributed-2024.11.2.tar.gz", hash = "sha256:60e430ab9d438102535f342521bc2673db08fcd373a4474b042caf9fe9fcf990"}, ] [package.dependencies] click = ">=8.0" cloudpickle = ">=3.0.0" -dask = "2024.10.0" +dask = "2024.11.2" jinja2 = ">=2.10.3" locket = ">=1.0.0" msgpack = ">=1.0.2" @@ -1296,88 +1311,103 @@ files = [ [[package]] name = "frozenlist" -version = "1.4.1" +version = "1.5.0" description = "A list-like structure which implements collections.abc.MutableSequence" optional = false python-versions = ">=3.8" files = [ - {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f9aa1878d1083b276b0196f2dfbe00c9b7e752475ed3b682025ff20c1c1f51ac"}, - {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29acab3f66f0f24674b7dc4736477bcd4bc3ad4b896f5f45379a67bce8b96868"}, - {file = "frozenlist-1.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:74fb4bee6880b529a0c6560885fce4dc95936920f9f20f53d99a213f7bf66776"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:590344787a90ae57d62511dd7c736ed56b428f04cd8c161fcc5e7232c130c69a"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:068b63f23b17df8569b7fdca5517edef76171cf3897eb68beb01341131fbd2ad"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c849d495bf5154cd8da18a9eb15db127d4dba2968d88831aff6f0331ea9bd4c"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9750cc7fe1ae3b1611bb8cfc3f9ec11d532244235d75901fb6b8e42ce9229dfe"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9b2de4cf0cdd5bd2dee4c4f63a653c61d2408055ab77b151c1957f221cabf2a"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0633c8d5337cb5c77acbccc6357ac49a1770b8c487e5b3505c57b949b4b82e98"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:27657df69e8801be6c3638054e202a135c7f299267f1a55ed3a598934f6c0d75"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:f9a3ea26252bd92f570600098783d1371354d89d5f6b7dfd87359d669f2109b5"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:4f57dab5fe3407b6c0c1cc907ac98e8a189f9e418f3b6e54d65a718aaafe3950"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e02a0e11cf6597299b9f3bbd3f93d79217cb90cfd1411aec33848b13f5c656cc"}, - {file = "frozenlist-1.4.1-cp310-cp310-win32.whl", hash = "sha256:a828c57f00f729620a442881cc60e57cfcec6842ba38e1b19fd3e47ac0ff8dc1"}, - {file = "frozenlist-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:f56e2333dda1fe0f909e7cc59f021eba0d2307bc6f012a1ccf2beca6ba362439"}, - {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a0cb6f11204443f27a1628b0e460f37fb30f624be6051d490fa7d7e26d4af3d0"}, - {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b46c8ae3a8f1f41a0d2ef350c0b6e65822d80772fe46b653ab6b6274f61d4a49"}, - {file = "frozenlist-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fde5bd59ab5357e3853313127f4d3565fc7dad314a74d7b5d43c22c6a5ed2ced"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:722e1124aec435320ae01ee3ac7bec11a5d47f25d0ed6328f2273d287bc3abb0"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2471c201b70d58a0f0c1f91261542a03d9a5e088ed3dc6c160d614c01649c106"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c757a9dd70d72b076d6f68efdbb9bc943665ae954dad2801b874c8c69e185068"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f146e0911cb2f1da549fc58fc7bcd2b836a44b79ef871980d605ec392ff6b0d2"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9c515e7914626b2a2e1e311794b4c35720a0be87af52b79ff8e1429fc25f19"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c302220494f5c1ebeb0912ea782bcd5e2f8308037b3c7553fad0e48ebad6ad82"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:442acde1e068288a4ba7acfe05f5f343e19fac87bfc96d89eb886b0363e977ec"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:1b280e6507ea8a4fa0c0a7150b4e526a8d113989e28eaaef946cc77ffd7efc0a"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:fe1a06da377e3a1062ae5fe0926e12b84eceb8a50b350ddca72dc85015873f74"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:db9e724bebd621d9beca794f2a4ff1d26eed5965b004a97f1f1685a173b869c2"}, - {file = "frozenlist-1.4.1-cp311-cp311-win32.whl", hash = "sha256:e774d53b1a477a67838a904131c4b0eef6b3d8a651f8b138b04f748fccfefe17"}, - {file = "frozenlist-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:fb3c2db03683b5767dedb5769b8a40ebb47d6f7f45b1b3e3b4b51ec8ad9d9825"}, - {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:1979bc0aeb89b33b588c51c54ab0161791149f2461ea7c7c946d95d5f93b56ae"}, - {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cc7b01b3754ea68a62bd77ce6020afaffb44a590c2289089289363472d13aedb"}, - {file = "frozenlist-1.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c9c92be9fd329ac801cc420e08452b70e7aeab94ea4233a4804f0915c14eba9b"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c3894db91f5a489fc8fa6a9991820f368f0b3cbdb9cd8849547ccfab3392d86"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba60bb19387e13597fb059f32cd4d59445d7b18b69a745b8f8e5db0346f33480"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8aefbba5f69d42246543407ed2461db31006b0f76c4e32dfd6f42215a2c41d09"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780d3a35680ced9ce682fbcf4cb9c2bad3136eeff760ab33707b71db84664e3a"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9acbb16f06fe7f52f441bb6f413ebae6c37baa6ef9edd49cdd567216da8600cd"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:23b701e65c7b36e4bf15546a89279bd4d8675faabc287d06bbcfac7d3c33e1e6"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3e0153a805a98f5ada7e09826255ba99fb4f7524bb81bf6b47fb702666484ae1"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:dd9b1baec094d91bf36ec729445f7769d0d0cf6b64d04d86e45baf89e2b9059b"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:1a4471094e146b6790f61b98616ab8e44f72661879cc63fa1049d13ef711e71e"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5667ed53d68d91920defdf4035d1cdaa3c3121dc0b113255124bcfada1cfa1b8"}, - {file = "frozenlist-1.4.1-cp312-cp312-win32.whl", hash = "sha256:beee944ae828747fd7cb216a70f120767fc9f4f00bacae8543c14a6831673f89"}, - {file = "frozenlist-1.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:64536573d0a2cb6e625cf309984e2d873979709f2cf22839bf2d61790b448ad5"}, - {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:20b51fa3f588ff2fe658663db52a41a4f7aa6c04f6201449c6c7c476bd255c0d"}, - {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:410478a0c562d1a5bcc2f7ea448359fcb050ed48b3c6f6f4f18c313a9bdb1826"}, - {file = "frozenlist-1.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c6321c9efe29975232da3bd0af0ad216800a47e93d763ce64f291917a381b8eb"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48f6a4533887e189dae092f1cf981f2e3885175f7a0f33c91fb5b7b682b6bab6"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6eb73fa5426ea69ee0e012fb59cdc76a15b1283d6e32e4f8dc4482ec67d1194d"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fbeb989b5cc29e8daf7f976b421c220f1b8c731cbf22b9130d8815418ea45887"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32453c1de775c889eb4e22f1197fe3bdfe457d16476ea407472b9442e6295f7a"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693945278a31f2086d9bf3df0fe8254bbeaef1fe71e1351c3bd730aa7d31c41b"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1d0ce09d36d53bbbe566fe296965b23b961764c0bcf3ce2fa45f463745c04701"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3a670dc61eb0d0eb7080890c13de3066790f9049b47b0de04007090807c776b0"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:dca69045298ce5c11fd539682cff879cc1e664c245d1c64da929813e54241d11"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a06339f38e9ed3a64e4c4e43aec7f59084033647f908e4259d279a52d3757d09"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b7f2f9f912dca3934c1baec2e4585a674ef16fe00218d833856408c48d5beee7"}, - {file = "frozenlist-1.4.1-cp38-cp38-win32.whl", hash = "sha256:e7004be74cbb7d9f34553a5ce5fb08be14fb33bc86f332fb71cbe5216362a497"}, - {file = "frozenlist-1.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:5a7d70357e7cee13f470c7883a063aae5fe209a493c57d86eb7f5a6f910fae09"}, - {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bfa4a17e17ce9abf47a74ae02f32d014c5e9404b6d9ac7f729e01562bbee601e"}, - {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b7e3ed87d4138356775346e6845cccbe66cd9e207f3cd11d2f0b9fd13681359d"}, - {file = "frozenlist-1.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c99169d4ff810155ca50b4da3b075cbde79752443117d89429595c2e8e37fed8"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edb678da49d9f72c9f6c609fbe41a5dfb9a9282f9e6a2253d5a91e0fc382d7c0"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6db4667b187a6742b33afbbaf05a7bc551ffcf1ced0000a571aedbb4aa42fc7b"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55fdc093b5a3cb41d420884cdaf37a1e74c3c37a31f46e66286d9145d2063bd0"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82e8211d69a4f4bc360ea22cd6555f8e61a1bd211d1d5d39d3d228b48c83a897"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89aa2c2eeb20957be2d950b85974b30a01a762f3308cd02bb15e1ad632e22dc7"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d3e0c25a2350080e9319724dede4f31f43a6c9779be48021a7f4ebde8b2d742"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7268252af60904bf52c26173cbadc3a071cece75f873705419c8681f24d3edea"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0c250a29735d4f15321007fb02865f0e6b6a41a6b88f1f523ca1596ab5f50bd5"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:96ec70beabbd3b10e8bfe52616a13561e58fe84c0101dd031dc78f250d5128b9"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:23b2d7679b73fe0e5a4560b672a39f98dfc6f60df63823b0a9970525325b95f6"}, - {file = "frozenlist-1.4.1-cp39-cp39-win32.whl", hash = "sha256:a7496bfe1da7fb1a4e1cc23bb67c58fab69311cc7d32b5a99c2007b4b2a0e932"}, - {file = "frozenlist-1.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:e6a20a581f9ce92d389a8c7d7c3dd47c81fd5d6e655c8dddf341e14aa48659d0"}, - {file = "frozenlist-1.4.1-py3-none-any.whl", hash = "sha256:04ced3e6a46b4cfffe20f9ae482818e34eba9b5fb0ce4056e4cc9b6e212d09b7"}, - {file = "frozenlist-1.4.1.tar.gz", hash = "sha256:c037a86e8513059a2613aaba4d817bb90b9d9b6b69aace3ce9c877e8c8ed402b"}, + {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5b6a66c18b5b9dd261ca98dffcb826a525334b2f29e7caa54e182255c5f6a65a"}, + {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d1b3eb7b05ea246510b43a7e53ed1653e55c2121019a97e60cad7efb881a97bb"}, + {file = "frozenlist-1.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:15538c0cbf0e4fa11d1e3a71f823524b0c46299aed6e10ebb4c2089abd8c3bec"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e79225373c317ff1e35f210dd5f1344ff31066ba8067c307ab60254cd3a78ad5"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9272fa73ca71266702c4c3e2d4a28553ea03418e591e377a03b8e3659d94fa76"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:498524025a5b8ba81695761d78c8dd7382ac0b052f34e66939c42df860b8ff17"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:92b5278ed9d50fe610185ecd23c55d8b307d75ca18e94c0e7de328089ac5dcba"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f3c8c1dacd037df16e85227bac13cca58c30da836c6f936ba1df0c05d046d8d"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f2ac49a9bedb996086057b75bf93538240538c6d9b38e57c82d51f75a73409d2"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e66cc454f97053b79c2ab09c17fbe3c825ea6b4de20baf1be28919460dd7877f"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:5a3ba5f9a0dfed20337d3e966dc359784c9f96503674c2faf015f7fe8e96798c"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6321899477db90bdeb9299ac3627a6a53c7399c8cd58d25da094007402b039ab"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:76e4753701248476e6286f2ef492af900ea67d9706a0155335a40ea21bf3b2f5"}, + {file = "frozenlist-1.5.0-cp310-cp310-win32.whl", hash = "sha256:977701c081c0241d0955c9586ffdd9ce44f7a7795df39b9151cd9a6fd0ce4cfb"}, + {file = "frozenlist-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:189f03b53e64144f90990d29a27ec4f7997d91ed3d01b51fa39d2dbe77540fd4"}, + {file = "frozenlist-1.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fd74520371c3c4175142d02a976aee0b4cb4a7cc912a60586ffd8d5929979b30"}, + {file = "frozenlist-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2f3f7a0fbc219fb4455264cae4d9f01ad41ae6ee8524500f381de64ffaa077d5"}, + {file = "frozenlist-1.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f47c9c9028f55a04ac254346e92977bf0f166c483c74b4232bee19a6697e4778"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0996c66760924da6e88922756d99b47512a71cfd45215f3570bf1e0b694c206a"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a2fe128eb4edeabe11896cb6af88fca5346059f6c8d807e3b910069f39157869"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1a8ea951bbb6cacd492e3948b8da8c502a3f814f5d20935aae74b5df2b19cf3d"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de537c11e4aa01d37db0d403b57bd6f0546e71a82347a97c6a9f0dcc532b3a45"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c2623347b933fcb9095841f1cc5d4ff0b278addd743e0e966cb3d460278840d"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cee6798eaf8b1416ef6909b06f7dc04b60755206bddc599f52232606e18179d3"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f5f9da7f5dbc00a604fe74aa02ae7c98bcede8a3b8b9666f9f86fc13993bc71a"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:90646abbc7a5d5c7c19461d2e3eeb76eb0b204919e6ece342feb6032c9325ae9"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:bdac3c7d9b705d253b2ce370fde941836a5f8b3c5c2b8fd70940a3ea3af7f4f2"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:03d33c2ddbc1816237a67f66336616416e2bbb6beb306e5f890f2eb22b959cdf"}, + {file = "frozenlist-1.5.0-cp311-cp311-win32.whl", hash = "sha256:237f6b23ee0f44066219dae14c70ae38a63f0440ce6750f868ee08775073f942"}, + {file = "frozenlist-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:0cc974cc93d32c42e7b0f6cf242a6bd941c57c61b618e78b6c0a96cb72788c1d"}, + {file = "frozenlist-1.5.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:31115ba75889723431aa9a4e77d5f398f5cf976eea3bdf61749731f62d4a4a21"}, + {file = "frozenlist-1.5.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7437601c4d89d070eac8323f121fcf25f88674627505334654fd027b091db09d"}, + {file = "frozenlist-1.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7948140d9f8ece1745be806f2bfdf390127cf1a763b925c4a805c603df5e697e"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feeb64bc9bcc6b45c6311c9e9b99406660a9c05ca8a5b30d14a78555088b0b3a"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:683173d371daad49cffb8309779e886e59c2f369430ad28fe715f66d08d4ab1a"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7d57d8f702221405a9d9b40f9da8ac2e4a1a8b5285aac6100f3393675f0a85ee"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30c72000fbcc35b129cb09956836c7d7abf78ab5416595e4857d1cae8d6251a6"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:000a77d6034fbad9b6bb880f7ec073027908f1b40254b5d6f26210d2dab1240e"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5d7f5a50342475962eb18b740f3beecc685a15b52c91f7d975257e13e029eca9"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:87f724d055eb4785d9be84e9ebf0f24e392ddfad00b3fe036e43f489fafc9039"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:6e9080bb2fb195a046e5177f10d9d82b8a204c0736a97a153c2466127de87784"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9b93d7aaa36c966fa42efcaf716e6b3900438632a626fb09c049f6a2f09fc631"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:52ef692a4bc60a6dd57f507429636c2af8b6046db8b31b18dac02cbc8f507f7f"}, + {file = "frozenlist-1.5.0-cp312-cp312-win32.whl", hash = "sha256:29d94c256679247b33a3dc96cce0f93cbc69c23bf75ff715919332fdbb6a32b8"}, + {file = "frozenlist-1.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:8969190d709e7c48ea386db202d708eb94bdb29207a1f269bab1196ce0dcca1f"}, + {file = "frozenlist-1.5.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7a1a048f9215c90973402e26c01d1cff8a209e1f1b53f72b95c13db61b00f953"}, + {file = "frozenlist-1.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dd47a5181ce5fcb463b5d9e17ecfdb02b678cca31280639255ce9d0e5aa67af0"}, + {file = "frozenlist-1.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1431d60b36d15cda188ea222033eec8e0eab488f39a272461f2e6d9e1a8e63c2"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6482a5851f5d72767fbd0e507e80737f9c8646ae7fd303def99bfe813f76cf7f"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44c49271a937625619e862baacbd037a7ef86dd1ee215afc298a417ff3270608"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:12f78f98c2f1c2429d42e6a485f433722b0061d5c0b0139efa64f396efb5886b"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce3aa154c452d2467487765e3adc730a8c153af77ad84096bc19ce19a2400840"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b7dc0c4338e6b8b091e8faf0db3168a37101943e687f373dce00959583f7439"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:45e0896250900b5aa25180f9aec243e84e92ac84bd4a74d9ad4138ef3f5c97de"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:561eb1c9579d495fddb6da8959fd2a1fca2c6d060d4113f5844b433fc02f2641"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:df6e2f325bfee1f49f81aaac97d2aa757c7646534a06f8f577ce184afe2f0a9e"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:140228863501b44b809fb39ec56b5d4071f4d0aa6d216c19cbb08b8c5a7eadb9"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7707a25d6a77f5d27ea7dc7d1fc608aa0a478193823f88511ef5e6b8a48f9d03"}, + {file = "frozenlist-1.5.0-cp313-cp313-win32.whl", hash = "sha256:31a9ac2b38ab9b5a8933b693db4939764ad3f299fcaa931a3e605bc3460e693c"}, + {file = "frozenlist-1.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:11aabdd62b8b9c4b84081a3c246506d1cddd2dd93ff0ad53ede5defec7886b28"}, + {file = "frozenlist-1.5.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:dd94994fc91a6177bfaafd7d9fd951bc8689b0a98168aa26b5f543868548d3ca"}, + {file = "frozenlist-1.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d0da8bbec082bf6bf18345b180958775363588678f64998c2b7609e34719b10"}, + {file = "frozenlist-1.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:73f2e31ea8dd7df61a359b731716018c2be196e5bb3b74ddba107f694fbd7604"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:828afae9f17e6de596825cf4228ff28fbdf6065974e5ac1410cecc22f699d2b3"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1577515d35ed5649d52ab4319db757bb881ce3b2b796d7283e6634d99ace307"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2150cc6305a2c2ab33299453e2968611dacb970d2283a14955923062c8d00b10"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a72b7a6e3cd2725eff67cd64c8f13335ee18fc3c7befc05aed043d24c7b9ccb9"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c16d2fa63e0800723139137d667e1056bee1a1cf7965153d2d104b62855e9b99"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:17dcc32fc7bda7ce5875435003220a457bcfa34ab7924a49a1c19f55b6ee185c"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:97160e245ea33d8609cd2b8fd997c850b56db147a304a262abc2b3be021a9171"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f1e6540b7fa044eee0bb5111ada694cf3dc15f2b0347ca125ee9ca984d5e9e6e"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:91d6c171862df0a6c61479d9724f22efb6109111017c87567cfeb7b5d1449fdf"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c1fac3e2ace2eb1052e9f7c7db480818371134410e1f5c55d65e8f3ac6d1407e"}, + {file = "frozenlist-1.5.0-cp38-cp38-win32.whl", hash = "sha256:b97f7b575ab4a8af9b7bc1d2ef7f29d3afee2226bd03ca3875c16451ad5a7723"}, + {file = "frozenlist-1.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:374ca2dabdccad8e2a76d40b1d037f5bd16824933bf7bcea3e59c891fd4a0923"}, + {file = "frozenlist-1.5.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9bbcdfaf4af7ce002694a4e10a0159d5a8d20056a12b05b45cea944a4953f972"}, + {file = "frozenlist-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1893f948bf6681733aaccf36c5232c231e3b5166d607c5fa77773611df6dc336"}, + {file = "frozenlist-1.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2b5e23253bb709ef57a8e95e6ae48daa9ac5f265637529e4ce6b003a37b2621f"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f253985bb515ecd89629db13cb58d702035ecd8cfbca7d7a7e29a0e6d39af5f"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:04a5c6babd5e8fb7d3c871dc8b321166b80e41b637c31a995ed844a6139942b6"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9fe0f1c29ba24ba6ff6abf688cb0b7cf1efab6b6aa6adc55441773c252f7411"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:226d72559fa19babe2ccd920273e767c96a49b9d3d38badd7c91a0fdeda8ea08"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15b731db116ab3aedec558573c1a5eec78822b32292fe4f2f0345b7f697745c2"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:366d8f93e3edfe5a918c874702f78faac300209a4d5bf38352b2c1bdc07a766d"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1b96af8c582b94d381a1c1f51ffaedeb77c821c690ea5f01da3d70a487dd0a9b"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c03eff4a41bd4e38415cbed054bbaff4a075b093e2394b6915dca34a40d1e38b"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:50cf5e7ee9b98f22bdecbabf3800ae78ddcc26e4a435515fc72d97903e8488e0"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1e76bfbc72353269c44e0bc2cfe171900fbf7f722ad74c9a7b638052afe6a00c"}, + {file = "frozenlist-1.5.0-cp39-cp39-win32.whl", hash = "sha256:666534d15ba8f0fda3f53969117383d5dc021266b3c1a42c9ec4855e4b58b9d3"}, + {file = "frozenlist-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:5c28f4b5dbef8a0d8aad0d4de24d1e9e981728628afaf4ea0792f5d0939372f0"}, + {file = "frozenlist-1.5.0-py3-none-any.whl", hash = "sha256:d994863bba198a4a518b467bb971c56e1db3f180a25c6cf7bb1949c267f748c3"}, + {file = "frozenlist-1.5.0.tar.gz", hash = "sha256:81d5af29e61b9c8348e876d442253723928dce6433e0e76cd925cd83f1b4b817"}, ] [[package]] @@ -1445,13 +1475,13 @@ gcsfuse = ["fusepy"] [[package]] name = "google-api-core" -version = "2.21.0" +version = "2.23.0" description = "Google API client core library" optional = false python-versions = ">=3.7" files = [ - {file = "google_api_core-2.21.0-py3-none-any.whl", hash = "sha256:6869eacb2a37720380ba5898312af79a4d30b8bca1548fb4093e0697dc4bdf5d"}, - {file = "google_api_core-2.21.0.tar.gz", hash = "sha256:4a152fd11a9f774ea606388d423b68aa7e6d6a0ffe4c8266f74979613ec09f81"}, + {file = "google_api_core-2.23.0-py3-none-any.whl", hash = "sha256:c20100d4c4c41070cf365f1d8ddf5365915291b5eb11b83829fbd1c999b5122f"}, + {file = "google_api_core-2.23.0.tar.gz", hash = "sha256:2ceb087315e6af43f256704b871d99326b1f12a9d6ce99beaedec99ba26a0ace"}, ] [package.dependencies] @@ -1469,13 +1499,13 @@ grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] [[package]] name = "google-auth" -version = "2.35.0" +version = "2.36.0" description = "Google Authentication Library" optional = false python-versions = ">=3.7" files = [ - {file = "google_auth-2.35.0-py2.py3-none-any.whl", hash = "sha256:25df55f327ef021de8be50bad0dfd4a916ad0de96da86cd05661c9297723ad3f"}, - {file = "google_auth-2.35.0.tar.gz", hash = "sha256:f4c64ed4e01e8e8b646ef34c018f8bf3338df0c8e37d8b3bba40e7f574a3278a"}, + {file = "google_auth-2.36.0-py2.py3-none-any.whl", hash = "sha256:51a15d47028b66fd36e5c64a82d2d57480075bccc7da37cde257fc94177a61fb"}, + {file = "google_auth-2.36.0.tar.gz", hash = "sha256:545e9618f2df0bcbb7dcbc45a546485b1212624716975a1ea5ae8149ce769ab1"}, ] [package.dependencies] @@ -1608,13 +1638,13 @@ requests = ["requests (>=2.18.0,<3.0.0dev)"] [[package]] name = "googleapis-common-protos" -version = "1.65.0" +version = "1.66.0" description = "Common protobufs used in Google APIs" optional = false python-versions = ">=3.7" files = [ - {file = "googleapis_common_protos-1.65.0-py2.py3-none-any.whl", hash = "sha256:2972e6c496f435b92590fd54045060867f3fe9be2c82ab148fc8885035479a63"}, - {file = "googleapis_common_protos-1.65.0.tar.gz", hash = "sha256:334a29d07cddc3aa01dee4988f9afd9b2916ee2ff49d6b757155dc0d197852c0"}, + {file = "googleapis_common_protos-1.66.0-py2.py3-none-any.whl", hash = "sha256:d7abcd75fabb2e0ec9f74466401f6c119a0b498e27370e9be4c94cb7e382b8ed"}, + {file = "googleapis_common_protos-1.66.0.tar.gz", hash = "sha256:c3e7b33d15fdca5374cc0a7346dd92ffa847425cc4ea941d970f13680052ec8c"}, ] [package.dependencies] @@ -1636,13 +1666,13 @@ files = [ [[package]] name = "httpcore" -version = "1.0.6" +version = "1.0.7" description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" files = [ - {file = "httpcore-1.0.6-py3-none-any.whl", hash = "sha256:27b59625743b85577a8c0e10e55b50b5368a4f2cfe8cc7bcfa9cf00829c2682f"}, - {file = "httpcore-1.0.6.tar.gz", hash = "sha256:73f6dbd6eb8c21bbf7ef8efad555481853f5f6acdeaff1edb0694289269ee17f"}, + {file = "httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd"}, + {file = "httpcore-1.0.7.tar.gz", hash = "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c"}, ] [package.dependencies] @@ -1682,13 +1712,13 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "identify" -version = "2.6.1" +version = "2.6.2" description = "File identification library for Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "identify-2.6.1-py2.py3-none-any.whl", hash = "sha256:53863bcac7caf8d2ed85bd20312ea5dcfc22226800f6d6881f232d861db5a8f0"}, - {file = "identify-2.6.1.tar.gz", hash = "sha256:91478c5fb7c3aac5ff7bf9b4344f803843dc586832d5f110d672b19aa1984c98"}, + {file = "identify-2.6.2-py2.py3-none-any.whl", hash = "sha256:c097384259f49e372f4ea00a19719d95ae27dd5ff0fd77ad630aa891306b82f3"}, + {file = "identify-2.6.2.tar.gz", hash = "sha256:fab5c716c24d7a789775228823797296a2994b075fb6080ac83a102772a98cbd"}, ] [package.extras] @@ -1710,13 +1740,13 @@ all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2 [[package]] name = "igv-notebook" -version = "0.6.0" +version = "0.6.1" description = "Package for embedding the igv.js genome visualization in IPython notebooks" optional = false python-versions = "*" files = [ - {file = "igv-notebook-0.6.0.tar.gz", hash = "sha256:136ce41ad4433ed6ab2a142fc7bbbc4d7f14d88b37d39359fc26f105e8d445cd"}, - {file = "igv_notebook-0.6.0-py3-none-any.whl", hash = "sha256:493fafdea5a9a2b9ce6e4cd5230dcb9d9b88d067905693cab10bf27ecfed1429"}, + {file = "igv-notebook-0.6.1.tar.gz", hash = "sha256:37e4f091d93536775c99075b7fac11069186e22f05874dd2da886b7dc09e9e0d"}, + {file = "igv_notebook-0.6.1-py3-none-any.whl", hash = "sha256:e13a53d245d6d51603173fbdd481f051344d79cbaeaa69f4bcc569a1c5387559"}, ] [package.dependencies] @@ -1838,13 +1868,13 @@ xyzservices = ">=2021.8.1" [[package]] name = "ipython" -version = "8.28.0" +version = "8.29.0" description = "IPython: Productive Interactive Computing" optional = false python-versions = ">=3.10" files = [ - {file = "ipython-8.28.0-py3-none-any.whl", hash = "sha256:530ef1e7bb693724d3cdc37287c80b07ad9b25986c007a53aa1857272dac3f35"}, - {file = "ipython-8.28.0.tar.gz", hash = "sha256:0d0d15ca1e01faeb868ef56bc7ee5a0de5bd66885735682e8a322ae289a13d1a"}, + {file = "ipython-8.29.0-py3-none-any.whl", hash = "sha256:0188a1bd83267192123ccea7f4a8ed0a78910535dbaa3f37671dca76ebd429c8"}, + {file = "ipython-8.29.0.tar.gz", hash = "sha256:40b60e15b22591450eef73e40a027cf77bd652e757523eebc5bd7c7c498290eb"}, ] [package.dependencies] @@ -1922,22 +1952,22 @@ files = [ [[package]] name = "jedi" -version = "0.19.1" +version = "0.19.2" description = "An autocompletion tool for Python that can be used for text editors." optional = false python-versions = ">=3.6" files = [ - {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"}, - {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"}, + {file = "jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9"}, + {file = "jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0"}, ] [package.dependencies] -parso = ">=0.8.3,<0.9.0" +parso = ">=0.8.4,<0.9.0" [package.extras] docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] -testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] +testing = ["Django", "attrs", "colorama", "docopt", "pytest (<9.0.0)"] [[package]] name = "jinja2" @@ -1969,15 +1999,18 @@ files = [ [[package]] name = "json5" -version = "0.9.25" +version = "0.9.28" description = "A Python implementation of the JSON5 data format." optional = false -python-versions = ">=3.8" +python-versions = ">=3.8.0" files = [ - {file = "json5-0.9.25-py3-none-any.whl", hash = "sha256:34ed7d834b1341a86987ed52f3f76cd8ee184394906b6e22a1e0deb9ab294e8f"}, - {file = "json5-0.9.25.tar.gz", hash = "sha256:548e41b9be043f9426776f05df8635a00fe06104ea51ed24b67f908856e151ae"}, + {file = "json5-0.9.28-py3-none-any.whl", hash = "sha256:29c56f1accdd8bc2e037321237662034a7e07921e2b7223281a5ce2c46f0c4df"}, + {file = "json5-0.9.28.tar.gz", hash = "sha256:1f82f36e615bc5b42f1bbd49dbc94b12563c56408c6ffa06414ea310890e9a6e"}, ] +[package.extras] +dev = ["build (==1.2.2.post1)", "coverage (==7.5.3)", "mypy (==1.13.0)", "pip (==24.3.1)", "pylint (==3.2.3)", "ruff (==0.7.3)", "twine (==5.1.1)", "uv (==0.5.1)"] + [[package]] name = "jsonpointer" version = "3.0.0" @@ -2181,13 +2214,13 @@ test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (> [[package]] name = "jupyterlab" -version = "4.2.5" +version = "4.3.1" description = "JupyterLab computational environment" optional = false python-versions = ">=3.8" files = [ - {file = "jupyterlab-4.2.5-py3-none-any.whl", hash = "sha256:73b6e0775d41a9fee7ee756c80f58a6bed4040869ccc21411dc559818874d321"}, - {file = "jupyterlab-4.2.5.tar.gz", hash = "sha256:ae7f3a1b8cb88b4f55009ce79fa7c06f99d70cd63601ee4aa91815d054f46f75"}, + {file = "jupyterlab-4.3.1-py3-none-any.whl", hash = "sha256:2d9a1c305bc748e277819a17a5d5e22452e533e835f4237b2f30f3b0e491e01f"}, + {file = "jupyterlab-4.3.1.tar.gz", hash = "sha256:a4a338327556443521731d82f2a6ccf926df478914ca029616621704d47c3c65"}, ] [package.dependencies] @@ -2207,9 +2240,9 @@ tornado = ">=6.2.0" traitlets = "*" [package.extras] -dev = ["build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.3.5)"] -docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-jupyter", "sphinx (>=1.8,<7.3.0)", "sphinx-copybutton"] -docs-screenshots = ["altair (==5.3.0)", "ipython (==8.16.1)", "ipywidgets (==8.1.2)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.1.post2)", "matplotlib (==3.8.3)", "nbconvert (>=7.0.0)", "pandas (==2.2.1)", "scipy (==1.12.0)", "vega-datasets (==0.9.0)"] +dev = ["build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.6.9)"] +docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-jupyter", "sphinx (>=1.8,<8.1.0)", "sphinx-copybutton"] +docs-screenshots = ["altair (==5.4.1)", "ipython (==8.16.1)", "ipywidgets (==8.1.5)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.2.post3)", "matplotlib (==3.9.2)", "nbconvert (>=7.0.0)", "pandas (==2.2.3)", "scipy (==1.14.1)", "vega-datasets (==0.9.0)"] test = ["coverage", "pytest (>=7.0)", "pytest-check-links (>=0.7)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "pytest-timeout", "pytest-tornasync", "requests", "requests-cache", "virtualenv"] upgrade-extension = ["copier (>=9,<10)", "jinja2-time (<0.3)", "pydantic (<3.0)", "pyyaml-include (<3.0)", "tomli-w (<2.0)"] @@ -2600,43 +2633,43 @@ typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.11\""} [[package]] name = "mypy" -version = "1.12.1" +version = "1.13.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3d7d4371829184e22fda4015278fbfdef0327a4b955a483012bd2d423a788801"}, - {file = "mypy-1.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f59f1dfbf497d473201356966e353ef09d4daec48caeacc0254db8ef633a28a5"}, - {file = "mypy-1.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b947097fae68004b8328c55161ac9db7d3566abfef72d9d41b47a021c2fba6b1"}, - {file = "mypy-1.12.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:96af62050971c5241afb4701c15189ea9507db89ad07794a4ee7b4e092dc0627"}, - {file = "mypy-1.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:d90da248f4c2dba6c44ddcfea94bb361e491962f05f41990ff24dbd09969ce20"}, - {file = "mypy-1.12.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1230048fec1380faf240be6385e709c8570604d2d27ec6ca7e573e3bc09c3735"}, - {file = "mypy-1.12.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:02dcfe270c6ea13338210908f8cadc8d31af0f04cee8ca996438fe6a97b4ec66"}, - {file = "mypy-1.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a5a437c9102a6a252d9e3a63edc191a3aed5f2fcb786d614722ee3f4472e33f6"}, - {file = "mypy-1.12.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:186e0c8346efc027ee1f9acf5ca734425fc4f7dc2b60144f0fbe27cc19dc7931"}, - {file = "mypy-1.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:673ba1140a478b50e6d265c03391702fa11a5c5aff3f54d69a62a48da32cb811"}, - {file = "mypy-1.12.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:9fb83a7be97c498176fb7486cafbb81decccaef1ac339d837c377b0ce3743a7f"}, - {file = "mypy-1.12.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:389e307e333879c571029d5b93932cf838b811d3f5395ed1ad05086b52148fb0"}, - {file = "mypy-1.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:94b2048a95a21f7a9ebc9fbd075a4fcd310410d078aa0228dbbad7f71335e042"}, - {file = "mypy-1.12.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ee5932370ccf7ebf83f79d1c157a5929d7ea36313027b0d70a488493dc1b179"}, - {file = "mypy-1.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:19bf51f87a295e7ab2894f1d8167622b063492d754e69c3c2fed6563268cb42a"}, - {file = "mypy-1.12.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d34167d43613ffb1d6c6cdc0cc043bb106cac0aa5d6a4171f77ab92a3c758bcc"}, - {file = "mypy-1.12.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:427878aa54f2e2c5d8db31fa9010c599ed9f994b3b49e64ae9cd9990c40bd635"}, - {file = "mypy-1.12.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5fcde63ea2c9f69d6be859a1e6dd35955e87fa81de95bc240143cf00de1f7f81"}, - {file = "mypy-1.12.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:d54d840f6c052929f4a3d2aab2066af0f45a020b085fe0e40d4583db52aab4e4"}, - {file = "mypy-1.12.1-cp313-cp313-win_amd64.whl", hash = "sha256:20db6eb1ca3d1de8ece00033b12f793f1ea9da767334b7e8c626a4872090cf02"}, - {file = "mypy-1.12.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b16fe09f9c741d85a2e3b14a5257a27a4f4886c171d562bc5a5e90d8591906b8"}, - {file = "mypy-1.12.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0dcc1e843d58f444fce19da4cce5bd35c282d4bde232acdeca8279523087088a"}, - {file = "mypy-1.12.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e10ba7de5c616e44ad21005fa13450cd0de7caaa303a626147d45307492e4f2d"}, - {file = "mypy-1.12.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0e6fe449223fa59fbee351db32283838a8fee8059e0028e9e6494a03802b4004"}, - {file = "mypy-1.12.1-cp38-cp38-win_amd64.whl", hash = "sha256:dc6e2a2195a290a7fd5bac3e60b586d77fc88e986eba7feced8b778c373f9afe"}, - {file = "mypy-1.12.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:de5b2a8988b4e1269a98beaf0e7cc71b510d050dce80c343b53b4955fff45f19"}, - {file = "mypy-1.12.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:843826966f1d65925e8b50d2b483065c51fc16dc5d72647e0236aae51dc8d77e"}, - {file = "mypy-1.12.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9fe20f89da41a95e14c34b1ddb09c80262edcc295ad891f22cc4b60013e8f78d"}, - {file = "mypy-1.12.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8135ffec02121a75f75dc97c81af7c14aa4ae0dda277132cfcd6abcd21551bfd"}, - {file = "mypy-1.12.1-cp39-cp39-win_amd64.whl", hash = "sha256:a7b76fa83260824300cc4834a3ab93180db19876bce59af921467fd03e692810"}, - {file = "mypy-1.12.1-py3-none-any.whl", hash = "sha256:ce561a09e3bb9863ab77edf29ae3a50e65685ad74bba1431278185b7e5d5486e"}, - {file = "mypy-1.12.1.tar.gz", hash = "sha256:f5b3936f7a6d0e8280c9bdef94c7ce4847f5cdfc258fbb2c29a8c1711e8bb96d"}, + {file = "mypy-1.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6607e0f1dd1fb7f0aca14d936d13fd19eba5e17e1cd2a14f808fa5f8f6d8f60a"}, + {file = "mypy-1.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8a21be69bd26fa81b1f80a61ee7ab05b076c674d9b18fb56239d72e21d9f4c80"}, + {file = "mypy-1.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7b2353a44d2179846a096e25691d54d59904559f4232519d420d64da6828a3a7"}, + {file = "mypy-1.13.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0730d1c6a2739d4511dc4253f8274cdd140c55c32dfb0a4cf8b7a43f40abfa6f"}, + {file = "mypy-1.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:c5fc54dbb712ff5e5a0fca797e6e0aa25726c7e72c6a5850cfd2adbc1eb0a372"}, + {file = "mypy-1.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:581665e6f3a8a9078f28d5502f4c334c0c8d802ef55ea0e7276a6e409bc0d82d"}, + {file = "mypy-1.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3ddb5b9bf82e05cc9a627e84707b528e5c7caaa1c55c69e175abb15a761cec2d"}, + {file = "mypy-1.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:20c7ee0bc0d5a9595c46f38beb04201f2620065a93755704e141fcac9f59db2b"}, + {file = "mypy-1.13.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3790ded76f0b34bc9c8ba4def8f919dd6a46db0f5a6610fb994fe8efdd447f73"}, + {file = "mypy-1.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:51f869f4b6b538229c1d1bcc1dd7d119817206e2bc54e8e374b3dfa202defcca"}, + {file = "mypy-1.13.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5c7051a3461ae84dfb5dd15eff5094640c61c5f22257c8b766794e6dd85e72d5"}, + {file = "mypy-1.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:39bb21c69a5d6342f4ce526e4584bc5c197fd20a60d14a8624d8743fffb9472e"}, + {file = "mypy-1.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:164f28cb9d6367439031f4c81e84d3ccaa1e19232d9d05d37cb0bd880d3f93c2"}, + {file = "mypy-1.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a4c1bfcdbce96ff5d96fc9b08e3831acb30dc44ab02671eca5953eadad07d6d0"}, + {file = "mypy-1.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:a0affb3a79a256b4183ba09811e3577c5163ed06685e4d4b46429a271ba174d2"}, + {file = "mypy-1.13.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a7b44178c9760ce1a43f544e595d35ed61ac2c3de306599fa59b38a6048e1aa7"}, + {file = "mypy-1.13.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5d5092efb8516d08440e36626f0153b5006d4088c1d663d88bf79625af3d1d62"}, + {file = "mypy-1.13.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:de2904956dac40ced10931ac967ae63c5089bd498542194b436eb097a9f77bc8"}, + {file = "mypy-1.13.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:7bfd8836970d33c2105562650656b6846149374dc8ed77d98424b40b09340ba7"}, + {file = "mypy-1.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:9f73dba9ec77acb86457a8fc04b5239822df0c14a082564737833d2963677dbc"}, + {file = "mypy-1.13.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:100fac22ce82925f676a734af0db922ecfea991e1d7ec0ceb1e115ebe501301a"}, + {file = "mypy-1.13.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7bcb0bb7f42a978bb323a7c88f1081d1b5dee77ca86f4100735a6f541299d8fb"}, + {file = "mypy-1.13.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bde31fc887c213e223bbfc34328070996061b0833b0a4cfec53745ed61f3519b"}, + {file = "mypy-1.13.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:07de989f89786f62b937851295ed62e51774722e5444a27cecca993fc3f9cd74"}, + {file = "mypy-1.13.0-cp38-cp38-win_amd64.whl", hash = "sha256:4bde84334fbe19bad704b3f5b78c4abd35ff1026f8ba72b29de70dda0916beb6"}, + {file = "mypy-1.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0246bcb1b5de7f08f2826451abd947bf656945209b140d16ed317f65a17dc7dc"}, + {file = "mypy-1.13.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7f5b7deae912cf8b77e990b9280f170381fdfbddf61b4ef80927edd813163732"}, + {file = "mypy-1.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7029881ec6ffb8bc233a4fa364736789582c738217b133f1b55967115288a2bc"}, + {file = "mypy-1.13.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3e38b980e5681f28f033f3be86b099a247b13c491f14bb8b1e1e134d23bb599d"}, + {file = "mypy-1.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:a6789be98a2017c912ae6ccb77ea553bbaf13d27605d2ca20a76dfbced631b24"}, + {file = "mypy-1.13.0-py3-none-any.whl", hash = "sha256:9c250883f9fd81d212e0952c92dbfcc96fc237f4b7c92f56ac81fd48460b3e5a"}, + {file = "mypy-1.13.0.tar.gz", hash = "sha256:0291a61b6fbf3e6673e3405cfcc0e7650bebc7939659fdca2702958038bd835e"}, ] [package.dependencies] @@ -2646,6 +2679,7 @@ typing-extensions = ">=4.6.0" [package.extras] dmypy = ["psutil (>=4.0)"] +faster-cache = ["orjson"] install-types = ["pip"] mypyc = ["setuptools (>=50)"] reports = ["lxml"] @@ -2784,26 +2818,26 @@ files = [ [[package]] name = "notebook" -version = "7.2.2" +version = "7.0.7" description = "Jupyter Notebook - A web-based notebook environment for interactive computing" optional = false python-versions = ">=3.8" files = [ - {file = "notebook-7.2.2-py3-none-any.whl", hash = "sha256:c89264081f671bc02eec0ed470a627ed791b9156cad9285226b31611d3e9fe1c"}, - {file = "notebook-7.2.2.tar.gz", hash = "sha256:2ef07d4220421623ad3fe88118d687bc0450055570cdd160814a59cf3a1c516e"}, + {file = "notebook-7.0.7-py3-none-any.whl", hash = "sha256:289b606d7e173f75a18beb1406ef411b43f97f7a9c55ba03efa3622905a62346"}, + {file = "notebook-7.0.7.tar.gz", hash = "sha256:3bcff00c17b3ac142ef5f436d50637d936b274cfa0b41f6ac0175363de9b4e09"}, ] [package.dependencies] jupyter-server = ">=2.4.0,<3" -jupyterlab = ">=4.2.0,<4.3" -jupyterlab-server = ">=2.27.1,<3" +jupyterlab = ">=4.0.2,<5" +jupyterlab-server = ">=2.22.1,<3" notebook-shim = ">=0.2,<0.3" tornado = ">=6.2.0" [package.extras] dev = ["hatch", "pre-commit"] docs = ["myst-parser", "nbsphinx", "pydata-sphinx-theme", "sphinx (>=1.3.6)", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] -test = ["importlib-resources (>=5.0)", "ipykernel", "jupyter-server[test] (>=2.4.0,<3)", "jupyterlab-server[test] (>=2.27.1,<3)", "nbval", "pytest (>=7.0)", "pytest-console-scripts", "pytest-timeout", "pytest-tornasync", "requests"] +test = ["importlib-resources (>=5.0)", "ipykernel", "jupyter-server[test] (>=2.4.0,<3)", "jupyterlab-server[test] (>=2.22.1,<3)", "nbval", "pytest (>=7.0)", "pytest-console-scripts", "pytest-timeout", "pytest-tornasync", "requests"] [[package]] name = "notebook-shim" @@ -2979,68 +3013,69 @@ signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] [[package]] name = "orjson" -version = "3.10.9" +version = "3.10.11" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.10.9-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a377186a11b48c55969e34f0aa414c2826a234f212d6f2b312ba512e3cdb2c6f"}, - {file = "orjson-3.10.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bf37bf0ca538065c34efe1803378b2dadd7e05b06610a086c2857f15ee59e12"}, - {file = "orjson-3.10.9-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7d9d83a91168aa48309acba804e393b7d9216b66f15e38f339b9fbb00db8986d"}, - {file = "orjson-3.10.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e0014038a17a1fe273da0a5489787677ef5a64566ab383ad6d929e44ed5683f4"}, - {file = "orjson-3.10.9-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d6ae1b1733e4528e45675ed09a732b6ac37d716bce2facaf467f84ce774adecd"}, - {file = "orjson-3.10.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe91c2259c4a859356b6db1c6e649b40577492f66d483da8b8af6da0f87c00e3"}, - {file = "orjson-3.10.9-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a04f912c32463386ba117591c99a3d9e40b3b69bed9c5123d89dff06f0f5a4b0"}, - {file = "orjson-3.10.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ae82ca347829ca47431767b079f96bb977f592189250ccdede676339a80c8982"}, - {file = "orjson-3.10.9-cp310-none-win32.whl", hash = "sha256:fd5083906825d7f5d23089425ce5424d783d6294020bcabb8518a3e1f97833e5"}, - {file = "orjson-3.10.9-cp310-none-win_amd64.whl", hash = "sha256:e9ff9521b5be0340c8e686bcfe2619777fd7583f71e7b494601cc91ad3919d2e"}, - {file = "orjson-3.10.9-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f3bd9df47385b8fabb3b2ee1e83f9960b8accc1905be971a1c257f16c32b491e"}, - {file = "orjson-3.10.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4948961b6bce1e2086b2cf0b56cc454cdab589d40c7f85be71fb5a5556c51d3"}, - {file = "orjson-3.10.9-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0a9fc7a6cf2b229ddc323e136df13b3fb4466c50d84ed600cd0898223dd2fea3"}, - {file = "orjson-3.10.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2314846e1029a2d2b899140f350eaaf3a73281df43ba84ac44d94ca861b5b269"}, - {file = "orjson-3.10.9-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f52d993504827503411df2d60e60acf52885561458d6273f99ecd172f31c4352"}, - {file = "orjson-3.10.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e29bbf08d907756c145a3a3a1f7ce2f11f15e3edbd3342842589d6030981b76f"}, - {file = "orjson-3.10.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7ae82992c00b480c3cc7dac6739324554be8c5d8e858a90044928506a3333ef4"}, - {file = "orjson-3.10.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6fdf8d32b6d94019dc15163542d345e9ce4c4661f56b318608aa3088a1a3a23b"}, - {file = "orjson-3.10.9-cp311-none-win32.whl", hash = "sha256:01f5fef452b4d7615f2e94153479370a4b59e0c964efb32dd902978f807a45cd"}, - {file = "orjson-3.10.9-cp311-none-win_amd64.whl", hash = "sha256:95361c4197c7ce9afdf56255de6f4e2474c39d16a277cce31d1b99a2520486d8"}, - {file = "orjson-3.10.9-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:43ad5560db54331c007dc38be5ba7706cb72974a29ae8227019d89305d750a6f"}, - {file = "orjson-3.10.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1471c3274b1a4a9b8f4b9ed6effaea9ad885796373797515c44b365b375c256d"}, - {file = "orjson-3.10.9-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:41d8cac575acd15918903d74cfaabb5dbe57b357b93341332f647d1013928dcc"}, - {file = "orjson-3.10.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2920c8754f1aedc98bd357ec172af18ce48f5f1017a92244c85fe41d16d3c6e0"}, - {file = "orjson-3.10.9-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c7fa3ff6a0d9d15a0d0d2254cca16cd919156a18423654ce5574591392fe9914"}, - {file = "orjson-3.10.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1e91b90c0c26bd79593967c1adef421bcff88c9e723d49c93bb7ad8af80bc6b"}, - {file = "orjson-3.10.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f11949024f785ace1a516db32fa6255f6227226b2c988abf66f5aee61d43d8f7"}, - {file = "orjson-3.10.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:060e020d85d0ec145bc1b536b1fd9c10a0519c91991ead9724d6f759ebe26b9a"}, - {file = "orjson-3.10.9-cp312-none-win32.whl", hash = "sha256:71f73439999fe662843da3607cdf6e75b1551c330f487e5801d463d969091c63"}, - {file = "orjson-3.10.9-cp312-none-win_amd64.whl", hash = "sha256:12e2efe81356b8448f1cd130f8d75d3718de583112d71f2e2f8baa81bd835bb9"}, - {file = "orjson-3.10.9-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:0ab6e3ad10e964392f0e838751bcce2ef9c8fa8be7deddffff83088e5791566d"}, - {file = "orjson-3.10.9-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68ef65223baab00f469c8698f771ab3e6ccf6af2a987e77de5b566b4ec651150"}, - {file = "orjson-3.10.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6f130848205fea90a2cb9fa2b11cafff9a9f31f4efad225800bc8b9e4a702f24"}, - {file = "orjson-3.10.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2ea7a98f3295ed8adb6730a5788cc78dafea28300d19932a1d2143457f7db802"}, - {file = "orjson-3.10.9-cp313-none-win32.whl", hash = "sha256:bdce39f96149a74fddeb2674c54f1da5e57724d32952eb6df2ac719b66d453cc"}, - {file = "orjson-3.10.9-cp313-none-win_amd64.whl", hash = "sha256:d11383701d4b58e795039b662ada46987744293d57bfa2719e7379b8d67bc796"}, - {file = "orjson-3.10.9-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:1c3a1e845916a3739ab4162bb48dee66e0e727a19faf397176a7db0d9826cc3c"}, - {file = "orjson-3.10.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:063ca59d93d93d1387f0c4bb766c6d4f5b0e423fe7c366d0bd4401a56d1669d1"}, - {file = "orjson-3.10.9-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:938b7fcd79cf06fe348fb24b6163fbaa2fdc9fbed8b1f06318f24467f1487e63"}, - {file = "orjson-3.10.9-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cc32a9e43c7693011ccde6f8eff8cba75ca0d2a55de11092faa4a716101e67f5"}, - {file = "orjson-3.10.9-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1b3069b7e2f57f3eef2282029b9c2ba21f08a55f1018e483663a3356f046af4c"}, - {file = "orjson-3.10.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4289b5d1f88fd05dcafdd7a1f3b17bb722e77712b7618f98e86bdda560e0a1a"}, - {file = "orjson-3.10.9-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:74f5a7a7f282d326be71b722b0c350da7af6f5f15b9378da177e0e4a09bd91a3"}, - {file = "orjson-3.10.9-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:80e0c013e50cf7198319d8137931684eb9f32daa067e8276d9dbdd4010bb4add"}, - {file = "orjson-3.10.9-cp38-none-win32.whl", hash = "sha256:9d989152df8f60a76867354e0e08d896292ab9fb96a7ef89a5b3838de174522c"}, - {file = "orjson-3.10.9-cp38-none-win_amd64.whl", hash = "sha256:485358fe9892d6bfd88e5885b66bf88496e1842c8f35f61682ff9928b12a6cf0"}, - {file = "orjson-3.10.9-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ca54e6f320e33c8a6e471c424ee16576361d905c15d69e134c2906d3fcb31795"}, - {file = "orjson-3.10.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9a9eb03a29c9b30b6c8bb35e5fa20d96589a76e0042005be59b7c3af10a7e43"}, - {file = "orjson-3.10.9-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:731e8859fc99b398c286320726906404091141e9223dd5e9e6917f7e32e1cc68"}, - {file = "orjson-3.10.9-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:75b061c11f5aab979a95927a76394b4a85e3e4d63d0a2a16b56a4f7c6503afab"}, - {file = "orjson-3.10.9-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b61b08f6397f004570fd6a840f4a58946b63b4c7029408cdedb45fe85c7d17f7"}, - {file = "orjson-3.10.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c4f5e0360b7f0aba91dafe12469108109a0e8973956d4a9865ca262a6881406"}, - {file = "orjson-3.10.9-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:e403429e2947a059545e305d97e4b0eb90d3bb44b396d6f327d7ae2018391e13"}, - {file = "orjson-3.10.9-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0e492b93e122264c2dc78700859122631a4715bda88fabf57d9226954cfe7ec5"}, - {file = "orjson-3.10.9-cp39-none-win32.whl", hash = "sha256:bfba9605e85bfd19b83a21c2c25c2bed2000d5f097f3fa3ad5b5f8a7263a3148"}, - {file = "orjson-3.10.9-cp39-none-win_amd64.whl", hash = "sha256:77d277fa138d4bf145e8b24042004891c188c52ac8492724a183f42b0031cf0c"}, - {file = "orjson-3.10.9.tar.gz", hash = "sha256:c378074e0c46035dc66e57006993233ec66bf8487d501bab41649b4b7289ed4d"}, + {file = "orjson-3.10.11-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6dade64687f2bd7c090281652fe18f1151292d567a9302b34c2dbb92a3872f1f"}, + {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82f07c550a6ccd2b9290849b22316a609023ed851a87ea888c0456485a7d196a"}, + {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd9a187742d3ead9df2e49240234d728c67c356516cf4db018833a86f20ec18c"}, + {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77b0fed6f209d76c1c39f032a70df2d7acf24b1812ca3e6078fd04e8972685a3"}, + {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:63fc9d5fe1d4e8868f6aae547a7b8ba0a2e592929245fff61d633f4caccdcdd6"}, + {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65cd3e3bb4fbb4eddc3c1e8dce10dc0b73e808fcb875f9fab40c81903dd9323e"}, + {file = "orjson-3.10.11-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6f67c570602300c4befbda12d153113b8974a3340fdcf3d6de095ede86c06d92"}, + {file = "orjson-3.10.11-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1f39728c7f7d766f1f5a769ce4d54b5aaa4c3f92d5b84817053cc9995b977acc"}, + {file = "orjson-3.10.11-cp310-none-win32.whl", hash = "sha256:1789d9db7968d805f3d94aae2c25d04014aae3a2fa65b1443117cd462c6da647"}, + {file = "orjson-3.10.11-cp310-none-win_amd64.whl", hash = "sha256:5576b1e5a53a5ba8f8df81872bb0878a112b3ebb1d392155f00f54dd86c83ff6"}, + {file = "orjson-3.10.11-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:1444f9cb7c14055d595de1036f74ecd6ce15f04a715e73f33bb6326c9cef01b6"}, + {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdec57fe3b4bdebcc08a946db3365630332dbe575125ff3d80a3272ebd0ddafe"}, + {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4eed32f33a0ea6ef36ccc1d37f8d17f28a1d6e8eefae5928f76aff8f1df85e67"}, + {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80df27dd8697242b904f4ea54820e2d98d3f51f91e97e358fc13359721233e4b"}, + {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:705f03cee0cb797256d54de6695ef219e5bc8c8120b6654dd460848d57a9af3d"}, + {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03246774131701de8e7059b2e382597da43144a9a7400f178b2a32feafc54bd5"}, + {file = "orjson-3.10.11-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8b5759063a6c940a69c728ea70d7c33583991c6982915a839c8da5f957e0103a"}, + {file = "orjson-3.10.11-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:677f23e32491520eebb19c99bb34675daf5410c449c13416f7f0d93e2cf5f981"}, + {file = "orjson-3.10.11-cp311-none-win32.whl", hash = "sha256:a11225d7b30468dcb099498296ffac36b4673a8398ca30fdaec1e6c20df6aa55"}, + {file = "orjson-3.10.11-cp311-none-win_amd64.whl", hash = "sha256:df8c677df2f9f385fcc85ab859704045fa88d4668bc9991a527c86e710392bec"}, + {file = "orjson-3.10.11-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:360a4e2c0943da7c21505e47cf6bd725588962ff1d739b99b14e2f7f3545ba51"}, + {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:496e2cb45de21c369079ef2d662670a4892c81573bcc143c4205cae98282ba97"}, + {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7dfa8db55c9792d53c5952900c6a919cfa377b4f4534c7a786484a6a4a350c19"}, + {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:51f3382415747e0dbda9dade6f1e1a01a9d37f630d8c9049a8ed0e385b7a90c0"}, + {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f35a1b9f50a219f470e0e497ca30b285c9f34948d3c8160d5ad3a755d9299433"}, + {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2f3b7c5803138e67028dde33450e054c87e0703afbe730c105f1fcd873496d5"}, + {file = "orjson-3.10.11-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f91d9eb554310472bd09f5347950b24442600594c2edc1421403d7610a0998fd"}, + {file = "orjson-3.10.11-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dfbb2d460a855c9744bbc8e36f9c3a997c4b27d842f3d5559ed54326e6911f9b"}, + {file = "orjson-3.10.11-cp312-none-win32.whl", hash = "sha256:d4a62c49c506d4d73f59514986cadebb7e8d186ad510c518f439176cf8d5359d"}, + {file = "orjson-3.10.11-cp312-none-win_amd64.whl", hash = "sha256:f1eec3421a558ff7a9b010a6c7effcfa0ade65327a71bb9b02a1c3b77a247284"}, + {file = "orjson-3.10.11-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c46294faa4e4d0eb73ab68f1a794d2cbf7bab33b1dda2ac2959ffb7c61591899"}, + {file = "orjson-3.10.11-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52e5834d7d6e58a36846e059d00559cb9ed20410664f3ad156cd2cc239a11230"}, + {file = "orjson-3.10.11-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2fc947e5350fdce548bfc94f434e8760d5cafa97fb9c495d2fef6757aa02ec0"}, + {file = "orjson-3.10.11-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0efabbf839388a1dab5b72b5d3baedbd6039ac83f3b55736eb9934ea5494d258"}, + {file = "orjson-3.10.11-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a3f29634260708c200c4fe148e42b4aae97d7b9fee417fbdd74f8cfc265f15b0"}, + {file = "orjson-3.10.11-cp313-none-win32.whl", hash = "sha256:1a1222ffcee8a09476bbdd5d4f6f33d06d0d6642df2a3d78b7a195ca880d669b"}, + {file = "orjson-3.10.11-cp313-none-win_amd64.whl", hash = "sha256:bc274ac261cc69260913b2d1610760e55d3c0801bb3457ba7b9004420b6b4270"}, + {file = "orjson-3.10.11-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:19b3763e8bbf8ad797df6b6b5e0fc7c843ec2e2fc0621398534e0c6400098f87"}, + {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1be83a13312e5e58d633580c5eb8d0495ae61f180da2722f20562974188af205"}, + {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:afacfd1ab81f46dedd7f6001b6d4e8de23396e4884cd3c3436bd05defb1a6446"}, + {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cb4d0bea56bba596723d73f074c420aec3b2e5d7d30698bc56e6048066bd560c"}, + {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96ed1de70fcb15d5fed529a656df29f768187628727ee2788344e8a51e1c1350"}, + {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4bfb30c891b530f3f80e801e3ad82ef150b964e5c38e1fb8482441c69c35c61c"}, + {file = "orjson-3.10.11-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d496c74fc2b61341e3cefda7eec21b7854c5f672ee350bc55d9a4997a8a95204"}, + {file = "orjson-3.10.11-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:655a493bac606655db9a47fe94d3d84fc7f3ad766d894197c94ccf0c5408e7d3"}, + {file = "orjson-3.10.11-cp38-none-win32.whl", hash = "sha256:b9546b278c9fb5d45380f4809e11b4dd9844ca7aaf1134024503e134ed226161"}, + {file = "orjson-3.10.11-cp38-none-win_amd64.whl", hash = "sha256:b592597fe551d518f42c5a2eb07422eb475aa8cfdc8c51e6da7054b836b26782"}, + {file = "orjson-3.10.11-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c95f2ecafe709b4e5c733b5e2768ac569bed308623c85806c395d9cca00e08af"}, + {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80c00d4acded0c51c98754fe8218cb49cb854f0f7eb39ea4641b7f71732d2cb7"}, + {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:461311b693d3d0a060439aa669c74f3603264d4e7a08faa68c47ae5a863f352d"}, + {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52ca832f17d86a78cbab86cdc25f8c13756ebe182b6fc1a97d534051c18a08de"}, + {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c57ea78a753812f528178aa2f1c57da633754c91d2124cb28991dab4c79a54"}, + {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7fcfc6f7ca046383fb954ba528587e0f9336828b568282b27579c49f8e16aad"}, + {file = "orjson-3.10.11-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:86b9dd983857970c29e4c71bb3e95ff085c07d3e83e7c46ebe959bac07ebd80b"}, + {file = "orjson-3.10.11-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:4d83f87582d223e54efb2242a79547611ba4ebae3af8bae1e80fa9a0af83bb7f"}, + {file = "orjson-3.10.11-cp39-none-win32.whl", hash = "sha256:9fd0ad1c129bc9beb1154c2655f177620b5beaf9a11e0d10bac63ef3fce96950"}, + {file = "orjson-3.10.11-cp39-none-win_amd64.whl", hash = "sha256:10f416b2a017c8bd17f325fb9dee1fb5cdd7a54e814284896b7c3f2763faa017"}, + {file = "orjson-3.10.11.tar.gz", hash = "sha256:e35b6d730de6384d5b2dab5fd23f0d76fae8bbc8c353c2f78210aa5fa4beb3ef"}, ] [[package]] @@ -3056,13 +3091,13 @@ files = [ [[package]] name = "packaging" -version = "24.1" +version = "24.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, - {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, + {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, + {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, ] [[package]] @@ -3212,18 +3247,17 @@ complete = ["blosc", "numpy (>=1.20.0)", "pandas (>=1.3)", "pyzmq"] [[package]] name = "patsy" -version = "0.5.6" +version = "1.0.1" description = "A Python package for describing statistical models and for building design matrices." optional = false -python-versions = "*" +python-versions = ">=3.6" files = [ - {file = "patsy-0.5.6-py2.py3-none-any.whl", hash = "sha256:19056886fd8fa71863fa32f0eb090267f21fb74be00f19f5c70b2e9d76c883c6"}, - {file = "patsy-0.5.6.tar.gz", hash = "sha256:95c6d47a7222535f84bff7f63d7303f2e297747a598db89cf5c67f0c0c7d2cdb"}, + {file = "patsy-1.0.1-py2.py3-none-any.whl", hash = "sha256:751fb38f9e97e62312e921a1954b81e1bb2bcda4f5eeabaf94db251ee791509c"}, + {file = "patsy-1.0.1.tar.gz", hash = "sha256:e786a9391eec818c054e359b737bbce692f051aee4c661f4141cc88fb459c0c4"}, ] [package.dependencies] numpy = ">=1.4" -six = "*" [package.extras] test = ["pytest", "pytest-cov", "scipy"] @@ -3535,13 +3569,13 @@ files = [ [[package]] name = "proto-plus" -version = "1.24.0" +version = "1.25.0" description = "Beautiful, Pythonic protocol buffers." optional = false python-versions = ">=3.7" files = [ - {file = "proto-plus-1.24.0.tar.gz", hash = "sha256:30b72a5ecafe4406b0d339db35b56c4059064e69227b8c3bda7462397f966445"}, - {file = "proto_plus-1.24.0-py3-none-any.whl", hash = "sha256:402576830425e5f6ce4c2a6702400ac79897dab0b4343821aa5188b0fab81a12"}, + {file = "proto_plus-1.25.0-py3-none-any.whl", hash = "sha256:c91fc4a65074ade8e458e95ef8bac34d4008daa7cce4a12d6707066fca648961"}, + {file = "proto_plus-1.25.0.tar.gz", hash = "sha256:fbb17f57f7bd05a68b7707e745e26528b0b3c34e378db91eef93912c54982d91"}, ] [package.dependencies] @@ -3552,22 +3586,22 @@ testing = ["google-api-core (>=1.31.5)"] [[package]] name = "protobuf" -version = "5.28.2" +version = "5.28.3" description = "" optional = false python-versions = ">=3.8" files = [ - {file = "protobuf-5.28.2-cp310-abi3-win32.whl", hash = "sha256:eeea10f3dc0ac7e6b4933d32db20662902b4ab81bf28df12218aa389e9c2102d"}, - {file = "protobuf-5.28.2-cp310-abi3-win_amd64.whl", hash = "sha256:2c69461a7fcc8e24be697624c09a839976d82ae75062b11a0972e41fd2cd9132"}, - {file = "protobuf-5.28.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:a8b9403fc70764b08d2f593ce44f1d2920c5077bf7d311fefec999f8c40f78b7"}, - {file = "protobuf-5.28.2-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:35cfcb15f213449af7ff6198d6eb5f739c37d7e4f1c09b5d0641babf2cc0c68f"}, - {file = "protobuf-5.28.2-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:5e8a95246d581eef20471b5d5ba010d55f66740942b95ba9b872d918c459452f"}, - {file = "protobuf-5.28.2-cp38-cp38-win32.whl", hash = "sha256:87317e9bcda04a32f2ee82089a204d3a2f0d3c8aeed16568c7daf4756e4f1fe0"}, - {file = "protobuf-5.28.2-cp38-cp38-win_amd64.whl", hash = "sha256:c0ea0123dac3399a2eeb1a1443d82b7afc9ff40241433296769f7da42d142ec3"}, - {file = "protobuf-5.28.2-cp39-cp39-win32.whl", hash = "sha256:ca53faf29896c526863366a52a8f4d88e69cd04ec9571ed6082fa117fac3ab36"}, - {file = "protobuf-5.28.2-cp39-cp39-win_amd64.whl", hash = "sha256:8ddc60bf374785fb7cb12510b267f59067fa10087325b8e1855b898a0d81d276"}, - {file = "protobuf-5.28.2-py3-none-any.whl", hash = "sha256:52235802093bd8a2811abbe8bf0ab9c5f54cca0a751fdd3f6ac2a21438bffece"}, - {file = "protobuf-5.28.2.tar.gz", hash = "sha256:59379674ff119717404f7454647913787034f03fe7049cbef1d74a97bb4593f0"}, + {file = "protobuf-5.28.3-cp310-abi3-win32.whl", hash = "sha256:0c4eec6f987338617072592b97943fdbe30d019c56126493111cf24344c1cc24"}, + {file = "protobuf-5.28.3-cp310-abi3-win_amd64.whl", hash = "sha256:91fba8f445723fcf400fdbe9ca796b19d3b1242cd873907979b9ed71e4afe868"}, + {file = "protobuf-5.28.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:a3f6857551e53ce35e60b403b8a27b0295f7d6eb63d10484f12bc6879c715687"}, + {file = "protobuf-5.28.3-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:3fa2de6b8b29d12c61911505d893afe7320ce7ccba4df913e2971461fa36d584"}, + {file = "protobuf-5.28.3-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:712319fbdddb46f21abb66cd33cb9e491a5763b2febd8f228251add221981135"}, + {file = "protobuf-5.28.3-cp38-cp38-win32.whl", hash = "sha256:3e6101d095dfd119513cde7259aa703d16c6bbdfae2554dfe5cfdbe94e32d548"}, + {file = "protobuf-5.28.3-cp38-cp38-win_amd64.whl", hash = "sha256:27b246b3723692bf1068d5734ddaf2fccc2cdd6e0c9b47fe099244d80200593b"}, + {file = "protobuf-5.28.3-cp39-cp39-win32.whl", hash = "sha256:135658402f71bbd49500322c0f736145731b16fc79dc8f367ab544a17eab4535"}, + {file = "protobuf-5.28.3-cp39-cp39-win_amd64.whl", hash = "sha256:70585a70fc2dd4818c51287ceef5bdba6387f88a578c86d47bb34669b5552c36"}, + {file = "protobuf-5.28.3-py3-none-any.whl", hash = "sha256:cee1757663fa32a1ee673434fcf3bf24dd54763c79690201208bafec62f19eed"}, + {file = "protobuf-5.28.3.tar.gz", hash = "sha256:64badbc49180a5e401f373f9ce7ab1d18b63f7dd4a9cdc43c92b9f0b481cef7b"}, ] [[package]] @@ -3779,17 +3813,17 @@ packaging = "*" [[package]] name = "pytest-cov" -version = "5.0.0" +version = "6.0.0" description = "Pytest plugin for measuring coverage." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "pytest-cov-5.0.0.tar.gz", hash = "sha256:5837b58e9f6ebd335b0f8060eecce69b662415b16dc503883a02f45dfeb14857"}, - {file = "pytest_cov-5.0.0-py3-none-any.whl", hash = "sha256:4f0764a1219df53214206bf1feea4633c3b558a2925c8b59f144f682861ce652"}, + {file = "pytest-cov-6.0.0.tar.gz", hash = "sha256:fde0b595ca248bb8e2d76f020b465f3b107c9632e6a1d1705f17834c89dcadc0"}, + {file = "pytest_cov-6.0.0-py3-none-any.whl", hash = "sha256:eee6f1b9e61008bd34975a4d5bab25801eb31898b032dd55addc93e96fcaaa35"}, ] [package.dependencies] -coverage = {version = ">=5.2.1", extras = ["toml"]} +coverage = {version = ">=7.5", extras = ["toml"]} pytest = ">=4.6" [package.extras] @@ -4171,114 +4205,101 @@ files = [ [[package]] name = "rpds-py" -version = "0.20.0" +version = "0.21.0" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "rpds_py-0.20.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3ad0fda1635f8439cde85c700f964b23ed5fc2d28016b32b9ee5fe30da5c84e2"}, - {file = "rpds_py-0.20.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9bb4a0d90fdb03437c109a17eade42dfbf6190408f29b2744114d11586611d6f"}, - {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6377e647bbfd0a0b159fe557f2c6c602c159fc752fa316572f012fc0bf67150"}, - {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb851b7df9dda52dc1415ebee12362047ce771fc36914586b2e9fcbd7d293b3e"}, - {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e0f80b739e5a8f54837be5d5c924483996b603d5502bfff79bf33da06164ee2"}, - {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a8c94dad2e45324fc74dce25e1645d4d14df9a4e54a30fa0ae8bad9a63928e3"}, - {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8e604fe73ba048c06085beaf51147eaec7df856824bfe7b98657cf436623daf"}, - {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:df3de6b7726b52966edf29663e57306b23ef775faf0ac01a3e9f4012a24a4140"}, - {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf258ede5bc22a45c8e726b29835b9303c285ab46fc7c3a4cc770736b5304c9f"}, - {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:55fea87029cded5df854ca7e192ec7bdb7ecd1d9a3f63d5c4eb09148acf4a7ce"}, - {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ae94bd0b2f02c28e199e9bc51485d0c5601f58780636185660f86bf80c89af94"}, - {file = "rpds_py-0.20.0-cp310-none-win32.whl", hash = "sha256:28527c685f237c05445efec62426d285e47a58fb05ba0090a4340b73ecda6dee"}, - {file = "rpds_py-0.20.0-cp310-none-win_amd64.whl", hash = "sha256:238a2d5b1cad28cdc6ed15faf93a998336eb041c4e440dd7f902528b8891b399"}, - {file = "rpds_py-0.20.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ac2f4f7a98934c2ed6505aead07b979e6f999389f16b714448fb39bbaa86a489"}, - {file = "rpds_py-0.20.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:220002c1b846db9afd83371d08d239fdc865e8f8c5795bbaec20916a76db3318"}, - {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d7919548df3f25374a1f5d01fbcd38dacab338ef5f33e044744b5c36729c8db"}, - {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:758406267907b3781beee0f0edfe4a179fbd97c0be2e9b1154d7f0a1279cf8e5"}, - {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3d61339e9f84a3f0767b1995adfb171a0d00a1185192718a17af6e124728e0f5"}, - {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1259c7b3705ac0a0bd38197565a5d603218591d3f6cee6e614e380b6ba61c6f6"}, - {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c1dc0f53856b9cc9a0ccca0a7cc61d3d20a7088201c0937f3f4048c1718a209"}, - {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7e60cb630f674a31f0368ed32b2a6b4331b8350d67de53c0359992444b116dd3"}, - {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dbe982f38565bb50cb7fb061ebf762c2f254ca3d8c20d4006878766e84266272"}, - {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:514b3293b64187172bc77c8fb0cdae26981618021053b30d8371c3a902d4d5ad"}, - {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d0a26ffe9d4dd35e4dfdd1e71f46401cff0181c75ac174711ccff0459135fa58"}, - {file = "rpds_py-0.20.0-cp311-none-win32.whl", hash = "sha256:89c19a494bf3ad08c1da49445cc5d13d8fefc265f48ee7e7556839acdacf69d0"}, - {file = "rpds_py-0.20.0-cp311-none-win_amd64.whl", hash = "sha256:c638144ce971df84650d3ed0096e2ae7af8e62ecbbb7b201c8935c370df00a2c"}, - {file = "rpds_py-0.20.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a84ab91cbe7aab97f7446652d0ed37d35b68a465aeef8fc41932a9d7eee2c1a6"}, - {file = "rpds_py-0.20.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:56e27147a5a4c2c21633ff8475d185734c0e4befd1c989b5b95a5d0db699b21b"}, - {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2580b0c34583b85efec8c5c5ec9edf2dfe817330cc882ee972ae650e7b5ef739"}, - {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b80d4a7900cf6b66bb9cee5c352b2d708e29e5a37fe9bf784fa97fc11504bf6c"}, - {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:50eccbf054e62a7b2209b28dc7a22d6254860209d6753e6b78cfaeb0075d7bee"}, - {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:49a8063ea4296b3a7e81a5dfb8f7b2d73f0b1c20c2af401fb0cdf22e14711a96"}, - {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea438162a9fcbee3ecf36c23e6c68237479f89f962f82dae83dc15feeceb37e4"}, - {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:18d7585c463087bddcfa74c2ba267339f14f2515158ac4db30b1f9cbdb62c8ef"}, - {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d4c7d1a051eeb39f5c9547e82ea27cbcc28338482242e3e0b7768033cb083821"}, - {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e4df1e3b3bec320790f699890d41c59d250f6beda159ea3c44c3f5bac1976940"}, - {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2cf126d33a91ee6eedc7f3197b53e87a2acdac63602c0f03a02dd69e4b138174"}, - {file = "rpds_py-0.20.0-cp312-none-win32.whl", hash = "sha256:8bc7690f7caee50b04a79bf017a8d020c1f48c2a1077ffe172abec59870f1139"}, - {file = "rpds_py-0.20.0-cp312-none-win_amd64.whl", hash = "sha256:0e13e6952ef264c40587d510ad676a988df19adea20444c2b295e536457bc585"}, - {file = "rpds_py-0.20.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:aa9a0521aeca7d4941499a73ad7d4f8ffa3d1affc50b9ea11d992cd7eff18a29"}, - {file = "rpds_py-0.20.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4a1f1d51eccb7e6c32ae89243cb352389228ea62f89cd80823ea7dd1b98e0b91"}, - {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a86a9b96070674fc88b6f9f71a97d2c1d3e5165574615d1f9168ecba4cecb24"}, - {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6c8ef2ebf76df43f5750b46851ed1cdf8f109d7787ca40035fe19fbdc1acc5a7"}, - {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b74b25f024b421d5859d156750ea9a65651793d51b76a2e9238c05c9d5f203a9"}, - {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57eb94a8c16ab08fef6404301c38318e2c5a32216bf5de453e2714c964c125c8"}, - {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1940dae14e715e2e02dfd5b0f64a52e8374a517a1e531ad9412319dc3ac7879"}, - {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d20277fd62e1b992a50c43f13fbe13277a31f8c9f70d59759c88f644d66c619f"}, - {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:06db23d43f26478303e954c34c75182356ca9aa7797d22c5345b16871ab9c45c"}, - {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b2a5db5397d82fa847e4c624b0c98fe59d2d9b7cf0ce6de09e4d2e80f8f5b3f2"}, - {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5a35df9f5548fd79cb2f52d27182108c3e6641a4feb0f39067911bf2adaa3e57"}, - {file = "rpds_py-0.20.0-cp313-none-win32.whl", hash = "sha256:fd2d84f40633bc475ef2d5490b9c19543fbf18596dcb1b291e3a12ea5d722f7a"}, - {file = "rpds_py-0.20.0-cp313-none-win_amd64.whl", hash = "sha256:9bc2d153989e3216b0559251b0c260cfd168ec78b1fac33dd485750a228db5a2"}, - {file = "rpds_py-0.20.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:f2fbf7db2012d4876fb0d66b5b9ba6591197b0f165db8d99371d976546472a24"}, - {file = "rpds_py-0.20.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1e5f3cd7397c8f86c8cc72d5a791071431c108edd79872cdd96e00abd8497d29"}, - {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce9845054c13696f7af7f2b353e6b4f676dab1b4b215d7fe5e05c6f8bb06f965"}, - {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c3e130fd0ec56cb76eb49ef52faead8ff09d13f4527e9b0c400307ff72b408e1"}, - {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b16aa0107ecb512b568244ef461f27697164d9a68d8b35090e9b0c1c8b27752"}, - {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa7f429242aae2947246587d2964fad750b79e8c233a2367f71b554e9447949c"}, - {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af0fc424a5842a11e28956e69395fbbeab2c97c42253169d87e90aac2886d751"}, - {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b8c00a3b1e70c1d3891f0db1b05292747f0dbcfb49c43f9244d04c70fbc40eb8"}, - {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:40ce74fc86ee4645d0a225498d091d8bc61f39b709ebef8204cb8b5a464d3c0e"}, - {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:4fe84294c7019456e56d93e8ababdad5a329cd25975be749c3f5f558abb48253"}, - {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:338ca4539aad4ce70a656e5187a3a31c5204f261aef9f6ab50e50bcdffaf050a"}, - {file = "rpds_py-0.20.0-cp38-none-win32.whl", hash = "sha256:54b43a2b07db18314669092bb2de584524d1ef414588780261e31e85846c26a5"}, - {file = "rpds_py-0.20.0-cp38-none-win_amd64.whl", hash = "sha256:a1862d2d7ce1674cffa6d186d53ca95c6e17ed2b06b3f4c476173565c862d232"}, - {file = "rpds_py-0.20.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:3fde368e9140312b6e8b6c09fb9f8c8c2f00999d1823403ae90cc00480221b22"}, - {file = "rpds_py-0.20.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9824fb430c9cf9af743cf7aaf6707bf14323fb51ee74425c380f4c846ea70789"}, - {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11ef6ce74616342888b69878d45e9f779b95d4bd48b382a229fe624a409b72c5"}, - {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c52d3f2f82b763a24ef52f5d24358553e8403ce05f893b5347098014f2d9eff2"}, - {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d35cef91e59ebbeaa45214861874bc6f19eb35de96db73e467a8358d701a96c"}, - {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d72278a30111e5b5525c1dd96120d9e958464316f55adb030433ea905866f4de"}, - {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4c29cbbba378759ac5786730d1c3cb4ec6f8ababf5c42a9ce303dc4b3d08cda"}, - {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6632f2d04f15d1bd6fe0eedd3b86d9061b836ddca4c03d5cf5c7e9e6b7c14580"}, - {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d0b67d87bb45ed1cd020e8fbf2307d449b68abc45402fe1a4ac9e46c3c8b192b"}, - {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ec31a99ca63bf3cd7f1a5ac9fe95c5e2d060d3c768a09bc1d16e235840861420"}, - {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:22e6c9976e38f4d8c4a63bd8a8edac5307dffd3ee7e6026d97f3cc3a2dc02a0b"}, - {file = "rpds_py-0.20.0-cp39-none-win32.whl", hash = "sha256:569b3ea770c2717b730b61998b6c54996adee3cef69fc28d444f3e7920313cf7"}, - {file = "rpds_py-0.20.0-cp39-none-win_amd64.whl", hash = "sha256:e6900ecdd50ce0facf703f7a00df12374b74bbc8ad9fe0f6559947fb20f82364"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:617c7357272c67696fd052811e352ac54ed1d9b49ab370261a80d3b6ce385045"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9426133526f69fcaba6e42146b4e12d6bc6c839b8b555097020e2b78ce908dcc"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:deb62214c42a261cb3eb04d474f7155279c1a8a8c30ac89b7dcb1721d92c3c02"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fcaeb7b57f1a1e071ebd748984359fef83ecb026325b9d4ca847c95bc7311c92"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d454b8749b4bd70dd0a79f428731ee263fa6995f83ccb8bada706e8d1d3ff89d"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d807dc2051abe041b6649681dce568f8e10668e3c1c6543ebae58f2d7e617855"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3c20f0ddeb6e29126d45f89206b8291352b8c5b44384e78a6499d68b52ae511"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b7f19250ceef892adf27f0399b9e5afad019288e9be756d6919cb58892129f51"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4f1ed4749a08379555cebf4650453f14452eaa9c43d0a95c49db50c18b7da075"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:dcedf0b42bcb4cfff4101d7771a10532415a6106062f005ab97d1d0ab5681c60"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:39ed0d010457a78f54090fafb5d108501b5aa5604cc22408fc1c0c77eac14344"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:bb273176be34a746bdac0b0d7e4e2c467323d13640b736c4c477881a3220a989"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f918a1a130a6dfe1d7fe0f105064141342e7dd1611f2e6a21cd2f5c8cb1cfb3e"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:f60012a73aa396be721558caa3a6fd49b3dd0033d1675c6d59c4502e870fcf0c"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d2b1ad682a3dfda2a4e8ad8572f3100f95fad98cb99faf37ff0ddfe9cbf9d03"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:614fdafe9f5f19c63ea02817fa4861c606a59a604a77c8cdef5aa01d28b97921"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa518bcd7600c584bf42e6617ee8132869e877db2f76bcdc281ec6a4113a53ab"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f0475242f447cc6cb8a9dd486d68b2ef7fbee84427124c232bff5f63b1fe11e5"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f90a4cd061914a60bd51c68bcb4357086991bd0bb93d8aa66a6da7701370708f"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:def7400461c3a3f26e49078302e1c1b38f6752342c77e3cf72ce91ca69fb1bc1"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:65794e4048ee837494aea3c21a28ad5fc080994dfba5b036cf84de37f7ad5074"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:faefcc78f53a88f3076b7f8be0a8f8d35133a3ecf7f3770895c25f8813460f08"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:5b4f105deeffa28bbcdff6c49b34e74903139afa690e35d2d9e3c2c2fba18cec"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fdfc3a892927458d98f3d55428ae46b921d1f7543b89382fdb483f5640daaec8"}, - {file = "rpds_py-0.20.0.tar.gz", hash = "sha256:d72a210824facfdaf8768cf2d7ca25a042c30320b3020de2fa04640920d4e121"}, + {file = "rpds_py-0.21.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a017f813f24b9df929674d0332a374d40d7f0162b326562daae8066b502d0590"}, + {file = "rpds_py-0.21.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:20cc1ed0bcc86d8e1a7e968cce15be45178fd16e2ff656a243145e0b439bd250"}, + {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad116dda078d0bc4886cb7840e19811562acdc7a8e296ea6ec37e70326c1b41c"}, + {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:808f1ac7cf3b44f81c9475475ceb221f982ef548e44e024ad5f9e7060649540e"}, + {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de552f4a1916e520f2703ec474d2b4d3f86d41f353e7680b597512ffe7eac5d0"}, + {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:efec946f331349dfc4ae9d0e034c263ddde19414fe5128580f512619abed05f1"}, + {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b80b4690bbff51a034bfde9c9f6bf9357f0a8c61f548942b80f7b66356508bf5"}, + {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:085ed25baac88953d4283e5b5bd094b155075bb40d07c29c4f073e10623f9f2e"}, + {file = "rpds_py-0.21.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:daa8efac2a1273eed2354397a51216ae1e198ecbce9036fba4e7610b308b6153"}, + {file = "rpds_py-0.21.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:95a5bad1ac8a5c77b4e658671642e4af3707f095d2b78a1fdd08af0dfb647624"}, + {file = "rpds_py-0.21.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3e53861b29a13d5b70116ea4230b5f0f3547b2c222c5daa090eb7c9c82d7f664"}, + {file = "rpds_py-0.21.0-cp310-none-win32.whl", hash = "sha256:ea3a6ac4d74820c98fcc9da4a57847ad2cc36475a8bd9683f32ab6d47a2bd682"}, + {file = "rpds_py-0.21.0-cp310-none-win_amd64.whl", hash = "sha256:b8f107395f2f1d151181880b69a2869c69e87ec079c49c0016ab96860b6acbe5"}, + {file = "rpds_py-0.21.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:5555db3e618a77034954b9dc547eae94166391a98eb867905ec8fcbce1308d95"}, + {file = "rpds_py-0.21.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:97ef67d9bbc3e15584c2f3c74bcf064af36336c10d2e21a2131e123ce0f924c9"}, + {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ab2c2a26d2f69cdf833174f4d9d86118edc781ad9a8fa13970b527bf8236027"}, + {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4e8921a259f54bfbc755c5bbd60c82bb2339ae0324163f32868f63f0ebb873d9"}, + {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a7ff941004d74d55a47f916afc38494bd1cfd4b53c482b77c03147c91ac0ac3"}, + {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5145282a7cd2ac16ea0dc46b82167754d5e103a05614b724457cffe614f25bd8"}, + {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de609a6f1b682f70bb7163da745ee815d8f230d97276db049ab447767466a09d"}, + {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:40c91c6e34cf016fa8e6b59d75e3dbe354830777fcfd74c58b279dceb7975b75"}, + {file = "rpds_py-0.21.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d2132377f9deef0c4db89e65e8bb28644ff75a18df5293e132a8d67748397b9f"}, + {file = "rpds_py-0.21.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0a9e0759e7be10109645a9fddaaad0619d58c9bf30a3f248a2ea57a7c417173a"}, + {file = "rpds_py-0.21.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9e20da3957bdf7824afdd4b6eeb29510e83e026473e04952dca565170cd1ecc8"}, + {file = "rpds_py-0.21.0-cp311-none-win32.whl", hash = "sha256:f71009b0d5e94c0e86533c0b27ed7cacc1239cb51c178fd239c3cfefefb0400a"}, + {file = "rpds_py-0.21.0-cp311-none-win_amd64.whl", hash = "sha256:e168afe6bf6ab7ab46c8c375606298784ecbe3ba31c0980b7dcbb9631dcba97e"}, + {file = "rpds_py-0.21.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:30b912c965b2aa76ba5168fd610087bad7fcde47f0a8367ee8f1876086ee6d1d"}, + {file = "rpds_py-0.21.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ca9989d5d9b1b300bc18e1801c67b9f6d2c66b8fd9621b36072ed1df2c977f72"}, + {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f54e7106f0001244a5f4cf810ba8d3f9c542e2730821b16e969d6887b664266"}, + {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fed5dfefdf384d6fe975cc026886aece4f292feaf69d0eeb716cfd3c5a4dd8be"}, + {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:590ef88db231c9c1eece44dcfefd7515d8bf0d986d64d0caf06a81998a9e8cab"}, + {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f983e4c2f603c95dde63df633eec42955508eefd8d0f0e6d236d31a044c882d7"}, + {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b229ce052ddf1a01c67d68166c19cb004fb3612424921b81c46e7ea7ccf7c3bf"}, + {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ebf64e281a06c904a7636781d2e973d1f0926a5b8b480ac658dc0f556e7779f4"}, + {file = "rpds_py-0.21.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:998a8080c4495e4f72132f3d66ff91f5997d799e86cec6ee05342f8f3cda7dca"}, + {file = "rpds_py-0.21.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:98486337f7b4f3c324ab402e83453e25bb844f44418c066623db88e4c56b7c7b"}, + {file = "rpds_py-0.21.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a78d8b634c9df7f8d175451cfeac3810a702ccb85f98ec95797fa98b942cea11"}, + {file = "rpds_py-0.21.0-cp312-none-win32.whl", hash = "sha256:a58ce66847711c4aa2ecfcfaff04cb0327f907fead8945ffc47d9407f41ff952"}, + {file = "rpds_py-0.21.0-cp312-none-win_amd64.whl", hash = "sha256:e860f065cc4ea6f256d6f411aba4b1251255366e48e972f8a347cf88077b24fd"}, + {file = "rpds_py-0.21.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ee4eafd77cc98d355a0d02f263efc0d3ae3ce4a7c24740010a8b4012bbb24937"}, + {file = "rpds_py-0.21.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:688c93b77e468d72579351a84b95f976bd7b3e84aa6686be6497045ba84be560"}, + {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c38dbf31c57032667dd5a2f0568ccde66e868e8f78d5a0d27dcc56d70f3fcd3b"}, + {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2d6129137f43f7fa02d41542ffff4871d4aefa724a5fe38e2c31a4e0fd343fb0"}, + {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:520ed8b99b0bf86a176271f6fe23024323862ac674b1ce5b02a72bfeff3fff44"}, + {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaeb25ccfb9b9014a10eaf70904ebf3f79faaa8e60e99e19eef9f478651b9b74"}, + {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af04ac89c738e0f0f1b913918024c3eab6e3ace989518ea838807177d38a2e94"}, + {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b9b76e2afd585803c53c5b29e992ecd183f68285b62fe2668383a18e74abe7a3"}, + {file = "rpds_py-0.21.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5afb5efde74c54724e1a01118c6e5c15e54e642c42a1ba588ab1f03544ac8c7a"}, + {file = "rpds_py-0.21.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:52c041802a6efa625ea18027a0723676a778869481d16803481ef6cc02ea8cb3"}, + {file = "rpds_py-0.21.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ee1e4fc267b437bb89990b2f2abf6c25765b89b72dd4a11e21934df449e0c976"}, + {file = "rpds_py-0.21.0-cp313-none-win32.whl", hash = "sha256:0c025820b78817db6a76413fff6866790786c38f95ea3f3d3c93dbb73b632202"}, + {file = "rpds_py-0.21.0-cp313-none-win_amd64.whl", hash = "sha256:320c808df533695326610a1b6a0a6e98f033e49de55d7dc36a13c8a30cfa756e"}, + {file = "rpds_py-0.21.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:2c51d99c30091f72a3c5d126fad26236c3f75716b8b5e5cf8effb18889ced928"}, + {file = "rpds_py-0.21.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cbd7504a10b0955ea287114f003b7ad62330c9e65ba012c6223dba646f6ffd05"}, + {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6dcc4949be728ede49e6244eabd04064336012b37f5c2200e8ec8eb2988b209c"}, + {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f414da5c51bf350e4b7960644617c130140423882305f7574b6cf65a3081cecb"}, + {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9afe42102b40007f588666bc7de82451e10c6788f6f70984629db193849dced1"}, + {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b929c2bb6e29ab31f12a1117c39f7e6d6450419ab7464a4ea9b0b417174f044"}, + {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8404b3717da03cbf773a1d275d01fec84ea007754ed380f63dfc24fb76ce4592"}, + {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e12bb09678f38b7597b8346983d2323a6482dcd59e423d9448108c1be37cac9d"}, + {file = "rpds_py-0.21.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:58a0e345be4b18e6b8501d3b0aa540dad90caeed814c515e5206bb2ec26736fd"}, + {file = "rpds_py-0.21.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:c3761f62fcfccf0864cc4665b6e7c3f0c626f0380b41b8bd1ce322103fa3ef87"}, + {file = "rpds_py-0.21.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c2b2f71c6ad6c2e4fc9ed9401080badd1469fa9889657ec3abea42a3d6b2e1ed"}, + {file = "rpds_py-0.21.0-cp39-none-win32.whl", hash = "sha256:b21747f79f360e790525e6f6438c7569ddbfb1b3197b9e65043f25c3c9b489d8"}, + {file = "rpds_py-0.21.0-cp39-none-win_amd64.whl", hash = "sha256:0626238a43152918f9e72ede9a3b6ccc9e299adc8ade0d67c5e142d564c9a83d"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6b4ef7725386dc0762857097f6b7266a6cdd62bfd209664da6712cb26acef035"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:6bc0e697d4d79ab1aacbf20ee5f0df80359ecf55db33ff41481cf3e24f206919"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da52d62a96e61c1c444f3998c434e8b263c384f6d68aca8274d2e08d1906325c"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:98e4fe5db40db87ce1c65031463a760ec7906ab230ad2249b4572c2fc3ef1f9f"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30bdc973f10d28e0337f71d202ff29345320f8bc49a31c90e6c257e1ccef4333"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:faa5e8496c530f9c71f2b4e1c49758b06e5f4055e17144906245c99fa6d45356"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32eb88c30b6a4f0605508023b7141d043a79b14acb3b969aa0b4f99b25bc7d4a"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a89a8ce9e4e75aeb7fa5d8ad0f3fecdee813802592f4f46a15754dcb2fd6b061"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:241e6c125568493f553c3d0fdbb38c74babf54b45cef86439d4cd97ff8feb34d"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:3b766a9f57663396e4f34f5140b3595b233a7b146e94777b97a8413a1da1be18"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:af4a644bf890f56e41e74be7d34e9511e4954894d544ec6b8efe1e21a1a8da6c"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:3e30a69a706e8ea20444b98a49f386c17b26f860aa9245329bab0851ed100677"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:031819f906bb146561af051c7cef4ba2003d28cff07efacef59da973ff7969ba"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b876f2bc27ab5954e2fd88890c071bd0ed18b9c50f6ec3de3c50a5ece612f7a6"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc5695c321e518d9f03b7ea6abb5ea3af4567766f9852ad1560f501b17588c7b"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b4de1da871b5c0fd5537b26a6fc6814c3cc05cabe0c941db6e9044ffbb12f04a"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:878f6fea96621fda5303a2867887686d7a198d9e0f8a40be100a63f5d60c88c9"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8eeec67590e94189f434c6d11c426892e396ae59e4801d17a93ac96b8c02a6c"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ff2eba7f6c0cb523d7e9cff0903f2fe1feff8f0b2ceb6bd71c0e20a4dcee271"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a429b99337062877d7875e4ff1a51fe788424d522bd64a8c0a20ef3021fdb6ed"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:d167e4dbbdac48bd58893c7e446684ad5d425b407f9336e04ab52e8b9194e2ed"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:4eb2de8a147ffe0626bfdc275fc6563aa7bf4b6db59cf0d44f0ccd6ca625a24e"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e78868e98f34f34a88e23ee9ccaeeec460e4eaf6db16d51d7a9b883e5e785a5e"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4991ca61656e3160cdaca4851151fd3f4a92e9eba5c7a530ab030d6aee96ec89"}, + {file = "rpds_py-0.21.0.tar.gz", hash = "sha256:ed6378c9d66d0de903763e7706383d60c33829581f0adff47b6535f1802fa6db"}, ] [[package]] @@ -4297,29 +4318,29 @@ pyasn1 = ">=0.1.3" [[package]] name = "ruff" -version = "0.7.0" +version = "0.7.4" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.7.0-py3-none-linux_armv6l.whl", hash = "sha256:0cdf20c2b6ff98e37df47b2b0bd3a34aaa155f59a11182c1303cce79be715628"}, - {file = "ruff-0.7.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:496494d350c7fdeb36ca4ef1c9f21d80d182423718782222c29b3e72b3512737"}, - {file = "ruff-0.7.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:214b88498684e20b6b2b8852c01d50f0651f3cc6118dfa113b4def9f14faaf06"}, - {file = "ruff-0.7.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:630fce3fefe9844e91ea5bbf7ceadab4f9981f42b704fae011bb8efcaf5d84be"}, - {file = "ruff-0.7.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:211d877674e9373d4bb0f1c80f97a0201c61bcd1e9d045b6e9726adc42c156aa"}, - {file = "ruff-0.7.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:194d6c46c98c73949a106425ed40a576f52291c12bc21399eb8f13a0f7073495"}, - {file = "ruff-0.7.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:82c2579b82b9973a110fab281860403b397c08c403de92de19568f32f7178598"}, - {file = "ruff-0.7.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9af971fe85dcd5eaed8f585ddbc6bdbe8c217fb8fcf510ea6bca5bdfff56040e"}, - {file = "ruff-0.7.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b641c7f16939b7d24b7bfc0be4102c56562a18281f84f635604e8a6989948914"}, - {file = "ruff-0.7.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d71672336e46b34e0c90a790afeac8a31954fd42872c1f6adaea1dff76fd44f9"}, - {file = "ruff-0.7.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:ab7d98c7eed355166f367597e513a6c82408df4181a937628dbec79abb2a1fe4"}, - {file = "ruff-0.7.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:1eb54986f770f49edb14f71d33312d79e00e629a57387382200b1ef12d6a4ef9"}, - {file = "ruff-0.7.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:dc452ba6f2bb9cf8726a84aa877061a2462afe9ae0ea1d411c53d226661c601d"}, - {file = "ruff-0.7.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:4b406c2dce5be9bad59f2de26139a86017a517e6bcd2688da515481c05a2cb11"}, - {file = "ruff-0.7.0-py3-none-win32.whl", hash = "sha256:f6c968509f767776f524a8430426539587d5ec5c662f6addb6aa25bc2e8195ec"}, - {file = "ruff-0.7.0-py3-none-win_amd64.whl", hash = "sha256:ff4aabfbaaba880e85d394603b9e75d32b0693152e16fa659a3064a85df7fce2"}, - {file = "ruff-0.7.0-py3-none-win_arm64.whl", hash = "sha256:10842f69c245e78d6adec7e1db0a7d9ddc2fff0621d730e61657b64fa36f207e"}, - {file = "ruff-0.7.0.tar.gz", hash = "sha256:47a86360cf62d9cd53ebfb0b5eb0e882193fc191c6d717e8bef4462bc3b9ea2b"}, + {file = "ruff-0.7.4-py3-none-linux_armv6l.whl", hash = "sha256:a4919925e7684a3f18e18243cd6bea7cfb8e968a6eaa8437971f681b7ec51478"}, + {file = "ruff-0.7.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:cfb365c135b830778dda8c04fb7d4280ed0b984e1aec27f574445231e20d6c63"}, + {file = "ruff-0.7.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:63a569b36bc66fbadec5beaa539dd81e0527cb258b94e29e0531ce41bacc1f20"}, + {file = "ruff-0.7.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d06218747d361d06fd2fdac734e7fa92df36df93035db3dc2ad7aa9852cb109"}, + {file = "ruff-0.7.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e0cea28d0944f74ebc33e9f934238f15c758841f9f5edd180b5315c203293452"}, + {file = "ruff-0.7.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80094ecd4793c68b2571b128f91754d60f692d64bc0d7272ec9197fdd09bf9ea"}, + {file = "ruff-0.7.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:997512325c6620d1c4c2b15db49ef59543ef9cd0f4aa8065ec2ae5103cedc7e7"}, + {file = "ruff-0.7.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:00b4cf3a6b5fad6d1a66e7574d78956bbd09abfd6c8a997798f01f5da3d46a05"}, + {file = "ruff-0.7.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7dbdc7d8274e1422722933d1edddfdc65b4336abf0b16dfcb9dedd6e6a517d06"}, + {file = "ruff-0.7.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e92dfb5f00eaedb1501b2f906ccabfd67b2355bdf117fea9719fc99ac2145bc"}, + {file = "ruff-0.7.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:3bd726099f277d735dc38900b6a8d6cf070f80828877941983a57bca1cd92172"}, + {file = "ruff-0.7.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:2e32829c429dd081ee5ba39aef436603e5b22335c3d3fff013cd585806a6486a"}, + {file = "ruff-0.7.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:662a63b4971807623f6f90c1fb664613f67cc182dc4d991471c23c541fee62dd"}, + {file = "ruff-0.7.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:876f5e09eaae3eb76814c1d3b68879891d6fde4824c015d48e7a7da4cf066a3a"}, + {file = "ruff-0.7.4-py3-none-win32.whl", hash = "sha256:75c53f54904be42dd52a548728a5b572344b50d9b2873d13a3f8c5e3b91f5cac"}, + {file = "ruff-0.7.4-py3-none-win_amd64.whl", hash = "sha256:745775c7b39f914238ed1f1b0bebed0b9155a17cd8bc0b08d3c87e4703b990d6"}, + {file = "ruff-0.7.4-py3-none-win_arm64.whl", hash = "sha256:11bff065102c3ae9d3ea4dc9ecdfe5a5171349cdd0787c1fc64761212fc9cf1f"}, + {file = "ruff-0.7.4.tar.gz", hash = "sha256:cd12e35031f5af6b9b93715d8c4f40360070b2041f81273d0527683d5708fce2"}, ] [[package]] @@ -4423,23 +4444,23 @@ win32 = ["pywin32"] [[package]] name = "setuptools" -version = "75.2.0" +version = "75.5.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "setuptools-75.2.0-py3-none-any.whl", hash = "sha256:a7fcb66f68b4d9e8e66b42f9876150a3371558f98fa32222ffaa5bced76406f8"}, - {file = "setuptools-75.2.0.tar.gz", hash = "sha256:753bb6ebf1f465a1912e19ed1d41f403a79173a9acf66a42e7e6aec45c3c16ec"}, + {file = "setuptools-75.5.0-py3-none-any.whl", hash = "sha256:87cb777c3b96d638ca02031192d40390e0ad97737e27b6b4fa831bea86f2f829"}, + {file = "setuptools-75.5.0.tar.gz", hash = "sha256:5c4ccb41111392671f02bb5f8436dfc5a9a7185e80500531b133f5775c4163ef"}, ] [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.5.2)"] -core = ["importlib-metadata (>=6)", "importlib-resources (>=5.10.2)", "jaraco.collections", "jaraco.functools", "jaraco.text (>=3.7)", "more-itertools", "more-itertools (>=8.8)", "packaging", "packaging (>=24)", "platformdirs (>=2.6.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.7.0)"] +core = ["importlib-metadata (>=6)", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more-itertools", "more-itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] enabler = ["pytest-enabler (>=2.2)"] -test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] -type = ["importlib-metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.11.*)", "pytest-mypy"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] +type = ["importlib-metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (>=1.12,<1.14)", "pytest-mypy"] [[package]] name = "six" @@ -4454,13 +4475,13 @@ files = [ [[package]] name = "snakeviz" -version = "2.2.0" +version = "2.2.2" description = "A web-based viewer for Python profiler output" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" files = [ - {file = "snakeviz-2.2.0-py2.py3-none-any.whl", hash = "sha256:569e2d71c47f80a886aa6e70d6405cb6d30aa3520969ad956b06f824c5f02b8e"}, - {file = "snakeviz-2.2.0.tar.gz", hash = "sha256:7bfd00be7ae147eb4a170a471578e1cd3f41f803238958b6b8efcf2c698a6aa9"}, + {file = "snakeviz-2.2.2-py3-none-any.whl", hash = "sha256:77e7b9c82f6152edc330040319b97612351cd9b48c706434c535c2df31d10ac5"}, + {file = "snakeviz-2.2.2.tar.gz", hash = "sha256:08028c6f8e34a032ff14757a38424770abb8662fb2818985aeea0d9bc13a7d83"}, ] [package.dependencies] @@ -4797,13 +4818,13 @@ typing = ["mypy (>=1.6,<2.0)", "traitlets (>=5.11.1)"] [[package]] name = "tinycss2" -version = "1.3.0" +version = "1.4.0" description = "A tiny CSS parser" optional = false python-versions = ">=3.8" files = [ - {file = "tinycss2-1.3.0-py3-none-any.whl", hash = "sha256:54a8dbdffb334d536851be0226030e9505965bb2f30f21a4a82c55fb2a80fae7"}, - {file = "tinycss2-1.3.0.tar.gz", hash = "sha256:152f9acabd296a8375fbca5b84c961ff95971fcfc32e79550c8df8e29118c54d"}, + {file = "tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289"}, + {file = "tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7"}, ] [package.dependencies] @@ -4815,13 +4836,13 @@ test = ["pytest", "ruff"] [[package]] name = "tomli" -version = "2.0.2" +version = "2.1.0" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" files = [ - {file = "tomli-2.0.2-py3-none-any.whl", hash = "sha256:2ebe24485c53d303f690b0ec092806a085f07af5a5aa1464f3931eec36caaa38"}, - {file = "tomli-2.0.2.tar.gz", hash = "sha256:d46d457a85337051c36524bc5349dd91b1877838e2979ac5ced3e710ed8a60ed"}, + {file = "tomli-2.1.0-py3-none-any.whl", hash = "sha256:a5c57c3d1c56f5ccdf89f6523458f60ef716e210fc47c4cfb188c5ba473e0391"}, + {file = "tomli-2.1.0.tar.gz", hash = "sha256:3f646cae2aec94e17d04973e4249548320197cfabdf130015d023de4b74d8ab8"}, ] [[package]] @@ -4857,13 +4878,13 @@ files = [ [[package]] name = "tqdm" -version = "4.66.5" +version = "4.67.0" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" files = [ - {file = "tqdm-4.66.5-py3-none-any.whl", hash = "sha256:90279a3770753eafc9194a0364852159802111925aa30eb3f9d85b0e805ac7cd"}, - {file = "tqdm-4.66.5.tar.gz", hash = "sha256:e1020aef2e5096702d8a025ac7d16b1577279c9d63f8375b63083e9a5f0fcbad"}, + {file = "tqdm-4.67.0-py3-none-any.whl", hash = "sha256:0cd8af9d56911acab92182e88d763100d4788bdf421d251616040cc4d44863be"}, + {file = "tqdm-4.67.0.tar.gz", hash = "sha256:fe5a6f95e6fe0b9755e9469b77b9c3cf850048224ecaa8293d7d2d31f97d869a"}, ] [package.dependencies] @@ -4871,6 +4892,7 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} [package.extras] dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] +discord = ["requests"] notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] @@ -4909,13 +4931,13 @@ test = ["numpy", "pandas", "pytest", "xarray"] [[package]] name = "typeguard" -version = "4.3.0" +version = "4.4.1" description = "Run-time type checker for Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "typeguard-4.3.0-py3-none-any.whl", hash = "sha256:4d24c5b39a117f8a895b9da7a9b3114f04eb63bade45a4492de49b175b6f7dfa"}, - {file = "typeguard-4.3.0.tar.gz", hash = "sha256:92ee6a0aec9135181eae6067ebd617fd9de8d75d714fb548728a4933b1dea651"}, + {file = "typeguard-4.4.1-py3-none-any.whl", hash = "sha256:9324ec07a27ec67fc54a9c063020ca4c0ae6abad5e9f0f9804ca59aee68c6e21"}, + {file = "typeguard-4.4.1.tar.gz", hash = "sha256:0d22a89d00b453b47c49875f42b6601b961757541a2e1e0ef517b6e24213c21b"}, ] [package.dependencies] @@ -5002,13 +5024,13 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "virtualenv" -version = "20.27.0" +version = "20.27.1" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.8" files = [ - {file = "virtualenv-20.27.0-py3-none-any.whl", hash = "sha256:44a72c29cceb0ee08f300b314848c86e57bf8d1f13107a5e671fb9274138d655"}, - {file = "virtualenv-20.27.0.tar.gz", hash = "sha256:2ca56a68ed615b8fe4326d11a0dca5dfbe8fd68510fb6c6349163bed3c15f2b2"}, + {file = "virtualenv-20.27.1-py3-none-any.whl", hash = "sha256:f11f1b8a29525562925f745563bfd48b189450f61fb34c4f9cc79dd5aa32a1f4"}, + {file = "virtualenv-20.27.1.tar.gz", hash = "sha256:142c6be10212543b32c6c45d3d3893dff89112cc588b7d0879ae5a1ec03a47ba"}, ] [package.dependencies] @@ -5033,19 +5055,15 @@ files = [ [[package]] name = "webcolors" -version = "24.8.0" +version = "24.11.1" description = "A library for working with the color formats defined by HTML and CSS." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "webcolors-24.8.0-py3-none-any.whl", hash = "sha256:fc4c3b59358ada164552084a8ebee637c221e4059267d0f8325b3b560f6c7f0a"}, - {file = "webcolors-24.8.0.tar.gz", hash = "sha256:08b07af286a01bcd30d583a7acadf629583d1f79bfef27dd2c2c5c263817277d"}, + {file = "webcolors-24.11.1-py3-none-any.whl", hash = "sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9"}, + {file = "webcolors-24.11.1.tar.gz", hash = "sha256:ecb3d768f32202af770477b8b65f318fa4f566c22948673a977b00d589dd80f6"}, ] -[package.extras] -docs = ["furo", "sphinx", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-notfound-page", "sphinxext-opengraph"] -tests = ["coverage[toml]"] - [[package]] name = "webencodings" version = "0.5.1" @@ -5075,13 +5093,13 @@ test = ["websockets"] [[package]] name = "werkzeug" -version = "3.0.4" +version = "3.0.6" description = "The comprehensive WSGI web application library." optional = false python-versions = ">=3.8" files = [ - {file = "werkzeug-3.0.4-py3-none-any.whl", hash = "sha256:02c9eb92b7d6c06f31a782811505d2157837cea66aaede3e217c7c27c039476c"}, - {file = "werkzeug-3.0.4.tar.gz", hash = "sha256:34f2371506b250df4d4f84bfe7b0921e4762525762bbd936614909fe25cd7306"}, + {file = "werkzeug-3.0.6-py3-none-any.whl", hash = "sha256:1bc0c2310d2fbb07b1dd1105eba2f7af72f322e1e455f2f93c993bee8c8a5f17"}, + {file = "werkzeug-3.0.6.tar.gz", hash = "sha256:a8dd59d4de28ca70471a34cba79bed5f7ef2e036a76b3ab0835474246eb41f8d"}, ] [package.dependencies] @@ -5103,13 +5121,13 @@ files = [ [[package]] name = "xarray" -version = "2024.9.0" +version = "2024.10.0" description = "N-D labeled arrays and datasets in Python" optional = false python-versions = ">=3.10" files = [ - {file = "xarray-2024.9.0-py3-none-any.whl", hash = "sha256:4fd534abdf12d5fa75dd566c56483d5081f77864462cf3d6ad53e13f9db48222"}, - {file = "xarray-2024.9.0.tar.gz", hash = "sha256:e796a6b3eaec11da24f33e4bb14af41897011660a0516fa4037d3ae4bbd1d378"}, + {file = "xarray-2024.10.0-py3-none-any.whl", hash = "sha256:ae1d38cb44a0324dfb61e492394158ae22389bf7de9f3c174309c17376df63a0"}, + {file = "xarray-2024.10.0.tar.gz", hash = "sha256:e369e2bac430e418c2448e5b96f07da4635f98c1319aa23cfeb3fbcb9a01d2e0"}, ] [package.dependencies] @@ -5118,12 +5136,13 @@ packaging = ">=23.1" pandas = ">=2.1" [package.extras] -accel = ["bottleneck", "flox", "numbagg", "opt-einsum", "scipy"] -complete = ["xarray[accel,dev,io,parallel,viz]"] -dev = ["hypothesis", "mypy", "pre-commit", "pytest", "pytest-cov", "pytest-env", "pytest-timeout", "pytest-xdist", "ruff", "xarray[complete]"] +accel = ["bottleneck", "flox", "numba (>=0.54)", "numbagg", "opt-einsum", "scipy"] +complete = ["xarray[accel,etc,io,parallel,viz]"] +dev = ["hypothesis", "mypy", "pre-commit", "pytest", "pytest-cov", "pytest-env", "pytest-timeout", "pytest-xdist", "ruff", "sphinx", "sphinx-autosummary-accessors", "xarray[complete]"] +etc = ["sparse"] io = ["cftime", "fsspec", "h5netcdf", "netCDF4", "pooch", "pydap", "scipy", "zarr"] parallel = ["dask[complete]"] -viz = ["matplotlib", "nc-time-axis", "seaborn"] +viz = ["cartopy", "matplotlib", "nc-time-axis", "seaborn"] [[package]] name = "xyzservices" @@ -5138,93 +5157,93 @@ files = [ [[package]] name = "yarl" -version = "1.16.0" +version = "1.17.2" description = "Yet another URL library" optional = false python-versions = ">=3.9" files = [ - {file = "yarl-1.16.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:32468f41242d72b87ab793a86d92f885355bcf35b3355aa650bfa846a5c60058"}, - {file = "yarl-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:234f3a3032b505b90e65b5bc6652c2329ea7ea8855d8de61e1642b74b4ee65d2"}, - {file = "yarl-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8a0296040e5cddf074c7f5af4a60f3fc42c0237440df7bcf5183be5f6c802ed5"}, - {file = "yarl-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de6c14dd7c7c0badba48157474ea1f03ebee991530ba742d381b28d4f314d6f3"}, - {file = "yarl-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b140e532fe0266003c936d017c1ac301e72ee4a3fd51784574c05f53718a55d8"}, - {file = "yarl-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:019f5d58093402aa8f6661e60fd82a28746ad6d156f6c5336a70a39bd7b162b9"}, - {file = "yarl-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c42998fd1cbeb53cd985bff0e4bc25fbe55fd6eb3a545a724c1012d69d5ec84"}, - {file = "yarl-1.16.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c7c30fb38c300fe8140df30a046a01769105e4cf4282567a29b5cdb635b66c4"}, - {file = "yarl-1.16.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e49e0fd86c295e743fd5be69b8b0712f70a686bc79a16e5268386c2defacaade"}, - {file = "yarl-1.16.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:b9ca7b9147eb1365c8bab03c003baa1300599575effad765e0b07dd3501ea9af"}, - {file = "yarl-1.16.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:27e11db3f1e6a51081a981509f75617b09810529de508a181319193d320bc5c7"}, - {file = "yarl-1.16.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8994c42f4ca25df5380ddf59f315c518c81df6a68fed5bb0c159c6cb6b92f120"}, - {file = "yarl-1.16.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:542fa8e09a581bcdcbb30607c7224beff3fdfb598c798ccd28a8184ffc18b7eb"}, - {file = "yarl-1.16.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2bd6a51010c7284d191b79d3b56e51a87d8e1c03b0902362945f15c3d50ed46b"}, - {file = "yarl-1.16.0-cp310-cp310-win32.whl", hash = "sha256:178ccb856e265174a79f59721031060f885aca428983e75c06f78aa24b91d929"}, - {file = "yarl-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:fe8bba2545427418efc1929c5c42852bdb4143eb8d0a46b09de88d1fe99258e7"}, - {file = "yarl-1.16.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d8643975a0080f361639787415a038bfc32d29208a4bf6b783ab3075a20b1ef3"}, - {file = "yarl-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:676d96bafc8c2d0039cea0cd3fd44cee7aa88b8185551a2bb93354668e8315c2"}, - {file = "yarl-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d9525f03269e64310416dbe6c68d3b23e5d34aaa8f47193a1c45ac568cecbc49"}, - {file = "yarl-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b37d5ec034e668b22cf0ce1074d6c21fd2a08b90d11b1b73139b750a8b0dd97"}, - {file = "yarl-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4f32c4cb7386b41936894685f6e093c8dfaf0960124d91fe0ec29fe439e201d0"}, - {file = "yarl-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5b8e265a0545637492a7e12fd7038370d66c9375a61d88c5567d0e044ded9202"}, - {file = "yarl-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:789a3423f28a5fff46fbd04e339863c169ece97c827b44de16e1a7a42bc915d2"}, - {file = "yarl-1.16.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1d1f45e3e8d37c804dca99ab3cf4ab3ed2e7a62cd82542924b14c0a4f46d243"}, - {file = "yarl-1.16.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:621280719c4c5dad4c1391160a9b88925bb8b0ff6a7d5af3224643024871675f"}, - {file = "yarl-1.16.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:ed097b26f18a1f5ff05f661dc36528c5f6735ba4ce8c9645e83b064665131349"}, - {file = "yarl-1.16.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:2f1fe2b2e3ee418862f5ebc0c0083c97f6f6625781382f828f6d4e9b614eba9b"}, - {file = "yarl-1.16.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:87dd10bc0618991c66cee0cc65fa74a45f4ecb13bceec3c62d78ad2e42b27a16"}, - {file = "yarl-1.16.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:4199db024b58a8abb2cfcedac7b1292c3ad421684571aeb622a02f242280e8d6"}, - {file = "yarl-1.16.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:99a9dcd4b71dd5f5f949737ab3f356cfc058c709b4f49833aeffedc2652dac56"}, - {file = "yarl-1.16.0-cp311-cp311-win32.whl", hash = "sha256:a9394c65ae0ed95679717d391c862dece9afacd8fa311683fc8b4362ce8a410c"}, - {file = "yarl-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:5b9101f528ae0f8f65ac9d64dda2bb0627de8a50344b2f582779f32fda747c1d"}, - {file = "yarl-1.16.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:4ffb7c129707dd76ced0a4a4128ff452cecf0b0e929f2668ea05a371d9e5c104"}, - {file = "yarl-1.16.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:1a5e9d8ce1185723419c487758d81ac2bde693711947032cce600ca7c9cda7d6"}, - {file = "yarl-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d743e3118b2640cef7768ea955378c3536482d95550222f908f392167fe62059"}, - {file = "yarl-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26768342f256e6e3c37533bf9433f5f15f3e59e3c14b2409098291b3efaceacb"}, - {file = "yarl-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d1b0796168b953bca6600c5f97f5ed407479889a36ad7d17183366260f29a6b9"}, - {file = "yarl-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:858728086914f3a407aa7979cab743bbda1fe2bdf39ffcd991469a370dd7414d"}, - {file = "yarl-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5570e6d47bcb03215baf4c9ad7bf7c013e56285d9d35013541f9ac2b372593e7"}, - {file = "yarl-1.16.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:66ea8311422a7ba1fc79b4c42c2baa10566469fe5a78500d4e7754d6e6db8724"}, - {file = "yarl-1.16.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:649bddcedee692ee8a9b7b6e38582cb4062dc4253de9711568e5620d8707c2a3"}, - {file = "yarl-1.16.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:3a91654adb7643cb21b46f04244c5a315a440dcad63213033826549fa2435f71"}, - {file = "yarl-1.16.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b439cae82034ade094526a8f692b9a2b5ee936452de5e4c5f0f6c48df23f8604"}, - {file = "yarl-1.16.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:571f781ae8ac463ce30bacebfaef2c6581543776d5970b2372fbe31d7bf31a07"}, - {file = "yarl-1.16.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:aa7943f04f36d6cafc0cf53ea89824ac2c37acbdb4b316a654176ab8ffd0f968"}, - {file = "yarl-1.16.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1a5cf32539373ff39d97723e39a9283a7277cbf1224f7aef0c56c9598b6486c3"}, - {file = "yarl-1.16.0-cp312-cp312-win32.whl", hash = "sha256:a5b6c09b9b4253d6a208b0f4a2f9206e511ec68dce9198e0fbec4f160137aa67"}, - {file = "yarl-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:1208ca14eed2fda324042adf8d6c0adf4a31522fa95e0929027cd487875f0240"}, - {file = "yarl-1.16.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a5ace0177520bd4caa99295a9b6fb831d0e9a57d8e0501a22ffaa61b4c024283"}, - {file = "yarl-1.16.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7118bdb5e3ed81acaa2095cba7ec02a0fe74b52a16ab9f9ac8e28e53ee299732"}, - {file = "yarl-1.16.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:38fec8a2a94c58bd47c9a50a45d321ab2285ad133adefbbadf3012c054b7e656"}, - {file = "yarl-1.16.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8791d66d81ee45866a7bb15a517b01a2bcf583a18ebf5d72a84e6064c417e64b"}, - {file = "yarl-1.16.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1cf936ba67bc6c734f3aa1c01391da74ab7fc046a9f8bbfa230b8393b90cf472"}, - {file = "yarl-1.16.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d1aab176dd55b59f77a63b27cffaca67d29987d91a5b615cbead41331e6b7428"}, - {file = "yarl-1.16.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:995d0759004c08abd5d1b81300a91d18c8577c6389300bed1c7c11675105a44d"}, - {file = "yarl-1.16.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1bc22e00edeb068f71967ab99081e9406cd56dbed864fc3a8259442999d71552"}, - {file = "yarl-1.16.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:35b4f7842154176523e0a63c9b871168c69b98065d05a4f637fce342a6a2693a"}, - {file = "yarl-1.16.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:7ace71c4b7a0c41f317ae24be62bb61e9d80838d38acb20e70697c625e71f120"}, - {file = "yarl-1.16.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:8f639e3f5795a6568aa4f7d2ac6057c757dcd187593679f035adbf12b892bb00"}, - {file = "yarl-1.16.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:e8be3aff14f0120ad049121322b107f8a759be76a6a62138322d4c8a337a9e2c"}, - {file = "yarl-1.16.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:122d8e7986043d0549e9eb23c7fd23be078be4b70c9eb42a20052b3d3149c6f2"}, - {file = "yarl-1.16.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0fd9c227990f609c165f56b46107d0bc34553fe0387818c42c02f77974402c36"}, - {file = "yarl-1.16.0-cp313-cp313-win32.whl", hash = "sha256:595ca5e943baed31d56b33b34736461a371c6ea0038d3baec399949dd628560b"}, - {file = "yarl-1.16.0-cp313-cp313-win_amd64.whl", hash = "sha256:921b81b8d78f0e60242fb3db615ea3f368827a76af095d5a69f1c3366db3f596"}, - {file = "yarl-1.16.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ab2b2ac232110a1fdb0d3ffcd087783edd3d4a6ced432a1bf75caf7b7be70916"}, - {file = "yarl-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7f8713717a09acbfee7c47bfc5777e685539fefdd34fa72faf504c8be2f3df4e"}, - {file = "yarl-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cdcffe1dbcb4477d2b4202f63cd972d5baa155ff5a3d9e35801c46a415b7f71a"}, - {file = "yarl-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a91217208306d82357c67daeef5162a41a28c8352dab7e16daa82e3718852a7"}, - {file = "yarl-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3ab3ed42c78275477ea8e917491365e9a9b69bb615cb46169020bd0aa5e2d6d3"}, - {file = "yarl-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:707ae579ccb3262dfaef093e202b4c3fb23c3810e8df544b1111bd2401fd7b09"}, - {file = "yarl-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad7a852d1cd0b8d8b37fc9d7f8581152add917a98cfe2ea6e241878795f917ae"}, - {file = "yarl-1.16.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3f1cc3d3d4dc574bebc9b387f6875e228ace5748a7c24f49d8f01ac1bc6c31b"}, - {file = "yarl-1.16.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5ff96da263740779b0893d02b718293cc03400c3a208fc8d8cd79d9b0993e532"}, - {file = "yarl-1.16.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:3d375a19ba2bfe320b6d873f3fb165313b002cef8b7cc0a368ad8b8a57453837"}, - {file = "yarl-1.16.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:62c7da0ad93a07da048b500514ca47b759459ec41924143e2ddb5d7e20fd3db5"}, - {file = "yarl-1.16.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:147b0fcd0ee33b4b5f6edfea80452d80e419e51b9a3f7a96ce98eaee145c1581"}, - {file = "yarl-1.16.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:504e1fe1cc4f170195320eb033d2b0ccf5c6114ce5bf2f617535c01699479bca"}, - {file = "yarl-1.16.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:bdcf667a5dec12a48f669e485d70c54189f0639c2157b538a4cffd24a853624f"}, - {file = "yarl-1.16.0-cp39-cp39-win32.whl", hash = "sha256:e9951afe6557c75a71045148890052cb942689ee4c9ec29f5436240e1fcc73b7"}, - {file = "yarl-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:7d7aaa8ff95d0840e289423e7dc35696c2b058d635f945bf05b5cd633146b027"}, - {file = "yarl-1.16.0-py3-none-any.whl", hash = "sha256:e6980a558d8461230c457218bd6c92dfc1d10205548215c2c21d79dc8d0a96f3"}, - {file = "yarl-1.16.0.tar.gz", hash = "sha256:b6f687ced5510a9a2474bbae96a4352e5ace5fa34dc44a217b0537fec1db00b4"}, + {file = "yarl-1.17.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:93771146ef048b34201bfa382c2bf74c524980870bb278e6df515efaf93699ff"}, + {file = "yarl-1.17.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8281db240a1616af2f9c5f71d355057e73a1409c4648c8949901396dc0a3c151"}, + {file = "yarl-1.17.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:170ed4971bf9058582b01a8338605f4d8c849bd88834061e60e83b52d0c76870"}, + {file = "yarl-1.17.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc61b005f6521fcc00ca0d1243559a5850b9dd1e1fe07b891410ee8fe192d0c0"}, + {file = "yarl-1.17.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:871e1b47eec7b6df76b23c642a81db5dd6536cbef26b7e80e7c56c2fd371382e"}, + {file = "yarl-1.17.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3a58a2f2ca7aaf22b265388d40232f453f67a6def7355a840b98c2d547bd037f"}, + {file = "yarl-1.17.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:736bb076f7299c5c55dfef3eb9e96071a795cb08052822c2bb349b06f4cb2e0a"}, + {file = "yarl-1.17.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8fd51299e21da709eabcd5b2dd60e39090804431292daacbee8d3dabe39a6bc0"}, + {file = "yarl-1.17.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:358dc7ddf25e79e1cc8ee16d970c23faee84d532b873519c5036dbb858965795"}, + {file = "yarl-1.17.2-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:50d866f7b1a3f16f98603e095f24c0eeba25eb508c85a2c5939c8b3870ba2df8"}, + {file = "yarl-1.17.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:8b9c4643e7d843a0dca9cd9d610a0876e90a1b2cbc4c5ba7930a0d90baf6903f"}, + {file = "yarl-1.17.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d63123bfd0dce5f91101e77c8a5427c3872501acece8c90df457b486bc1acd47"}, + {file = "yarl-1.17.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:4e76381be3d8ff96a4e6c77815653063e87555981329cf8f85e5be5abf449021"}, + {file = "yarl-1.17.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:734144cd2bd633a1516948e477ff6c835041c0536cef1d5b9a823ae29899665b"}, + {file = "yarl-1.17.2-cp310-cp310-win32.whl", hash = "sha256:26bfb6226e0c157af5da16d2d62258f1ac578d2899130a50433ffee4a5dfa673"}, + {file = "yarl-1.17.2-cp310-cp310-win_amd64.whl", hash = "sha256:76499469dcc24759399accd85ec27f237d52dec300daaca46a5352fcbebb1071"}, + {file = "yarl-1.17.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:792155279dc093839e43f85ff7b9b6493a8eaa0af1f94f1f9c6e8f4de8c63500"}, + {file = "yarl-1.17.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:38bc4ed5cae853409cb193c87c86cd0bc8d3a70fd2268a9807217b9176093ac6"}, + {file = "yarl-1.17.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4a8c83f6fcdc327783bdc737e8e45b2e909b7bd108c4da1892d3bc59c04a6d84"}, + {file = "yarl-1.17.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c6d5fed96f0646bfdf698b0a1cebf32b8aae6892d1bec0c5d2d6e2df44e1e2d"}, + {file = "yarl-1.17.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:782ca9c58f5c491c7afa55518542b2b005caedaf4685ec814fadfcee51f02493"}, + {file = "yarl-1.17.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ff6af03cac0d1a4c3c19e5dcc4c05252411bf44ccaa2485e20d0a7c77892ab6e"}, + {file = "yarl-1.17.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a3f47930fbbed0f6377639503848134c4aa25426b08778d641491131351c2c8"}, + {file = "yarl-1.17.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d1fa68a3c921365c5745b4bd3af6221ae1f0ea1bf04b69e94eda60e57958907f"}, + {file = "yarl-1.17.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:187df91395c11e9f9dc69b38d12406df85aa5865f1766a47907b1cc9855b6303"}, + {file = "yarl-1.17.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:93d1c8cc5bf5df401015c5e2a3ce75a5254a9839e5039c881365d2a9dcfc6dc2"}, + {file = "yarl-1.17.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:11d86c6145ac5c706c53d484784cf504d7d10fa407cb73b9d20f09ff986059ef"}, + {file = "yarl-1.17.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c42774d1d1508ec48c3ed29e7b110e33f5e74a20957ea16197dbcce8be6b52ba"}, + {file = "yarl-1.17.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0c8e589379ef0407b10bed16cc26e7392ef8f86961a706ade0a22309a45414d7"}, + {file = "yarl-1.17.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1056cadd5e850a1c026f28e0704ab0a94daaa8f887ece8dfed30f88befb87bb0"}, + {file = "yarl-1.17.2-cp311-cp311-win32.whl", hash = "sha256:be4c7b1c49d9917c6e95258d3d07f43cfba2c69a6929816e77daf322aaba6628"}, + {file = "yarl-1.17.2-cp311-cp311-win_amd64.whl", hash = "sha256:ac8eda86cc75859093e9ce390d423aba968f50cf0e481e6c7d7d63f90bae5c9c"}, + {file = "yarl-1.17.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:dd90238d3a77a0e07d4d6ffdebc0c21a9787c5953a508a2231b5f191455f31e9"}, + {file = "yarl-1.17.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c74f0b0472ac40b04e6d28532f55cac8090e34c3e81f118d12843e6df14d0909"}, + {file = "yarl-1.17.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4d486ddcaca8c68455aa01cf53d28d413fb41a35afc9f6594a730c9779545876"}, + {file = "yarl-1.17.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25b7e93f5414b9a983e1a6c1820142c13e1782cc9ed354c25e933aebe97fcf2"}, + {file = "yarl-1.17.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3a0baff7827a632204060f48dca9e63fbd6a5a0b8790c1a2adfb25dc2c9c0d50"}, + {file = "yarl-1.17.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:460024cacfc3246cc4d9f47a7fc860e4fcea7d1dc651e1256510d8c3c9c7cde0"}, + {file = "yarl-1.17.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5870d620b23b956f72bafed6a0ba9a62edb5f2ef78a8849b7615bd9433384171"}, + {file = "yarl-1.17.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2941756754a10e799e5b87e2319bbec481ed0957421fba0e7b9fb1c11e40509f"}, + {file = "yarl-1.17.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9611b83810a74a46be88847e0ea616794c406dbcb4e25405e52bff8f4bee2d0a"}, + {file = "yarl-1.17.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:cd7e35818d2328b679a13268d9ea505c85cd773572ebb7a0da7ccbca77b6a52e"}, + {file = "yarl-1.17.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:6b981316fcd940f085f646b822c2ff2b8b813cbd61281acad229ea3cbaabeb6b"}, + {file = "yarl-1.17.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:688058e89f512fb7541cb85c2f149c292d3fa22f981d5a5453b40c5da49eb9e8"}, + {file = "yarl-1.17.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:56afb44a12b0864d17b597210d63a5b88915d680f6484d8d202ed68ade38673d"}, + {file = "yarl-1.17.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:17931dfbb84ae18b287279c1f92b76a3abcd9a49cd69b92e946035cff06bcd20"}, + {file = "yarl-1.17.2-cp312-cp312-win32.whl", hash = "sha256:ff8d95e06546c3a8c188f68040e9d0360feb67ba8498baf018918f669f7bc39b"}, + {file = "yarl-1.17.2-cp312-cp312-win_amd64.whl", hash = "sha256:4c840cc11163d3c01a9d8aad227683c48cd3e5be5a785921bcc2a8b4b758c4f3"}, + {file = "yarl-1.17.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:3294f787a437cb5d81846de3a6697f0c35ecff37a932d73b1fe62490bef69211"}, + {file = "yarl-1.17.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f1e7fedb09c059efee2533119666ca7e1a2610072076926fa028c2ba5dfeb78c"}, + {file = "yarl-1.17.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:da9d3061e61e5ae3f753654813bc1cd1c70e02fb72cf871bd6daf78443e9e2b1"}, + {file = "yarl-1.17.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91c012dceadc695ccf69301bfdccd1fc4472ad714fe2dd3c5ab4d2046afddf29"}, + {file = "yarl-1.17.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f11fd61d72d93ac23718d393d2a64469af40be2116b24da0a4ca6922df26807e"}, + {file = "yarl-1.17.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:46c465ad06971abcf46dd532f77560181387b4eea59084434bdff97524444032"}, + {file = "yarl-1.17.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef6eee1a61638d29cd7c85f7fd3ac7b22b4c0fabc8fd00a712b727a3e73b0685"}, + {file = "yarl-1.17.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4434b739a8a101a837caeaa0137e0e38cb4ea561f39cb8960f3b1e7f4967a3fc"}, + {file = "yarl-1.17.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:752485cbbb50c1e20908450ff4f94217acba9358ebdce0d8106510859d6eb19a"}, + {file = "yarl-1.17.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:17791acaa0c0f89323c57da7b9a79f2174e26d5debbc8c02d84ebd80c2b7bff8"}, + {file = "yarl-1.17.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5c6ea72fe619fee5e6b5d4040a451d45d8175f560b11b3d3e044cd24b2720526"}, + {file = "yarl-1.17.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:db5ac3871ed76340210fe028f535392f097fb31b875354bcb69162bba2632ef4"}, + {file = "yarl-1.17.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:7a1606ba68e311576bcb1672b2a1543417e7e0aa4c85e9e718ba6466952476c0"}, + {file = "yarl-1.17.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9bc27dd5cfdbe3dc7f381b05e6260ca6da41931a6e582267d5ca540270afeeb2"}, + {file = "yarl-1.17.2-cp313-cp313-win32.whl", hash = "sha256:52492b87d5877ec405542f43cd3da80bdcb2d0c2fbc73236526e5f2c28e6db28"}, + {file = "yarl-1.17.2-cp313-cp313-win_amd64.whl", hash = "sha256:8e1bf59e035534ba4077f5361d8d5d9194149f9ed4f823d1ee29ef3e8964ace3"}, + {file = "yarl-1.17.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c556fbc6820b6e2cda1ca675c5fa5589cf188f8da6b33e9fc05b002e603e44fa"}, + {file = "yarl-1.17.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f2f44a4247461965fed18b2573f3a9eb5e2c3cad225201ee858726cde610daca"}, + {file = "yarl-1.17.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3a3ede8c248f36b60227eb777eac1dbc2f1022dc4d741b177c4379ca8e75571a"}, + {file = "yarl-1.17.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2654caaf5584449d49c94a6b382b3cb4a246c090e72453493ea168b931206a4d"}, + {file = "yarl-1.17.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0d41c684f286ce41fa05ab6af70f32d6da1b6f0457459a56cf9e393c1c0b2217"}, + {file = "yarl-1.17.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2270d590997445a0dc29afa92e5534bfea76ba3aea026289e811bf9ed4b65a7f"}, + {file = "yarl-1.17.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18662443c6c3707e2fc7fad184b4dc32dd428710bbe72e1bce7fe1988d4aa654"}, + {file = "yarl-1.17.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:75ac158560dec3ed72f6d604c81090ec44529cfb8169b05ae6fcb3e986b325d9"}, + {file = "yarl-1.17.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1fee66b32e79264f428dc8da18396ad59cc48eef3c9c13844adec890cd339db5"}, + {file = "yarl-1.17.2-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:585ce7cd97be8f538345de47b279b879e091c8b86d9dbc6d98a96a7ad78876a3"}, + {file = "yarl-1.17.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:c019abc2eca67dfa4d8fb72ba924871d764ec3c92b86d5b53b405ad3d6aa56b0"}, + {file = "yarl-1.17.2-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c6e659b9a24d145e271c2faf3fa6dd1fcb3e5d3f4e17273d9e0350b6ab0fe6e2"}, + {file = "yarl-1.17.2-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:d17832ba39374134c10e82d137e372b5f7478c4cceeb19d02ae3e3d1daed8721"}, + {file = "yarl-1.17.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:bc3003710e335e3f842ae3fd78efa55f11a863a89a72e9a07da214db3bf7e1f8"}, + {file = "yarl-1.17.2-cp39-cp39-win32.whl", hash = "sha256:f5ffc6b7ace5b22d9e73b2a4c7305740a339fbd55301d52735f73e21d9eb3130"}, + {file = "yarl-1.17.2-cp39-cp39-win_amd64.whl", hash = "sha256:48e424347a45568413deec6f6ee2d720de2cc0385019bedf44cd93e8638aa0ed"}, + {file = "yarl-1.17.2-py3-none-any.whl", hash = "sha256:dd7abf4f717e33b7487121faf23560b3a50924f80e4bef62b22dab441ded8f3b"}, + {file = "yarl-1.17.2.tar.gz", hash = "sha256:753eaaa0c7195244c84b5cc159dc8204b7fd99f716f11198f999f2332a86b178"}, ] [package.dependencies] @@ -5280,13 +5299,13 @@ files = [ [[package]] name = "zipp" -version = "3.20.2" +version = "3.21.0" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "zipp-3.20.2-py3-none-any.whl", hash = "sha256:a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350"}, - {file = "zipp-3.20.2.tar.gz", hash = "sha256:bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29"}, + {file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"}, + {file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"}, ] [package.extras] @@ -5303,4 +5322,4 @@ dev = ["jupyterlab", "memory-profiler", "mypy", "notebook", "pandas-stubs", "pre [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.13" -content-hash = "d2d33a028a613bfce864b94eb4613944e4d640214e77b45d1ced83ddebb0ffe7" +content-hash = "91f11922fd7ceab43591ab19b88894cc233f398c3410bdce0de4dfaa41b6ae15" From 643534e7642a9cfaade66bb8bf13bc108c255996 Mon Sep 17 00:00:00 2001 From: Alistair Miles Date: Tue, 19 Nov 2024 12:40:14 +0000 Subject: [PATCH 26/42] fix relative import --- malariagen_data/anoph/to_plink.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/malariagen_data/anoph/to_plink.py b/malariagen_data/anoph/to_plink.py index a1bffac2b..86801521d 100644 --- a/malariagen_data/anoph/to_plink.py +++ b/malariagen_data/anoph/to_plink.py @@ -5,7 +5,7 @@ import os import bed_reader -from util import dask_compress_dataset +from ..util import dask_compress_dataset from .snp_data import AnophelesSnpData from . import base_params from . import pca_params From 8c6dec0a0918248d8c862a1423af71b1eb80260d Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Wed, 20 Nov 2024 11:16:35 +1000 Subject: [PATCH 27/42] fix test plink converter notebook and run tests --- tests/anoph/test_plink_converter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/anoph/test_plink_converter.py b/tests/anoph/test_plink_converter.py index 0ad90de26..81a1bf42c 100644 --- a/tests/anoph/test_plink_converter.py +++ b/tests/anoph/test_plink_converter.py @@ -99,7 +99,7 @@ def test_plink_converter(fixture, api: PlinkConverter, tmp_path): n_snps = random.randint(1, n_snps_available) # Define plink params. - plink_params = dict(results_dir=tmp_path, n_snps=n_snps, **data_params) + plink_params = dict(output_dir=tmp_path, n_snps=n_snps, **data_params) # Make the plink files. api.biallelic_snps_to_plink(**plink_params) From 7d102812d15577d49f7d108fe9dd08c3961dbeff Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Thu, 21 Nov 2024 06:59:21 +1000 Subject: [PATCH 28/42] update notebook to fix output dir and relative output path --- notebooks/plink_convert.ipynb | 97 +++-------------------------------- 1 file changed, 6 insertions(+), 91 deletions(-) diff --git a/notebooks/plink_convert.ipynb b/notebooks/plink_convert.ipynb index e4c75a525..305409f2f 100644 --- a/notebooks/plink_convert.ipynb +++ b/notebooks/plink_convert.ipynb @@ -2,113 +2,28 @@ "cells": [ { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [ { "data": { - "application/javascript": "(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\nconst JS_MIME_TYPE = 'application/javascript';\n const HTML_MIME_TYPE = 'text/html';\n const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n const CLASS_NAME = 'output_bokeh rendered_html';\n\n /**\n * Render data to the DOM node\n */\n function render(props, node) {\n const script = document.createElement(\"script\");\n node.appendChild(script);\n }\n\n /**\n * Handle when an output is cleared or removed\n */\n function handleClearOutput(event, handle) {\n const cell = handle.cell;\n\n const id = cell.output_area._bokeh_element_id;\n const server_id = cell.output_area._bokeh_server_id;\n // Clean up Bokeh references\n if (id != null && id in Bokeh.index) {\n Bokeh.index[id].model.document.clear();\n delete Bokeh.index[id];\n }\n\n if (server_id !== undefined) {\n // Clean up Bokeh references\n const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n cell.notebook.kernel.execute(cmd_clean, {\n iopub: {\n output: function(msg) {\n const id = msg.content.text.trim();\n if (id in Bokeh.index) {\n Bokeh.index[id].model.document.clear();\n delete Bokeh.index[id];\n }\n }\n }\n });\n // Destroy server and session\n const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n cell.notebook.kernel.execute(cmd_destroy);\n }\n }\n\n /**\n * Handle when a new output is added\n */\n function handleAddOutput(event, handle) {\n const output_area = handle.output_area;\n const output = handle.output;\n\n // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n return\n }\n\n const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n\n if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n // store reference to embed id on output_area\n output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n }\n if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n const bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n const script_attrs = bk_div.children[0].attributes;\n for (let i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n }\n\n function register_renderer(events, OutputArea) {\n\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n const toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[toinsert.length - 1]);\n element.append(toinsert);\n return toinsert\n }\n\n /* Handle when an output is cleared or removed */\n events.on('clear_output.CodeCell', handleClearOutput);\n events.on('delete.Cell', handleClearOutput);\n\n /* Handle when a new output is added */\n events.on('output_added.OutputArea', handleAddOutput);\n\n /**\n * Register the mime type and append_mime function with output_area\n */\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n /* Is output safe? */\n safe: true,\n /* Index of renderer in `output_area.display_order` */\n index: 0\n });\n }\n\n // register the mime type if in Jupyter Notebook environment and previously unregistered\n if (root.Jupyter !== undefined) {\n const events = require('base/js/events');\n const OutputArea = require('notebook/js/outputarea').OutputArea;\n\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n }\n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"

      \\n\"+\n \"

      \\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

      \\n\"+\n \"
        \\n\"+\n \"
      • re-rerun `output_notebook()` to attempt to load from CDN again, or
      • \\n\"+\n \"
      • use INLINE resources instead, as so:
      • \\n\"+\n \"
      \\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
      \"}};\n\n function display_loaded() {\n const el = document.getElementById(null);\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.1.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.1.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.1.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.1.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-3.1.1.min.js\"];\n const css_urls = [];\n\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {\n }\n ];\n\n function run_inline_js() {\n if (root.Bokeh !== undefined || force === true) {\n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(null)).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));", + "application/javascript": "'use strict';\n(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\nconst JS_MIME_TYPE = 'application/javascript';\n const HTML_MIME_TYPE = 'text/html';\n const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n const CLASS_NAME = 'output_bokeh rendered_html';\n\n /**\n * Render data to the DOM node\n */\n function render(props, node) {\n const script = document.createElement(\"script\");\n node.appendChild(script);\n }\n\n /**\n * Handle when an output is cleared or removed\n */\n function handleClearOutput(event, handle) {\n function drop(id) {\n const view = Bokeh.index.get_by_id(id)\n if (view != null) {\n view.model.document.clear()\n Bokeh.index.delete(view)\n }\n }\n\n const cell = handle.cell;\n\n const id = cell.output_area._bokeh_element_id;\n const server_id = cell.output_area._bokeh_server_id;\n\n // Clean up Bokeh references\n if (id != null) {\n drop(id)\n }\n\n if (server_id !== undefined) {\n // Clean up Bokeh references\n const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n cell.notebook.kernel.execute(cmd_clean, {\n iopub: {\n output: function(msg) {\n const id = msg.content.text.trim()\n drop(id)\n }\n }\n });\n // Destroy server and session\n const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n cell.notebook.kernel.execute(cmd_destroy);\n }\n }\n\n /**\n * Handle when a new output is added\n */\n function handleAddOutput(event, handle) {\n const output_area = handle.output_area;\n const output = handle.output;\n\n // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n return\n }\n\n const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n\n if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n // store reference to embed id on output_area\n output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n }\n if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n const bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n const script_attrs = bk_div.children[0].attributes;\n for (let i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n }\n\n function register_renderer(events, OutputArea) {\n\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n const toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[toinsert.length - 1]);\n element.append(toinsert);\n return toinsert\n }\n\n /* Handle when an output is cleared or removed */\n events.on('clear_output.CodeCell', handleClearOutput);\n events.on('delete.Cell', handleClearOutput);\n\n /* Handle when a new output is added */\n events.on('output_added.OutputArea', handleAddOutput);\n\n /**\n * Register the mime type and append_mime function with output_area\n */\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n /* Is output safe? */\n safe: true,\n /* Index of renderer in `output_area.display_order` */\n index: 0\n });\n }\n\n // register the mime type if in Jupyter Notebook environment and previously unregistered\n if (root.Jupyter !== undefined) {\n const events = require('base/js/events');\n const OutputArea = require('notebook/js/outputarea').OutputArea;\n\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n }\n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"
      \\n\"+\n \"

      \\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

      \\n\"+\n \"
        \\n\"+\n \"
      • re-rerun `output_notebook()` to attempt to load from CDN again, or
      • \\n\"+\n \"
      • use INLINE resources instead, as so:
      • \\n\"+\n \"
      \\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
      \"}};\n\n function display_loaded(error = null) {\n const el = document.getElementById(null);\n if (el != null) {\n const html = (() => {\n if (typeof root.Bokeh === \"undefined\") {\n if (error == null) {\n return \"BokehJS is loading ...\";\n } else {\n return \"BokehJS failed to load.\";\n }\n } else {\n const prefix = `BokehJS ${root.Bokeh.version}`;\n if (error == null) {\n return `${prefix} successfully loaded.`;\n } else {\n return `${prefix} encountered errors while loading and may not function as expected.`;\n }\n }\n })();\n el.innerHTML = html;\n\n if (error != null) {\n const wrapper = document.createElement(\"div\");\n wrapper.style.overflow = \"auto\";\n wrapper.style.height = \"5em\";\n wrapper.style.resize = \"vertical\";\n const content = document.createElement(\"div\");\n content.style.fontFamily = \"monospace\";\n content.style.whiteSpace = \"pre-wrap\";\n content.style.backgroundColor = \"rgb(255, 221, 221)\";\n content.textContent = error.stack ?? error.toString();\n wrapper.append(content);\n el.append(wrapper);\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(() => display_loaded(error), 100);\n }\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.5.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.5.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.5.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.5.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-3.5.2.min.js\"];\n const css_urls = [];\n\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {\n }\n ];\n\n function run_inline_js() {\n if (root.Bokeh !== undefined || force === true) {\n try {\n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n\n } catch (error) {throw error;\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(null)).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));", "application/vnd.bokehjs_load.v0+json": "" }, "metadata": {}, "output_type": "display_data" - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "_request non-retriable exception: Anonymous caller does not have storage.objects.list access to the Google Cloud Storage bucket. Permission 'storage.objects.list' denied on resource (or it may not exist)., 401\n", - "Traceback (most recent call last):\n", - " File \"/Users/dennistpw/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/retry.py\", line 123, in retry_request\n", - " return await func(*args, **kwargs)\n", - " File \"/Users/dennistpw/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/core.py\", line 430, in _request\n", - " validate_response(status, contents, path, args)\n", - " File \"/Users/dennistpw/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/retry.py\", line 110, in validate_response\n", - " raise HttpError(error)\n", - "gcsfs.retry.HttpError: Anonymous caller does not have storage.objects.list access to the Google Cloud Storage bucket. Permission 'storage.objects.list' denied on resource (or it may not exist)., 401\n" - ] - }, - { - "ename": "HttpError", - "evalue": "Anonymous caller does not have storage.objects.list access to the Google Cloud Storage bucket. Permission 'storage.objects.list' denied on resource (or it may not exist)., 401", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mHttpError\u001b[0m Traceback (most recent call last)", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/IPython/core/formatters.py:708\u001b[0m, in \u001b[0;36mPlainTextFormatter.__call__\u001b[0;34m(self, obj)\u001b[0m\n\u001b[1;32m 701\u001b[0m stream \u001b[38;5;241m=\u001b[39m StringIO()\n\u001b[1;32m 702\u001b[0m printer \u001b[38;5;241m=\u001b[39m pretty\u001b[38;5;241m.\u001b[39mRepresentationPrinter(stream, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mverbose,\n\u001b[1;32m 703\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmax_width, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mnewline,\n\u001b[1;32m 704\u001b[0m max_seq_length\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmax_seq_length,\n\u001b[1;32m 705\u001b[0m singleton_pprinters\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msingleton_printers,\n\u001b[1;32m 706\u001b[0m type_pprinters\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtype_printers,\n\u001b[1;32m 707\u001b[0m deferred_pprinters\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdeferred_printers)\n\u001b[0;32m--> 708\u001b[0m \u001b[43mprinter\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpretty\u001b[49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 709\u001b[0m printer\u001b[38;5;241m.\u001b[39mflush()\n\u001b[1;32m 710\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m stream\u001b[38;5;241m.\u001b[39mgetvalue()\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/IPython/lib/pretty.py:410\u001b[0m, in \u001b[0;36mRepresentationPrinter.pretty\u001b[0;34m(self, obj)\u001b[0m\n\u001b[1;32m 407\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m meth(obj, \u001b[38;5;28mself\u001b[39m, cycle)\n\u001b[1;32m 408\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mcls\u001b[39m \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mobject\u001b[39m \\\n\u001b[1;32m 409\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mcallable\u001b[39m(\u001b[38;5;28mcls\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__dict__\u001b[39m\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m__repr__\u001b[39m\u001b[38;5;124m'\u001b[39m)):\n\u001b[0;32m--> 410\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_repr_pprint\u001b[49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcycle\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 412\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m _default_pprint(obj, \u001b[38;5;28mself\u001b[39m, cycle)\n\u001b[1;32m 413\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/IPython/lib/pretty.py:778\u001b[0m, in \u001b[0;36m_repr_pprint\u001b[0;34m(obj, p, cycle)\u001b[0m\n\u001b[1;32m 776\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"A pprint that just redirects to the normal repr function.\"\"\"\u001b[39;00m\n\u001b[1;32m 777\u001b[0m \u001b[38;5;66;03m# Find newlines and replace them with p.break_()\u001b[39;00m\n\u001b[0;32m--> 778\u001b[0m output \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mrepr\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 779\u001b[0m lines \u001b[38;5;241m=\u001b[39m output\u001b[38;5;241m.\u001b[39msplitlines()\n\u001b[1;32m 780\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m p\u001b[38;5;241m.\u001b[39mgroup():\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/malariagen_data/ag3.py:206\u001b[0m, in \u001b[0;36mAg3.__repr__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 204\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__repr__\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m 205\u001b[0m text \u001b[38;5;241m=\u001b[39m (\n\u001b[0;32m--> 206\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 207\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mStorage URL : \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_url\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 208\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mData releases available : \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m, \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;241m.\u001b[39mjoin(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mreleases)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 209\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mResults cache : \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_results_cache\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 210\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCohorts analysis : \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cohorts_analysis\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 211\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mAIM analysis : \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_aim_analysis\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 212\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mSite filters analysis : \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_site_filters_analysis\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 213\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mSoftware version : malariagen_data \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mmalariagen_data\u001b[38;5;241m.\u001b[39m__version__\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 214\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mClient location : \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mclient_location\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 215\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m---\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 216\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mPlease note that data are subject to terms of use,\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 217\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mfor more information see https://www.malariagen.net/data\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 218\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mor contact data@malariagen.net. For API documentation see \u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 219\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhttps://malariagen.github.io/malariagen-data-python/v\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mmalariagen_data\u001b[38;5;241m.\u001b[39m__version__\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m/Ag3.html\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 220\u001b[0m )\n\u001b[1;32m 221\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m text\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/malariagen_data/anoph/base.py:272\u001b[0m, in \u001b[0;36mAnophelesBase.releases\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 270\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cache_releases \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 271\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_pre:\n\u001b[0;32m--> 272\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cache_releases \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_discover_releases\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 273\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 274\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cache_releases \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_public_releases()\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/malariagen_data/anoph/base.py:253\u001b[0m, in \u001b[0;36mAnophelesBase._discover_releases\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 245\u001b[0m \u001b[38;5;129m@doc\u001b[39m(\n\u001b[1;32m 246\u001b[0m summary\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\"\"\u001b[39m\n\u001b[1;32m 247\u001b[0m \u001b[38;5;124m Here we discover which releases are available, by listing the storage\u001b[39m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 251\u001b[0m )\n\u001b[1;32m 252\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_discover_releases\u001b[39m(\u001b[38;5;28mself\u001b[39m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Tuple[\u001b[38;5;28mstr\u001b[39m, \u001b[38;5;241m.\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;241m.\u001b[39m]:\n\u001b[0;32m--> 253\u001b[0m sub_dirs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28msorted\u001b[39m([p\u001b[38;5;241m.\u001b[39msplit(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m/\u001b[39m\u001b[38;5;124m\"\u001b[39m)[\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m] \u001b[38;5;28;01mfor\u001b[39;00m p \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_fs\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mls\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_base_path\u001b[49m\u001b[43m)\u001b[49m])\n\u001b[1;32m 254\u001b[0m discovered_releases \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mtuple\u001b[39m(\n\u001b[1;32m 255\u001b[0m \u001b[38;5;28msorted\u001b[39m(\n\u001b[1;32m 256\u001b[0m [\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 263\u001b[0m )\n\u001b[1;32m 264\u001b[0m )\n\u001b[1;32m 265\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m discovered_releases\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/fsspec/asyn.py:118\u001b[0m, in \u001b[0;36msync_wrapper..wrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 115\u001b[0m \u001b[38;5;129m@functools\u001b[39m\u001b[38;5;241m.\u001b[39mwraps(func)\n\u001b[1;32m 116\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mwrapper\u001b[39m(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 117\u001b[0m \u001b[38;5;28mself\u001b[39m \u001b[38;5;241m=\u001b[39m obj \u001b[38;5;129;01mor\u001b[39;00m args[\u001b[38;5;241m0\u001b[39m]\n\u001b[0;32m--> 118\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43msync\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mloop\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfunc\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/fsspec/asyn.py:103\u001b[0m, in \u001b[0;36msync\u001b[0;34m(loop, func, timeout, *args, **kwargs)\u001b[0m\n\u001b[1;32m 101\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m FSTimeoutError \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mreturn_result\u001b[39;00m\n\u001b[1;32m 102\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(return_result, \u001b[38;5;167;01mBaseException\u001b[39;00m):\n\u001b[0;32m--> 103\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m return_result\n\u001b[1;32m 104\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 105\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m return_result\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/fsspec/asyn.py:56\u001b[0m, in \u001b[0;36m_runner\u001b[0;34m(event, coro, result, timeout)\u001b[0m\n\u001b[1;32m 54\u001b[0m coro \u001b[38;5;241m=\u001b[39m asyncio\u001b[38;5;241m.\u001b[39mwait_for(coro, timeout\u001b[38;5;241m=\u001b[39mtimeout)\n\u001b[1;32m 55\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m---> 56\u001b[0m result[\u001b[38;5;241m0\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mawait\u001b[39;00m coro\n\u001b[1;32m 57\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m ex:\n\u001b[1;32m 58\u001b[0m result[\u001b[38;5;241m0\u001b[39m] \u001b[38;5;241m=\u001b[39m ex\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/core.py:995\u001b[0m, in \u001b[0;36mGCSFileSystem._ls\u001b[0;34m(self, path, detail, prefix, versions, refresh, **kwargs)\u001b[0m\n\u001b[1;32m 993\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 994\u001b[0m out \u001b[38;5;241m=\u001b[39m []\n\u001b[0;32m--> 995\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m entry \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28;01mawait\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_list_objects(\n\u001b[1;32m 996\u001b[0m path, prefix\u001b[38;5;241m=\u001b[39mprefix, versions\u001b[38;5;241m=\u001b[39mversions, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs\n\u001b[1;32m 997\u001b[0m ):\n\u001b[1;32m 998\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m versions \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mgeneration\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;129;01min\u001b[39;00m entry:\n\u001b[1;32m 999\u001b[0m entry \u001b[38;5;241m=\u001b[39m entry\u001b[38;5;241m.\u001b[39mcopy()\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/core.py:564\u001b[0m, in \u001b[0;36mGCSFileSystem._list_objects\u001b[0;34m(self, path, prefix, versions, **kwargs)\u001b[0m\n\u001b[1;32m 561\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m key:\n\u001b[1;32m 562\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m\n\u001b[0;32m--> 564\u001b[0m items, prefixes \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mawait\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_do_list_objects(\n\u001b[1;32m 565\u001b[0m path, prefix\u001b[38;5;241m=\u001b[39mprefix, versions\u001b[38;5;241m=\u001b[39mversions, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs\n\u001b[1;32m 566\u001b[0m )\n\u001b[1;32m 568\u001b[0m pseudodirs \u001b[38;5;241m=\u001b[39m [\n\u001b[1;32m 569\u001b[0m {\n\u001b[1;32m 570\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mbucket\u001b[39m\u001b[38;5;124m\"\u001b[39m: bucket,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 576\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m prefix \u001b[38;5;129;01min\u001b[39;00m prefixes\n\u001b[1;32m 577\u001b[0m ]\n\u001b[1;32m 578\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (items \u001b[38;5;241m+\u001b[39m pseudodirs):\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/core.py:638\u001b[0m, in \u001b[0;36mGCSFileSystem._do_list_objects\u001b[0;34m(self, path, max_results, delimiter, prefix, versions, **kwargs)\u001b[0m\n\u001b[1;32m 626\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mawait\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_concurrent_list_objects_helper(\n\u001b[1;32m 627\u001b[0m items\u001b[38;5;241m=\u001b[39mitems,\n\u001b[1;32m 628\u001b[0m bucket\u001b[38;5;241m=\u001b[39mbucket,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 632\u001b[0m page_size\u001b[38;5;241m=\u001b[39mdefault_page_size,\n\u001b[1;32m 633\u001b[0m )\n\u001b[1;32m 635\u001b[0m \u001b[38;5;66;03m# If the user has not configured inventory report, proceed to use\u001b[39;00m\n\u001b[1;32m 636\u001b[0m \u001b[38;5;66;03m# sequential listing.\u001b[39;00m\n\u001b[1;32m 637\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 638\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mawait\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_sequential_list_objects_helper(\n\u001b[1;32m 639\u001b[0m bucket\u001b[38;5;241m=\u001b[39mbucket,\n\u001b[1;32m 640\u001b[0m delimiter\u001b[38;5;241m=\u001b[39mdelimiter,\n\u001b[1;32m 641\u001b[0m start_offset\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 642\u001b[0m end_offset\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 643\u001b[0m prefix\u001b[38;5;241m=\u001b[39mprefix,\n\u001b[1;32m 644\u001b[0m versions\u001b[38;5;241m=\u001b[39mversions,\n\u001b[1;32m 645\u001b[0m page_size\u001b[38;5;241m=\u001b[39mdefault_page_size,\n\u001b[1;32m 646\u001b[0m )\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/core.py:732\u001b[0m, in \u001b[0;36mGCSFileSystem._sequential_list_objects_helper\u001b[0;34m(self, bucket, delimiter, start_offset, end_offset, prefix, versions, page_size)\u001b[0m\n\u001b[1;32m 729\u001b[0m prefixes \u001b[38;5;241m=\u001b[39m []\n\u001b[1;32m 730\u001b[0m items \u001b[38;5;241m=\u001b[39m []\n\u001b[0;32m--> 732\u001b[0m page \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mawait\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_call(\n\u001b[1;32m 733\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mGET\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 734\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mb/\u001b[39m\u001b[38;5;132;01m{}\u001b[39;00m\u001b[38;5;124m/o\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 735\u001b[0m bucket,\n\u001b[1;32m 736\u001b[0m delimiter\u001b[38;5;241m=\u001b[39mdelimiter,\n\u001b[1;32m 737\u001b[0m prefix\u001b[38;5;241m=\u001b[39mprefix,\n\u001b[1;32m 738\u001b[0m startOffset\u001b[38;5;241m=\u001b[39mstart_offset,\n\u001b[1;32m 739\u001b[0m endOffset\u001b[38;5;241m=\u001b[39mend_offset,\n\u001b[1;32m 740\u001b[0m maxResults\u001b[38;5;241m=\u001b[39mpage_size,\n\u001b[1;32m 741\u001b[0m json_out\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m,\n\u001b[1;32m 742\u001b[0m versions\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtrue\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m versions \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 743\u001b[0m )\n\u001b[1;32m 745\u001b[0m prefixes\u001b[38;5;241m.\u001b[39mextend(page\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mprefixes\u001b[39m\u001b[38;5;124m\"\u001b[39m, []))\n\u001b[1;32m 746\u001b[0m items\u001b[38;5;241m.\u001b[39mextend(page\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mitems\u001b[39m\u001b[38;5;124m\"\u001b[39m, []))\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/core.py:437\u001b[0m, in \u001b[0;36mGCSFileSystem._call\u001b[0;34m(self, method, path, json_out, info_out, *args, **kwargs)\u001b[0m\n\u001b[1;32m 433\u001b[0m \u001b[38;5;28;01masync\u001b[39;00m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_call\u001b[39m(\n\u001b[1;32m 434\u001b[0m \u001b[38;5;28mself\u001b[39m, method, path, \u001b[38;5;241m*\u001b[39margs, json_out\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m, info_out\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs\n\u001b[1;32m 435\u001b[0m ):\n\u001b[1;32m 436\u001b[0m logger\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mmethod\u001b[38;5;241m.\u001b[39mupper()\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mpath\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m, \u001b[39m\u001b[38;5;132;01m{\u001b[39;00margs\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m, \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mkwargs\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mheaders\u001b[39m\u001b[38;5;124m'\u001b[39m)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m--> 437\u001b[0m status, headers, info, contents \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mawait\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_request(\n\u001b[1;32m 438\u001b[0m method, path, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs\n\u001b[1;32m 439\u001b[0m )\n\u001b[1;32m 440\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m json_out:\n\u001b[1;32m 441\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m json\u001b[38;5;241m.\u001b[39mloads(contents)\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/decorator.py:221\u001b[0m, in \u001b[0;36mdecorate..fun\u001b[0;34m(*args, **kw)\u001b[0m\n\u001b[1;32m 219\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m kwsyntax:\n\u001b[1;32m 220\u001b[0m args, kw \u001b[38;5;241m=\u001b[39m fix(args, kw, sig)\n\u001b[0;32m--> 221\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mawait\u001b[39;00m caller(func, \u001b[38;5;241m*\u001b[39m(extras \u001b[38;5;241m+\u001b[39m args), \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkw)\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/retry.py:158\u001b[0m, in \u001b[0;36mretry_request\u001b[0;34m(func, retries, *args, **kwargs)\u001b[0m\n\u001b[1;32m 156\u001b[0m \u001b[38;5;28;01mcontinue\u001b[39;00m\n\u001b[1;32m 157\u001b[0m logger\u001b[38;5;241m.\u001b[39mexception(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mfunc\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m non-retriable exception: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00me\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m--> 158\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m e\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/retry.py:123\u001b[0m, in \u001b[0;36mretry_request\u001b[0;34m(func, retries, *args, **kwargs)\u001b[0m\n\u001b[1;32m 121\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m retry \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m0\u001b[39m:\n\u001b[1;32m 122\u001b[0m \u001b[38;5;28;01mawait\u001b[39;00m asyncio\u001b[38;5;241m.\u001b[39msleep(\u001b[38;5;28mmin\u001b[39m(random\u001b[38;5;241m.\u001b[39mrandom() \u001b[38;5;241m+\u001b[39m \u001b[38;5;241m2\u001b[39m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m (retry \u001b[38;5;241m-\u001b[39m \u001b[38;5;241m1\u001b[39m), \u001b[38;5;241m32\u001b[39m))\n\u001b[0;32m--> 123\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mawait\u001b[39;00m func(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 124\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (\n\u001b[1;32m 125\u001b[0m HttpError,\n\u001b[1;32m 126\u001b[0m requests\u001b[38;5;241m.\u001b[39mexceptions\u001b[38;5;241m.\u001b[39mRequestException,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 129\u001b[0m aiohttp\u001b[38;5;241m.\u001b[39mclient_exceptions\u001b[38;5;241m.\u001b[39mClientError,\n\u001b[1;32m 130\u001b[0m ) \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 131\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (\n\u001b[1;32m 132\u001b[0m \u001b[38;5;28misinstance\u001b[39m(e, HttpError)\n\u001b[1;32m 133\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m e\u001b[38;5;241m.\u001b[39mcode \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m400\u001b[39m\n\u001b[1;32m 134\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrequester pays\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;129;01min\u001b[39;00m e\u001b[38;5;241m.\u001b[39mmessage\n\u001b[1;32m 135\u001b[0m ):\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/core.py:430\u001b[0m, in \u001b[0;36mGCSFileSystem._request\u001b[0;34m(self, method, path, headers, json, data, *args, **kwargs)\u001b[0m\n\u001b[1;32m 427\u001b[0m info \u001b[38;5;241m=\u001b[39m r\u001b[38;5;241m.\u001b[39mrequest_info \u001b[38;5;66;03m# for debug only\u001b[39;00m\n\u001b[1;32m 428\u001b[0m contents \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mawait\u001b[39;00m r\u001b[38;5;241m.\u001b[39mread()\n\u001b[0;32m--> 430\u001b[0m \u001b[43mvalidate_response\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstatus\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcontents\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpath\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 431\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m status, headers, info, contents\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/retry.py:110\u001b[0m, in \u001b[0;36mvalidate_response\u001b[0;34m(status, content, path, args)\u001b[0m\n\u001b[1;32m 108\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mBad Request: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mpath\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;132;01m{\u001b[39;00mmsg\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 109\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m error:\n\u001b[0;32m--> 110\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m HttpError(error)\n\u001b[1;32m 111\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m status:\n\u001b[1;32m 112\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m HttpError({\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcode\u001b[39m\u001b[38;5;124m\"\u001b[39m: status, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmessage\u001b[39m\u001b[38;5;124m\"\u001b[39m: msg}) \u001b[38;5;66;03m# text-like\u001b[39;00m\n", - "\u001b[0;31mHttpError\u001b[0m: Anonymous caller does not have storage.objects.list access to the Google Cloud Storage bucket. Permission 'storage.objects.list' denied on resource (or it may not exist)., 401" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "_request non-retriable exception: Anonymous caller does not have storage.objects.list access to the Google Cloud Storage bucket. Permission 'storage.objects.list' denied on resource (or it may not exist)., 401\n", - "Traceback (most recent call last):\n", - " File \"/Users/dennistpw/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/retry.py\", line 123, in retry_request\n", - " return await func(*args, **kwargs)\n", - " File \"/Users/dennistpw/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/core.py\", line 430, in _request\n", - " validate_response(status, contents, path, args)\n", - " File \"/Users/dennistpw/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/retry.py\", line 110, in validate_response\n", - " raise HttpError(error)\n", - "gcsfs.retry.HttpError: Anonymous caller does not have storage.objects.list access to the Google Cloud Storage bucket. Permission 'storage.objects.list' denied on resource (or it may not exist)., 401\n" - ] - }, - { - "ename": "HttpError", - "evalue": "Anonymous caller does not have storage.objects.list access to the Google Cloud Storage bucket. Permission 'storage.objects.list' denied on resource (or it may not exist)., 401", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mHttpError\u001b[0m Traceback (most recent call last)", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/IPython/core/formatters.py:344\u001b[0m, in \u001b[0;36mBaseFormatter.__call__\u001b[0;34m(self, obj)\u001b[0m\n\u001b[1;32m 342\u001b[0m method \u001b[38;5;241m=\u001b[39m get_real_method(obj, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mprint_method)\n\u001b[1;32m 343\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m method \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m--> 344\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mmethod\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 345\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 346\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/malariagen_data/ag3.py:248\u001b[0m, in \u001b[0;36mAg3._repr_html_\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 223\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_repr_html_\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m 224\u001b[0m html \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\"\"\u001b[39m\n\u001b[1;32m 225\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 226\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 227\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 228\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 229\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 230\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 236\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 237\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 238\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 239\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 242\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 243\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 244\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 245\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[0;32m--> 248\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 249\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 250\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 251\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 254\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 255\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 256\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 257\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 260\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 261\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 262\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 263\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 266\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 267\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 268\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 269\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 272\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 273\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 274\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 275\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 278\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 279\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 280\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 281\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 284\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 285\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 286\u001b[0m \u001b[38;5;124m \u001b[39m\n\u001b[1;32m 287\u001b[0m \u001b[38;5;124m
      MalariaGEN Ag3 API client
      \u001b[39m\n\u001b[1;32m 231\u001b[0m \u001b[38;5;124m Please note that data are subject to terms of use,\u001b[39m\n\u001b[1;32m 232\u001b[0m \u001b[38;5;124m for more information see \u001b[39m\n\u001b[1;32m 233\u001b[0m \u001b[38;5;124m the MalariaGEN website or contact data@malariagen.net.\u001b[39m\n\u001b[1;32m 234\u001b[0m \u001b[38;5;124m See also the Ag3 API docs.\u001b[39m\n\u001b[1;32m 235\u001b[0m \u001b[38;5;124m
      \u001b[39m\n\u001b[1;32m 240\u001b[0m \u001b[38;5;124m Storage URL\u001b[39m\n\u001b[1;32m 241\u001b[0m \u001b[38;5;124m \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_url\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m
      \u001b[39m\n\u001b[1;32m 246\u001b[0m \u001b[38;5;124m Data releases available\u001b[39m\n\u001b[1;32m 247\u001b[0m \u001b[38;5;124m \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m, \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;241m.\u001b[39mjoin(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mreleases)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m
      \u001b[39m\n\u001b[1;32m 252\u001b[0m \u001b[38;5;124m Results cache\u001b[39m\n\u001b[1;32m 253\u001b[0m \u001b[38;5;124m \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_results_cache\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m
      \u001b[39m\n\u001b[1;32m 258\u001b[0m \u001b[38;5;124m Cohorts analysis\u001b[39m\n\u001b[1;32m 259\u001b[0m \u001b[38;5;124m \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cohorts_analysis\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m
      \u001b[39m\n\u001b[1;32m 264\u001b[0m \u001b[38;5;124m AIM analysis\u001b[39m\n\u001b[1;32m 265\u001b[0m \u001b[38;5;124m \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_aim_analysis\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m
      \u001b[39m\n\u001b[1;32m 270\u001b[0m \u001b[38;5;124m Site filters analysis\u001b[39m\n\u001b[1;32m 271\u001b[0m \u001b[38;5;124m \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_site_filters_analysis\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m
      \u001b[39m\n\u001b[1;32m 276\u001b[0m \u001b[38;5;124m Software version\u001b[39m\n\u001b[1;32m 277\u001b[0m \u001b[38;5;124m malariagen_data \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mmalariagen_data\u001b[38;5;241m.\u001b[39m__version__\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m
      \u001b[39m\n\u001b[1;32m 282\u001b[0m \u001b[38;5;124m Client location\u001b[39m\n\u001b[1;32m 283\u001b[0m \u001b[38;5;124m \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mclient_location\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m
      \u001b[39m\n\u001b[1;32m 288\u001b[0m \u001b[38;5;124m \u001b[39m\u001b[38;5;124m\"\"\"\u001b[39m\n\u001b[1;32m 289\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m html\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/malariagen_data/anoph/base.py:272\u001b[0m, in \u001b[0;36mAnophelesBase.releases\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 270\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cache_releases \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 271\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_pre:\n\u001b[0;32m--> 272\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cache_releases \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_discover_releases\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 273\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 274\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cache_releases \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_public_releases()\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/malariagen_data/anoph/base.py:253\u001b[0m, in \u001b[0;36mAnophelesBase._discover_releases\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 245\u001b[0m \u001b[38;5;129m@doc\u001b[39m(\n\u001b[1;32m 246\u001b[0m summary\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\"\"\u001b[39m\n\u001b[1;32m 247\u001b[0m \u001b[38;5;124m Here we discover which releases are available, by listing the storage\u001b[39m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 251\u001b[0m )\n\u001b[1;32m 252\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_discover_releases\u001b[39m(\u001b[38;5;28mself\u001b[39m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Tuple[\u001b[38;5;28mstr\u001b[39m, \u001b[38;5;241m.\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;241m.\u001b[39m]:\n\u001b[0;32m--> 253\u001b[0m sub_dirs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28msorted\u001b[39m([p\u001b[38;5;241m.\u001b[39msplit(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m/\u001b[39m\u001b[38;5;124m\"\u001b[39m)[\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m] \u001b[38;5;28;01mfor\u001b[39;00m p \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_fs\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mls\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_base_path\u001b[49m\u001b[43m)\u001b[49m])\n\u001b[1;32m 254\u001b[0m discovered_releases \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mtuple\u001b[39m(\n\u001b[1;32m 255\u001b[0m \u001b[38;5;28msorted\u001b[39m(\n\u001b[1;32m 256\u001b[0m [\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 263\u001b[0m )\n\u001b[1;32m 264\u001b[0m )\n\u001b[1;32m 265\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m discovered_releases\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/fsspec/asyn.py:118\u001b[0m, in \u001b[0;36msync_wrapper..wrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 115\u001b[0m \u001b[38;5;129m@functools\u001b[39m\u001b[38;5;241m.\u001b[39mwraps(func)\n\u001b[1;32m 116\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mwrapper\u001b[39m(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 117\u001b[0m \u001b[38;5;28mself\u001b[39m \u001b[38;5;241m=\u001b[39m obj \u001b[38;5;129;01mor\u001b[39;00m args[\u001b[38;5;241m0\u001b[39m]\n\u001b[0;32m--> 118\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43msync\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mloop\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfunc\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/fsspec/asyn.py:103\u001b[0m, in \u001b[0;36msync\u001b[0;34m(loop, func, timeout, *args, **kwargs)\u001b[0m\n\u001b[1;32m 101\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m FSTimeoutError \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mreturn_result\u001b[39;00m\n\u001b[1;32m 102\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(return_result, \u001b[38;5;167;01mBaseException\u001b[39;00m):\n\u001b[0;32m--> 103\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m return_result\n\u001b[1;32m 104\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 105\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m return_result\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/fsspec/asyn.py:56\u001b[0m, in \u001b[0;36m_runner\u001b[0;34m(event, coro, result, timeout)\u001b[0m\n\u001b[1;32m 54\u001b[0m coro \u001b[38;5;241m=\u001b[39m asyncio\u001b[38;5;241m.\u001b[39mwait_for(coro, timeout\u001b[38;5;241m=\u001b[39mtimeout)\n\u001b[1;32m 55\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m---> 56\u001b[0m result[\u001b[38;5;241m0\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mawait\u001b[39;00m coro\n\u001b[1;32m 57\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m ex:\n\u001b[1;32m 58\u001b[0m result[\u001b[38;5;241m0\u001b[39m] \u001b[38;5;241m=\u001b[39m ex\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/core.py:995\u001b[0m, in \u001b[0;36mGCSFileSystem._ls\u001b[0;34m(self, path, detail, prefix, versions, refresh, **kwargs)\u001b[0m\n\u001b[1;32m 993\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 994\u001b[0m out \u001b[38;5;241m=\u001b[39m []\n\u001b[0;32m--> 995\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m entry \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28;01mawait\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_list_objects(\n\u001b[1;32m 996\u001b[0m path, prefix\u001b[38;5;241m=\u001b[39mprefix, versions\u001b[38;5;241m=\u001b[39mversions, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs\n\u001b[1;32m 997\u001b[0m ):\n\u001b[1;32m 998\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m versions \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mgeneration\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;129;01min\u001b[39;00m entry:\n\u001b[1;32m 999\u001b[0m entry \u001b[38;5;241m=\u001b[39m entry\u001b[38;5;241m.\u001b[39mcopy()\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/core.py:564\u001b[0m, in \u001b[0;36mGCSFileSystem._list_objects\u001b[0;34m(self, path, prefix, versions, **kwargs)\u001b[0m\n\u001b[1;32m 561\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m key:\n\u001b[1;32m 562\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m\n\u001b[0;32m--> 564\u001b[0m items, prefixes \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mawait\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_do_list_objects(\n\u001b[1;32m 565\u001b[0m path, prefix\u001b[38;5;241m=\u001b[39mprefix, versions\u001b[38;5;241m=\u001b[39mversions, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs\n\u001b[1;32m 566\u001b[0m )\n\u001b[1;32m 568\u001b[0m pseudodirs \u001b[38;5;241m=\u001b[39m [\n\u001b[1;32m 569\u001b[0m {\n\u001b[1;32m 570\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mbucket\u001b[39m\u001b[38;5;124m\"\u001b[39m: bucket,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 576\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m prefix \u001b[38;5;129;01min\u001b[39;00m prefixes\n\u001b[1;32m 577\u001b[0m ]\n\u001b[1;32m 578\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (items \u001b[38;5;241m+\u001b[39m pseudodirs):\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/core.py:638\u001b[0m, in \u001b[0;36mGCSFileSystem._do_list_objects\u001b[0;34m(self, path, max_results, delimiter, prefix, versions, **kwargs)\u001b[0m\n\u001b[1;32m 626\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mawait\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_concurrent_list_objects_helper(\n\u001b[1;32m 627\u001b[0m items\u001b[38;5;241m=\u001b[39mitems,\n\u001b[1;32m 628\u001b[0m bucket\u001b[38;5;241m=\u001b[39mbucket,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 632\u001b[0m page_size\u001b[38;5;241m=\u001b[39mdefault_page_size,\n\u001b[1;32m 633\u001b[0m )\n\u001b[1;32m 635\u001b[0m \u001b[38;5;66;03m# If the user has not configured inventory report, proceed to use\u001b[39;00m\n\u001b[1;32m 636\u001b[0m \u001b[38;5;66;03m# sequential listing.\u001b[39;00m\n\u001b[1;32m 637\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 638\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mawait\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_sequential_list_objects_helper(\n\u001b[1;32m 639\u001b[0m bucket\u001b[38;5;241m=\u001b[39mbucket,\n\u001b[1;32m 640\u001b[0m delimiter\u001b[38;5;241m=\u001b[39mdelimiter,\n\u001b[1;32m 641\u001b[0m start_offset\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 642\u001b[0m end_offset\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 643\u001b[0m prefix\u001b[38;5;241m=\u001b[39mprefix,\n\u001b[1;32m 644\u001b[0m versions\u001b[38;5;241m=\u001b[39mversions,\n\u001b[1;32m 645\u001b[0m page_size\u001b[38;5;241m=\u001b[39mdefault_page_size,\n\u001b[1;32m 646\u001b[0m )\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/core.py:732\u001b[0m, in \u001b[0;36mGCSFileSystem._sequential_list_objects_helper\u001b[0;34m(self, bucket, delimiter, start_offset, end_offset, prefix, versions, page_size)\u001b[0m\n\u001b[1;32m 729\u001b[0m prefixes \u001b[38;5;241m=\u001b[39m []\n\u001b[1;32m 730\u001b[0m items \u001b[38;5;241m=\u001b[39m []\n\u001b[0;32m--> 732\u001b[0m page \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mawait\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_call(\n\u001b[1;32m 733\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mGET\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 734\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mb/\u001b[39m\u001b[38;5;132;01m{}\u001b[39;00m\u001b[38;5;124m/o\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 735\u001b[0m bucket,\n\u001b[1;32m 736\u001b[0m delimiter\u001b[38;5;241m=\u001b[39mdelimiter,\n\u001b[1;32m 737\u001b[0m prefix\u001b[38;5;241m=\u001b[39mprefix,\n\u001b[1;32m 738\u001b[0m startOffset\u001b[38;5;241m=\u001b[39mstart_offset,\n\u001b[1;32m 739\u001b[0m endOffset\u001b[38;5;241m=\u001b[39mend_offset,\n\u001b[1;32m 740\u001b[0m maxResults\u001b[38;5;241m=\u001b[39mpage_size,\n\u001b[1;32m 741\u001b[0m json_out\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m,\n\u001b[1;32m 742\u001b[0m versions\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtrue\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m versions \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 743\u001b[0m )\n\u001b[1;32m 745\u001b[0m prefixes\u001b[38;5;241m.\u001b[39mextend(page\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mprefixes\u001b[39m\u001b[38;5;124m\"\u001b[39m, []))\n\u001b[1;32m 746\u001b[0m items\u001b[38;5;241m.\u001b[39mextend(page\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mitems\u001b[39m\u001b[38;5;124m\"\u001b[39m, []))\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/core.py:437\u001b[0m, in \u001b[0;36mGCSFileSystem._call\u001b[0;34m(self, method, path, json_out, info_out, *args, **kwargs)\u001b[0m\n\u001b[1;32m 433\u001b[0m \u001b[38;5;28;01masync\u001b[39;00m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_call\u001b[39m(\n\u001b[1;32m 434\u001b[0m \u001b[38;5;28mself\u001b[39m, method, path, \u001b[38;5;241m*\u001b[39margs, json_out\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m, info_out\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs\n\u001b[1;32m 435\u001b[0m ):\n\u001b[1;32m 436\u001b[0m logger\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mmethod\u001b[38;5;241m.\u001b[39mupper()\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mpath\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m, \u001b[39m\u001b[38;5;132;01m{\u001b[39;00margs\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m, \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mkwargs\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mheaders\u001b[39m\u001b[38;5;124m'\u001b[39m)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m--> 437\u001b[0m status, headers, info, contents \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mawait\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_request(\n\u001b[1;32m 438\u001b[0m method, path, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs\n\u001b[1;32m 439\u001b[0m )\n\u001b[1;32m 440\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m json_out:\n\u001b[1;32m 441\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m json\u001b[38;5;241m.\u001b[39mloads(contents)\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/decorator.py:221\u001b[0m, in \u001b[0;36mdecorate..fun\u001b[0;34m(*args, **kw)\u001b[0m\n\u001b[1;32m 219\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m kwsyntax:\n\u001b[1;32m 220\u001b[0m args, kw \u001b[38;5;241m=\u001b[39m fix(args, kw, sig)\n\u001b[0;32m--> 221\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mawait\u001b[39;00m caller(func, \u001b[38;5;241m*\u001b[39m(extras \u001b[38;5;241m+\u001b[39m args), \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkw)\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/retry.py:158\u001b[0m, in \u001b[0;36mretry_request\u001b[0;34m(func, retries, *args, **kwargs)\u001b[0m\n\u001b[1;32m 156\u001b[0m \u001b[38;5;28;01mcontinue\u001b[39;00m\n\u001b[1;32m 157\u001b[0m logger\u001b[38;5;241m.\u001b[39mexception(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mfunc\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m non-retriable exception: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00me\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m--> 158\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m e\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/retry.py:123\u001b[0m, in \u001b[0;36mretry_request\u001b[0;34m(func, retries, *args, **kwargs)\u001b[0m\n\u001b[1;32m 121\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m retry \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m0\u001b[39m:\n\u001b[1;32m 122\u001b[0m \u001b[38;5;28;01mawait\u001b[39;00m asyncio\u001b[38;5;241m.\u001b[39msleep(\u001b[38;5;28mmin\u001b[39m(random\u001b[38;5;241m.\u001b[39mrandom() \u001b[38;5;241m+\u001b[39m \u001b[38;5;241m2\u001b[39m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m (retry \u001b[38;5;241m-\u001b[39m \u001b[38;5;241m1\u001b[39m), \u001b[38;5;241m32\u001b[39m))\n\u001b[0;32m--> 123\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mawait\u001b[39;00m func(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 124\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (\n\u001b[1;32m 125\u001b[0m HttpError,\n\u001b[1;32m 126\u001b[0m requests\u001b[38;5;241m.\u001b[39mexceptions\u001b[38;5;241m.\u001b[39mRequestException,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 129\u001b[0m aiohttp\u001b[38;5;241m.\u001b[39mclient_exceptions\u001b[38;5;241m.\u001b[39mClientError,\n\u001b[1;32m 130\u001b[0m ) \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 131\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (\n\u001b[1;32m 132\u001b[0m \u001b[38;5;28misinstance\u001b[39m(e, HttpError)\n\u001b[1;32m 133\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m e\u001b[38;5;241m.\u001b[39mcode \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m400\u001b[39m\n\u001b[1;32m 134\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrequester pays\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;129;01min\u001b[39;00m e\u001b[38;5;241m.\u001b[39mmessage\n\u001b[1;32m 135\u001b[0m ):\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/core.py:430\u001b[0m, in \u001b[0;36mGCSFileSystem._request\u001b[0;34m(self, method, path, headers, json, data, *args, **kwargs)\u001b[0m\n\u001b[1;32m 427\u001b[0m info \u001b[38;5;241m=\u001b[39m r\u001b[38;5;241m.\u001b[39mrequest_info \u001b[38;5;66;03m# for debug only\u001b[39;00m\n\u001b[1;32m 428\u001b[0m contents \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mawait\u001b[39;00m r\u001b[38;5;241m.\u001b[39mread()\n\u001b[0;32m--> 430\u001b[0m \u001b[43mvalidate_response\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstatus\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcontents\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpath\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 431\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m status, headers, info, contents\n", - "File \u001b[0;32m~/miniconda3/envs/malariagen_plink/lib/python3.8/site-packages/gcsfs/retry.py:110\u001b[0m, in \u001b[0;36mvalidate_response\u001b[0;34m(status, content, path, args)\u001b[0m\n\u001b[1;32m 108\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mBad Request: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mpath\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;132;01m{\u001b[39;00mmsg\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 109\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m error:\n\u001b[0;32m--> 110\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m HttpError(error)\n\u001b[1;32m 111\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m status:\n\u001b[1;32m 112\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m HttpError({\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcode\u001b[39m\u001b[38;5;124m\"\u001b[39m: status, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmessage\u001b[39m\u001b[38;5;124m\"\u001b[39m: msg}) \u001b[38;5;66;03m# text-like\u001b[39;00m\n", - "\u001b[0;31mHttpError\u001b[0m: Anonymous caller does not have storage.objects.list access to the Google Cloud Storage bucket. Permission 'storage.objects.list' denied on resource (or it may not exist)., 401" - ] } ], "source": [ "import malariagen_data\n", + "import os \n", "\n", "ag3 = malariagen_data.Ag3(pre=True)" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -124,7 +39,7 @@ } ], "source": [ - "ag3.biallelic_snps_to_plink(results_dir='/Users/dennistpw/Projects/malariagen-data-python/',\n", + "ag3.biallelic_snps_to_plink(output_dir=os.getcwd(),\n", " region='2L:100000-2000000',\n", " n_snps=2000,\n", " sample_sets='AG1000G-AO',\n", @@ -148,7 +63,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.19" + "version": "3.12.5" } }, "nbformat": 4, From 38b95109471cce3266531bc8ebbc7943f663af4b Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Mon, 25 Nov 2024 09:49:32 +1000 Subject: [PATCH 29/42] Update malariagen_data/anoph/to_plink.py Co-authored-by: Alistair Miles --- malariagen_data/anoph/to_plink.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/malariagen_data/anoph/to_plink.py b/malariagen_data/anoph/to_plink.py index 86801521d..89f56b2ce 100644 --- a/malariagen_data/anoph/to_plink.py +++ b/malariagen_data/anoph/to_plink.py @@ -33,7 +33,7 @@ def _create_plink_outfile( thin_offset, max_missing_an, ): - return f"{output_dir}/{region}.{n_snps}.{min_minor_ac}.{thin_offset}.{max_missing_an}" + return f"{output_dir}/{region}.{n_snps}.{min_minor_ac}.{max_missing_an}.{thin_offset}" def _biallelic_snps_to_plink( self, From b48abf4026596ca8e00528d8e2281a1bb159bf98 Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Mon, 25 Nov 2024 09:50:34 +1000 Subject: [PATCH 30/42] add bool type definition --- malariagen_data/anoph/to_plink.py | 2 +- notebooks/plink_convert.ipynb | 25 ++----------------------- 2 files changed, 3 insertions(+), 24 deletions(-) diff --git a/malariagen_data/anoph/to_plink.py b/malariagen_data/anoph/to_plink.py index 86801521d..4ab36f73a 100644 --- a/malariagen_data/anoph/to_plink.py +++ b/malariagen_data/anoph/to_plink.py @@ -128,7 +128,7 @@ def biallelic_snps_to_plink( region: base_params.regions, n_snps: base_params.n_snps, thin_offset: base_params.thin_offset = 0, - overwrite=False, + overwrite: bool = False, sample_sets: Optional[base_params.sample_sets] = None, sample_query: Optional[base_params.sample_query] = None, sample_indices: Optional[base_params.sample_indices] = None, diff --git a/notebooks/plink_convert.ipynb b/notebooks/plink_convert.ipynb index 305409f2f..deb9b984b 100644 --- a/notebooks/plink_convert.ipynb +++ b/notebooks/plink_convert.ipynb @@ -4,16 +4,7 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": "'use strict';\n(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\nconst JS_MIME_TYPE = 'application/javascript';\n const HTML_MIME_TYPE = 'text/html';\n const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n const CLASS_NAME = 'output_bokeh rendered_html';\n\n /**\n * Render data to the DOM node\n */\n function render(props, node) {\n const script = document.createElement(\"script\");\n node.appendChild(script);\n }\n\n /**\n * Handle when an output is cleared or removed\n */\n function handleClearOutput(event, handle) {\n function drop(id) {\n const view = Bokeh.index.get_by_id(id)\n if (view != null) {\n view.model.document.clear()\n Bokeh.index.delete(view)\n }\n }\n\n const cell = handle.cell;\n\n const id = cell.output_area._bokeh_element_id;\n const server_id = cell.output_area._bokeh_server_id;\n\n // Clean up Bokeh references\n if (id != null) {\n drop(id)\n }\n\n if (server_id !== undefined) {\n // Clean up Bokeh references\n const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n cell.notebook.kernel.execute(cmd_clean, {\n iopub: {\n output: function(msg) {\n const id = msg.content.text.trim()\n drop(id)\n }\n }\n });\n // Destroy server and session\n const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n cell.notebook.kernel.execute(cmd_destroy);\n }\n }\n\n /**\n * Handle when a new output is added\n */\n function handleAddOutput(event, handle) {\n const output_area = handle.output_area;\n const output = handle.output;\n\n // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n return\n }\n\n const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n\n if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n // store reference to embed id on output_area\n output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n }\n if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n const bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n const script_attrs = bk_div.children[0].attributes;\n for (let i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n }\n\n function register_renderer(events, OutputArea) {\n\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n const toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[toinsert.length - 1]);\n element.append(toinsert);\n return toinsert\n }\n\n /* Handle when an output is cleared or removed */\n events.on('clear_output.CodeCell', handleClearOutput);\n events.on('delete.Cell', handleClearOutput);\n\n /* Handle when a new output is added */\n events.on('output_added.OutputArea', handleAddOutput);\n\n /**\n * Register the mime type and append_mime function with output_area\n */\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n /* Is output safe? */\n safe: true,\n /* Index of renderer in `output_area.display_order` */\n index: 0\n });\n }\n\n // register the mime type if in Jupyter Notebook environment and previously unregistered\n if (root.Jupyter !== undefined) {\n const events = require('base/js/events');\n const OutputArea = require('notebook/js/outputarea').OutputArea;\n\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n }\n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"
      \\n\"+\n \"

      \\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

      \\n\"+\n \"
        \\n\"+\n \"
      • re-rerun `output_notebook()` to attempt to load from CDN again, or
      • \\n\"+\n \"
      • use INLINE resources instead, as so:
      • \\n\"+\n \"
      \\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
      \"}};\n\n function display_loaded(error = null) {\n const el = document.getElementById(null);\n if (el != null) {\n const html = (() => {\n if (typeof root.Bokeh === \"undefined\") {\n if (error == null) {\n return \"BokehJS is loading ...\";\n } else {\n return \"BokehJS failed to load.\";\n }\n } else {\n const prefix = `BokehJS ${root.Bokeh.version}`;\n if (error == null) {\n return `${prefix} successfully loaded.`;\n } else {\n return `${prefix} encountered errors while loading and may not function as expected.`;\n }\n }\n })();\n el.innerHTML = html;\n\n if (error != null) {\n const wrapper = document.createElement(\"div\");\n wrapper.style.overflow = \"auto\";\n wrapper.style.height = \"5em\";\n wrapper.style.resize = \"vertical\";\n const content = document.createElement(\"div\");\n content.style.fontFamily = \"monospace\";\n content.style.whiteSpace = \"pre-wrap\";\n content.style.backgroundColor = \"rgb(255, 221, 221)\";\n content.textContent = error.stack ?? error.toString();\n wrapper.append(content);\n el.append(wrapper);\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(() => display_loaded(error), 100);\n }\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.5.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.5.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.5.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.5.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-3.5.2.min.js\"];\n const css_urls = [];\n\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {\n }\n ];\n\n function run_inline_js() {\n if (root.Bokeh !== undefined || force === true) {\n try {\n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n\n } catch (error) {throw error;\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(null)).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));", - "application/vnd.bokehjs_load.v0+json": "" - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "import malariagen_data\n", "import os \n", @@ -25,19 +16,7 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [ - { - "ename": "AttributeError", - "evalue": "'Ag3' object has no attribute 'biallelic_snps_to_plink'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[7], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mag3\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbiallelic_snps_to_plink\u001b[49m(results_dir\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m/Users/dennistpw/Projects/malariagen-data-python/\u001b[39m\u001b[38;5;124m'\u001b[39m,\n\u001b[1;32m 2\u001b[0m region\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m2L:100000-2000000\u001b[39m\u001b[38;5;124m'\u001b[39m,\n\u001b[1;32m 3\u001b[0m n_snps\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m2000\u001b[39m,\n\u001b[1;32m 4\u001b[0m sample_sets\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mAG1000G-AO\u001b[39m\u001b[38;5;124m'\u001b[39m,\n\u001b[1;32m 5\u001b[0m )\n", - "\u001b[0;31mAttributeError\u001b[0m: 'Ag3' object has no attribute 'biallelic_snps_to_plink'" - ] - } - ], + "outputs": [], "source": [ "ag3.biallelic_snps_to_plink(output_dir=os.getcwd(),\n", " region='2L:100000-2000000',\n", From 67301231e5845592b88ed8b17d7b26983296f5ec Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Mon, 25 Nov 2024 10:01:57 +1000 Subject: [PATCH 31/42] add docstring --- malariagen_data/anoph/to_plink.py | 21 +++++++++++++++++++++ tests/anoph/test_plink_converter.py | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/malariagen_data/anoph/to_plink.py b/malariagen_data/anoph/to_plink.py index 4d5d196f7..e9ce42eb8 100644 --- a/malariagen_data/anoph/to_plink.py +++ b/malariagen_data/anoph/to_plink.py @@ -9,6 +9,7 @@ from .snp_data import AnophelesSnpData from . import base_params from . import pca_params +from numpydoc_decorator import doc # type: ignore class PlinkConverter( @@ -23,6 +24,26 @@ def __init__( # to the superclass constructor. super().__init__(**kwargs) + @doc( + summary=""" + Write Anopheles biallelic SNP data to the Plink binary file format. + """, + extended_summary=""" + This function writes biallelic SNPs to the Plink binary file format. It enables + subsetting to specific regions (`region`), selecting specific sample sets, or lists of + samples, randomly downsampling sites, and specifying filters based on missing data and + minimum minor allele count (see the docs for `biallelic_snp_calls` for more information). + The `overwrite` parameter, set to true, will enable overwrite of data with the same + hash values (e.g. with a different randomly selected number of sites). + """, + returns=("Binary Plink output files: .bed, .bim, .fam"), + notes=""" + This computation may take some time to run, depending on your computing + environment. Unless the `overwrite` parameter is set to `True`, results will be loaded + from a previous computation, if performed, and if the `results_cache` parameter was + set when instantiating the API client. + """, + ) def _create_plink_outfile( self, *, diff --git a/tests/anoph/test_plink_converter.py b/tests/anoph/test_plink_converter.py index 81a1bf42c..1f26b889e 100644 --- a/tests/anoph/test_plink_converter.py +++ b/tests/anoph/test_plink_converter.py @@ -105,7 +105,7 @@ def test_plink_converter(fixture, api: PlinkConverter, tmp_path): api.biallelic_snps_to_plink(**plink_params) # Test to see if bed, bim, fam output files exist. - file_path = f"{tmp_path}/{plink_params['region']}.{plink_params['n_snps']}.{plink_params['min_minor_ac']}.{plink_params['thin_offset']}.{plink_params['max_missing_an']}" + file_path = f"{tmp_path}/{plink_params['region']}.{plink_params['n_snps']}.{plink_params['min_minor_ac']}.{plink_params['max_missing_an']}.{plink_params['thin_offset']}" assert os.path.exists(f"{file_path}.bed") assert os.path.exists(f"{file_path}.bim") From 92e83401c22644cd402abf6281582611c37c2c66 Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Mon, 25 Nov 2024 10:06:36 +1000 Subject: [PATCH 32/42] fix function definitions --- malariagen_data/anoph/to_plink.py | 74 ++++++++----------------------- 1 file changed, 18 insertions(+), 56 deletions(-) diff --git a/malariagen_data/anoph/to_plink.py b/malariagen_data/anoph/to_plink.py index e9ce42eb8..fe2ac1fa6 100644 --- a/malariagen_data/anoph/to_plink.py +++ b/malariagen_data/anoph/to_plink.py @@ -56,23 +56,26 @@ def _create_plink_outfile( ): return f"{output_dir}/{region}.{n_snps}.{min_minor_ac}.{max_missing_an}.{thin_offset}" - def _biallelic_snps_to_plink( + def biallelic_snps_to_plink( self, - *, output_dir, - region, - n_snps, - thin_offset, - overwrite, - sample_sets, - sample_query, - sample_indices, - site_mask, - min_minor_ac, - max_missing_an, - random_seed, - inline_array, - chunks, + region: base_params.regions, + n_snps: base_params.n_snps, + thin_offset: base_params.thin_offset = 0, + overwrite: bool = False, + sample_sets: Optional[base_params.sample_sets] = None, + sample_query: Optional[base_params.sample_query] = None, + sample_indices: Optional[base_params.sample_indices] = None, + site_mask: Optional[base_params.site_mask] = None, + min_minor_ac: Optional[ + base_params.min_minor_ac + ] = pca_params.min_minor_ac_default, + max_missing_an: Optional[ + base_params.max_missing_an + ] = pca_params.max_missing_an_default, + random_seed: base_params.random_seed = 42, + inline_array: base_params.inline_array = base_params.inline_array_default, + chunks: base_params.chunks = base_params.native_chunks, ): # Define output file plink_file_path = self._create_plink_outfile( @@ -142,44 +145,3 @@ def _biallelic_snps_to_plink( ) return plink_file_path - - def biallelic_snps_to_plink( - self, - output_dir, - region: base_params.regions, - n_snps: base_params.n_snps, - thin_offset: base_params.thin_offset = 0, - overwrite: bool = False, - sample_sets: Optional[base_params.sample_sets] = None, - sample_query: Optional[base_params.sample_query] = None, - sample_indices: Optional[base_params.sample_indices] = None, - site_mask: Optional[base_params.site_mask] = None, - min_minor_ac: Optional[ - base_params.min_minor_ac - ] = pca_params.min_minor_ac_default, - max_missing_an: Optional[ - base_params.max_missing_an - ] = pca_params.max_missing_an_default, - random_seed: base_params.random_seed = 42, - inline_array: base_params.inline_array = base_params.inline_array_default, - chunks: base_params.chunks = base_params.native_chunks, - ): - params = dict( - output_dir=output_dir, - region=region, - n_snps=n_snps, - thin_offset=thin_offset, - overwrite=overwrite, - sample_sets=sample_sets, - sample_query=sample_query, - sample_indices=sample_indices, - site_mask=site_mask, - min_minor_ac=min_minor_ac, - max_missing_an=max_missing_an, - random_seed=random_seed, - ) - - filepath = self._biallelic_snps_to_plink( - inline_array=inline_array, chunks=chunks, **params - ) - return filepath From fb08e1c9e58f9e879ea5d769aee4400770d75c7e Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Mon, 25 Nov 2024 10:12:26 +1000 Subject: [PATCH 33/42] add overwrite to base params and finish docstring --- docs/source/Af1.rst | 1 + docs/source/Ag3.rst | 1 + 2 files changed, 2 insertions(+) diff --git a/docs/source/Af1.rst b/docs/source/Af1.rst index ace32c2b1..5ef355a48 100644 --- a/docs/source/Af1.rst +++ b/docs/source/Af1.rst @@ -71,6 +71,7 @@ SNP data access is_accessible biallelic_snp_calls biallelic_diplotypes + biallelic_snps_to_plink Haplotype data access --------------------- diff --git a/docs/source/Ag3.rst b/docs/source/Ag3.rst index 17dbc522c..ce9876e13 100644 --- a/docs/source/Ag3.rst +++ b/docs/source/Ag3.rst @@ -72,6 +72,7 @@ SNP data access is_accessible biallelic_snp_calls biallelic_diplotypes + biallelic_snps_to_plink Haplotype data access --------------------- From dab86ecf4d231ca8098fd541364b4bf4b86949a7 Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Mon, 25 Nov 2024 10:13:03 +1000 Subject: [PATCH 34/42] fix docstring and base params --- malariagen_data/anoph/base_params.py | 8 ++++++++ malariagen_data/anoph/to_plink.py | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/malariagen_data/anoph/base_params.py b/malariagen_data/anoph/base_params.py index 87e7a704e..0c73cd58f 100644 --- a/malariagen_data/anoph/base_params.py +++ b/malariagen_data/anoph/base_params.py @@ -308,3 +308,11 @@ def validate_sample_selection_params( to select SNPs to be included """, ] + +overwrite: TypeAlias = Annotated[ + bool, + """ + A boolean indicating whether a previously written file with the same name ought + to be overwritten. Default is False. + """, +] diff --git a/malariagen_data/anoph/to_plink.py b/malariagen_data/anoph/to_plink.py index fe2ac1fa6..0d822c3fc 100644 --- a/malariagen_data/anoph/to_plink.py +++ b/malariagen_data/anoph/to_plink.py @@ -62,7 +62,7 @@ def biallelic_snps_to_plink( region: base_params.regions, n_snps: base_params.n_snps, thin_offset: base_params.thin_offset = 0, - overwrite: bool = False, + overwrite: base_params.overwrite = False, sample_sets: Optional[base_params.sample_sets] = None, sample_query: Optional[base_params.sample_query] = None, sample_indices: Optional[base_params.sample_indices] = None, From 033fc8a5ab302e80504a3719bc9978ac87b3e9f2 Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Mon, 25 Nov 2024 10:20:37 +1000 Subject: [PATCH 35/42] update output dir type def --- malariagen_data/anoph/base_params.py | 7 +++++++ malariagen_data/anoph/to_plink.py | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/malariagen_data/anoph/base_params.py b/malariagen_data/anoph/base_params.py index 0c73cd58f..53706c017 100644 --- a/malariagen_data/anoph/base_params.py +++ b/malariagen_data/anoph/base_params.py @@ -316,3 +316,10 @@ def validate_sample_selection_params( to be overwritten. Default is False. """, ] + +output_dir: TypeAlias = Annotated[ + str, + """ + A string indicating the desired output file location + """, +] diff --git a/malariagen_data/anoph/to_plink.py b/malariagen_data/anoph/to_plink.py index 0d822c3fc..091c77e0c 100644 --- a/malariagen_data/anoph/to_plink.py +++ b/malariagen_data/anoph/to_plink.py @@ -58,7 +58,7 @@ def _create_plink_outfile( def biallelic_snps_to_plink( self, - output_dir, + output_dir: base_params.output_dir, region: base_params.regions, n_snps: base_params.n_snps, thin_offset: base_params.thin_offset = 0, From c3d711827055328cb1f907a03ff71686cdaab054 Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Mon, 25 Nov 2024 10:39:12 +1000 Subject: [PATCH 36/42] make plink_params.py containing overwrite and output dir, fix type defs and docstring --- malariagen_data/anoph/base_params.py | 15 -------------- malariagen_data/anoph/plink_params.py | 18 +++++++++++++++++ malariagen_data/anoph/to_plink.py | 28 +++++---------------------- 3 files changed, 23 insertions(+), 38 deletions(-) create mode 100644 malariagen_data/anoph/plink_params.py diff --git a/malariagen_data/anoph/base_params.py b/malariagen_data/anoph/base_params.py index 53706c017..87e7a704e 100644 --- a/malariagen_data/anoph/base_params.py +++ b/malariagen_data/anoph/base_params.py @@ -308,18 +308,3 @@ def validate_sample_selection_params( to select SNPs to be included """, ] - -overwrite: TypeAlias = Annotated[ - bool, - """ - A boolean indicating whether a previously written file with the same name ought - to be overwritten. Default is False. - """, -] - -output_dir: TypeAlias = Annotated[ - str, - """ - A string indicating the desired output file location - """, -] diff --git a/malariagen_data/anoph/plink_params.py b/malariagen_data/anoph/plink_params.py new file mode 100644 index 000000000..6defcb669 --- /dev/null +++ b/malariagen_data/anoph/plink_params.py @@ -0,0 +1,18 @@ +"""Parameters for Plink converter functions.""" + +from typing_extensions import Annotated, TypeAlias + +overwrite: TypeAlias = Annotated[ + bool, + """ + A boolean indicating whether a previously written file with the same name ought + to be overwritten. Default is False. + """, +] + +output_dir: TypeAlias = Annotated[ + str, + """ + A string indicating the desired output file location + """, +] diff --git a/malariagen_data/anoph/to_plink.py b/malariagen_data/anoph/to_plink.py index 091c77e0c..675982573 100644 --- a/malariagen_data/anoph/to_plink.py +++ b/malariagen_data/anoph/to_plink.py @@ -8,6 +8,7 @@ from ..util import dask_compress_dataset from .snp_data import AnophelesSnpData from . import base_params +from . import plink_params from . import pca_params from numpydoc_decorator import doc # type: ignore @@ -44,25 +45,13 @@ def __init__( set when instantiating the API client. """, ) - def _create_plink_outfile( - self, - *, - output_dir, - region, - n_snps, - min_minor_ac, - thin_offset, - max_missing_an, - ): - return f"{output_dir}/{region}.{n_snps}.{min_minor_ac}.{max_missing_an}.{thin_offset}" - def biallelic_snps_to_plink( self, - output_dir: base_params.output_dir, + output_dir: plink_params.output_dir, region: base_params.regions, n_snps: base_params.n_snps, + overwrite: plink_params.overwrite = False, thin_offset: base_params.thin_offset = 0, - overwrite: base_params.overwrite = False, sample_sets: Optional[base_params.sample_sets] = None, sample_query: Optional[base_params.sample_query] = None, sample_indices: Optional[base_params.sample_indices] = None, @@ -77,15 +66,8 @@ def biallelic_snps_to_plink( inline_array: base_params.inline_array = base_params.inline_array_default, chunks: base_params.chunks = base_params.native_chunks, ): - # Define output file - plink_file_path = self._create_plink_outfile( - output_dir=output_dir, - region=region, - n_snps=n_snps, - thin_offset=thin_offset, - min_minor_ac=min_minor_ac, - max_missing_an=max_missing_an, - ) + # Define output files + plink_file_path = f"{output_dir}/{region}.{n_snps}.{min_minor_ac}.{max_missing_an}.{thin_offset}" bed_file_path = f"{plink_file_path}.bed" From d235b764c1ff0dbc097f29d6e6ee31408c3296b0 Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Wed, 27 Nov 2024 08:47:55 +1000 Subject: [PATCH 37/42] Update malariagen_data/anoph/plink_params.py Co-authored-by: Alistair Miles --- malariagen_data/anoph/plink_params.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/malariagen_data/anoph/plink_params.py b/malariagen_data/anoph/plink_params.py index 6defcb669..094670a7c 100644 --- a/malariagen_data/anoph/plink_params.py +++ b/malariagen_data/anoph/plink_params.py @@ -13,6 +13,6 @@ output_dir: TypeAlias = Annotated[ str, """ - A string indicating the desired output file location + A string indicating the desired output file location. """, ] From c62307c611a8bec0177691fde8c49be3ac6316d9 Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Wed, 27 Nov 2024 08:48:12 +1000 Subject: [PATCH 38/42] Update malariagen_data/anoph/to_plink.py Co-authored-by: Alistair Miles --- malariagen_data/anoph/to_plink.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/malariagen_data/anoph/to_plink.py b/malariagen_data/anoph/to_plink.py index 675982573..2559cafc1 100644 --- a/malariagen_data/anoph/to_plink.py +++ b/malariagen_data/anoph/to_plink.py @@ -35,7 +35,7 @@ def __init__( samples, randomly downsampling sites, and specifying filters based on missing data and minimum minor allele count (see the docs for `biallelic_snp_calls` for more information). The `overwrite` parameter, set to true, will enable overwrite of data with the same - hash values (e.g. with a different randomly selected number of sites). + SNP selection parameter values. """, returns=("Binary Plink output files: .bed, .bim, .fam"), notes=""" From 4605612e2eb98dedcbba85fff240bb9462e6551f Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Wed, 27 Nov 2024 08:48:43 +1000 Subject: [PATCH 39/42] Update malariagen_data/anoph/to_plink.py Co-authored-by: Alistair Miles --- malariagen_data/anoph/to_plink.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/malariagen_data/anoph/to_plink.py b/malariagen_data/anoph/to_plink.py index 2559cafc1..a156a1ef9 100644 --- a/malariagen_data/anoph/to_plink.py +++ b/malariagen_data/anoph/to_plink.py @@ -40,9 +40,8 @@ def __init__( returns=("Binary Plink output files: .bed, .bim, .fam"), notes=""" This computation may take some time to run, depending on your computing - environment. Unless the `overwrite` parameter is set to `True`, results will be loaded - from a previous computation, if performed, and if the `results_cache` parameter was - set when instantiating the API client. + environment. Unless the `overwrite` parameter is set to `True`, results will be returned + from a previous computation, if available. """, ) def biallelic_snps_to_plink( From 23d8c3a992245f518e886720fdb186c2fd6d1ef6 Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Wed, 27 Nov 2024 08:49:00 +1000 Subject: [PATCH 40/42] Update malariagen_data/anoph/to_plink.py Co-authored-by: Alistair Miles --- malariagen_data/anoph/to_plink.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/malariagen_data/anoph/to_plink.py b/malariagen_data/anoph/to_plink.py index a156a1ef9..93261b4f2 100644 --- a/malariagen_data/anoph/to_plink.py +++ b/malariagen_data/anoph/to_plink.py @@ -54,7 +54,7 @@ def biallelic_snps_to_plink( sample_sets: Optional[base_params.sample_sets] = None, sample_query: Optional[base_params.sample_query] = None, sample_indices: Optional[base_params.sample_indices] = None, - site_mask: Optional[base_params.site_mask] = None, + site_mask: Optional[base_params.site_mask] = base_params.DEFAULT, min_minor_ac: Optional[ base_params.min_minor_ac ] = pca_params.min_minor_ac_default, From c5621065871d98fdd3009a028993aa1e0ef5c067 Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Wed, 27 Nov 2024 08:49:09 +1000 Subject: [PATCH 41/42] Update malariagen_data/anoph/to_plink.py Co-authored-by: Alistair Miles --- malariagen_data/anoph/to_plink.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/malariagen_data/anoph/to_plink.py b/malariagen_data/anoph/to_plink.py index 93261b4f2..398011f4b 100644 --- a/malariagen_data/anoph/to_plink.py +++ b/malariagen_data/anoph/to_plink.py @@ -37,7 +37,11 @@ def __init__( The `overwrite` parameter, set to true, will enable overwrite of data with the same SNP selection parameter values. """, - returns=("Binary Plink output files: .bed, .bim, .fam"), + returns=""" + Base path to files containing binary Plink output files. Append .bed, + .bim or .fam to obtain paths for the binary genotype table file, variant + information file and sample information file respectively. + """, notes=""" This computation may take some time to run, depending on your computing environment. Unless the `overwrite` parameter is set to `True`, results will be returned From de0b36ced8a6844985da13313572ed1ba31a0aba Mon Sep 17 00:00:00 2001 From: Tristan Dennis Date: Wed, 27 Nov 2024 21:28:08 +1000 Subject: [PATCH 42/42] coerce tmp_path from posix to str --- tests/anoph/test_plink_converter.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/anoph/test_plink_converter.py b/tests/anoph/test_plink_converter.py index 1f26b889e..dac3b8d9d 100644 --- a/tests/anoph/test_plink_converter.py +++ b/tests/anoph/test_plink_converter.py @@ -99,13 +99,13 @@ def test_plink_converter(fixture, api: PlinkConverter, tmp_path): n_snps = random.randint(1, n_snps_available) # Define plink params. - plink_params = dict(output_dir=tmp_path, n_snps=n_snps, **data_params) + plink_params = dict(output_dir=str(tmp_path), n_snps=n_snps, **data_params) # Make the plink files. api.biallelic_snps_to_plink(**plink_params) # Test to see if bed, bim, fam output files exist. - file_path = f"{tmp_path}/{plink_params['region']}.{plink_params['n_snps']}.{plink_params['min_minor_ac']}.{plink_params['max_missing_an']}.{plink_params['thin_offset']}" + file_path = f"{str(tmp_path)}/{plink_params['region']}.{plink_params['n_snps']}.{plink_params['min_minor_ac']}.{plink_params['max_missing_an']}.{plink_params['thin_offset']}" assert os.path.exists(f"{file_path}.bed") assert os.path.exists(f"{file_path}.bim")