From bbbbda9814e804ed0710c041bc16f2ba76a641a4 Mon Sep 17 00:00:00 2001 From: d-laub Date: Sun, 9 Mar 2025 19:54:52 -0700 Subject: [PATCH 01/53] docs: fix version format to be vX.Y.Z --- .github/workflows/bumpversion.yaml | 2 +- CHANGELOG.md => docs/source/changelog.md | 9 +++++++++ docs/source/changelog.md.j2 | 21 +++++++++++++++++++++ docs/source/index.md | 1 + pixi.lock | 4 ++-- pyproject.toml | 5 +++++ 6 files changed, 39 insertions(+), 3 deletions(-) rename CHANGELOG.md => docs/source/changelog.md (95%) create mode 100644 docs/source/changelog.md.j2 diff --git a/.github/workflows/bumpversion.yaml b/.github/workflows/bumpversion.yaml index 96a2ccb3..71380248 100644 --- a/.github/workflows/bumpversion.yaml +++ b/.github/workflows/bumpversion.yaml @@ -25,6 +25,6 @@ jobs: uses: softprops/action-gh-release@v2 with: body_path: "body.md" - tag_name: ${{ env.REVISION }} + tag_name: v${{ env.REVISION }} env: GITHUB_TOKEN: ${{ secrets.COMMITIZEN }} \ No newline at end of file diff --git a/CHANGELOG.md b/docs/source/changelog.md similarity index 95% rename from CHANGELOG.md rename to docs/source/changelog.md index 17bb823c..8f1ac630 100644 --- a/CHANGELOG.md +++ b/docs/source/changelog.md @@ -1,5 +1,14 @@ ## v0.9.0 (2025-03-06) +This is a breaking change for GVL. Users should view the ["What's a `gvl.Dataset`?"](https://genvarloader.readthedocs.io/en/latest/dataset.html) page in the documentation for details, but major breaks include: + +- removed the `length` argument from `gvl.write()`. Regions/BED files are now used as-is. If you want uniform length regions centered on inputs/peaks as before, preprocess your BED file with `gvl.with_length`. +- changed `Dataset.output_length` from a property to a dynamic setting with behavior describe in the "What's a gvl.Dataset?" page. +- changed track output shape to have a track axis. +- Datasets are now deterministic by default. + +As a result of these changes, GVL seamlessly supports ragged length output and also paves the way for on-the-fly splicing. Since many changes were made, I wouldn't be surprised if a few bugs crop up despite my best efforts -- please leave issues if so! + ### Feat - option to return ragged data from gvl.Dataset. output_length is set dynamically. fix: hap reconstruction matches bcftools. change default for Dataset.deterministic from False to True. change track output from a list of arrays to having a track dimension i.e. from shape (b [p] l) to (b t [p] l). docs: add dataset.md, faq.md and overhaul geuvadis.ipynb to be simpler and reflect changes in API. diff --git a/docs/source/changelog.md.j2 b/docs/source/changelog.md.j2 new file mode 100644 index 00000000..46209d0a --- /dev/null +++ b/docs/source/changelog.md.j2 @@ -0,0 +1,21 @@ +# Changelog + +{% for entry in tree %} + +## {{ entry.version }}{% if entry.date %} ({{ entry.date }}){% endif %} + +{% for change_key, changes in entry.changes.items() %} + +{% if change_key %} +### {{ change_key }} +{% endif %} + +{% for change in changes %} +{% if change.scope %} +- **{{ change.scope }}**: {{ change.message }} +{% elif change.message %} +- {{ change.message }} +{% endif %} +{% endfor %} +{% endfor %} +{% endfor %} \ No newline at end of file diff --git a/docs/source/index.md b/docs/source/index.md index 81341aa9..ee05708a 100644 --- a/docs/source/index.md +++ b/docs/source/index.md @@ -5,6 +5,7 @@ dataset geuvadis faq api +changelog ``` # GenVarLoader diff --git a/pixi.lock b/pixi.lock index 49172f0d..82bc4063 100644 --- a/pixi.lock +++ b/pixi.lock @@ -4001,8 +4001,8 @@ packages: timestamp: 1738501352608 - pypi: . name: genvarloader - version: 0.8.1 - sha256: 7d1c5d88cf141cecb44a656194847a9d41811892c5a48add74dfa8aa1235e397 + version: 0.9.0 + sha256: 6a064fd259aa57f918ae459b1f4d58239c4ef0fad70cb7c44168a3c1dfa4cb02 requires_dist: - numba>=0.58.1 - loguru diff --git a/pyproject.toml b/pyproject.toml index 4f41ecb2..5713030b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -61,9 +61,14 @@ filterwarnings = [ [tool.commitizen] name = "cz_conventional_commits" tag_format = "v$version" +legacy_tag_formats = ["$version"] version_scheme = "semver2" version_provider = "pep621" update_changelog_on_bump = true +changelog_file = 'docs/source/changelog.md' +changlog_incremental = true +changelog_start_rev = "v0.9.1" +template = "docs/source/changelog.md.j2" major_version_zero = true [build-system] From 2719433c783601c190c675be6cd7eccff34e207e Mon Sep 17 00:00:00 2001 From: d-laub Date: Mon, 10 Mar 2025 21:14:05 -0700 Subject: [PATCH 02/53] feat: initial prototype for splicing. --- pixi.lock | 2 +- python/genvarloader/_dataset/__init__.py | 204 ++++++++++++++++++++++- python/genvarloader/_ragged.py | 42 ++++- 3 files changed, 236 insertions(+), 12 deletions(-) diff --git a/pixi.lock b/pixi.lock index 82bc4063..017cca69 100644 --- a/pixi.lock +++ b/pixi.lock @@ -4002,7 +4002,7 @@ packages: - pypi: . name: genvarloader version: 0.9.0 - sha256: 6a064fd259aa57f918ae459b1f4d58239c4ef0fad70cb7c44168a3c1dfa4cb02 + sha256: 02aecfda8925fb4cf4320dada0124ce4cf7b2422d6b4eadbb4d415e6aff5719b requires_dist: - numba>=0.58.1 - loguru diff --git a/python/genvarloader/_dataset/__init__.py b/python/genvarloader/_dataset/__init__.py index 1439015b..9957fe5f 100644 --- a/python/genvarloader/_dataset/__init__.py +++ b/python/genvarloader/_dataset/__init__.py @@ -16,6 +16,7 @@ cast, ) +import awkward as ak import numba as nb import numpy as np import polars as pl @@ -24,6 +25,7 @@ from loguru import logger from numpy.typing import NDArray from tqdm.auto import tqdm +from typing_extensions import assert_never from .._ragged import ( INTERVAL_DTYPE, @@ -85,6 +87,14 @@ def from_table(cls, variants: Union[str, Path, pl.DataFrame]): ) +@define +class SpliceInfo: + names: NDArray + """Unique identifier for each spliced element.""" + index: ak.Array + """Mapping from each element's position in `names` to the indices of the regions that are spliced together to form it.""" + + @define(frozen=True) class Dataset: """A dataset of genotypes, reference sequences, and intervals. @@ -136,6 +146,9 @@ def open( return_indices: bool = False, deterministic: bool = True, return_annotations: bool = False, + splice_info: Optional[ + Union[str, Tuple[str, str], Dict[Any, NDArray[np.integer]]] + ] = None, ) -> "Dataset": """Open a dataset from a path. If no reference genome is provided, the dataset can only yield tracks. @@ -191,6 +204,7 @@ def open( return_indices=return_indices, deterministic=deterministic, return_annotations=return_annotations, + splice_info=splice_info, ) if reference is None and ds.has_genotypes: @@ -387,6 +401,9 @@ def with_settings( return_indices: Optional[bool] = None, deterministic: Optional[bool] = None, return_annotations: Optional[bool] = None, + splice_info: Optional[ + Union[Literal[False], str, Tuple[str, str], Dict[Any, NDArray[np.integer]]] + ] = None, ) -> "Dataset": """Modify settings of the dataset, returning a new dataset without modifying the old one. @@ -415,9 +432,6 @@ def with_settings( can be returned. return_annotations Whether to return sequence annotations. See :attr:`Dataset.return_annotations ` for more information. - ragged - Whether to return tracks as ragged arrays. This is useful for tracks that have variable lengths, such as indel tracks. - See :attr:`Dataset.ragged ` for more information. """ to_evolve: Dict[str, Any] = {} @@ -509,6 +523,43 @@ def with_settings( if return_annotations is not None: to_evolve["return_annotations"] = return_annotations + if splice_info is not None: + if splice_info is False: + to_evolve["splice_info"] = None + else: + if isinstance(splice_info, str): + names, unsorter, idx, lengths = np.unique( + self.regions[splice_info], + return_index=True, + return_inverse=True, + return_counts=True, + ) + names = names[unsorter] + index = Ragged.from_lengths(np.argsort(idx), lengths).to_awkward()[ + unsorter + ] + elif isinstance(splice_info, Tuple): + names, unsorter, lengths = np.unique( + self.regions[splice_info[0]], + return_index=True, + return_counts=True, + ) + data = ( + self.regions[splice_info] + .with_row_index() + .sort("names", "order")["index"] + .to_numpy() + ) + index = Ragged.from_lengths(data, lengths).to_awkward()[unsorter] + elif isinstance(splice_info, dict): + names = np.array(list(splice_info.keys())) + index = ak.Array(splice_info.values()) + else: + raise TypeError("Invalid splice_regions type.") + + index = cast(ak.Array, index) + to_evolve["splice_info"] = SpliceInfo(names, index) + return evolve(self, **to_evolve) def subset_to( @@ -1025,6 +1076,9 @@ def write_transformed_track( phased: Optional[bool] = None """Whether the genotypes are phased. Set to None if genotypes are not present.""" + splice_info: Optional[SpliceInfo] = None + """The splice information for the dataset.""" + _reference: Optional[Reference] = field(default=None, alias="_reference") """The reference genome. This is kept in memory.""" @@ -1238,6 +1292,148 @@ def __getitem__( return self._getitem_raveled(ravel_idx) def _getitem_raveled(self, idx: Idx) -> Any: + if self.splice_info is None: + return self._getitem_unspliced(idx) + else: + return self._getitem_spliced(idx) + + def _getitem_spliced(self, idx: Idx) -> Any: + assert self.splice_info is not None + # TODO: need to assert no jitter and deterministic? + # * In theory, this still "works" with jitter or non-determinism, but why would anyone want this? Would they want a different alg here? + # * Potential issues: + # * Each each component of the spliced output will have different jitter + # * For non-determinism, each component will have different shifts & different unphased haplotypes chosen + + if self.output_length == "variable": + inner_ds = self.with_settings(return_indices=False, output_length="ragged") + # need to wait to pad until after done splicing + elif self.output_length == "ragged": + inner_ds = self.with_settings(return_indices=False) + else: + raise RuntimeError( + "In general, splicing cannot be done with fixed length data because even if the length of each region's data" + " is fixed/constant, the number of elements in each spliced element is not fixed. Thus, the final length of the" + " spliced elements will be variable." + ) + + if self.is_subset: + # TODO: handle subset datasets + raise NotImplementedError( + "Splicing is not yet implemented for subset datasets." + ) + # TODO: probably doesn't work for indexing with an ndarray because of flattening, may need to reshape afterwards + splice_idx = self.splice_info.index[idx] + unspliced_idx: NDArray = ak.flatten(splice_idx, axis=None).to_numpy() + unspliced_idx.sort() + + batch = inner_ds._getitem_unspliced(unspliced_idx) + ragged_out: List[Ragged] = [] + if self.sequence_type == "haplotypes": + haps = batch[0] + + if self.return_annotations: + haps, annot_v_idx, annot_pos = haps.values() + + new_lengths = np.add.reduceat( + haps.lengths, + _lengths_to_offsets(ak.count(splice_idx, -1).to_numpy())[:-1], + axis=0, + ) + b, p = [ + ak.flatten(a, axis=None).to_numpy() + for a in ak.broadcast_arrays( + splice_idx[:, None], + np.arange(len(splice_idx))[None, :], + ) + ] + + haps = Ragged.from_lengths( + ak.flatten(haps.to_awkward()[b, p]).to_numpy(), new_lengths + ) + + ragged_out.append(haps) + if self.return_annotations: + annot_v_idx = Ragged.from_lengths( + ak.flatten(annot_v_idx.to_awkward()[b, p]).to_numpy(), + new_lengths, + ) + annot_pos = Ragged.from_lengths( + ak.flatten(annot_pos.to_awkward()[b, p]).to_numpy(), new_lengths + ) + ragged_out.extend((annot_v_idx, annot_pos)) + + if self.active_tracks is not None: + tracks = batch[1] + awk_tracks = tracks.to_awkward() + new_lengths = np.add.reduceat( + tracks.lengths, + _lengths_to_offsets(ak.count(splice_idx, -1).to_numpy())[:-1], + axis=0, + ) + b, t, p = [ + ak.flatten(a, axis=None).to_numpy() + for a in ak.broadcast_arrays( + splice_idx[:, None, None], + np.arange(len(splice_idx))[None, :, None], + np.arange(len(splice_idx))[None, None, :], + ) + ] + tracks = Ragged.from_lengths( + ak.flatten(awk_tracks[b, t, p]).to_numpy(), new_lengths + ) + ragged_out.append(tracks) + + if self.output_length == "ragged": + out: Sequence[Union[Ragged, NDArray]] = ragged_out + elif self.output_length == "variable": + out = [] + if self.sequence_type is not None: + assert self._reference is not None + pad_char = self._reference.pad_char + out.append(ragged_out[0].to_padded(pad_char)) + n_seqs = 1 + + if self.return_annotations: + out.append(ragged_out[1].to_padded(-1)) + out.append(ragged_out[2].to_padded(-1)) + n_seqs = 3 + else: + n_seqs = 0 + + if self.active_tracks is not None: + # TODO: is 0 always the correct pad value for tracks? + # how to provide an API so user can specify? + out.extend(o.to_padded(0) for o in ragged_out[n_seqs:]) + else: + assert_never(self.output_length) # type: ignore | we check this above + + if self.return_annotations: + haps = dict(zip(("haplotypes", "variant_indices", "positions"), out[:3])) + _out = (haps, *out[3:]) + else: + _out = tuple(out) + + # TODO: handle squeezing and reshaping for scalar and ndarray indices, respectively + + if self.return_indices: + # TODO + raise NotImplementedError( + "return_indices is not yet implemented for spliced data" + ) + inp_idx = self._idxer.d2i_map[ds_idx] + inp_r_idx, inp_s_idx = np.unravel_index(inp_idx, self.full_shape) + out.extend((inp_r_idx, inp_s_idx)) # type: ignore + + if self.transform is not None: + if isinstance(_out, tuple): + _out = self.transform(*_out) + else: + _out = self.transform(_out) + + return _out + + def _getitem_unspliced(self, idx: Idx) -> Any: """Reconstruct some haplotypes and/or tracks. Parameters @@ -1799,7 +1995,7 @@ def _get_tracks( def __iter__(self): for i in range(len(self)): - yield self._getitem_raveled(i) + yield self._getitem_unspliced(i) @nb.njit(parallel=True, nogil=True, cache=True) diff --git a/python/genvarloader/_ragged.py b/python/genvarloader/_ragged.py index 7386951e..90e7f102 100644 --- a/python/genvarloader/_ragged.py +++ b/python/genvarloader/_ragged.py @@ -1,6 +1,6 @@ from __future__ import annotations -from typing import Any, Generic, Optional, Tuple, TypeVar, Union +from typing import Any, Generic, Optional, Tuple, TypeVar, Union, cast import awkward as ak import numba as nb @@ -57,6 +57,14 @@ def __attrs_post_init__(self): def __len__(self): return self.shape[0] + @property + def dtype(self) -> np.dtype[RDTYPE]: + """Data type of the ragged array.""" + return self.data.dtype + + def view(self, dtype: np.dtype): + return Ragged.from_offsets(self.data.view(dtype), self.shape, self.offsets) + @property def offsets(self) -> NDArray[np.int64]: """Offsets into the data array to get corresponding elements. The i-th element @@ -233,10 +241,20 @@ def __getitem__(self, idx: Union[Idx, Tuple[Idx, ...]]): def to_awkward(self) -> ak.Array: """Convert to an `Awkward `_ array without copying. Note that this effectively - returns a view of the data, so modifying the data will modify the original array.""" + returns a view of the data, so modifying the data will modify the original array. + + .. note:: + Sequence arrays (i.e. dtype of "S1") will return awkward arrays with dtype np.uint8 since strings are represented + in Awkward differently than in GVL such that it does not support "S1" data. + + """ + if self.dtype.type == np.bytes_: + data = self.data.view(np.uint8) + else: + data = self.data layout = ListOffsetArray( Index64(self.offsets), - NumpyArray(self.data), # type: ignore | NDArray[RDTYPE] is ArrayLike + NumpyArray(data), # type: ignore | NDArray[RDTYPE] is ArrayLike ) for size in reversed(self.shape[1:]): @@ -258,11 +276,21 @@ def from_awkward(cls, awk: "ak.Array") -> "Ragged": ) from err # extract data and offsets - layout = awk.layout._offsets_and_flattened(0, -1)[1].content - data = np.asarray(layout.content.data) - offsets = np.asarray(layout.offsets.data) + data = ak.flatten(awk, axis=None).to_numpy() + layout = awk.layout + while hasattr(layout, "content"): + if isinstance(layout, ListOffsetArray): + offsets = layout.offsets.data + offsets = cast(NDArray[np.int64], offsets) + rag = cls.from_offsets(data, shape, offsets) + break + else: + layout = layout.content + else: + lengths = ak.count(awk, axis=-1).to_numpy() + rag = cls.from_lengths(data, lengths) - return cls.from_offsets(data, shape, offsets) + return rag INTERVAL_DTYPE = np.dtype( From 9804e0b7cd5a641a6762ebf7ad1338628968c94c Mon Sep 17 00:00:00 2001 From: d-laub Date: Tue, 11 Mar 2025 15:08:46 -0700 Subject: [PATCH 03/53] feat(wip): testing spliced return values --- docs/source/splicing.ipynb | 268 +++++++++++++++++++++++ python/genvarloader/_dataset/__init__.py | 37 ++-- 2 files changed, 291 insertions(+), 14 deletions(-) create mode 100644 docs/source/splicing.ipynb diff --git a/docs/source/splicing.ipynb b/docs/source/splicing.ipynb new file mode 100644 index 00000000..6178c885 --- /dev/null +++ b/docs/source/splicing.ipynb @@ -0,0 +1,268 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import genvarloader as gvl\n", + "import polars as pl\n", + "import pooch\n", + "from pathlib import Path\n", + "import numpy as np\n", + "from tempfile import TemporaryDirectory" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# GRCh38 chromosome 22 sequence\n", + "reference = pooch.retrieve(\n", + " url=\"https://ftp.ensembl.org/pub/release-112/fasta/homo_sapiens/dna/Homo_sapiens.GRCh38.dna.chromosome.22.fa.gz\",\n", + " known_hash=\"sha256:974f97ac8ef7ffae971b63b47608feda327403be40c27e391ee4a1a78b800df5\",\n", + " progressbar=True,\n", + ")\n", + "if not Path(f\"{reference[:-3]}.bgz\").exists():\n", + " !gzip -dc {reference} | bgzip > {reference[:-3]}.bgz\n", + "reference = reference[:-3] + \".bgz\"\n", + "\n", + "# PLINK 2 files\n", + "variants = pooch.retrieve(\n", + " url=\"doi:10.5281/zenodo.13656224/1kGP.chr22.pgen\",\n", + " known_hash=\"md5:31aba970e35f816701b2b99118dfc2aa\",\n", + " progressbar=True,\n", + " fname=\"1kGP.chr22.pgen\",\n", + ")\n", + "pooch.retrieve(\n", + " url=\"doi:10.5281/zenodo.13656224/1kGP.chr22.psam\",\n", + " known_hash=\"md5:eefa7aad5acffe62bf41df0a4600129c\",\n", + " progressbar=True,\n", + " fname=\"1kGP.chr22.psam\",\n", + ")\n", + "pooch.retrieve(\n", + " url=\"doi:10.5281/zenodo.13656224/1kGP.chr22.pvar\",\n", + " known_hash=\"md5:5f922af91c1a2f6822e2f1bb4469d12b\",\n", + " progressbar=True,\n", + " fname=\"1kGP.chr22.pvar\",\n", + ")\n", + "\n", + "# GRCh38 Gencode GFF3\n", + "gff = pooch.retrieve(\n", + " url=\"https://ftp.ebi.ac.uk/pub/databases/gencode/Gencode_human/release_47/gencode.v47.annotation.gff3.gz\",\n", + " known_hash=\"md5:918948a059c72088e44861835ade8a89\",\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "shape: (5, 9)
seqnamesourcefeaturestartendscorestrandframeattribute
strstrstri64i64strstrstrstr
"chr1""HAVANA""gene"1112124894".""+"".""ID=ENSG00000290825.2;gene_id=E…
"chr1""HAVANA""transcript"1112114413".""+"".""ID=ENST00000832824.1;Parent=EN…
"chr1""HAVANA""exon"1112111211".""+"".""ID=exon:ENST00000832824.1:1;Pa…
"chr1""HAVANA""exon"1201012227".""+"".""ID=exon:ENST00000832824.1:2;Pa…
"chr1""HAVANA""exon"1261312721".""+"".""ID=exon:ENST00000832824.1:3;Pa…
" + ], + "text/plain": [ + "shape: (5, 9)\n", + "┌─────────┬────────┬────────────┬───────┬───┬───────┬────────┬───────┬─────────────────────────────┐\n", + "│ seqname ┆ source ┆ feature ┆ start ┆ … ┆ score ┆ strand ┆ frame ┆ attribute │\n", + "│ --- ┆ --- ┆ --- ┆ --- ┆ ┆ --- ┆ --- ┆ --- ┆ --- │\n", + "│ str ┆ str ┆ str ┆ i64 ┆ ┆ str ┆ str ┆ str ┆ str │\n", + "╞═════════╪════════╪════════════╪═══════╪═══╪═══════╪════════╪═══════╪═════════════════════════════╡\n", + "│ chr1 ┆ HAVANA ┆ gene ┆ 11121 ┆ … ┆ . ┆ + ┆ . ┆ ID=ENSG00000290825.2;gene_i │\n", + "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ d=E… │\n", + "│ chr1 ┆ HAVANA ┆ transcript ┆ 11121 ┆ … ┆ . ┆ + ┆ . ┆ ID=ENST00000832824.1;Parent │\n", + "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ =EN… │\n", + "│ chr1 ┆ HAVANA ┆ exon ┆ 11121 ┆ … ┆ . ┆ + ┆ . ┆ ID=exon:ENST00000832824.1:1 │\n", + "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ;Pa… │\n", + "│ chr1 ┆ HAVANA ┆ exon ┆ 12010 ┆ … ┆ . ┆ + ┆ . ┆ ID=exon:ENST00000832824.1:2 │\n", + "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ;Pa… │\n", + "│ chr1 ┆ HAVANA ┆ exon ┆ 12613 ┆ … ┆ . ┆ + ┆ . ┆ ID=exon:ENST00000832824.1:3 │\n", + "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ;Pa… │\n", + "└─────────┴────────┴────────────┴───────┴───┴───────┴────────┴───────┴─────────────────────────────┘" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gff_df = pl.read_csv(\n", + " gff,\n", + " separator=\"\\t\",\n", + " comment_prefix=\"#\",\n", + " has_header=False,\n", + " new_columns=[\n", + " \"seqname\",\n", + " \"source\",\n", + " \"feature\",\n", + " \"start\",\n", + " \"end\",\n", + " \"score\",\n", + " \"strand\",\n", + " \"frame\",\n", + " \"attribute\",\n", + " ],\n", + ")\n", + "gff_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "shape: (5, 11)
chromsourcefeaturechromStartchromEndscorestrandframeattributegeneexon_num
strstrstri64i64strstrstrstrstrstr
"chr22""HAVANA""exon"1052903610529164".""-"".""ID=exon:ENST00000724296.1:1;Pa…"ENSG00000294541.1""1"
"chr22""HAVANA""exon"1052785310528040".""-"".""ID=exon:ENST00000724296.1:2;Pa…"ENSG00000294541.1""2"
"chr22""HAVANA""exon"1052434510524446".""-"".""ID=exon:ENST00000724296.1:3;Pa…"ENSG00000294541.1""3"
"chr22""ENSEMBL""exon"1073617110736283".""-"".""ID=exon:ENST00000615943.1:1;Pa…"ENSG00000277248.1""1"
"chr22""HAVANA""exon"1074205010742191".""+"".""ID=exon:ENST00000779064.1:1;Pa…"ENSG00000301473.1""1"
" + ], + "text/plain": [ + "shape: (5, 11)\n", + "┌───────┬─────────┬─────────┬────────────┬───┬───────┬─────────────────┬────────────────┬──────────┐\n", + "│ chrom ┆ source ┆ feature ┆ chromStart ┆ … ┆ frame ┆ attribute ┆ gene ┆ exon_num │\n", + "│ --- ┆ --- ┆ --- ┆ --- ┆ ┆ --- ┆ --- ┆ --- ┆ --- │\n", + "│ str ┆ str ┆ str ┆ i64 ┆ ┆ str ┆ str ┆ str ┆ str │\n", + "╞═══════╪═════════╪═════════╪════════════╪═══╪═══════╪═════════════════╪════════════════╪══════════╡\n", + "│ chr22 ┆ HAVANA ┆ exon ┆ 10529036 ┆ … ┆ . ┆ ID=exon:ENST000 ┆ ENSG0000029454 ┆ 1 │\n", + "│ ┆ ┆ ┆ ┆ ┆ ┆ 00724296.1:1;Pa ┆ 1.1 ┆ │\n", + "│ ┆ ┆ ┆ ┆ ┆ ┆ … ┆ ┆ │\n", + "│ chr22 ┆ HAVANA ┆ exon ┆ 10527853 ┆ … ┆ . ┆ ID=exon:ENST000 ┆ ENSG0000029454 ┆ 2 │\n", + "│ ┆ ┆ ┆ ┆ ┆ ┆ 00724296.1:2;Pa ┆ 1.1 ┆ │\n", + "│ ┆ ┆ ┆ ┆ ┆ ┆ … ┆ ┆ │\n", + "│ chr22 ┆ HAVANA ┆ exon ┆ 10524345 ┆ … ┆ . ┆ ID=exon:ENST000 ┆ ENSG0000029454 ┆ 3 │\n", + "│ ┆ ┆ ┆ ┆ ┆ ┆ 00724296.1:3;Pa ┆ 1.1 ┆ │\n", + "│ ┆ ┆ ┆ ┆ ┆ ┆ … ┆ ┆ │\n", + "│ chr22 ┆ ENSEMBL ┆ exon ┆ 10736171 ┆ … ┆ . ┆ ID=exon:ENST000 ┆ ENSG0000027724 ┆ 1 │\n", + "│ ┆ ┆ ┆ ┆ ┆ ┆ 00615943.1:1;Pa ┆ 8.1 ┆ │\n", + "│ ┆ ┆ ┆ ┆ ┆ ┆ … ┆ ┆ │\n", + "│ chr22 ┆ HAVANA ┆ exon ┆ 10742050 ┆ … ┆ . ┆ ID=exon:ENST000 ┆ ENSG0000030147 ┆ 1 │\n", + "│ ┆ ┆ ┆ ┆ ┆ ┆ 00779064.1:1;Pa ┆ 3.1 ┆ │\n", + "│ ┆ ┆ ┆ ┆ ┆ ┆ … ┆ ┆ │\n", + "└───────┴─────────┴─────────┴────────────┴───┴───────┴─────────────────┴────────────────┴──────────┘" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "chr22_genes = (\n", + " gff_df.filter(pl.col(\"seqname\") == \"chr22\")\n", + " .filter(pl.col(\"feature\") == \"exon\")\n", + " .with_columns(\n", + " gene=pl.col(\"attribute\").str.extract(r\"gene_id=(.*?);\"),\n", + " exon_num=pl.col(\"attribute\").str.extract(r\"exon_number=(.*?);\"),\n", + " )\n", + " .rename({\"seqname\": \"chrom\", \"start\": \"chromStart\", \"end\": \"chromEnd\"})\n", + ")\n", + "chr22_genes.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "26cf9d1b27a94b2cb454d8e32a90f98c", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + " 0%| | 0/1 [00:00 1\u001b[0m \u001b[43mds\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_getitem_spliced\u001b[49m\u001b[43m(\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m.\u001b[39mview(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mS1\u001b[39m\u001b[38;5;124m'\u001b[39m)\n", + "File \u001b[0;32m/carter/users/dlaub/projects/GenVarLoader/python/genvarloader/_dataset/__init__.py:1358\u001b[0m, in \u001b[0;36mDataset._getitem_spliced\u001b[0;34m(self, idx)\u001b[0m\n\u001b[1;32m 1344\u001b[0m new_lengths \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39madd\u001b[38;5;241m.\u001b[39mreduceat(\n\u001b[1;32m 1345\u001b[0m haps\u001b[38;5;241m.\u001b[39mlengths,\n\u001b[1;32m 1346\u001b[0m _lengths_to_offsets(ak\u001b[38;5;241m.\u001b[39mcount(splice_idx, \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m)\u001b[38;5;241m.\u001b[39mto_numpy())[:\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m],\n\u001b[1;32m 1347\u001b[0m axis\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0\u001b[39m, \u001b[38;5;66;03m# this might not generalized to ndim indices\u001b[39;00m\n\u001b[1;32m 1348\u001b[0m )\n\u001b[1;32m 1349\u001b[0m b, p \u001b[38;5;241m=\u001b[39m [\n\u001b[1;32m 1350\u001b[0m ak\u001b[38;5;241m.\u001b[39mflatten(a, axis\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m)\u001b[38;5;241m.\u001b[39mto_numpy()\n\u001b[1;32m 1351\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m ak\u001b[38;5;241m.\u001b[39mbroadcast_arrays(\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1354\u001b[0m )\n\u001b[1;32m 1355\u001b[0m ]\n\u001b[1;32m 1357\u001b[0m haps \u001b[38;5;241m=\u001b[39m Ragged\u001b[38;5;241m.\u001b[39mfrom_lengths(\n\u001b[0;32m-> 1358\u001b[0m ak\u001b[38;5;241m.\u001b[39mflatten(\u001b[43mhaps\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mto_awkward\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m[\u001b[49m\u001b[43mb\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mp\u001b[49m\u001b[43m]\u001b[49m)\u001b[38;5;241m.\u001b[39mto_numpy()\u001b[38;5;241m.\u001b[39mview(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mS1\u001b[39m\u001b[38;5;124m\"\u001b[39m), new_lengths\n\u001b[1;32m 1359\u001b[0m )\n\u001b[1;32m 1361\u001b[0m ragged_out\u001b[38;5;241m.\u001b[39mappend(haps)\n\u001b[1;32m 1362\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mreturn_annotations:\n", + "File \u001b[0;32m/carter/users/dlaub/projects/GenVarLoader/.pixi/envs/docs/lib/python3.12/site-packages/awkward/highlevel.py:1105\u001b[0m, in \u001b[0;36mArray.__getitem__\u001b[0;34m(self, where)\u001b[0m\n\u001b[1;32m 676\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21m__getitem__\u001b[39m(\u001b[38;5;28mself\u001b[39m, where):\n\u001b[1;32m 677\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 678\u001b[0m \u001b[38;5;124;03m Args:\u001b[39;00m\n\u001b[1;32m 679\u001b[0m \u001b[38;5;124;03m where (many types supported; see below): Index of positions to\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1103\u001b[0m \u001b[38;5;124;03m have the same dimension as the array being indexed.\u001b[39;00m\n\u001b[1;32m 1104\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m-> 1105\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m ak\u001b[38;5;241m.\u001b[39m_errors\u001b[38;5;241m.\u001b[39mSlicingErrorContext(\u001b[38;5;28mself\u001b[39m, where):\n\u001b[1;32m 1106\u001b[0m \u001b[38;5;66;03m# Handle named axis\u001b[39;00m\n\u001b[1;32m 1107\u001b[0m (_, ndim) \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_layout\u001b[38;5;241m.\u001b[39mminmax_depth\n\u001b[1;32m 1108\u001b[0m named_axis \u001b[38;5;241m=\u001b[39m _get_named_axis(\u001b[38;5;28mself\u001b[39m)\n", + "File \u001b[0;32m/carter/users/dlaub/projects/GenVarLoader/.pixi/envs/docs/lib/python3.12/site-packages/awkward/_errors.py:80\u001b[0m, in \u001b[0;36mErrorContext.__exit__\u001b[0;34m(self, exception_type, exception_value, traceback)\u001b[0m\n\u001b[1;32m 78\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_slate\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__dict__\u001b[39m\u001b[38;5;241m.\u001b[39mclear()\n\u001b[1;32m 79\u001b[0m \u001b[38;5;66;03m# Handle caught exception\u001b[39;00m\n\u001b[0;32m---> 80\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdecorate_exception(exception_type, exception_value)\n\u001b[1;32m 81\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 82\u001b[0m \u001b[38;5;66;03m# Step out of the way so that another ErrorContext can become primary.\u001b[39;00m\n\u001b[1;32m 83\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mprimary() \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28mself\u001b[39m:\n", + "File \u001b[0;32m/carter/users/dlaub/projects/GenVarLoader/.pixi/envs/docs/lib/python3.12/site-packages/awkward/highlevel.py:1113\u001b[0m, in \u001b[0;36mArray.__getitem__\u001b[0;34m(self, where)\u001b[0m\n\u001b[1;32m 1109\u001b[0m where \u001b[38;5;241m=\u001b[39m _normalize_named_slice(named_axis, where, ndim)\n\u001b[1;32m 1111\u001b[0m NamedAxis\u001b[38;5;241m.\u001b[39mmapping \u001b[38;5;241m=\u001b[39m named_axis\n\u001b[0;32m-> 1113\u001b[0m indexed_layout \u001b[38;5;241m=\u001b[39m prepare_layout(\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_layout\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_getitem\u001b[49m\u001b[43m(\u001b[49m\u001b[43mwhere\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mNamedAxis\u001b[49m\u001b[43m)\u001b[49m)\n\u001b[1;32m 1115\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m NamedAxis\u001b[38;5;241m.\u001b[39mmapping:\n\u001b[1;32m 1116\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m ak\u001b[38;5;241m.\u001b[39moperations\u001b[38;5;241m.\u001b[39mak_with_named_axis\u001b[38;5;241m.\u001b[39m_impl(\n\u001b[1;32m 1117\u001b[0m indexed_layout,\n\u001b[1;32m 1118\u001b[0m named_axis\u001b[38;5;241m=\u001b[39mNamedAxis\u001b[38;5;241m.\u001b[39mmapping,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1121\u001b[0m attrs\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_attrs,\n\u001b[1;32m 1122\u001b[0m )\n", + "File \u001b[0;32m/carter/users/dlaub/projects/GenVarLoader/.pixi/envs/docs/lib/python3.12/site-packages/awkward/contents/content.py:649\u001b[0m, in \u001b[0;36mContent._getitem\u001b[0;34m(self, where, named_axis)\u001b[0m\n\u001b[1;32m 640\u001b[0m named_axis\u001b[38;5;241m.\u001b[39mmapping \u001b[38;5;241m=\u001b[39m _named_axis\n\u001b[1;32m 642\u001b[0m \u001b[38;5;28mnext\u001b[39m \u001b[38;5;241m=\u001b[39m ak\u001b[38;5;241m.\u001b[39mcontents\u001b[38;5;241m.\u001b[39mRegularArray(\n\u001b[1;32m 643\u001b[0m this,\n\u001b[1;32m 644\u001b[0m this\u001b[38;5;241m.\u001b[39mlength,\n\u001b[1;32m 645\u001b[0m \u001b[38;5;241m1\u001b[39m,\n\u001b[1;32m 646\u001b[0m parameters\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 647\u001b[0m )\n\u001b[0;32m--> 649\u001b[0m out \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mnext\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_getitem_next\u001b[49m\u001b[43m(\u001b[49m\u001b[43mnextwhere\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnextwhere\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 651\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m out\u001b[38;5;241m.\u001b[39mlength \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m unknown_length \u001b[38;5;129;01mand\u001b[39;00m out\u001b[38;5;241m.\u001b[39mlength \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m0\u001b[39m:\n\u001b[1;32m 652\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m out\u001b[38;5;241m.\u001b[39m_getitem_nothing()\n", + "File \u001b[0;32m/carter/users/dlaub/projects/GenVarLoader/.pixi/envs/docs/lib/python3.12/site-packages/awkward/contents/regulararray.py:575\u001b[0m, in \u001b[0;36mRegularArray._getitem_next\u001b[0;34m(self, head, tail, advanced)\u001b[0m\n\u001b[1;32m 573\u001b[0m regular_flathead \u001b[38;5;241m=\u001b[39m ak\u001b[38;5;241m.\u001b[39mindex\u001b[38;5;241m.\u001b[39mIndex64\u001b[38;5;241m.\u001b[39mempty(flathead\u001b[38;5;241m.\u001b[39mshape[\u001b[38;5;241m0\u001b[39m], index_nplike)\n\u001b[1;32m 574\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m regular_flathead\u001b[38;5;241m.\u001b[39mnplike \u001b[38;5;129;01mis\u001b[39;00m index_nplike\n\u001b[0;32m--> 575\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_maybe_index_error\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 576\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_backend\u001b[49m\u001b[43m[\u001b[49m\n\u001b[1;32m 577\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mawkward_RegularArray_getitem_next_array_regularize\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 578\u001b[0m \u001b[43m \u001b[49m\u001b[43mregular_flathead\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdtype\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtype\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 579\u001b[0m \u001b[43m \u001b[49m\u001b[43mflathead\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdtype\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtype\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 580\u001b[0m \u001b[43m \u001b[49m\u001b[43m]\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 581\u001b[0m \u001b[43m \u001b[49m\u001b[43mregular_flathead\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdata\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 582\u001b[0m \u001b[43m \u001b[49m\u001b[43mflathead\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 583\u001b[0m \u001b[43m \u001b[49m\u001b[43mflathead\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mshape\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 584\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_size\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 585\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 586\u001b[0m \u001b[43m \u001b[49m\u001b[43mslicer\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mhead\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 587\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 589\u001b[0m nexthead, nexttail \u001b[38;5;241m=\u001b[39m ak\u001b[38;5;241m.\u001b[39m_slicing\u001b[38;5;241m.\u001b[39mhead_tail(tail)\n\u001b[1;32m 590\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m advanced \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mor\u001b[39;00m (\n\u001b[1;32m 591\u001b[0m advanced\u001b[38;5;241m.\u001b[39mlength \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m unknown_length \u001b[38;5;129;01mand\u001b[39;00m advanced\u001b[38;5;241m.\u001b[39mlength \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m0\u001b[39m\n\u001b[1;32m 592\u001b[0m ):\n", + "File \u001b[0;32m/carter/users/dlaub/projects/GenVarLoader/.pixi/envs/docs/lib/python3.12/site-packages/awkward/contents/content.py:295\u001b[0m, in \u001b[0;36mContent._maybe_index_error\u001b[0;34m(self, error, slicer)\u001b[0m\n\u001b[1;32m 293\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 294\u001b[0m message \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backend\u001b[38;5;241m.\u001b[39mformat_kernel_error(error)\n\u001b[0;32m--> 295\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m ak\u001b[38;5;241m.\u001b[39m_errors\u001b[38;5;241m.\u001b[39mindex_error(\u001b[38;5;28mself\u001b[39m, slicer, message)\n", + "\u001b[0;31mIndexError\u001b[0m: cannot slice RegularArray (of length 1) with [3]: index out of range while attempting to get index 3 (in compiled code: https://github.com/scikit-hep/awkward/blob/awkward-cpp-44/awkward-cpp/src/cpu-kernels/awkward_RegularArray_getitem_next_array_regularize.cpp#L19)", + "\u001b[0m\nThis error occurred while attempting to slice\n\n \n\nwith\n\n (array([3], dtype=uint32), array([0]))" + ] + } + ], + "source": [ + "ds._getitem_spliced([1])[0].view('S1')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "GVL Docs", + "language": "python", + "name": "gvl-docs" + }, + "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.12.8" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/python/genvarloader/_dataset/__init__.py b/python/genvarloader/_dataset/__init__.py index 9957fe5f..250cf558 100644 --- a/python/genvarloader/_dataset/__init__.py +++ b/python/genvarloader/_dataset/__init__.py @@ -528,18 +528,18 @@ def with_settings( to_evolve["splice_info"] = None else: if isinstance(splice_info, str): - names, unsorter, idx, lengths = np.unique( + names, sorter, idx, lengths = np.unique( self.regions[splice_info], return_index=True, return_inverse=True, return_counts=True, ) - names = names[unsorter] + names = names[np.argsort(sorter)] index = Ragged.from_lengths(np.argsort(idx), lengths).to_awkward()[ - unsorter + np.argsort(sorter) ] elif isinstance(splice_info, Tuple): - names, unsorter, lengths = np.unique( + names, sorter, lengths = np.unique( self.regions[splice_info[0]], return_index=True, return_counts=True, @@ -547,10 +547,12 @@ def with_settings( data = ( self.regions[splice_info] .with_row_index() - .sort("names", "order")["index"] + .sort(splice_info)["index"] .to_numpy() ) - index = Ragged.from_lengths(data, lengths).to_awkward()[unsorter] + index = Ragged.from_lengths(data, lengths).to_awkward()[ + np.argsort(sorter) + ] elif isinstance(splice_info, dict): names = np.array(list(splice_info.keys())) index = ak.Array(splice_info.values()) @@ -1298,6 +1300,7 @@ def _getitem_raveled(self, idx: Idx) -> Any: return self._getitem_spliced(idx) def _getitem_spliced(self, idx: Idx) -> Any: + # TODO need to disable RC for unspliced components, and then RC after splicing assert self.splice_info is not None # TODO: need to assert no jitter and deterministic? # * In theory, this still "works" with jitter or non-determinism, but why would anyone want this? Would they want a different alg here? @@ -1323,11 +1326,17 @@ def _getitem_spliced(self, idx: Idx) -> Any: "Splicing is not yet implemented for subset datasets." ) # TODO: probably doesn't work for indexing with an ndarray because of flattening, may need to reshape afterwards - splice_idx = self.splice_info.index[idx] - unspliced_idx: NDArray = ak.flatten(splice_idx, axis=None).to_numpy() - unspliced_idx.sort() + idx = idx_like_to_array(idx, len(self)) + r_idx, s_idx = np.unravel_index(idx, self.full_shape) + splice_idx = self.splice_info.index[r_idx] + unspliced_idx: NDArray = np.sort(ak.flatten(splice_idx, axis=None).to_numpy()) + + ds_idx = np.ravel_multi_index((unspliced_idx, s_idx), self.full_shape) + batch = inner_ds._getitem_unspliced(ds_idx) + + if isinstance(batch, (Ragged, dict)): + batch = (batch,) - batch = inner_ds._getitem_unspliced(unspliced_idx) ragged_out: List[Ragged] = [] if self.sequence_type == "haplotypes": haps = batch[0] @@ -1338,7 +1347,7 @@ def _getitem_spliced(self, idx: Idx) -> Any: new_lengths = np.add.reduceat( haps.lengths, _lengths_to_offsets(ak.count(splice_idx, -1).to_numpy())[:-1], - axis=0, + axis=0, # this might not generalized to ndim indices ) b, p = [ ak.flatten(a, axis=None).to_numpy() @@ -1349,7 +1358,7 @@ def _getitem_spliced(self, idx: Idx) -> Any: ] haps = Ragged.from_lengths( - ak.flatten(haps.to_awkward()[b, p]).to_numpy(), new_lengths + ak.flatten(haps.to_awkward()[b, p]).to_numpy().view("S1"), new_lengths ) ragged_out.append(haps) @@ -1369,7 +1378,7 @@ def _getitem_spliced(self, idx: Idx) -> Any: new_lengths = np.add.reduceat( tracks.lengths, _lengths_to_offsets(ak.count(splice_idx, -1).to_numpy())[:-1], - axis=0, + axis=0, # this might not generalized to ndim indices ) b, t, p = [ ak.flatten(a, axis=None).to_numpy() @@ -1415,7 +1424,7 @@ def _getitem_spliced(self, idx: Idx) -> Any: _out = tuple(out) # TODO: handle squeezing and reshaping for scalar and ndarray indices, respectively - + if self.return_indices: # TODO raise NotImplementedError( From 13229c99f750a1d4d46c4e6e656d8668493da72c Mon Sep 17 00:00:00 2001 From: d-laub Date: Fri, 4 Apr 2025 15:26:39 -0700 Subject: [PATCH 04/53] feat!: move indices and transformation to torch dataset/dataloader API since these are generally never needed outside that context. feat: fully functional zero-copy splicing mechanics. fix: bug in rev and rev comp causing garbage output. --- python/genvarloader/_dataset/_impl.py | 668 +++++++++++----------- python/genvarloader/_dataset/_indexing.py | 235 +++++++- python/genvarloader/_dummy.py | 18 +- python/genvarloader/_ragged.py | 42 +- python/genvarloader/_torch.py | 31 +- python/genvarloader/_types.py | 8 +- 6 files changed, 616 insertions(+), 386 deletions(-) diff --git a/python/genvarloader/_dataset/_impl.py b/python/genvarloader/_dataset/_impl.py index 47a6d0b7..9d6eef11 100644 --- a/python/genvarloader/_dataset/_impl.py +++ b/python/genvarloader/_dataset/_impl.py @@ -18,6 +18,7 @@ overload, ) +import awkward as ak import numpy as np import polars as pl from attrs import define, evolve, field @@ -34,10 +35,10 @@ is_rag_dtype, ) from .._torch import TorchDataset, get_dataloader -from .._types import DTYPE, AnnotatedHaps, Idx +from .._types import DTYPE, AnnotatedHaps, Idx, StrIdx from .._utils import idx_like_to_array from ._genotypes import SparseGenotypes -from ._indexing import DatasetIndexer +from ._indexing import DatasetIndexer, SpliceIndexer from ._reconstruct import Haps, HapsTracks, Reference, Seqs, SeqsTracks, Tracks from ._utils import bed_to_regions @@ -101,7 +102,7 @@ def open( rng: int | np.random.Generator | None = False, deterministic: bool = True, rc_neg: bool = True, - ) -> RaggedDataset[None, RTRK, None, None]: ... + ) -> RaggedDataset[None, RTRK]: ... @overload @staticmethod def open( @@ -111,7 +112,7 @@ def open( rng: int | np.random.Generator | None = False, deterministic: bool = True, rc_neg: bool = True, - ) -> RaggedDataset[Ragged[np.bytes_], RTRK, None, None]: ... + ) -> RaggedDataset[Ragged[np.bytes_], RTRK]: ... @staticmethod def open( path: str | Path, @@ -120,7 +121,11 @@ def open( rng: int | np.random.Generator | None = False, deterministic: bool = True, rc_neg: bool = True, - ) -> RaggedDataset[RSEQ, RTRK, None, None]: + splice_info: str + | tuple[str, str] + | dict[Any, NDArray[np.integer]] + | None = None, + ) -> RaggedDataset[RSEQ, RTRK]: """Open a dataset from a path. If no reference genome is provided, the dataset cannot yield sequences. Will initialize the dataset such that it will return tracks and haplotypes (reference sequences if no genotypes) if possible. If tracks are available, they will be set to be returned in alphabetical order. @@ -246,6 +251,44 @@ def open( assert_never(has_genotypes) assert_never(has_intervals) + if splice_info is not None: + if isinstance(splice_info, str): + names, sorter, idx, lengths = np.unique( + bed[splice_info], + return_index=True, + return_inverse=True, + return_counts=True, + ) + names = names[np.argsort(sorter)] + splice_map = Ragged.from_lengths(np.argsort(idx), lengths).to_awkward()[ + np.argsort(sorter) + ] + elif isinstance(splice_info, Tuple): + names, sorter, lengths = np.unique( + bed[splice_info[0]], + return_index=True, + return_counts=True, + ) + data = ( + bed[splice_info] + .with_row_index() + .sort(splice_info)["index"] + .to_numpy() + ) + splice_map = Ragged.from_lengths(data, lengths).to_awkward()[ + np.argsort(sorter) + ] + elif isinstance(splice_info, dict): + names = np.array(list(splice_info.keys())) + splice_map = ak.Array(splice_info.values()) + else: + assert_never(splice_info) + + splice_map = cast(ak.Array, splice_map) + sp_idxer = SpliceIndexer(names, splice_map, idxer) + else: + sp_idxer = None + dataset = RaggedDataset( path=path, output_length="ragged", @@ -257,6 +300,7 @@ def open( transform=None, deterministic=deterministic, _idxer=idxer, + _sp_idxer=sp_idxer, _full_bed=bed, _full_regions=regions, _jittered_regions=regions.copy(), @@ -374,6 +418,7 @@ def with_len( transform=self.transform, deterministic=self.deterministic, _idxer=self._idxer, + _sp_idxer=self._sp_idxer, _full_bed=self._full_bed, _full_regions=self._full_regions, _jittered_regions=self._jittered_regions, @@ -394,6 +439,7 @@ def with_len( transform=self.transform, deterministic=self.deterministic, _idxer=self._idxer, + _sp_idxer=self._sp_idxer, _full_bed=self._full_bed, _full_regions=self._full_regions, _jittered_regions=self._jittered_regions, @@ -403,34 +449,6 @@ def with_len( _rng=self._rng, ) - def with_indices(self, return_indices: bool): - """Whether to return indices, returning a new dataset without modifying the old one. - Set to :code:`True` to have the dataset return the row and sample indices of the non-subset dataset. This allows you to - combine arbitrary row- and sample-specific data with dataset output on-the-fly with a transform. - - Parameters - ---------- - return_indices - Whether to return indices. - """ - return evolve(self, return_indices=return_indices) - - def with_transform(self, transform: Callable | None): - """Modify the transform to apply to the dataset output, returning a new dataset without modifying the old one. - The transform should take input matching the output of the dataset and can return arbitrary output. In combination - with indices, this allows you to combine arbitrary row- and sample-specific data with dataset output on-the-fly. - - .. note:: - Depending on how transforms are implemented, they can easily introduce a dataloading bottleneck. If you find - dataloading is slow, it's often a good idea to try disabling your transform to see if it's impacting throughput. - - Parameters - ---------- - transform - The transform to apply to the dataset. - """ - return evolve(self, transform=transform) - def with_seqs(self, kind: Literal["reference", "haplotypes", "annotated"] | None): """Return a new dataset with the specified sequence type. The sequence type can be one of the following: @@ -600,6 +618,7 @@ def with_tracks(self, tracks: str | List[str] | None): """Unjittered, sorted regions matching order on-disk.""" _jittered_regions: NDArray[np.int32] = field(alias="_jittered_regions") _idxer: DatasetIndexer = field(alias="_idxer") + _sp_idxer: SpliceIndexer | None = field(alias="_sp_idxer") _seqs: Optional[Seqs | Haps[Ragged[np.bytes_]] | Haps[RaggedAnnotatedHaps]] = field( alias="_seqs" ) @@ -970,14 +989,30 @@ def write_transformed_track( return evolve(self, _tracks=new_tracks) # type: ignore - def to_torch_dataset(self) -> "td.Dataset": - """Convert the dataset to a PyTorch :external+torch:class:`Dataset `. Requires PyTorch to be installed.""" + def to_torch_dataset( + self, return_indices: bool, transform: Callable | None + ) -> TorchDataset: + """Convert the dataset to a PyTorch :external+torch:class:`Dataset `. Requires PyTorch to be installed. + + Parameters + ---------- + return_indices + Whether to append arrays of row and sample indices of the non-subset dataset to each batch. + transform + The transform to apply to each batch of data. The transform should take input matching the output of the dataset and can + return anything that can be converted to a PyTorch tensor. In combination with indices, this allows you to combine arbitrary + row- and sample-specific data with dataset output on-the-fly. + + .. note:: + Depending on how transforms are implemented, they can easily introduce a dataloading bottleneck. If you find + dataloading is slow, it's often a good idea to try disabling your transform to see if it's impacting throughput. + """ if self.output_length == "ragged": raise ValueError( """`output_length` is currently set to "ragged" and ragged output cannot be converted to PyTorch Tensors.""" """ Set `output_length` to "variable" or an integer.""" ) - return TorchDataset(self) + return TorchDataset(self, return_indices, transform) def to_dataloader( self, @@ -996,6 +1031,8 @@ def to_dataloader( prefetch_factor: int | None = None, persistent_workers: bool = False, pin_memory_device: str = "", + return_indices: bool = False, + transform: Callable | None = None, ) -> "td.DataLoader": """Convert the dataset to a PyTorch :external+torch:class:`DataLoader `. The parameters are the same as a :external+torch:class:`DataLoader ` with a few omissions e.g. :code:`batch_sampler`. @@ -1042,9 +1079,19 @@ def to_dataloader( If :code:`True`, the data loader will not shut down the worker processes after a dataset has been consumed once. This allows to maintain the workers Dataset instances alive. pin_memory_device The device to :code:`pin_memory` to if :code:`pin_memory` is :code:`True`. + return_indices + Whether to append arrays of row and sample indices of the non-subset dataset to each batch. + transform + The transform to apply to each batch of data. The transform should take input matching the output of the dataset and can + return anything that can be converted to a PyTorch tensor. In combination with indices, this allows you to combine arbitrary + row- and sample-specific data with dataset output on-the-fly. + + .. note:: + Depending on how transforms are implemented, they can easily introduce a dataloading bottleneck. If you find + dataloading is slow, it's often a good idea to try disabling your transform to see if it's impacting throughput. """ return get_dataloader( - dataset=self.to_torch_dataset(), + dataset=self.to_torch_dataset(return_indices, transform), batch_size=batch_size, shuffle=shuffle, sampler=sampler, @@ -1061,12 +1108,40 @@ def to_dataloader( pin_memory_device=pin_memory_device, ) - def __getitem__( + def __getitem__(self, idx: Idx | tuple[Idx] | tuple[Idx, StrIdx]) -> Any: + if self._sp_idxer is None: + recon, squeeze, out_reshape = self._getitem_unspliced(idx) + else: + recon, squeeze, out_reshape = self._getitem_spliced(idx, self._sp_idxer) + + if not isinstance(recon, tuple): + out = [recon] + else: + out = list(recon) + + if self.jitter > 0: + out = _rag_jitter(out, self.jitter, self._rng) + + if self.output_length == "variable": + out = [_pad(r) for r in out] + elif isinstance(self.output_length, int): + out = [_fix_len(r, self.output_length) for r in out] + + if squeeze: + # (1 [p] l) -> ([p] l) + out = [o.squeeze(0) for o in out] + + if out_reshape is not None: + out = [o.reshape(out_reshape + o.shape[1:]) for o in out] + + return out + + def _getitem_unspliced( self, idx: Idx | tuple[Idx] | tuple[Idx, Idx | str | Sequence[str]] - ) -> Any: + ): # (b) ds_idx, squeeze, out_reshape = self._idxer.parse_idx(idx) - r_idx, s_idx = np.unravel_index(ds_idx, self.full_shape) + r_idx, _ = np.unravel_index(ds_idx, self.full_shape) regions = self._jittered_regions[r_idx] recon = self._recon( @@ -1077,461 +1152,374 @@ def __getitem__( None if self.deterministic else self._rng, ) - if not isinstance(recon, tuple): - out = [recon] - else: - out = list(recon) - if self.rc_neg: # (b) to_rc: NDArray[np.bool_] = self._full_regions[r_idx, 3] == -1 - out = [self._rc(r, to_rc) for r in out] - - if self.jitter > 0: - out = self._jitter(out) + if isinstance(recon, tuple): + recon = tuple(_rc(r, to_rc) for r in recon) + else: + recon = _rc(recon, to_rc) - if self.output_length == "variable": - out = [self._pad(r) for r in out] - elif isinstance(self.output_length, int): - out = [self._fix_len(r) for r in out] + return recon, squeeze, out_reshape - if out_reshape is not None: - out = [o.reshape(out_reshape + o.shape[1:]) for o in out] + def _getitem_spliced( + self, + idx: StrIdx | tuple[StrIdx] | tuple[StrIdx, StrIdx], + splice_idxer: SpliceIndexer, + ): + if isinstance(self.output_length, int): + raise RuntimeError( + "In general, splicing cannot be done with fixed length data because even if the length of each region's data" + " is fixed/constant, the number of elements in each spliced element is not. Thus, the final length of the" + " spliced elements will be variable." + ) - if squeeze: - # (1 [p] l) -> ([p] l) - out = [o.squeeze(0) for o in out] + # TODO: really need to assert no jitter and deterministic? + # * In theory, this still "works" with jitter or non-determinism, but why would anyone want this? Would they want a different alg here? + # * Potential issues: + # * Each each component of the spliced output will have different jitter + # * For non-determinism, each component will have different shifts & different unphased haplotypes chosen + if self.jitter > 0: + raise RuntimeError( + "Jitter is not supported with splicing. Please set jitter to 0." + ) - if self.return_indices: - inp_idx = self._idxer.d2i_map[ds_idx] - inp_r_idx, inp_s_idx = np.unravel_index(inp_idx, self.full_shape) - out.extend((inp_r_idx, inp_s_idx)) # type: ignore + if not self.deterministic: + raise RuntimeError( + "Non-deterministic algorithms are not supported with splicing. Please set deterministic to True." + ) - if self.transform is not None: - out = self.transform(*out) - elif len(out) == 1: - out = out[0] + inner_ds = self.with_len("ragged") + ds_idx, squeeze, out_reshape, reducer = splice_idxer.parse_idx(idx) + r_idx, _ = np.unravel_index(ds_idx, self.full_shape) + regions = self._jittered_regions[r_idx] - return out + recon = inner_ds._recon( + ds_idx, regions, self.output_length, self.jitter, self._rng + ) - @overload - def _rc(self, rag: Ragged[DTYPE], to_rc: NDArray[np.bool_]) -> Ragged[DTYPE]: ... - @overload - def _rc( - self, rag: RaggedAnnotatedHaps, to_rc: NDArray[np.bool_] - ) -> RaggedAnnotatedHaps: ... - def _rc( - self, rag: Ragged | RaggedAnnotatedHaps, to_rc: NDArray[np.bool_] - ) -> Ragged | RaggedAnnotatedHaps: - if isinstance(rag, Ragged): - to_rc = to_rc.reshape(to_rc.shape + ((1,) * (len(rag.shape) - 1))) - if is_rag_dtype(rag, np.bytes_): - rag = _reverse_complement(rag, to_rc) - elif is_rag_dtype(rag, np.float32): - _reverse(rag, to_rc) - elif isinstance(rag, RaggedAnnotatedHaps): - rag.haps = _reverse_complement(rag.haps, to_rc[:, None]) - else: - assert_never(rag) - return rag - - def _jitter( - self, rags: list[Ragged[np.bytes_] | Ragged[np.float32] | RaggedAnnotatedHaps] - ) -> list[Ragged[np.bytes_] | Ragged[np.float32] | RaggedAnnotatedHaps]: - rag0 = rags[0] - if isinstance(rag0, Ragged): - batch_size = rag0.shape[0] + if isinstance(recon, tuple): + recon = tuple(_cat_length(r, reducer) for r in recon) else: - batch_size = rag0.haps.shape[0] - starts = self._rng.integers(0, 2 * self.jitter + 1, batch_size) + recon = _cat_length(recon, reducer) - jittered = [] - for r in rags: - if isinstance(r, Ragged): - jittered.append(_jitter(r, max_jitter=self.jitter, starts=starts)) + if self.rc_neg: + # (b) + to_rc: NDArray[np.bool_] = np.logical_and.reduceat( + self._full_regions[r_idx, 3] == -1, reducer, axis=0 + ) + if isinstance(recon, tuple): + recon = tuple(_rc(r, to_rc) for r in recon) else: - haps, v_idx, r_coord = _jitter( - *(r.haps, r.var_idxs, r.ref_coords), - max_jitter=self.jitter, - starts=starts, - ) - jittered.append(RaggedAnnotatedHaps(haps, v_idx, r_coord)) + recon = _rc(recon, to_rc) + + return recon, squeeze, out_reshape + + +@overload +def _rc(rag: Ragged[DTYPE], to_rc: NDArray[np.bool_]) -> Ragged[DTYPE]: ... +@overload +def _rc(rag: RaggedAnnotatedHaps, to_rc: NDArray[np.bool_]) -> RaggedAnnotatedHaps: ... +def _rc( + rag: Ragged | RaggedAnnotatedHaps, to_rc: NDArray[np.bool_] +) -> Ragged | RaggedAnnotatedHaps: + """Reverse or reverse-complement stuff. + + Parameters + ---------- + rag + Ragged data, could be reference, haplotypes, annotated haplotypes, or tracks. + Ref shape: (batch, ~length) + Hap shape: (batch, ploidy, ~length) + Track shape: (batch, tracks, [ploidy], ~length) + to_rc + Mask of which regions to reverse-complement. Shape: (batch) + """ + if isinstance(rag, Ragged): + if is_rag_dtype(rag, np.bytes_): + rag = _reverse_complement(rag, to_rc) + elif is_rag_dtype(rag, np.float32): + _reverse(rag, to_rc) + elif isinstance(rag, RaggedAnnotatedHaps): + rag.haps = _reverse_complement(rag.haps, to_rc) + _reverse(rag.var_idxs, to_rc) + _reverse(rag.ref_coords, to_rc) + else: + assert_never(rag) + return rag + + +def _rag_jitter( + rags: list[Ragged[np.bytes_] | Ragged[np.float32] | RaggedAnnotatedHaps], + jitter: int, + rng: np.random.Generator, +) -> list[Ragged[np.bytes_] | Ragged[np.float32] | RaggedAnnotatedHaps]: + rag0 = rags[0] + batch_size = rag0.shape[0] + starts = rng.integers(0, 2 * jitter + 1, batch_size) + + jittered = [] + for r in rags: + if isinstance(r, Ragged): + jittered.append(_jitter(r, max_jitter=jitter, starts=starts)) + else: + haps, v_idx, r_coord = _jitter( + *(r.haps, r.var_idxs, r.ref_coords), + max_jitter=jitter, + starts=starts, + ) + jittered.append(RaggedAnnotatedHaps(haps, v_idx, r_coord)) - return jittered + return jittered - @overload - def _pad(self, rag: Ragged[DTYPE]) -> NDArray[DTYPE]: ... - @overload - def _pad(self, rag: RaggedAnnotatedHaps) -> AnnotatedHaps: ... - def _pad(self, rag: Ragged | RaggedAnnotatedHaps) -> NDArray | AnnotatedHaps: - if isinstance(rag, Ragged): - if is_rag_dtype(rag, np.bytes_): - return rag.to_padded(b"N") - elif is_rag_dtype(rag, np.float32): - return rag.to_padded(0) - else: - raise ValueError(f"Unsupported pad dtype: {rag.data.dtype}") - elif isinstance(rag, RaggedAnnotatedHaps): - return rag.to_padded() - else: - assert_never(rag) - @overload - def _fix_len(self, rag: Ragged[DTYPE]) -> NDArray[DTYPE]: ... - @overload - def _fix_len(self, rag: RaggedAnnotatedHaps) -> AnnotatedHaps: ... - def _fix_len(self, rag: Ragged | RaggedAnnotatedHaps) -> NDArray | AnnotatedHaps: - assert isinstance(self.output_length, int) - if isinstance(rag, Ragged): - # (b p) or (b) - return rag.data.reshape((*rag.shape, self.output_length)) - elif isinstance(rag, RaggedAnnotatedHaps): - assert isinstance(self._seqs, Haps) - return rag.to_fixed_shape((*rag.shape, self.output_length)) +@overload +def _pad(rag: Ragged[DTYPE]) -> NDArray[DTYPE]: ... +@overload +def _pad(rag: RaggedAnnotatedHaps) -> AnnotatedHaps: ... +def _pad(rag: Ragged | RaggedAnnotatedHaps) -> NDArray | AnnotatedHaps: + if isinstance(rag, Ragged): + if is_rag_dtype(rag, np.bytes_): + return rag.to_padded(b"N") + elif is_rag_dtype(rag, np.float32): + return rag.to_padded(0) else: - assert_never(rag) + raise ValueError(f"Unsupported pad dtype: {rag.data.dtype}") + elif isinstance(rag, RaggedAnnotatedHaps): + return rag.to_padded() + else: + assert_never(rag) + + +@overload +def _fix_len( + rag: Ragged[DTYPE], output_length: Literal["ragged", "variable"] | int +) -> NDArray[DTYPE]: ... +@overload +def _fix_len( + rag: RaggedAnnotatedHaps, output_length: Literal["ragged", "variable"] | int +) -> AnnotatedHaps: ... +def _fix_len( + rag: Ragged | RaggedAnnotatedHaps, + output_length: Literal["ragged", "variable"] | int, +) -> NDArray | AnnotatedHaps: + assert isinstance(output_length, int) + if isinstance(rag, Ragged): + # (b p) or (b) + return rag.data.reshape((*rag.shape, output_length)) + elif isinstance(rag, RaggedAnnotatedHaps): + return rag.to_fixed_shape((*rag.shape, output_length)) + else: + assert_never(rag) + + +@overload +def _cat_length(rag: Ragged[DTYPE], reducer: NDArray[np.integer]) -> Ragged[DTYPE]: ... +@overload +def _cat_length( + rag: RaggedAnnotatedHaps, reducer: NDArray[np.integer] +) -> RaggedAnnotatedHaps: ... +def _cat_length( + rag: Ragged | RaggedAnnotatedHaps, reducer: NDArray[np.integer] +) -> Ragged | RaggedAnnotatedHaps: + """Concatenate the lengths of the ragged data.""" + if isinstance(rag, Ragged): + lengths = np.add.reduceat(rag.lengths, reducer, axis=0) + return Ragged.from_lengths(rag.data, lengths) + elif isinstance(rag, RaggedAnnotatedHaps): + haps = _cat_length(rag.haps, reducer) + var_idxs = _cat_length(rag.var_idxs, reducer) + ref_coords = _cat_length(rag.ref_coords, reducer) + return RaggedAnnotatedHaps(haps, var_idxs, ref_coords) + else: + assert_never(rag) -T = TypeVar("T") SEQ = TypeVar("SEQ", None, NDArray[np.bytes_], AnnotatedHaps) -RSEQ = TypeVar("RSEQ", None, Ragged[np.bytes_], RaggedAnnotatedHaps) TRK = TypeVar("TRK", None, NDArray[np.float32]) +RSEQ = TypeVar("RSEQ", None, Ragged[np.bytes_], RaggedAnnotatedHaps) RTRK = TypeVar("RTRK", None, Ragged[np.float32]) -IDX = TypeVar("IDX", None, tuple[NDArray[np.integer], NDArray[np.integer]]) -TFM = TypeVar("TFM") -class ArrayDataset(Dataset, Generic[SEQ, TRK, IDX, TFM]): +class ArrayDataset(Dataset, Generic[SEQ, TRK]): """Only for type checking purposes, you should never instantiate this class directly.""" @overload def with_len( - self: ArrayDataset[NDArray[np.bytes_], None, IDX, TFM], + self: ArrayDataset[NDArray[np.bytes_], None], output_length: Literal["ragged"], - ) -> RaggedDataset[Ragged[np.bytes_], None, IDX, TFM]: ... + ) -> RaggedDataset[Ragged[np.bytes_], None]: ... @overload def with_len( - self: ArrayDataset[AnnotatedHaps, None, IDX, TFM], + self: ArrayDataset[AnnotatedHaps, None], output_length: Literal["ragged"], - ) -> RaggedDataset[RaggedAnnotatedHaps, None, IDX, TFM]: ... + ) -> RaggedDataset[RaggedAnnotatedHaps, None]: ... @overload def with_len( - self: ArrayDataset[None, NDArray[np.float32], IDX, TFM], + self: ArrayDataset[None, NDArray[np.float32]], output_length: Literal["ragged"], - ) -> RaggedDataset[None, Ragged[np.float32], IDX, TFM]: ... + ) -> RaggedDataset[None, Ragged[np.float32]]: ... @overload def with_len( - self: ArrayDataset[NDArray[np.bytes_], NDArray[np.float32], IDX, TFM], + self: ArrayDataset[NDArray[np.bytes_], NDArray[np.float32]], output_length: Literal["ragged"], - ) -> RaggedDataset[Ragged[np.bytes_], Ragged[np.float32], IDX, TFM]: ... + ) -> RaggedDataset[Ragged[np.bytes_], Ragged[np.float32]]: ... @overload def with_len( - self: ArrayDataset[AnnotatedHaps, NDArray[np.float32], IDX, TFM], + self: ArrayDataset[AnnotatedHaps, NDArray[np.float32]], output_length: Literal["ragged"], - ) -> RaggedDataset[RaggedAnnotatedHaps, Ragged[np.float32], IDX, TFM]: ... + ) -> RaggedDataset[RaggedAnnotatedHaps, Ragged[np.float32]]: ... @overload def with_len( self, output_length: Union[Literal["variable"], int], - ) -> ArrayDataset[SEQ, TRK, IDX, TFM]: ... + ) -> ArrayDataset[SEQ, TRK]: ... def with_len( self, output_length: Literal["ragged", "variable"] | int - ) -> Union[RaggedDataset[RSEQ, RTRK, IDX, TFM], ArrayDataset[SEQ, TRK, IDX, TFM]]: + ) -> Union[RaggedDataset[RSEQ, RTRK], ArrayDataset[SEQ, TRK]]: return super().with_len(output_length) @overload - def with_seqs(self, kind: None) -> ArrayDataset[None, TRK, IDX, TFM]: ... + def with_seqs(self, kind: None) -> ArrayDataset[None, TRK]: ... @overload def with_seqs( self, kind: Literal["reference", "haplotypes"] - ) -> ArrayDataset[NDArray[np.bytes_], TRK, IDX, TFM]: ... + ) -> ArrayDataset[NDArray[np.bytes_], TRK]: ... @overload def with_seqs( self, kind: Literal["annotated"] - ) -> ArrayDataset[AnnotatedHaps, TRK, IDX, TFM]: ... + ) -> ArrayDataset[AnnotatedHaps, TRK]: ... def with_seqs( self, kind: Literal["reference", "haplotypes", "annotated"] | None ) -> ArrayDataset: return super().with_seqs(kind) @overload - def with_tracks(self, tracks: None) -> ArrayDataset[SEQ, None, IDX, TFM]: ... + def with_tracks(self, tracks: None) -> ArrayDataset[SEQ, None]: ... @overload - def with_tracks( - self, tracks: str - ) -> ArrayDataset[SEQ, NDArray[np.float32], IDX, TFM]: ... + def with_tracks(self, tracks: str) -> ArrayDataset[SEQ, NDArray[np.float32]]: ... @overload def with_tracks( self, tracks: List[str] - ) -> ArrayDataset[SEQ, NDArray[np.float32], IDX, TFM]: ... + ) -> ArrayDataset[SEQ, NDArray[np.float32]]: ... def with_tracks(self, tracks: str | List[str] | None) -> ArrayDataset: return super().with_tracks(tracks) - @overload - def with_indices( - self, return_indices: Literal[False] - ) -> ArrayDataset[SEQ, TRK, None, TFM]: ... - @overload - def with_indices( - self, return_indices: Literal[True] - ) -> ArrayDataset[ - SEQ, TRK, tuple[NDArray[np.integer], NDArray[np.integer]], TFM - ]: ... - def with_indices(self, return_indices: bool) -> ArrayDataset: - return super().with_indices(return_indices) - - @overload - def with_transform( - self: ArrayDataset[SEQ, None, None, TFM], - transform: Callable[[SEQ], T], - ) -> ArrayDataset[SEQ, TRK, IDX, T]: ... - @overload - def with_transform( - self: ArrayDataset[None, TRK, None, TFM], - transform: Callable[[TRK], T], - ) -> ArrayDataset[SEQ, TRK, IDX, T]: ... - @overload - def with_transform( - self: ArrayDataset[None, None, IDX, TFM], - transform: Callable[[NoReturn], T], - ) -> ArrayDataset[SEQ, TRK, IDX, T]: ... - @overload - def with_transform( - self: ArrayDataset[SEQ, TRK, None, TFM], - transform: Callable[[SEQ, TRK], T], - ) -> ArrayDataset[SEQ, TRK, IDX, T]: ... - @overload - def with_transform( - self: ArrayDataset[SEQ, None, IDX, TFM], - transform: Callable[[SEQ, IDX], T], - ) -> ArrayDataset[SEQ, TRK, IDX, T]: ... - @overload - def with_transform( - self: ArrayDataset[None, TRK, IDX, TFM], - transform: Callable[[TRK, IDX], T], - ) -> ArrayDataset[SEQ, TRK, IDX, T]: ... - @overload - def with_transform( - self: ArrayDataset[SEQ, TRK, IDX, TFM], - transform: Callable[[SEQ, TRK, IDX], T], - ) -> ArrayDataset[SEQ, TRK, IDX, T]: ... - @overload - def with_transform(self, transform: None) -> ArrayDataset[SEQ, TRK, IDX, None]: ... - def with_transform(self, transform: Callable | None) -> ArrayDataset: - return super().with_transform(transform) - @overload def __getitem__( - self: ArrayDataset[SEQ, None, None, None], + self: ArrayDataset[SEQ, None], idx: Idx | tuple[Idx] | tuple[Idx, Idx | str | Sequence[str]], ) -> SEQ: ... @overload def __getitem__( - self: ArrayDataset[None, TRK, None, None], + self: ArrayDataset[None, TRK], idx: Idx | tuple[Idx] | tuple[Idx, Idx | str | Sequence[str]], ) -> TRK: ... @overload def __getitem__( - self: ArrayDataset[None, None, IDX, None], + self: ArrayDataset[None, None], idx: Idx | tuple[Idx] | tuple[Idx, Idx | str | Sequence[str]], ) -> NoReturn: ... @overload def __getitem__( - self: ArrayDataset[SEQ, TRK, None, None], + self: ArrayDataset[SEQ, TRK], idx: Idx | tuple[Idx] | tuple[Idx, Idx | str | Sequence[str]], ) -> Tuple[SEQ, TRK]: ... - @overload - def __getitem__( - self: ArrayDataset[SEQ, None, IDX, None], - idx: Idx | tuple[Idx] | tuple[Idx, Idx | str | Sequence[str]], - ) -> Tuple[SEQ, IDX]: ... - @overload - def __getitem__( - self: ArrayDataset[None, TRK, IDX, None], - idx: Idx | tuple[Idx] | tuple[Idx, Idx | str | Sequence[str]], - ) -> Tuple[TRK, IDX]: ... - @overload - def __getitem__( - self: ArrayDataset[SEQ, TRK, IDX, None], - idx: Idx | tuple[Idx] | tuple[Idx, Idx | str | Sequence[str]], - ) -> Tuple[SEQ, TRK, IDX]: ... - @overload - def __getitem__( - self: ArrayDataset[SEQ, TRK, IDX, TFM], - idx: Idx | tuple[Idx] | tuple[Idx, Idx | str | Sequence[str]], - ) -> TFM: ... def __getitem__( self, idx: Idx | tuple[Idx] | tuple[Idx, Idx | str | Sequence[str]] ) -> Any: return super().__getitem__(idx) -class RaggedDataset(Dataset, Generic[RSEQ, RTRK, IDX, TFM]): +class RaggedDataset(Dataset, Generic[RSEQ, RTRK]): """Only for type checking purposes, you should never instantiate this class directly.""" @overload def with_len( - self: RaggedDataset[Ragged[np.bytes_], None, IDX, TFM], + self: RaggedDataset[Ragged[np.bytes_], None], output_length: Union[Literal["variable"], int], - ) -> ArrayDataset[NDArray[np.bytes_], None, IDX, TFM]: ... + ) -> ArrayDataset[NDArray[np.bytes_], None]: ... @overload def with_len( - self: RaggedDataset[RaggedAnnotatedHaps, None, IDX, TFM], + self: RaggedDataset[RaggedAnnotatedHaps, None], output_length: Union[Literal["variable"], int], - ) -> ArrayDataset[AnnotatedHaps, None, IDX, TFM]: ... + ) -> ArrayDataset[AnnotatedHaps, None]: ... @overload def with_len( - self: RaggedDataset[None, Ragged[np.float32], IDX, TFM], + self: RaggedDataset[None, Ragged[np.float32]], output_length: Union[Literal["variable"], int], - ) -> ArrayDataset[None, NDArray[np.float32], IDX, TFM]: ... + ) -> ArrayDataset[None, NDArray[np.float32]]: ... @overload def with_len( - self: RaggedDataset[None, RTRK, IDX, TFM], + self: RaggedDataset[None, RTRK], output_length: Union[Literal["variable"], int], - ) -> ArrayDataset[None, TRK, IDX, TFM]: ... + ) -> ArrayDataset[None, TRK]: ... @overload def with_len( - self: RaggedDataset[Ragged[np.bytes_], Ragged[np.float32], IDX, TFM], + self: RaggedDataset[Ragged[np.bytes_], Ragged[np.float32]], output_length: Union[Literal["variable"], int], - ) -> ArrayDataset[NDArray[np.bytes_], NDArray[np.float32], IDX, TFM]: ... + ) -> ArrayDataset[NDArray[np.bytes_], NDArray[np.float32]]: ... @overload def with_len( - self: RaggedDataset[RaggedAnnotatedHaps, Ragged[np.float32], IDX, TFM], + self: RaggedDataset[RaggedAnnotatedHaps, Ragged[np.float32]], output_length: Union[Literal["variable"], int], - ) -> ArrayDataset[AnnotatedHaps, NDArray[np.float32], IDX, TFM]: ... + ) -> ArrayDataset[AnnotatedHaps, NDArray[np.float32]]: ... @overload def with_len( self, output_length: Literal["ragged"], - ) -> RaggedDataset[RSEQ, RTRK, IDX, TFM]: ... + ) -> RaggedDataset[RSEQ, RTRK]: ... def with_len( self, output_length: Union[Literal["ragged", "variable"], int] - ) -> Union[RaggedDataset[RSEQ, RTRK, IDX, TFM], ArrayDataset[SEQ, TRK, IDX, TFM]]: + ) -> Union[RaggedDataset[RSEQ, RTRK], ArrayDataset[SEQ, TRK]]: return super().with_len(output_length) @overload - def with_seqs(self, kind: None) -> RaggedDataset[None, RTRK, IDX, TFM]: ... + def with_seqs(self, kind: None) -> RaggedDataset[None, RTRK]: ... @overload def with_seqs( self, kind: Literal["reference", "haplotypes"] - ) -> RaggedDataset[Ragged[np.bytes_], RTRK, IDX, TFM]: ... + ) -> RaggedDataset[Ragged[np.bytes_], RTRK]: ... @overload def with_seqs( self, kind: Literal["annotated"] - ) -> RaggedDataset[RaggedAnnotatedHaps, RTRK, IDX, TFM]: ... + ) -> RaggedDataset[RaggedAnnotatedHaps, RTRK]: ... def with_seqs( self, kind: Literal["reference", "haplotypes", "annotated"] | None ) -> RaggedDataset: return super().with_seqs(kind) @overload - def with_tracks(self, tracks: None) -> RaggedDataset[RSEQ, None, IDX, TFM]: ... + def with_tracks(self, tracks: None) -> RaggedDataset[RSEQ, None]: ... @overload - def with_tracks( - self, tracks: str - ) -> RaggedDataset[RSEQ, Ragged[np.float32], IDX, TFM]: ... + def with_tracks(self, tracks: str) -> RaggedDataset[RSEQ, Ragged[np.float32]]: ... @overload def with_tracks( self, tracks: List[str] - ) -> RaggedDataset[RSEQ, Ragged[np.float32], IDX, TFM]: ... + ) -> RaggedDataset[RSEQ, Ragged[np.float32]]: ... def with_tracks(self, tracks: str | List[str] | None) -> RaggedDataset: return super().with_tracks(tracks) - @overload - def with_indices( - self, return_indices: Literal[False] - ) -> RaggedDataset[RSEQ, RTRK, None, TFM]: ... - @overload - def with_indices( - self, return_indices: Literal[True] - ) -> RaggedDataset[ - RSEQ, RTRK, tuple[NDArray[np.integer], NDArray[np.integer]], TFM - ]: ... - def with_indices(self, return_indices: bool) -> RaggedDataset: - return super().with_indices(return_indices) - - @overload - def with_transform( - self: RaggedDataset[RSEQ, None, None, TFM], - transform: Callable[[RSEQ], T], - ) -> RaggedDataset[RSEQ, RTRK, IDX, T]: ... - @overload - def with_transform( - self: RaggedDataset[None, RTRK, None, TFM], - transform: Callable[[RTRK], T], - ) -> RaggedDataset[RSEQ, RTRK, IDX, T]: ... - @overload - def with_transform( - self: RaggedDataset[None, None, IDX, TFM], - transform: Callable[[NoReturn], T], - ) -> RaggedDataset[RSEQ, RTRK, IDX, T]: ... - @overload - def with_transform( - self: RaggedDataset[RSEQ, RTRK, None, TFM], - transform: Callable[[RSEQ, RTRK], T], - ) -> RaggedDataset[RSEQ, RTRK, IDX, T]: ... - @overload - def with_transform( - self: RaggedDataset[RSEQ, None, IDX, TFM], - transform: Callable[[RSEQ, IDX], T], - ) -> RaggedDataset[RSEQ, RTRK, IDX, T]: ... - @overload - def with_transform( - self: RaggedDataset[None, RTRK, IDX, TFM], - transform: Callable[[RTRK, IDX], T], - ) -> RaggedDataset[RSEQ, RTRK, IDX, T]: ... - @overload - def with_transform( - self: RaggedDataset[RSEQ, RTRK, IDX, TFM], - transform: Callable[[RSEQ, RTRK, IDX], T], - ) -> RaggedDataset[RSEQ, RTRK, IDX, T]: ... - @overload - def with_transform( - self, transform: None - ) -> RaggedDataset[RSEQ, RTRK, IDX, None]: ... - def with_transform(self, transform: Callable | None) -> RaggedDataset: - return super().with_transform(transform) - @overload def __getitem__( - self: RaggedDataset[RSEQ, None, None, None], + self: RaggedDataset[RSEQ, None], idx: Idx | tuple[Idx] | tuple[Idx, Idx | str | Sequence[str]], ) -> RSEQ: ... @overload def __getitem__( - self: RaggedDataset[None, RTRK, None, None], + self: RaggedDataset[None, RTRK], idx: Idx | tuple[Idx] | tuple[Idx, Idx | str | Sequence[str]], ) -> RTRK: ... @overload def __getitem__( - self: RaggedDataset[None, None, IDX, None], + self: RaggedDataset[None, None], idx: Idx | tuple[Idx] | tuple[Idx, Idx | str | Sequence[str]], ) -> NoReturn: ... @overload def __getitem__( - self: RaggedDataset[RSEQ, RTRK, None, None], + self: RaggedDataset[RSEQ, RTRK], idx: Idx | tuple[Idx] | tuple[Idx, Idx | str | Sequence[str]], ) -> Tuple[RSEQ, RTRK]: ... - @overload - def __getitem__( - self: RaggedDataset[RSEQ, None, IDX, None], - idx: Idx | tuple[Idx] | tuple[Idx, Idx | str | Sequence[str]], - ) -> Tuple[RSEQ, IDX]: ... - @overload - def __getitem__( - self: RaggedDataset[None, RTRK, IDX, None], - idx: Idx | tuple[Idx] | tuple[Idx, Idx | str | Sequence[str]], - ) -> Tuple[RTRK, IDX]: ... - @overload - def __getitem__( - self: RaggedDataset[RSEQ, RTRK, IDX, None], - idx: Idx | tuple[Idx] | tuple[Idx, Idx | str | Sequence[str]], - ) -> Tuple[RSEQ, RTRK, IDX]: ... - @overload - def __getitem__( - self: RaggedDataset[RSEQ, RTRK, IDX, TFM], - idx: Idx | tuple[Idx] | tuple[Idx, Idx | str | Sequence[str]], - ) -> TFM: ... def __getitem__( self, idx: Idx | tuple[Idx] | tuple[Idx, Idx | str | Sequence[str]] ) -> Any: diff --git a/python/genvarloader/_dataset/_indexing.py b/python/genvarloader/_dataset/_indexing.py index 28ab4575..c59c9632 100644 --- a/python/genvarloader/_dataset/_indexing.py +++ b/python/genvarloader/_dataset/_indexing.py @@ -1,14 +1,19 @@ -from itertools import chain from typing import List, Literal, Optional, Sequence, cast +import awkward as ak +import numba as nb import numpy as np from attrs import define, evolve +from einops import repeat from hirola import HashTable +from more_itertools import collapse from numpy.typing import NDArray +from typing_extensions import Self -from genvarloader._dataset._utils import oidx_to_raveled_idx -from genvarloader._types import Idx -from genvarloader._utils import idx_like_to_array, is_dtype +from .._ragged import Ragged +from .._types import Idx, StrIdx +from .._utils import _lengths_to_offsets, idx_like_to_array, is_dtype +from ._utils import oidx_to_raveled_idx @define @@ -109,7 +114,7 @@ def subset_to( self, regions: Optional[Idx] = None, samples: Optional[Idx] = None, - ) -> "DatasetIndexer": + ) -> Self: """Subset the dataset to specific regions and/or samples.""" if regions is None and samples is None: return self @@ -139,7 +144,7 @@ def subset_to( sample_subset_idxs=sample_idxs, ) - def to_full_dataset(self) -> "DatasetIndexer": + def to_full_dataset(self) -> Self: """Return a full sized dataset, undoing any subsettting.""" i2d_map = oidx_to_raveled_idx( self.full_region_idxs, self.full_sample_idxs, self.full_shape @@ -152,7 +157,7 @@ def to_full_dataset(self) -> "DatasetIndexer": ) def parse_idx( - self, idx: Idx | tuple[Idx] | tuple[Idx, Idx | str | Sequence[str]] + self, idx: Idx | tuple[Idx] | tuple[Idx, StrIdx] ) -> tuple[NDArray[np.integer], bool, tuple[int, ...] | None]: if not isinstance(idx, tuple): regions = idx @@ -163,24 +168,7 @@ def parse_idx( else: regions, samples = idx - if ( - isinstance(samples, str) - or (isinstance(samples, np.ndarray) and is_dtype(samples, np.str_)) - or ( - isinstance(samples, Sequence) - and isinstance(next(chain.from_iterable(samples)), str) # type: ignore - ) - ): - s_idx = self.s2i_map.get(samples) - if (np.atleast_1d(s_idx) == -1).any(): - raise KeyError( - f"Some samples not found in dataset: {np.unique(np.array(samples)[s_idx == -1])}" - ) - else: - s_idx = samples - - s_idx = cast(Idx, s_idx) # above clause does this, but can't narrow type - + s_idx = s2i(samples, self.s2i_map) idx = self.i2d_map.reshape(self.shape)[regions, s_idx] out_reshape = None @@ -193,3 +181,200 @@ def parse_idx( idx = idx.ravel() return idx, squeeze, out_reshape + + def s2i(self, samples: StrIdx) -> Idx: + """Convert sample names to sample indices.""" + return s2i(samples, self.s2i_map) + + +class SpliceIndexer: + rows: HashTable + """Map from splice element names to row indices.""" + splice_map: ak.Array + """Map from splice indices to region indices in splicing order.""" + full_splice_map: ak.Array + """Non-subset map from splice indices to region indices.""" + dsi: DatasetIndexer + i2d_map: ak.Array + """Shape: (rows, samples, ~regions). Map from spliced row/sample indices to on-disk dataset indices.""" + _shape_helper: NDArray[np.uint8] + + def __init__( + self, + names: Sequence[str] | NDArray[np.str_], + splice_map: ak.Array, + dsi: DatasetIndexer, + ): + _names = np.array(names) + self.rows = HashTable( + max=len(names) * 2, # type: ignore | 2x size for perf > mem + dtype=_names.dtype, + ) + self.rows.add(_names) + self.splice_map = splice_map + self.full_splice_map = splice_map + self.dsi = dsi + self._shape_helper = np.empty((len(splice_map), dsi.n_samples), dtype=np.uint8) + self.i2d_map = self.get_i2d_map(splice_map, dsi) + + def get_i2d_map(self, splice_map: ak.Array, dsi: DatasetIndexer): + regs_per_row = ak.count(splice_map, -1).to_numpy() + row_offsets = _lengths_to_offsets(regs_per_row) + s_idxs = ( + dsi.full_sample_idxs + if dsi.sample_subset_idxs is None + else dsi.sample_subset_idxs + ) + i2d_map = _spliced_i2d_map_helper( + dsi.i2d_map.reshape(dsi.shape), splice_map, row_offsets, s_idxs + ) + i2d_map = Ragged.from_lengths( + i2d_map, repeat(regs_per_row, "r -> r s", s=dsi.n_samples) + ).to_awkward() + return i2d_map + + @property + def n_rows(self) -> int: + return len(self.splice_map) + + @property + def n_samples(self) -> int: + return self.dsi.n_samples + + @property + def shape(self) -> tuple[int, int]: + return self.n_rows, self.n_samples + + def __len__(self): + return self.n_rows * self.n_samples + + def subset_to( + self, + rows: Optional[Idx] = None, + samples: Optional[Idx] = None, + ) -> Self: + """Subset to specific regions and/or samples.""" + if rows is None and samples is None: + return self + + if rows is not None: + row_idxs = idx_like_to_array(rows, self.n_rows) + else: + row_idxs = np.arange(self.n_rows, dtype=np.intp) + + splice_map = cast(ak.Array, self.splice_map[row_idxs]) + # splice_map is to absolute indices so don't subset dsi regions + sub_dsi = self.dsi.subset_to(samples=samples) + i2d_map = self.get_i2d_map(splice_map, sub_dsi) + + return evolve(self, splice_map=splice_map, dsi=sub_dsi, i2d_map=i2d_map) + + def to_full_dataset(self) -> Self: + """Return a full sized dataset, undoing any subsettting.""" + return evolve( + self, splice_map=self.full_splice_map, dsi=self.dsi.to_full_dataset() + ) + + def parse_idx( + self, idx: StrIdx | tuple[StrIdx] | tuple[StrIdx, StrIdx] + ) -> tuple[NDArray[np.integer], bool, tuple[int, ...] | None, NDArray[np.integer]]: + """Parse the index into a format suitable for indexing. + + Parameters + ---------- + idx + The index to parse. This can be a single index, a tuple of indices, + or a tuple of indices and a list of sample names. + + Returns + ------- + idx + 1-D raveled dataset indices. + squeeze + Whether to squeeze the output. + out_reshape + The intended shape of the output, ready to be passed to reshape(). + reducer + Indices for np.add.reduceat() to get the correct lengths for each splice element. Example: + spliced_lengths = np.add.reduceat(ragged.lengths, reduce_indices, axis=0) + rows + Indices of the splice elements. + s_idx + Indices of the samples. + """ + if not isinstance(idx, tuple): + rows = idx + samples = slice(None) + elif len(idx) == 1: + rows = idx[0] + samples = slice(None) + else: + rows, samples = idx + + rows = s2i(rows, self.rows) + samples = s2i(samples, self.dsi.s2i_map) + + ds_idx = cast(ak.Array, self.i2d_map[rows, samples]) + out_reshape = tuple(map(int, ds_idx.typestr.split(" * ")[:-2])) + squeeze = False + if len(out_reshape) == 1: + out_reshape = None + elif out_reshape == (): + out_reshape = None + squeeze = True + + lengths = ak.count(ds_idx, -1) + if not isinstance(lengths, np.integer): + lengths = lengths.to_numpy() + lengths = cast(NDArray[np.int64], lengths) + reducer = _lengths_to_offsets(lengths)[:-1] + ds_idx = ak.flatten(ds_idx, None).to_numpy() + + return ds_idx, squeeze, out_reshape, reducer + + def r2i(self, regions: StrIdx) -> Idx: + """Convert region names to region indices.""" + return s2i(regions, self.rows) + + def s2i(self, samples: StrIdx) -> Idx: + """Convert sample names to sample indices.""" + return s2i(samples, self.dsi.s2i_map) + + +def s2i(str_idx: StrIdx, map: HashTable) -> Idx: + """Convert a string index to an integer index using a hirola.HashTable.""" + if ( + isinstance(str_idx, str) + or (isinstance(str_idx, np.ndarray) and is_dtype(str_idx, np.str_)) + or (isinstance(str_idx, Sequence) and isinstance(next(collapse(str_idx)), str)) + ): + idx = map.get(str_idx) + if (np.atleast_1d(idx) == -1).any(): + raise KeyError( + f"Some keys not found in mapping: {np.unique(np.array(str_idx)[idx == -1])}" + ) + else: + idx = str_idx + + idx = cast(Idx, idx) # above clause does this, but can't narrow type + + return idx + + +@nb.njit(nogil=True, cache=True) +def _spliced_i2d_map_helper( + i2d_map: NDArray[np.integer], + sp_map: ak.Array, + row_offsets: NDArray[np.int64], + s_idxs: NDArray[np.integer], +): + n_samples = len(s_idxs) + # (rows samples ~regions) + out = np.empty(row_offsets[-1] * n_samples, dtype=np.int32) + for row, r_idxs in enumerate(sp_map): + for r_idx in r_idxs: + for s_idx in s_idxs: + out[ + row_offsets[row] * (n_samples - 1) + s_idx * (len(r_idxs)) + r_idx + ] = i2d_map[r_idx, s_idx] + return out diff --git a/python/genvarloader/_dummy.py b/python/genvarloader/_dummy.py index 50b9dbbc..55ed301b 100644 --- a/python/genvarloader/_dummy.py +++ b/python/genvarloader/_dummy.py @@ -1,5 +1,6 @@ from pathlib import Path +import awkward as ak import numpy as np import polars as pl import seqpro as sp @@ -8,7 +9,7 @@ from ._dataset._genotypes import SparseGenotypes from ._dataset._impl import RaggedDataset -from ._dataset._indexing import DatasetIndexer +from ._dataset._indexing import DatasetIndexer, SpliceIndexer from ._dataset._intervals import tracks_to_intervals from ._dataset._reconstruct import Haps, HapsTracks, Reference, Tracks, _Variants from ._dataset._utils import bed_to_regions @@ -17,7 +18,7 @@ from ._variants._records import VLenAlleles -def get_dummy_dataset(): +def get_dummy_dataset(spliced: bool = False): """Return a dummy :class:`Dataset ` with 4 regions, 4 samples, max jitter of 2, a reference genome of all :code:`"N"`, genotypes, and 1 track "read-depth" where each track is :code:`[1, 2, 3, 4, 5, 6]` in the reference coordinate system, where :code:`3` is aligned with each region's start coordinate. Is initialized to return ragged haplotypes and tracks with no jitter and deterministic reconstruction algorithms. @@ -115,6 +116,18 @@ def get_dummy_dataset(): dummy_recon = HapsTracks(dummy_haps, dummy_tracks) + if spliced: + names = ["tp53", "shh"] + sp_map = ak.Array( + [ + [0, 1, 2], + [3], + ] + ) + dummy_spi = SpliceIndexer(names, sp_map, dummy_idxer) + else: + dummy_spi = None + dummy_dataset: RaggedDataset[Ragged[np.bytes_], Ragged[np.float32], None, None] = ( RaggedDataset( path=Path("dummy"), @@ -130,6 +143,7 @@ def get_dummy_dataset(): _full_regions=dummy_regions, _jittered_regions=dummy_regions.copy(), _idxer=dummy_idxer, + _sp_idxer=dummy_spi, _seqs=dummy_haps, _tracks=dummy_tracks, _recon=dummy_recon, diff --git a/python/genvarloader/_ragged.py b/python/genvarloader/_ragged.py index 4ed05b85..2f65fa1b 100644 --- a/python/genvarloader/_ragged.py +++ b/python/genvarloader/_ragged.py @@ -8,6 +8,7 @@ from attrs import define from awkward.contents import ListOffsetArray, NumpyArray, RegularArray from awkward.index import Index64 +from einops import repeat from numpy.typing import NDArray from ._types import DTYPE, AnnotatedHaps, Idx @@ -106,6 +107,11 @@ def dtype(self) -> np.dtype[RDTYPE]: """Data type of the ragged array.""" return self.data.dtype + @property + def ndim(self) -> int: + """Number of dimensions of the ragged array.""" + return len(self.shape) + def view(self, dtype: np.dtype): return Ragged.from_offsets(self.data.view(dtype), self.shape, self.offsets) @@ -278,6 +284,10 @@ def to_awkward(self) -> ak.Array: data = self.data.view(np.uint8) else: data = self.data + + if self.shape == (): + return ak.Array(data) + layout = ListOffsetArray( Index64(self.offsets), NumpyArray(data), # type: ignore | NDArray[RDTYPE] is ArrayLike @@ -293,7 +303,7 @@ def from_awkward(cls, awk: "ak.Array") -> "Ragged": """Convert from an `Awkward `_ array without copying. Note that this effectively returns a view of the data, so modifying the data will modify the original array.""" # parse shape - shape_str = str(awk.type).split(" * ") + shape_str = awk.typestr.split(" * ") try: shape = tuple(map(int, shape_str[:-2])) except ValueError as err: @@ -348,7 +358,7 @@ def pad_ragged( def _rc_helper( data: NDArray[np.uint8], offsets: NDArray[np.int64], mask: NDArray[np.bool_] ) -> NDArray[np.uint8]: - out = np.empty_like(data) + out = data.copy() for i in nb.prange(len(offsets) - 1): start, end = offsets[i], offsets[i + 1] _data = data[start:end] @@ -365,29 +375,35 @@ def _rc_helper( def _reverse_complement( seqs: Ragged[np.bytes_], mask: NDArray[np.bool_] ) -> Ragged[np.bytes_]: - _, mask = np.broadcast_arrays(seqs.lengths, mask) - rc_seqs = _rc_helper(seqs.data.view(np.uint8), seqs.offsets, mask.ravel()) + # (b [p] ~l), (b) + if seqs.ndim == 2: + ploidy = seqs.shape[1] + mask = repeat(mask, "b -> (b p)", p=ploidy) + rc_seqs = _rc_helper(seqs.data.view(np.uint8), seqs.offsets, mask) return Ragged.from_offsets(rc_seqs.view("S1"), seqs.shape, seqs.offsets) @nb.njit(parallel=True, nogil=True, cache=True) -def _reverse_helper( - data: NDArray[np.uint8], offsets: NDArray[np.int64], mask: NDArray[np.bool_] -): +def _reverse_helper(data: NDArray, offsets: NDArray[np.int64], mask: NDArray[np.bool_]): for i in nb.prange(len(offsets) - 1): if mask[i]: start, end = offsets[i], offsets[i + 1] if start > 0: - reverse_slice = slice(end - 1, start - 1, -1) + data[start:end] = data[end - 1 : start - 1 : -1] else: - reverse_slice = slice(end - 1, None, -1) - data[start:end] = data[reverse_slice] + data[start:end] = data[end - 1 :: -1] -def _reverse(tracks: Ragged[np.float32], mask: NDArray[np.bool_]): +def _reverse(tracks: Ragged, mask: NDArray[np.bool_]): """Reverses data along the ragged axis in-place.""" - _, mask = np.broadcast_arrays(tracks.lengths, mask) - _reverse_helper(tracks.data.view(np.uint8), tracks.offsets, mask.ravel()) + # (b t [p] ~l), (b) + if tracks.ndim == 2: + n_tracks = tracks.shape[1] + mask = repeat(mask, "b -> (b t)", t=n_tracks) + elif tracks.ndim == 3: + n_tracks, ploidy = tracks.shape[1:] + mask = repeat(mask, "b -> (b t p)", t=n_tracks, p=ploidy) + _reverse_helper(tracks.data, tracks.offsets, mask) def _jitter( diff --git a/python/genvarloader/_torch.py b/python/genvarloader/_torch.py index 310906bf..d7cccafc 100644 --- a/python/genvarloader/_torch.py +++ b/python/genvarloader/_torch.py @@ -135,12 +135,20 @@ def _tensor_from_maybe_bytes( if _TORCH_AVAILABLE: class TorchDataset(td.Dataset): - def __init__(self, dataset: "Dataset"): + dataset: "Dataset" + include_indices: bool + transform: Callable | None + + def __init__( + self, dataset: "Dataset", include_indices: bool, transform: Callable | None + ): if not _TORCH_AVAILABLE: raise ImportError( "Could not import PyTorch. Please install PyTorch to use torch features." ) self.dataset = dataset + self.include_indices = include_indices + self.transform = transform def __len__(self) -> int: return len(self.dataset) @@ -150,10 +158,23 @@ def __getitem__( ) -> Union["torch.Tensor", Tuple["torch.Tensor", ...], Any]: r_idx, s_idx = np.unravel_index(idx, self.dataset.shape) batch = self.dataset[r_idx, s_idx] - if isinstance(batch, np.ndarray): - batch = _tensor_from_maybe_bytes(batch) - elif isinstance(batch, tuple): - batch = tuple(_tensor_from_maybe_bytes(b) for b in batch) + + if not isinstance(batch, tuple): + batch = (batch,) + single_item = True + else: + single_item = False + + if self.include_indices: + batch = (*batch, r_idx, s_idx) + + if self.transform is not None: + batch = self.transform(*batch) + + batch = tuple(_tensor_from_maybe_bytes(b) for b in batch) + if single_item: + batch = batch[0] + return batch class StratifiedSampler(td.Sampler): diff --git a/python/genvarloader/_types.py b/python/genvarloader/_types.py index e3817063..02a2131b 100644 --- a/python/genvarloader/_types.py +++ b/python/genvarloader/_types.py @@ -20,8 +20,14 @@ DTYPE = TypeVar("DTYPE", bound=np.generic) Idx = Union[ - int, np.integer, Sequence[int], slice, NDArray[np.integer], NDArray[np.bool_] + int, + np.integer, + Sequence[int], + slice, + NDArray[np.integer], + NDArray[np.bool_], ] +StrIdx = Idx | str | Sequence[str] # note that str is a Sequence[str] ListIdx = Union[Sequence[int], NDArray[np.integer]] From f169d4b27a86814002d598e5c192df5985e56083 Mon Sep 17 00:00:00 2001 From: d-laub Date: Fri, 4 Apr 2025 15:28:48 -0700 Subject: [PATCH 05/53] test: update for breaking changes in API. --- pixi.lock | 4 ++-- tests/dataset/test_dataset.py | 12 ++---------- tests/dataset/test_ds_haps.py | 2 +- 3 files changed, 5 insertions(+), 13 deletions(-) diff --git a/pixi.lock b/pixi.lock index b7d47eb0..e883c744 100644 --- a/pixi.lock +++ b/pixi.lock @@ -3828,8 +3828,8 @@ packages: timestamp: 1738501352608 - pypi: . name: genvarloader - version: 0.10.2 - sha256: 38680d97dd366392143669d3ab721141ae6ec23fbe9206db79070041d3d3e11b + version: 0.10.5 + sha256: b1e3d26b1be16421b6578a9269cebe58e5fc7c0961519ff2b052e25f099955ff requires_dist: - numba>=0.58.1 - loguru diff --git a/tests/dataset/test_dataset.py b/tests/dataset/test_dataset.py index 6a743186..02bb42cf 100644 --- a/tests/dataset/test_dataset.py +++ b/tests/dataset/test_dataset.py @@ -7,6 +7,7 @@ data_dir = Path(__file__).resolve().parents[1] / "data" ref = data_dir / "fasta" / "Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz" + def ds_phased(): return gvl.Dataset.open(data_dir / "phased_dataset.gvl", ref) @@ -27,20 +28,11 @@ def seqs_annot(): return "annotated" -def bool_false(): - return False - - -def bool_true(): - return True - - @fixture(scope="session") @parametrize_with_cases("ds", prefix="ds_", cases=".") @parametrize_with_cases("seq_type", prefix="seqs_", cases=".") -@parametrize_with_cases("return_indices", prefix="bool_", cases=".") def dataset(ds: gvl.Dataset, seq_type, return_indices: bool): - return ds.with_seqs(seq_type).with_indices(return_indices) + return ds.with_seqs(seq_type) def idx_scalar(): diff --git a/tests/dataset/test_ds_haps.py b/tests/dataset/test_ds_haps.py index 4cfe8943..e16eb6e2 100644 --- a/tests/dataset/test_ds_haps.py +++ b/tests/dataset/test_ds_haps.py @@ -22,7 +22,7 @@ def dataset(): return ds -def test_ds_haps(dataset: gvl.RaggedDataset[gvl.Ragged[np.bytes_], None, None, None]): +def test_ds_haps(dataset: gvl.RaggedDataset[gvl.Ragged[np.bytes_], None]): for region, sample in product(range(dataset.n_regions), dataset.samples): c, s, e = dataset.regions.select("chrom", "chromStart", "chromEnd").row(region) # ragged (p) From 13dfad9a8bc3fe19a0c99363fc6b378f7b8c844b Mon Sep 17 00:00:00 2001 From: d-laub Date: Sat, 5 Apr 2025 18:11:30 -0700 Subject: [PATCH 06/53] feat: add members to conveniently inspect dataset splicing info. --- python/genvarloader/_dataset/_genotypes.py | 95 +++++++ python/genvarloader/_dataset/_impl.py | 271 +++++++++++++++---- python/genvarloader/_dataset/_indexing.py | 67 +++-- python/genvarloader/_dataset/_reconstruct.py | 33 +++ python/genvarloader/_dummy.py | 68 +++-- 5 files changed, 431 insertions(+), 103 deletions(-) diff --git a/python/genvarloader/_dataset/_genotypes.py b/python/genvarloader/_dataset/_genotypes.py index 3f738539..25eb0040 100644 --- a/python/genvarloader/_dataset/_genotypes.py +++ b/python/genvarloader/_dataset/_genotypes.py @@ -1289,3 +1289,98 @@ def _choose_unphased_variants( keep_group = (random.random() <= cum_prop).sum() - 1 return groups == keep_group + +@nb.njit(parallel=True, nogil=True, cache=True) +def choose_exonic_variants( + starts: NDArray[np.int32], + ends: NDArray[np.int32], + geno_offset_idxs: NDArray[np.intp], + geno_v_idxs: NDArray[np.int32], + geno_offsets: NDArray[np.int64], + positions: NDArray[np.int32], + sizes: NDArray[np.int32], +) -> Tuple[NDArray[np.bool_], NDArray[np.int64]]: + """Mark variants to keep for each haplotype. + + Parameters + ---------- + starts : NDArray[np.int32] + Shape = (n_regions) Start positions for each region. + ends : NDArray[np.int32] + Shape = (n_regions) Ends for each region. + geno_offset_idxs : NDArray[np.intp] + Shape = (n_regions, ploidy) Indices for each region into offsets. + offsets : NDArray[np.int64] + Shape = (total_variants + 1) Offsets into sparse genotypes. + sparse_genos : NDArray[np.int32] + Shape = (total_variants) Sparse genotypes i.e. variant indices for ALT genotypes. + positions : NDArray[np.int32] + Shape = (total_variants) Positions of variants. + sizes : NDArray[np.int32] + Shape = (total_variants) Sizes of variants. + deterministic : bool + Whether to deterministically assign variants to groups + """ + n_regions, ploidy = geno_offset_idxs.shape + + lengths = np.empty((n_regions, ploidy), np.int64) + for query in nb.prange(n_regions): + for hap in range(ploidy): + o_idx = geno_offset_idxs[query, hap] + o_s, o_e = geno_offsets[o_idx], geno_offsets[o_idx + 1] + lengths[query, hap] = o_e - o_s + keep_offsets = np.empty(n_regions * ploidy + 1, np.int64) + keep_offsets[0] = 0 + keep_offsets[1:] = lengths.cumsum() + + n_variants = keep_offsets[-1] + keep = np.empty(n_variants, np.bool_) + + for query in nb.prange(n_regions): + ref_start: int = starts[query] + ref_end: int = ends[query] + for hap in nb.prange(ploidy): + o_idx = geno_offset_idxs[query, hap] + o_s, o_e = geno_offsets[o_idx], geno_offsets[o_idx + 1] + qh_genos = geno_v_idxs[o_s:o_e] + + k_idx = query * ploidy + hap + k_s, k_e = keep_offsets[k_idx], keep_offsets[k_idx + 1] + qh_keep = keep[k_s:k_e] + + _choose_exonic_variants( + query_start=ref_start, + query_end=ref_end, + variant_idxs=qh_genos, + positions=positions, + sizes=sizes, + keep=qh_keep, + ) + + return keep, keep_offsets + +@nb.njit(nogil=True, cache=True) +def _choose_exonic_variants( + query_start: int, + query_end: int, + variant_idxs: NDArray[np.int32], # (v) + positions: NDArray[np.int32], # (total variants) + sizes: NDArray[np.int32], # (total variants) + keep: NDArray[np.bool_], # (v) +): + """Create a mask for variants that are fully contained within the query interval, which is + assumed to correspond to the exon boundaries.""" + # no variants + if len(variant_idxs) == 0: + return + + for v in range(len(variant_idxs)): + v_idx: int = variant_idxs[v] + v_pos = positions[v_idx] + # +1 for atomized + v_ref_end = v_pos - min(0, sizes[v_idx]) + 1 + + if v_pos >= query_start and v_ref_end <= query_end: + keep[v] = True + else: + keep[v] = False diff --git a/python/genvarloader/_dataset/_impl.py b/python/genvarloader/_dataset/_impl.py index 9d6eef11..a91932cf 100644 --- a/python/genvarloader/_dataset/_impl.py +++ b/python/genvarloader/_dataset/_impl.py @@ -24,7 +24,7 @@ from attrs import define, evolve, field from loguru import logger from numpy.typing import NDArray -from typing_extensions import NoReturn, assert_never +from typing_extensions import NoReturn, Self, assert_never from .._ragged import ( Ragged, @@ -36,7 +36,7 @@ ) from .._torch import TorchDataset, get_dataloader from .._types import DTYPE, AnnotatedHaps, Idx, StrIdx -from .._utils import idx_like_to_array +from .._utils import idx_like_to_array, is_dtype from ._genotypes import SparseGenotypes from ._indexing import DatasetIndexer, SpliceIndexer from ._reconstruct import Haps, HapsTracks, Reference, Seqs, SeqsTracks, Tracks @@ -93,8 +93,8 @@ class Dataset: - :meth:`Dataset.with_transform() ` """ - @overload @staticmethod + @overload def open( path: str | Path, reference: None = None, @@ -102,9 +102,14 @@ def open( rng: int | np.random.Generator | None = False, deterministic: bool = True, rc_neg: bool = True, + splice_info: str + | tuple[str, str] + | dict[Any, NDArray[np.integer]] + | None = None, + var_filter: Literal["exonic"] | None = None, ) -> RaggedDataset[None, RTRK]: ... - @overload @staticmethod + @overload def open( path: str | Path, reference: str | Path, @@ -112,6 +117,11 @@ def open( rng: int | np.random.Generator | None = False, deterministic: bool = True, rc_neg: bool = True, + splice_info: str + | tuple[str, str] + | dict[Any, NDArray[np.integer]] + | None = None, + var_filter: Literal["exonic"] | None = None, ) -> RaggedDataset[Ragged[np.bytes_], RTRK]: ... @staticmethod def open( @@ -123,8 +133,9 @@ def open( rc_neg: bool = True, splice_info: str | tuple[str, str] - | dict[Any, NDArray[np.integer]] + | dict[str, NDArray[np.integer]] | None = None, + var_filter: Literal["exonic"] | None = None, ) -> RaggedDataset[RSEQ, RTRK]: """Open a dataset from a path. If no reference genome is provided, the dataset cannot yield sequences. Will initialize the dataset such that it will return tracks and haplotypes (reference sequences if no genotypes) if possible. @@ -147,6 +158,13 @@ def open( can be returned. rc_neg Whether to reverse-complement sequences and reverse tracks on negative strands. + splice_info + A string or tuple of strings representing the splice information to use. If a string, it will be used as a column name. + If a tuple of strings, the first string will be used as a column name and the second string will be used as a value. + If a dictionary, the keys will be used as the splice information and the values will be used as the splice map. + If None, no splice information will be used. + var_filter + Whether to filter variants. If set to :code:`"exonic"`, only exonic variants will be applied. """ path = Path(path) if not path.exists(): @@ -226,6 +244,7 @@ def open( samples=samples, ploidy=ploidy, ) + seqs.filter = var_filter tracks = None reconstructor = seqs case reference, True, True: @@ -243,6 +262,7 @@ def open( samples=samples, ploidy=ploidy, ) + seqs.filter = var_filter tracks = Tracks.from_path(path, regions, len(samples)) tracks = tracks.with_tracks(list(tracks.intervals)) reconstructor = HapsTracks(haps=seqs, tracks=tracks) @@ -252,42 +272,11 @@ def open( assert_never(has_intervals) if splice_info is not None: - if isinstance(splice_info, str): - names, sorter, idx, lengths = np.unique( - bed[splice_info], - return_index=True, - return_inverse=True, - return_counts=True, - ) - names = names[np.argsort(sorter)] - splice_map = Ragged.from_lengths(np.argsort(idx), lengths).to_awkward()[ - np.argsort(sorter) - ] - elif isinstance(splice_info, Tuple): - names, sorter, lengths = np.unique( - bed[splice_info[0]], - return_index=True, - return_counts=True, - ) - data = ( - bed[splice_info] - .with_row_index() - .sort(splice_info)["index"] - .to_numpy() - ) - splice_map = Ragged.from_lengths(data, lengths).to_awkward()[ - np.argsort(sorter) - ] - elif isinstance(splice_info, dict): - names = np.array(list(splice_info.keys())) - splice_map = ak.Array(splice_info.values()) - else: - assert_never(splice_info) - - splice_map = cast(ak.Array, splice_map) - sp_idxer = SpliceIndexer(names, splice_map, idxer) + sp_idxer = _parse_splice_info(splice_info, bed, idxer) + spliced_bed = _get_spliced_bed(sp_idxer, bed) else: sp_idxer = None + spliced_bed = None dataset = RaggedDataset( path=path, @@ -302,6 +291,7 @@ def open( _idxer=idxer, _sp_idxer=sp_idxer, _full_bed=bed, + _spliced_bed=spliced_bed, _full_regions=regions, _jittered_regions=regions.copy(), _seqs=seqs, @@ -320,6 +310,12 @@ def with_settings( rng: int | np.random.Generator | None = None, deterministic: bool | None = None, rc_neg: bool | None = None, + splice_info: str + | tuple[str, str] + | dict[str, NDArray[np.integer]] + | Literal[False] + | None = None, + var_filter: Literal[False, "exonic"] | None = None, ) -> Dataset: """Modify settings of the dataset, returning a new dataset without modifying the old one. @@ -336,6 +332,13 @@ def with_settings( can be returned. rc_neg Whether to reverse-complement sequences and reverse tracks on negative strands. + splice_info + A string or tuple of strings representing the splice information to use. If a string, it will be used as a column name. + If a tuple of strings, the first string will be used as a column name and the second string will be used as a value. + If a dictionary, the keys will be used as the splice information and the values will be used as the splice map. + If False, no splice information will be used. + var_filter + Whether to filter variants. If set to :code:`"exonic"`, only exonic variants will be applied. """ to_evolve = {} @@ -377,6 +380,27 @@ def with_settings( if rc_neg is not None: to_evolve["rc_neg"] = rc_neg + if splice_info is not None: + if splice_info is False: + _splice_info = None + else: + _splice_info = _parse_splice_info( + splice_info, self.regions, self._idxer + ) + to_evolve["_sp_idxer"] = _splice_info + + if var_filter is not None: + if not isinstance(self._seqs, Haps): + raise ValueError( + "Filtering variants can only be done when the dataset has variants." + ) + + if var_filter is False: + var_filter = None + + if var_filter != self._seqs.filter: + to_evolve["_seqs"] = evolve(self._seqs, filter=var_filter) + return evolve(self, **to_evolve) def with_len( @@ -420,6 +444,7 @@ def with_len( _idxer=self._idxer, _sp_idxer=self._sp_idxer, _full_bed=self._full_bed, + _spliced_bed=self._spliced_bed, _full_regions=self._full_regions, _jittered_regions=self._jittered_regions, _seqs=self._seqs, @@ -441,6 +466,7 @@ def with_len( _idxer=self._idxer, _sp_idxer=self._sp_idxer, _full_bed=self._full_bed, + _spliced_bed=self._spliced_bed, _full_regions=self._full_regions, _jittered_regions=self._jittered_regions, _seqs=self._seqs, @@ -614,6 +640,7 @@ def with_tracks(self, tracks: str | List[str] | None): transform: Callable | None """Tranform to apply to what the dataset would otherwise return on its own.""" _full_bed: pl.DataFrame = field(alias="_full_bed") + _spliced_bed: pl.DataFrame | None = field(alias="_spliced_bed") _full_regions: NDArray[np.int32] = field(alias="_full_regions") """Unjittered, sorted regions matching order on-disk.""" _jittered_regions: NDArray[np.int32] = field(alias="_jittered_regions") @@ -639,6 +666,11 @@ def is_subset(self) -> bool: """Whether the dataset is a subset.""" return self._idxer.is_subset + @property + def is_spliced(self) -> bool: + """Whether the dataset is spliced.""" + return self._sp_idxer is not None + @property def has_reference(self) -> bool: """Whether the dataset was provided a reference genome.""" @@ -672,30 +704,46 @@ def n_regions(self) -> int: """The number of regions in the dataset.""" return self._idxer.n_regions + @property + def spliced_regions(self) -> pl.DataFrame | None: + """The spliced regions in the dataset.""" + if self._spliced_bed is None or self._sp_idxer is None: + raise ValueError("Dataset does not have splice information.") + if self._sp_idxer.row_subset_idxs is None: + return self._spliced_bed + else: + return self._spliced_bed[self._sp_idxer.row_subset_idxs] + @property def n_samples(self) -> int: """The number of samples in the dataset.""" return self._idxer.n_samples @property - def shape(self) -> Tuple[int, int]: - """Return the shape of the dataset. :code:`(n_samples, n_regions)`""" - return self.n_regions, self.n_samples + def shape(self) -> tuple[int, int]: + """Return the shape of the dataset. :code:`(n_rows, n_samples)`""" + if self._sp_idxer is None: + return self._idxer.shape + else: + return self._sp_idxer.shape @property - def full_shape(self) -> Tuple[int, int]: - """Return the full shape of the dataset, ignoring any subsetting. :code:`(n_samples, n_regions)`""" - return self._idxer.full_shape + def full_shape(self) -> tuple[int, int]: + """Return the full shape of the dataset, ignoring any subsetting. :code:`(n_rows, n_samples)`""" + if self._sp_idxer is None: + return self._idxer.full_shape + else: + return self._sp_idxer.full_shape @property - def available_tracks(self) -> List[str] | None: + def available_tracks(self) -> list[str] | None: """The available tracks in the dataset.""" if self._tracks is None: return return list(self._tracks.intervals) @property - def active_tracks(self) -> List[str] | None: + def active_tracks(self) -> list[str] | None: """The active tracks in the dataset.""" if self._tracks is None: return @@ -733,6 +781,8 @@ def __len__(self): return self.n_regions * self.n_samples def __str__(self) -> str: + splice_status = "Spliced" if self.is_spliced else "Unspliced" + if self._available_sequences is None or self.sequence_type is None: seq_type = "None" else: @@ -754,7 +804,7 @@ def __str__(self) -> str: if len(self.active_tracks) > 5: act_tracks += f" + {len(self.active_tracks) - 5} more" return ( - f"GVL store at {self.path}\n" + splice_status + f" GVL dataset at {self.path}\n" f"Is subset: {self.is_subset}\n" f"# of regions: {self.n_regions}\n" f"# of samples: {self.n_samples}\n" @@ -773,7 +823,7 @@ def subset_to( self, regions: Idx | pl.Series | None = None, samples: Idx | str | Sequence[str] | None = None, - ) -> "Dataset": + ) -> Self: """Subset the dataset to specific regions and/or samples by index or a boolean mask. If regions or samples are not provided, the corresponding dimension will not be subset. @@ -842,9 +892,7 @@ def subset_to( return self if samples is not None: - if isinstance(samples, np.ndarray) and np.issubdtype( - samples.dtype, np.bool_ - ): + if isinstance(samples, np.ndarray) and is_dtype(samples, np.bool_): sample_idx = np.nonzero(samples)[0] elif isinstance( samples, (int, np.integer, slice, np.ndarray) @@ -870,23 +918,35 @@ def subset_to( if regions is not None: if isinstance(regions, pl.Series): region_idxs = regions.to_numpy() - if np.issubdtype(region_idxs.dtype, np.bool_): + if is_dtype(region_idxs, np.bool_): region_idxs = np.nonzero(region_idxs)[0] - elif not np.issubdtype(region_idxs.dtype, np.integer): + elif not is_dtype(region_idxs, np.integer): raise ValueError("`regions` must be index-like or a boolean mask.") else: - regions = cast(Idx, regions) # how to narrow dtype? is this possible? region_idxs = idx_like_to_array(regions, self.n_regions) else: region_idxs = None - idxer = self._idxer.subset_to(regions=region_idxs, samples=sample_idx) - - return evolve(self, _idxer=idxer) + if self._sp_idxer is None: + idxer = self._idxer.subset_to(regions=region_idxs, samples=sample_idx) + return evolve(self, _idxer=idxer) + else: + row_idxs = region_idxs + sp_idxer, sub_dsi = self._sp_idxer.subset_to( + rows=row_idxs, samples=sample_idx + ) + return evolve(self, _idxer=sub_dsi, _sp_idxer=sp_idxer) - def to_full_dataset(self) -> "Dataset": + def to_full_dataset(self) -> Self: """Return a full sized dataset, undoing any subsetting.""" - return evolve(self, _idxer=self._idxer.to_full_dataset()) + if self._sp_idxer is None: + return evolve(self, _idxer=self._idxer.to_full_dataset()) + else: + return evolve( + self, + _idxer=self._idxer.to_full_dataset(), + _sp_idxer=self._sp_idxer.to_full_dataset(), + ) def haplotype_lengths( self, @@ -1216,6 +1276,97 @@ def _getitem_spliced( return recon, squeeze, out_reshape +def _parse_splice_info( + splice_info: str | tuple[str, str] | dict[str, NDArray[np.integer]], + regions: pl.DataFrame, + idxer: DatasetIndexer, +): + """Parse splice info into a SpliceIndexer. + + Parameters + ---------- + splice_info + The splice info to parse. Can be a string, a tuple of strings, or a dictionary. + regions + The regions to parse the splice info from. + idxer + The idxer to use to parse the splice info. + """ + if isinstance(splice_info, str): + names, sorter, idx, lengths = np.unique( + regions[splice_info], + return_index=True, + return_inverse=True, + return_counts=True, + ) + names = names[np.argsort(sorter)] + splice_map = Ragged.from_lengths(np.argsort(idx), lengths).to_awkward()[ + np.argsort(sorter) + ] + elif isinstance(splice_info, tuple): + names, sorter, lengths = np.unique( + regions[splice_info[0]], + return_index=True, + return_counts=True, + ) + data = ( + regions[splice_info].with_row_index().sort(splice_info)["index"].to_numpy() + ) + splice_map = Ragged.from_lengths(data, lengths).to_awkward()[np.argsort(sorter)] + elif isinstance(splice_info, dict): + names = list(splice_info.keys()) + splice_map = ak.Array(splice_info.values()) + else: + assert_never(splice_info) + + splice_map = cast(ak.Array, splice_map) + sp_idxer = SpliceIndexer._init(names, splice_map, idxer) + return sp_idxer + + +def _get_spliced_bed(spi: SpliceIndexer, full_bed: pl.DataFrame) -> pl.DataFrame: + idx = ak.flatten(spi.splice_map, None).to_numpy() + regs_per_row = ak.count(spi.splice_map, -1).to_numpy() + splice_ids = spi.rows.keys + if spi.row_subset_idxs is not None: + splice_ids = splice_ids[spi.row_subset_idxs] + splice_ids = splice_ids.repeat(regs_per_row) + + uniq_cols = ["chrom"] + if "strand" in full_bed: + uniq_cols.append("strand") + + spliced_bed = ( + full_bed.with_row_index("regions")[idx] + .with_columns(splice_id=splice_ids) + .group_by("splice_id", maintain_order=True) + .agg(pl.exclude(uniq_cols), pl.col(uniq_cols).unique()) + ) + + if (spliced_bed["chrom"].list.len() > 1).any(): + raise ValueError( + "Some elements of spliced regions are on different chromosomes." + ) + + if "strand" in full_bed and (spliced_bed["strand"].list.len() > 1).any(): + raise ValueError("Some elements of spliced regions are on different strands.") + + important_cols = [ + "splice_id", + "regions", + "chrom", + "chromStart", + "chromEnd", + "strand", + ] + + spliced_bed = spliced_bed.with_columns(pl.col(uniq_cols).list.first()).select( + pl.col(important_cols), pl.exclude(important_cols) + ) + + return spliced_bed + + @overload def _rc(rag: Ragged[DTYPE], to_rc: NDArray[np.bool_]) -> Ragged[DTYPE]: ... @overload diff --git a/python/genvarloader/_dataset/_indexing.py b/python/genvarloader/_dataset/_indexing.py index c59c9632..8ef65d0b 100644 --- a/python/genvarloader/_dataset/_indexing.py +++ b/python/genvarloader/_dataset/_indexing.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from typing import List, Literal, Optional, Sequence, cast import awkward as ak @@ -187,6 +189,7 @@ def s2i(self, samples: StrIdx) -> Idx: return s2i(samples, self.s2i_map) +@define class SpliceIndexer: rows: HashTable """Map from splice element names to row indices.""" @@ -197,27 +200,42 @@ class SpliceIndexer: dsi: DatasetIndexer i2d_map: ak.Array """Shape: (rows, samples, ~regions). Map from spliced row/sample indices to on-disk dataset indices.""" - _shape_helper: NDArray[np.uint8] + row_subset_idxs: Optional[NDArray[np.intp]] = None + """Subset of row indices.""" - def __init__( - self, + @classmethod + def _init( + cls, names: Sequence[str] | NDArray[np.str_], splice_map: ak.Array, dsi: DatasetIndexer, - ): + ) -> "SpliceIndexer": _names = np.array(names) - self.rows = HashTable( + rows = HashTable( max=len(names) * 2, # type: ignore | 2x size for perf > mem dtype=_names.dtype, ) - self.rows.add(_names) - self.splice_map = splice_map - self.full_splice_map = splice_map - self.dsi = dsi - self._shape_helper = np.empty((len(splice_map), dsi.n_samples), dtype=np.uint8) - self.i2d_map = self.get_i2d_map(splice_map, dsi) - - def get_i2d_map(self, splice_map: ak.Array, dsi: DatasetIndexer): + rows.add(_names) + + if ( + ak.max(splice_map, None) >= dsi.n_regions + or ak.min(splice_map, None) < -dsi.n_regions + ): + raise ValueError( + "Found indices in the splice map that are out of bounds for the dataset." + ) + + return cls( + rows=rows, + splice_map=splice_map, + full_splice_map=splice_map, + dsi=dsi, + i2d_map=cls.get_i2d_map(splice_map, dsi), + row_subset_idxs=None, + ) + + @staticmethod + def get_i2d_map(splice_map: ak.Array, dsi: DatasetIndexer): regs_per_row = ak.count(splice_map, -1).to_numpy() row_offsets = _lengths_to_offsets(regs_per_row) s_idxs = ( @@ -245,6 +263,10 @@ def n_samples(self) -> int: def shape(self) -> tuple[int, int]: return self.n_rows, self.n_samples + @property + def full_shape(self) -> tuple[int, int]: + return len(self.full_splice_map), len(self.dsi.full_samples) + def __len__(self): return self.n_rows * self.n_samples @@ -252,10 +274,10 @@ def subset_to( self, rows: Optional[Idx] = None, samples: Optional[Idx] = None, - ) -> Self: + ) -> tuple[Self, DatasetIndexer]: """Subset to specific regions and/or samples.""" if rows is None and samples is None: - return self + return self, self.dsi if rows is not None: row_idxs = idx_like_to_array(rows, self.n_rows) @@ -266,13 +288,24 @@ def subset_to( # splice_map is to absolute indices so don't subset dsi regions sub_dsi = self.dsi.subset_to(samples=samples) i2d_map = self.get_i2d_map(splice_map, sub_dsi) + region_idxs = ak.flatten(splice_map, None).to_numpy() + eff_dsi = self.dsi.subset_to(regions=region_idxs, samples=samples) - return evolve(self, splice_map=splice_map, dsi=sub_dsi, i2d_map=i2d_map) + return evolve( + self, + splice_map=splice_map, + dsi=sub_dsi, + i2d_map=i2d_map, + row_subset_idxs=row_idxs, + ), eff_dsi def to_full_dataset(self) -> Self: """Return a full sized dataset, undoing any subsettting.""" return evolve( - self, splice_map=self.full_splice_map, dsi=self.dsi.to_full_dataset() + self, + splice_map=self.full_splice_map, + dsi=self.dsi.to_full_dataset(), + row_subset_idxs=None, ) def parse_idx( diff --git a/python/genvarloader/_dataset/_reconstruct.py b/python/genvarloader/_dataset/_reconstruct.py index 3e7de317..62484014 100644 --- a/python/genvarloader/_dataset/_reconstruct.py +++ b/python/genvarloader/_dataset/_reconstruct.py @@ -37,6 +37,7 @@ from ._genotypes import ( SparseGenotypes, SparseSomaticGenotypes, + choose_exonic_variants, choose_unphased_variants, get_diffs_sparse, reconstruct_haplotypes_from_sparse, @@ -198,6 +199,7 @@ class Haps(Reconstructor[H]): genotypes: Union[SparseGenotypes, SparseSomaticGenotypes] """Shape: (regions, samples, ploidy). The genotypes in the dataset. This is memory mapped.""" annotate: bool + filter: Literal["exonic"] | None @classmethod def from_path( @@ -241,6 +243,7 @@ def from_path( variants=variants, genotypes=genotypes, annotate=False, + filter=None, ) def _haplotype_ilens( @@ -277,6 +280,26 @@ def _haplotype_ilens( keep=keep, keep_offsets=keep_offsets, ) + elif self.filter == "exonic": + if keep is None or keep_offsets is None: + keep, keep_offsets = choose_exonic_variants( + starts=jittered_regions[:, 1], + ends=jittered_regions[:, 2], + geno_offset_idxs=geno_offset_idxs, + geno_v_idxs=self.genotypes.variant_idxs, + geno_offsets=self.genotypes.offsets, + positions=self.variants.positions, + sizes=self.variants.sizes, + ) + # (r s p) + hap_ilens = get_diffs_sparse( + geno_offset_idxs=geno_offset_idxs, + geno_v_idxs=self.genotypes.variant_idxs, + geno_offsets=self.genotypes.offsets, + size_diffs=self.variants.sizes, + keep=keep, + keep_offsets=keep_offsets, + ) else: # (r s p) hap_ilens = get_diffs_sparse( @@ -349,6 +372,16 @@ def get_haps_and_shifts( sizes=self.variants.sizes, deterministic=rng is None, ) + elif self.filter == "exonic": + keep, keep_offsets = choose_exonic_variants( + starts=regions[:, 1], + ends=regions[:, 2], + geno_offset_idxs=geno_offset_idx, + geno_v_idxs=self.genotypes.variant_idxs, + geno_offsets=self.genotypes.offsets, + positions=self.variants.positions, + sizes=self.variants.sizes, + ) else: keep = None keep_offsets = None diff --git a/python/genvarloader/_dummy.py b/python/genvarloader/_dummy.py index 55ed301b..f704c6b8 100644 --- a/python/genvarloader/_dummy.py +++ b/python/genvarloader/_dummy.py @@ -8,7 +8,7 @@ from natsort import natsorted from ._dataset._genotypes import SparseGenotypes -from ._dataset._impl import RaggedDataset +from ._dataset._impl import RaggedDataset, _get_spliced_bed from ._dataset._indexing import DatasetIndexer, SpliceIndexer from ._dataset._intervals import tracks_to_intervals from ._dataset._reconstruct import Haps, HapsTracks, Reference, Tracks, _Variants @@ -22,6 +22,20 @@ def get_dummy_dataset(spliced: bool = False): """Return a dummy :class:`Dataset ` with 4 regions, 4 samples, max jitter of 2, a reference genome of all :code:`"N"`, genotypes, and 1 track "read-depth" where each track is :code:`[1, 2, 3, 4, 5, 6]` in the reference coordinate system, where :code:`3` is aligned with each region's start coordinate. Is initialized to return ragged haplotypes and tracks with no jitter and deterministic reconstruction algorithms. + + Parameters + ---------- + spliced + If :code:`True`, the dataset will be setup for splicing with all regions moved to chromosome 1 and + a splice indexer with 2 genes, "tp53" and "shh", corresponding to regions: + + .. code-block:: python + + { + "tp53": [3, 0, 2], + "shh": [1], + } + """ max_jitter = 2 @@ -87,7 +101,7 @@ def get_dummy_dataset(spliced: bool = False): ploidy=1, ) - dummy_haps = Haps(dummy_ref, dummy_vars, dummy_genos, False) + dummy_haps = Haps(dummy_ref, dummy_vars, dummy_genos, False, None) # (r s), want tracks of [1, 2, 3, 4, 5] for each region so that pad values of 0 are obvious track_regions = dummy_regions.copy() @@ -120,35 +134,37 @@ def get_dummy_dataset(spliced: bool = False): names = ["tp53", "shh"] sp_map = ak.Array( [ - [0, 1, 2], - [3], + [3, 0, 2], + [1], ] ) - dummy_spi = SpliceIndexer(names, sp_map, dummy_idxer) + dummy_spi = SpliceIndexer._init(names, sp_map, dummy_idxer) + dummy_bed = dummy_bed.with_columns(chrom=pl.lit("chr1")) + sp_bed = _get_spliced_bed(dummy_spi, dummy_bed) else: dummy_spi = None + sp_bed = None - dummy_dataset: RaggedDataset[Ragged[np.bytes_], Ragged[np.float32], None, None] = ( - RaggedDataset( - path=Path("dummy"), - output_length="ragged", - max_jitter=max_jitter, - return_indices=False, - contigs=dummy_contigs, - jitter=0, - deterministic=True, - rc_neg=True, - transform=None, - _full_bed=dummy_bed, - _full_regions=dummy_regions, - _jittered_regions=dummy_regions.copy(), - _idxer=dummy_idxer, - _sp_idxer=dummy_spi, - _seqs=dummy_haps, - _tracks=dummy_tracks, - _recon=dummy_recon, - _rng=np.random.default_rng(), - ) + dummy_dataset: RaggedDataset[Ragged[np.bytes_], Ragged[np.float32]] = RaggedDataset( + path=Path("dummy"), + output_length="ragged", + max_jitter=max_jitter, + return_indices=False, + contigs=dummy_contigs, + jitter=0, + deterministic=True, + rc_neg=True, + transform=None, + _full_bed=dummy_bed, + _spliced_bed=sp_bed, + _full_regions=dummy_regions, + _jittered_regions=dummy_regions.copy(), + _idxer=dummy_idxer, + _sp_idxer=dummy_spi, + _seqs=dummy_haps, + _tracks=dummy_tracks, + _recon=dummy_recon, + _rng=np.random.default_rng(), ) return dummy_dataset From 3df050a8d99685256c1f385433288374a5ec089e Mon Sep 17 00:00:00 2001 From: d-laub Date: Tue, 8 Apr 2025 11:38:54 -0700 Subject: [PATCH 07/53] fix: spliced i2d_map --- python/genvarloader/_dataset/_impl.py | 54 ++++++++++++++++------- python/genvarloader/_dataset/_indexing.py | 8 ++-- 2 files changed, 42 insertions(+), 20 deletions(-) diff --git a/python/genvarloader/_dataset/_impl.py b/python/genvarloader/_dataset/_impl.py index a91932cf..66425be1 100644 --- a/python/genvarloader/_dataset/_impl.py +++ b/python/genvarloader/_dataset/_impl.py @@ -23,6 +23,7 @@ import polars as pl from attrs import define, evolve, field from loguru import logger +from more_itertools import collapse from numpy.typing import NDArray from typing_extensions import NoReturn, Self, assert_never @@ -159,10 +160,11 @@ def open( rc_neg Whether to reverse-complement sequences and reverse tracks on negative strands. splice_info - A string or tuple of strings representing the splice information to use. If a string, it will be used as a column name. - If a tuple of strings, the first string will be used as a column name and the second string will be used as a value. - If a dictionary, the keys will be used as the splice information and the values will be used as the splice map. - If None, no splice information will be used. + A string or tuple of strings representing the splice information to use. + If a string, it will be used as the transcript ID and the exons are expected to be in order. + If a tuple of strings, the first string will be used as the transcript ID and the second string will be used as the exon number. + If a dictionary, the keys will be used as the transcript ID and the values should be the row number for each exon, in order. + If False, splicing will be disabled. var_filter Whether to filter variants. If set to :code:`"exonic"`, only exonic variants will be applied. """ @@ -333,10 +335,11 @@ def with_settings( rc_neg Whether to reverse-complement sequences and reverse tracks on negative strands. splice_info - A string or tuple of strings representing the splice information to use. If a string, it will be used as a column name. - If a tuple of strings, the first string will be used as a column name and the second string will be used as a value. - If a dictionary, the keys will be used as the splice information and the values will be used as the splice map. - If False, no splice information will be used. + A string or tuple of strings representing the splice information to use. + If a string, it will be used as the transcript ID and the exons are expected to be in order. + If a tuple of strings, the first string will be used as the transcript ID and the second string will be used as the exon number. + If a dictionary, the keys will be used as the transcript ID and the values should be the row number for each exon, in order. + If False, splicing will be disabled. var_filter Whether to filter variants. If set to :code:`"exonic"`, only exonic variants will be applied. """ @@ -957,6 +960,10 @@ def haplotype_lengths( not phased or not deterministic, this will return :code:`None` because the haplotypes are not guaranteed to be a consistent length due to randomness in what variants are used. + .. note:: + + Currently not implemented for spliced datasets. + Parameters ---------- regions @@ -964,6 +971,11 @@ def haplotype_lengths( samples Samples to compute haplotype lengths for. """ + if self._sp_idxer is not None: + raise NotImplementedError( + "Haplotype lengths are not yet implemented for spliced datasets." + ) + if ( not isinstance(self._seqs, Haps) or not isinstance(self._seqs.genotypes, SparseGenotypes) @@ -1168,8 +1180,22 @@ def to_dataloader( pin_memory_device=pin_memory_device, ) - def __getitem__(self, idx: Idx | tuple[Idx] | tuple[Idx, StrIdx]) -> Any: + def __getitem__(self, idx: StrIdx | tuple[StrIdx] | tuple[StrIdx, StrIdx]) -> Any: if self._sp_idxer is None: + if isinstance(idx, tuple): + r_idx = idx[0] + else: + r_idx = idx + + if isinstance(r_idx, str) or ( + isinstance(r_idx, Sequence) and isinstance(next(collapse(r_idx)), str) + ): + raise ValueError( + "Unspliced datasets do not support string indexing over regions. Please use integer indexing." + ) + + idx = cast(Idx | tuple[Idx] | tuple[Idx, StrIdx], idx) + recon, squeeze, out_reshape = self._getitem_unspliced(idx) else: recon, squeeze, out_reshape = self._getitem_spliced(idx, self._sp_idxer) @@ -1251,7 +1277,7 @@ def _getitem_spliced( inner_ds = self.with_len("ragged") ds_idx, squeeze, out_reshape, reducer = splice_idxer.parse_idx(idx) - r_idx, _ = np.unravel_index(ds_idx, self.full_shape) + r_idx, _ = np.unravel_index(ds_idx, self._idxer.full_shape) regions = self._jittered_regions[r_idx] recon = inner_ds._recon( @@ -1576,9 +1602,7 @@ def __getitem__( self: ArrayDataset[SEQ, TRK], idx: Idx | tuple[Idx] | tuple[Idx, Idx | str | Sequence[str]], ) -> Tuple[SEQ, TRK]: ... - def __getitem__( - self, idx: Idx | tuple[Idx] | tuple[Idx, Idx | str | Sequence[str]] - ) -> Any: + def __getitem__(self, idx: StrIdx | tuple[StrIdx] | tuple[StrIdx, StrIdx]) -> Any: return super().__getitem__(idx) @@ -1671,7 +1695,5 @@ def __getitem__( self: RaggedDataset[RSEQ, RTRK], idx: Idx | tuple[Idx] | tuple[Idx, Idx | str | Sequence[str]], ) -> Tuple[RSEQ, RTRK]: ... - def __getitem__( - self, idx: Idx | tuple[Idx] | tuple[Idx, Idx | str | Sequence[str]] - ) -> Any: + def __getitem__(self, idx: StrIdx | tuple[StrIdx] | tuple[StrIdx, StrIdx]) -> Any: return super().__getitem__(idx) diff --git a/python/genvarloader/_dataset/_indexing.py b/python/genvarloader/_dataset/_indexing.py index 8ef65d0b..647eb601 100644 --- a/python/genvarloader/_dataset/_indexing.py +++ b/python/genvarloader/_dataset/_indexing.py @@ -405,9 +405,9 @@ def _spliced_i2d_map_helper( # (rows samples ~regions) out = np.empty(row_offsets[-1] * n_samples, dtype=np.int32) for row, r_idxs in enumerate(sp_map): - for r_idx in r_idxs: + for r, r_idx in enumerate(r_idxs): for s_idx in s_idxs: - out[ - row_offsets[row] * (n_samples - 1) + s_idx * (len(r_idxs)) + r_idx - ] = i2d_map[r_idx, s_idx] + out[row_offsets[row] * n_samples + s_idx * (len(r_idxs)) + r] = i2d_map[ + r_idx, s_idx + ] return out From 53716e26341df5cc3498a2a47ea2a82491a70822 Mon Sep 17 00:00:00 2001 From: d-laub Date: Tue, 8 Apr 2025 11:45:50 -0700 Subject: [PATCH 08/53] fix: __getitem__ type annotations for StrIdx --- python/genvarloader/_dataset/_impl.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/python/genvarloader/_dataset/_impl.py b/python/genvarloader/_dataset/_impl.py index 66425be1..25dbf617 100644 --- a/python/genvarloader/_dataset/_impl.py +++ b/python/genvarloader/_dataset/_impl.py @@ -1585,22 +1585,22 @@ def with_tracks(self, tracks: str | List[str] | None) -> ArrayDataset: @overload def __getitem__( self: ArrayDataset[SEQ, None], - idx: Idx | tuple[Idx] | tuple[Idx, Idx | str | Sequence[str]], + idx: StrIdx | tuple[StrIdx] | tuple[StrIdx, StrIdx], ) -> SEQ: ... @overload def __getitem__( self: ArrayDataset[None, TRK], - idx: Idx | tuple[Idx] | tuple[Idx, Idx | str | Sequence[str]], + idx: StrIdx | tuple[StrIdx] | tuple[StrIdx, StrIdx], ) -> TRK: ... @overload def __getitem__( self: ArrayDataset[None, None], - idx: Idx | tuple[Idx] | tuple[Idx, Idx | str | Sequence[str]], + idx: StrIdx | tuple[StrIdx] | tuple[StrIdx, StrIdx], ) -> NoReturn: ... @overload def __getitem__( self: ArrayDataset[SEQ, TRK], - idx: Idx | tuple[Idx] | tuple[Idx, Idx | str | Sequence[str]], + idx: StrIdx | tuple[StrIdx] | tuple[StrIdx, StrIdx], ) -> Tuple[SEQ, TRK]: ... def __getitem__(self, idx: StrIdx | tuple[StrIdx] | tuple[StrIdx, StrIdx]) -> Any: return super().__getitem__(idx) @@ -1678,22 +1678,22 @@ def with_tracks(self, tracks: str | List[str] | None) -> RaggedDataset: @overload def __getitem__( self: RaggedDataset[RSEQ, None], - idx: Idx | tuple[Idx] | tuple[Idx, Idx | str | Sequence[str]], + idx: StrIdx | tuple[StrIdx] | tuple[StrIdx, StrIdx], ) -> RSEQ: ... @overload def __getitem__( self: RaggedDataset[None, RTRK], - idx: Idx | tuple[Idx] | tuple[Idx, Idx | str | Sequence[str]], + idx: StrIdx | tuple[StrIdx] | tuple[StrIdx, StrIdx], ) -> RTRK: ... @overload def __getitem__( self: RaggedDataset[None, None], - idx: Idx | tuple[Idx] | tuple[Idx, Idx | str | Sequence[str]], + idx: StrIdx | tuple[StrIdx] | tuple[StrIdx, StrIdx], ) -> NoReturn: ... @overload def __getitem__( self: RaggedDataset[RSEQ, RTRK], - idx: Idx | tuple[Idx] | tuple[Idx, Idx | str | Sequence[str]], + idx: StrIdx | tuple[StrIdx] | tuple[StrIdx, StrIdx], ) -> Tuple[RSEQ, RTRK]: ... def __getitem__(self, idx: StrIdx | tuple[StrIdx] | tuple[StrIdx, StrIdx]) -> Any: return super().__getitem__(idx) From db849e00829e2bf0aaa9bbc01a417ce8d5526e62 Mon Sep 17 00:00:00 2001 From: d-laub Date: Fri, 18 Apr 2025 09:42:22 -0700 Subject: [PATCH 09/53] fix: update spliced_bed in with_settings for splice_info --- pixi.lock | 4 ++-- python/genvarloader/_dataset/_impl.py | 11 ++++++----- python/genvarloader/_ragged.py | 8 ++++---- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/pixi.lock b/pixi.lock index 2799b28b..da28db64 100644 --- a/pixi.lock +++ b/pixi.lock @@ -1886,8 +1886,8 @@ packages: requires_python: '>=3.9' - pypi: . name: genvarloader - version: 0.11.0 - sha256: fccf9d11a59a226ef7747f93f0ff04558d3f2a2b17b34a5b9d3d74618f414961 + version: 0.12.0 + sha256: 8f90c5fc2b3b543835e15bb6aee15574b364358146814e3279e8d3477eb1c8b2 requires_dist: - numba>=0.58.1 - loguru diff --git a/python/genvarloader/_dataset/_impl.py b/python/genvarloader/_dataset/_impl.py index 25dbf617..1bc6037d 100644 --- a/python/genvarloader/_dataset/_impl.py +++ b/python/genvarloader/_dataset/_impl.py @@ -385,12 +385,13 @@ def with_settings( if splice_info is not None: if splice_info is False: - _splice_info = None + sp_idxer = None + spliced_bed = None else: - _splice_info = _parse_splice_info( - splice_info, self.regions, self._idxer - ) - to_evolve["_sp_idxer"] = _splice_info + sp_idxer = _parse_splice_info(splice_info, self.regions, self._idxer) + spliced_bed = _get_spliced_bed(sp_idxer, self._full_bed) + to_evolve["_sp_idxer"] = sp_idxer + to_evolve["_spliced_bed"] = spliced_bed if var_filter is not None: if not isinstance(self._seqs, Haps): diff --git a/python/genvarloader/_ragged.py b/python/genvarloader/_ragged.py index 5b3e3af9..06648c16 100644 --- a/python/genvarloader/_ragged.py +++ b/python/genvarloader/_ragged.py @@ -134,7 +134,7 @@ def lengths(self) -> NDArray[np.int32]: @classmethod def from_offsets( cls, - data: NDArray[DTYPE], + data: NDArray[RDTYPE], shape: Union[int, Tuple[int, ...]], offsets: NDArray[np.int64], ) -> Self: @@ -154,7 +154,7 @@ def from_offsets( return cls(data, shape, maybe_offsets=offsets) @classmethod - def from_lengths(cls, data: NDArray[DTYPE], lengths: NDArray[np.int32]) -> Self: + def from_lengths(cls, data: NDArray[RDTYPE], lengths: NDArray[np.int32]) -> Self: """Create a Ragged array from data and lengths. The lengths array should have the intended shape of the Ragged array. @@ -241,12 +241,12 @@ def to_padded(self, pad_value: Any) -> NDArray[RDTYPE]: def squeeze(self, axis: Optional[Union[int, Tuple[int, ...]]] = None) -> Self: """Squeeze the ragged array along the given non-ragged axis.""" - return Ragged.from_lengths(self.data, self.lengths.squeeze(axis)) + return type(self).from_lengths(self.data, self.lengths.squeeze(axis)) def reshape(self, shape: Tuple[int, ...]) -> Self: """Reshape non-ragged axes.""" # this is correct because all reshaping operations preserve the layout i.e. raveled ordered - return Ragged.from_lengths(self.data, self.lengths.reshape(shape)) + return type(self).from_lengths(self.data, self.lengths.reshape(shape)) def __str__(self): return ( From 16cf149991328603976bf4650ea806a6b5c39e73 Mon Sep 17 00:00:00 2001 From: d-laub Date: Fri, 18 Apr 2025 11:33:40 -0700 Subject: [PATCH 10/53] fix: parsing splice info and returning single item instead of list --- python/genvarloader/_dataset/_impl.py | 98 +++++++++++++-------------- 1 file changed, 47 insertions(+), 51 deletions(-) diff --git a/python/genvarloader/_dataset/_impl.py b/python/genvarloader/_dataset/_impl.py index 1bc6037d..9b0472f8 100644 --- a/python/genvarloader/_dataset/_impl.py +++ b/python/genvarloader/_dataset/_impl.py @@ -103,10 +103,7 @@ def open( rng: int | np.random.Generator | None = False, deterministic: bool = True, rc_neg: bool = True, - splice_info: str - | tuple[str, str] - | dict[Any, NDArray[np.integer]] - | None = None, + splice_info: str | tuple[str, str] | None = None, var_filter: Literal["exonic"] | None = None, ) -> RaggedDataset[None, RTRK]: ... @staticmethod @@ -118,10 +115,7 @@ def open( rng: int | np.random.Generator | None = False, deterministic: bool = True, rc_neg: bool = True, - splice_info: str - | tuple[str, str] - | dict[Any, NDArray[np.integer]] - | None = None, + splice_info: str | tuple[str, str] | None = None, var_filter: Literal["exonic"] | None = None, ) -> RaggedDataset[Ragged[np.bytes_], RTRK]: ... @staticmethod @@ -132,10 +126,7 @@ def open( rng: int | np.random.Generator | None = False, deterministic: bool = True, rc_neg: bool = True, - splice_info: str - | tuple[str, str] - | dict[str, NDArray[np.integer]] - | None = None, + splice_info: str | tuple[str, str] | None = None, var_filter: Literal["exonic"] | None = None, ) -> RaggedDataset[RSEQ, RTRK]: """Open a dataset from a path. If no reference genome is provided, the dataset cannot yield sequences. @@ -274,10 +265,9 @@ def open( assert_never(has_intervals) if splice_info is not None: - sp_idxer = _parse_splice_info(splice_info, bed, idxer) - spliced_bed = _get_spliced_bed(sp_idxer, bed) + splice_idxer, spliced_bed = _parse_splice_info(splice_info, bed, idxer) else: - sp_idxer = None + splice_idxer = None spliced_bed = None dataset = RaggedDataset( @@ -291,7 +281,7 @@ def open( transform=None, deterministic=deterministic, _idxer=idxer, - _sp_idxer=sp_idxer, + _sp_idxer=splice_idxer, _full_bed=bed, _spliced_bed=spliced_bed, _full_regions=regions, @@ -312,11 +302,7 @@ def with_settings( rng: int | np.random.Generator | None = None, deterministic: bool | None = None, rc_neg: bool | None = None, - splice_info: str - | tuple[str, str] - | dict[str, NDArray[np.integer]] - | Literal[False] - | None = None, + splice_info: str | tuple[str, str] | Literal[False] | None = None, var_filter: Literal[False, "exonic"] | None = None, ) -> Dataset: """Modify settings of the dataset, returning a new dataset without modifying the old one. @@ -385,12 +371,13 @@ def with_settings( if splice_info is not None: if splice_info is False: - sp_idxer = None + splice_idxer = None spliced_bed = None else: - sp_idxer = _parse_splice_info(splice_info, self.regions, self._idxer) - spliced_bed = _get_spliced_bed(sp_idxer, self._full_bed) - to_evolve["_sp_idxer"] = sp_idxer + splice_idxer, spliced_bed = _parse_splice_info( + splice_info, self._full_bed, self._idxer + ) + to_evolve["_sp_idxer"] = splice_idxer to_evolve["_spliced_bed"] = spliced_bed if var_filter is not None: @@ -1201,10 +1188,12 @@ def __getitem__(self, idx: StrIdx | tuple[StrIdx] | tuple[StrIdx, StrIdx]) -> An else: recon, squeeze, out_reshape = self._getitem_spliced(idx, self._sp_idxer) - if not isinstance(recon, tuple): - out = [recon] - else: + if isinstance(recon, tuple): + unlist = False out = list(recon) + else: + unlist = True + out = [recon] if self.jitter > 0: out = _rag_jitter(out, self.jitter, self._rng) @@ -1220,6 +1209,9 @@ def __getitem__(self, idx: StrIdx | tuple[StrIdx] | tuple[StrIdx, StrIdx]) -> An if out_reshape is not None: out = [o.reshape(out_reshape + o.shape[1:]) for o in out] + + if unlist: + out = out[0] return out @@ -1304,8 +1296,8 @@ def _getitem_spliced( def _parse_splice_info( - splice_info: str | tuple[str, str] | dict[str, NDArray[np.integer]], - regions: pl.DataFrame, + splice_info: str | tuple[str, str], + full_bed: pl.DataFrame, idxer: DatasetIndexer, ): """Parse splice info into a SpliceIndexer. @@ -1320,35 +1312,39 @@ def _parse_splice_info( The idxer to use to parse the splice info. """ if isinstance(splice_info, str): - names, sorter, idx, lengths = np.unique( - regions[splice_info], - return_index=True, - return_inverse=True, - return_counts=True, + sp_bed = ( + full_bed.rename({splice_info: "splice_id"}) + .with_row_index() + .group_by("splice_id", maintain_order=True) + .agg(pl.all()) ) - names = names[np.argsort(sorter)] - splice_map = Ragged.from_lengths(np.argsort(idx), lengths).to_awkward()[ - np.argsort(sorter) - ] + names = sp_bed["splice_id"].to_list() + lengths = sp_bed["index"].list.len().to_numpy() + splice_map = Ragged.from_lengths( + sp_bed["index"].explode().to_numpy(), lengths + ).to_awkward() elif isinstance(splice_info, tuple): - names, sorter, lengths = np.unique( - regions[splice_info[0]], - return_index=True, - return_counts=True, - ) - data = ( - regions[splice_info].with_row_index().sort(splice_info)["index"].to_numpy() + if len(splice_info) != 2: + raise ValueError( + "Splice info tuple must be of length 2, corresponding to columns names for splice IDs and element ordering." + ) + sp_bed = ( + full_bed.rename({splice_info[0]: "splice_id"}) + .with_row_index() + .group_by("splice_id", maintain_order=True) + .agg(pl.all().sort_by(splice_info[1])) ) - splice_map = Ragged.from_lengths(data, lengths).to_awkward()[np.argsort(sorter)] - elif isinstance(splice_info, dict): - names = list(splice_info.keys()) - splice_map = ak.Array(splice_info.values()) + names = sp_bed["splice_id"].to_list() + lengths = sp_bed["index"].list.len().to_numpy() + splice_map = Ragged.from_lengths( + sp_bed["index"].explode().to_numpy(), lengths + ).to_awkward() else: assert_never(splice_info) splice_map = cast(ak.Array, splice_map) sp_idxer = SpliceIndexer._init(names, splice_map, idxer) - return sp_idxer + return sp_idxer, sp_bed def _get_spliced_bed(spi: SpliceIndexer, full_bed: pl.DataFrame) -> pl.DataFrame: From 353750b8551eca704911b24461574e43ebc25579 Mon Sep 17 00:00:00 2001 From: d-laub Date: Sun, 20 Apr 2025 10:05:24 -0700 Subject: [PATCH 11/53] chore: wip for fixing cat_length --- pixi.toml | 4 +- pyproject.toml | 4 +- python/genvarloader/_dataset/_impl.py | 114 ++++++++++------------ python/genvarloader/_dataset/_indexing.py | 4 +- python/genvarloader/_dummy.py | 27 ++--- python/genvarloader/_ragged.py | 2 +- 6 files changed, 70 insertions(+), 85 deletions(-) diff --git a/pixi.toml b/pixi.toml index 6434fa18..50909156 100644 --- a/pixi.toml +++ b/pixi.toml @@ -40,9 +40,9 @@ typer = "*" [pypi-dependencies] genvarloader = { path = ".", editable = true } -seqpro = "==0.2.0" +seqpro = "==0.2.4" hirola = "==0.3" -genoray = "==0.5.0" +genoray = "==0.5.1" [feature.docs.dependencies] sphinx = ">=7.4.7" diff --git a/pyproject.toml b/pyproject.toml index c8f3e447..01299991 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,10 +27,10 @@ dependencies = [ "tbb", "joblib", "pooch", - "seqpro>=0.2.0", + "seqpro>=0.2.4", "awkward", "hirola>=0.3,<0.4", - "genoray>=0.5.0", + "genoray>=0.5.1", ] [project.urls] diff --git a/python/genvarloader/_dataset/_impl.py b/python/genvarloader/_dataset/_impl.py index 9b0472f8..b9260e91 100644 --- a/python/genvarloader/_dataset/_impl.py +++ b/python/genvarloader/_dataset/_impl.py @@ -19,6 +19,7 @@ ) import awkward as ak +import numba as nb import numpy as np import polars as pl from attrs import define, evolve, field @@ -37,7 +38,7 @@ ) from .._torch import TorchDataset, get_dataloader from .._types import DTYPE, AnnotatedHaps, Idx, StrIdx -from .._utils import idx_like_to_array, is_dtype +from .._utils import _lengths_to_offsets, idx_like_to_array, is_dtype from ._genotypes import SparseGenotypes from ._indexing import DatasetIndexer, SpliceIndexer from ._reconstruct import Haps, HapsTracks, Reference, Seqs, SeqsTracks, Tracks @@ -1209,7 +1210,7 @@ def __getitem__(self, idx: StrIdx | tuple[StrIdx] | tuple[StrIdx, StrIdx]) -> An if out_reshape is not None: out = [o.reshape(out_reshape + o.shape[1:]) for o in out] - + if unlist: out = out[0] @@ -1269,23 +1270,21 @@ def _getitem_spliced( ) inner_ds = self.with_len("ragged") - ds_idx, squeeze, out_reshape, reducer = splice_idxer.parse_idx(idx) + ds_idx, squeeze, out_reshape, offsets = splice_idxer.parse_idx(idx) r_idx, _ = np.unravel_index(ds_idx, self._idxer.full_shape) regions = self._jittered_regions[r_idx] - recon = inner_ds._recon( - ds_idx, regions, self.output_length, self.jitter, self._rng - ) + recon = inner_ds._recon(ds_idx, regions, "ragged", self.jitter, self._rng) if isinstance(recon, tuple): - recon = tuple(_cat_length(r, reducer) for r in recon) + recon = tuple(_cat_length(r, offsets) for r in recon) else: - recon = _cat_length(recon, reducer) + recon = _cat_length(recon, offsets) if self.rc_neg: # (b) to_rc: NDArray[np.bool_] = np.logical_and.reduceat( - self._full_regions[r_idx, 3] == -1, reducer, axis=0 + self._full_regions[r_idx, 3] == -1, offsets[:-1], axis=0 ) if isinstance(recon, tuple): recon = tuple(_rc(r, to_rc) for r in recon) @@ -1347,49 +1346,6 @@ def _parse_splice_info( return sp_idxer, sp_bed -def _get_spliced_bed(spi: SpliceIndexer, full_bed: pl.DataFrame) -> pl.DataFrame: - idx = ak.flatten(spi.splice_map, None).to_numpy() - regs_per_row = ak.count(spi.splice_map, -1).to_numpy() - splice_ids = spi.rows.keys - if spi.row_subset_idxs is not None: - splice_ids = splice_ids[spi.row_subset_idxs] - splice_ids = splice_ids.repeat(regs_per_row) - - uniq_cols = ["chrom"] - if "strand" in full_bed: - uniq_cols.append("strand") - - spliced_bed = ( - full_bed.with_row_index("regions")[idx] - .with_columns(splice_id=splice_ids) - .group_by("splice_id", maintain_order=True) - .agg(pl.exclude(uniq_cols), pl.col(uniq_cols).unique()) - ) - - if (spliced_bed["chrom"].list.len() > 1).any(): - raise ValueError( - "Some elements of spliced regions are on different chromosomes." - ) - - if "strand" in full_bed and (spliced_bed["strand"].list.len() > 1).any(): - raise ValueError("Some elements of spliced regions are on different strands.") - - important_cols = [ - "splice_id", - "regions", - "chrom", - "chromStart", - "chromEnd", - "strand", - ] - - spliced_bed = spliced_bed.with_columns(pl.col(uniq_cols).list.first()).select( - pl.col(important_cols), pl.exclude(important_cols) - ) - - return spliced_bed - - @overload def _rc(rag: Ragged[DTYPE], to_rc: NDArray[np.bool_]) -> Ragged[DTYPE]: ... @overload @@ -1488,27 +1444,65 @@ def _fix_len( @overload -def _cat_length(rag: Ragged[DTYPE], reducer: NDArray[np.integer]) -> Ragged[DTYPE]: ... +def _cat_length(rag: Ragged[DTYPE], offsets: NDArray[np.integer]) -> Ragged[DTYPE]: ... @overload def _cat_length( - rag: RaggedAnnotatedHaps, reducer: NDArray[np.integer] + rag: RaggedAnnotatedHaps, offsets: NDArray[np.integer] ) -> RaggedAnnotatedHaps: ... def _cat_length( - rag: Ragged | RaggedAnnotatedHaps, reducer: NDArray[np.integer] + rag: Ragged | RaggedAnnotatedHaps, offsets: NDArray[np.integer] ) -> Ragged | RaggedAnnotatedHaps: """Concatenate the lengths of the ragged data.""" if isinstance(rag, Ragged): - lengths = np.add.reduceat(rag.lengths, reducer, axis=0) - return Ragged.from_lengths(rag.data, lengths) + cat = Ragged.from_awkward(ak.concatenate(rag.to_awkward(), -1)) + if is_rag_dtype(rag, np.bytes_): + cat = cat.view("S1") + return cat elif isinstance(rag, RaggedAnnotatedHaps): - haps = _cat_length(rag.haps, reducer) - var_idxs = _cat_length(rag.var_idxs, reducer) - ref_coords = _cat_length(rag.ref_coords, reducer) + haps = _cat_length(rag.haps, offsets) + var_idxs = _cat_length(rag.var_idxs, offsets) + ref_coords = _cat_length(rag.ref_coords, offsets) return RaggedAnnotatedHaps(haps, var_idxs, ref_coords) else: assert_never(rag) +# @nb.njit(parallel=True, nogil=True, cache=True) +def _cat_helper( + data: NDArray[DTYPE], + lengths: NDArray[np.integer], + offsets: NDArray[np.integer], + splice_groups: NDArray[np.integer], +) -> tuple[NDArray[DTYPE], NDArray[np.integer]]: + """Concatenate the data and offsets of the ragged data.""" + # data could be + # ref: (b ~l) + # haps or annotations: (b p ~l) + # tracks: (b t ~l) + # hap_tracks: (b t p ~l) + in_strides = np.array(lengths.strides) // lengths.itemsize + + # (s [t] [p] ~cat_length) + out_data = np.empty_like(data) + # (b [t] [p]) -> (s [t] [p]) + out_lengths = np.add.reduceat(lengths, splice_groups[:-1], 0) + out_strides = np.array(out_lengths.strides) // out_lengths.itemsize + out_offsets = _lengths_to_offsets(out_lengths) + + n_splice = len(splice_groups) - 1 + if lengths.ndim == 1: + for s in nb.prange(n_splice): + s_s, s_e = splice_groups[s : s + 1] + o_s = out_offsets[s] + for b in range(s_s, s_e): + i_s, i_e = offsets[b], offsets[b + 1] + sub_o_s = o_s + (i_s - offsets[s_s]) + sub_o_e = o_s + (i_e - offsets[s_s]) + out_data[sub_o_s:sub_o_e] = data[i_s:i_e] + + return out_data, out_offsets + + SEQ = TypeVar("SEQ", None, NDArray[np.bytes_], AnnotatedHaps) TRK = TypeVar("TRK", None, NDArray[np.float32]) RSEQ = TypeVar("RSEQ", None, Ragged[np.bytes_], RaggedAnnotatedHaps) diff --git a/python/genvarloader/_dataset/_indexing.py b/python/genvarloader/_dataset/_indexing.py index 647eb601..2c7082fd 100644 --- a/python/genvarloader/_dataset/_indexing.py +++ b/python/genvarloader/_dataset/_indexing.py @@ -360,10 +360,10 @@ def parse_idx( if not isinstance(lengths, np.integer): lengths = lengths.to_numpy() lengths = cast(NDArray[np.int64], lengths) - reducer = _lengths_to_offsets(lengths)[:-1] + offsets = _lengths_to_offsets(lengths) ds_idx = ak.flatten(ds_idx, None).to_numpy() - return ds_idx, squeeze, out_reshape, reducer + return ds_idx, squeeze, out_reshape, offsets def r2i(self, regions: StrIdx) -> Idx: """Convert region names to region indices.""" diff --git a/python/genvarloader/_dummy.py b/python/genvarloader/_dummy.py index f704c6b8..47d16c22 100644 --- a/python/genvarloader/_dummy.py +++ b/python/genvarloader/_dummy.py @@ -1,6 +1,5 @@ from pathlib import Path -import awkward as ak import numpy as np import polars as pl import seqpro as sp @@ -8,8 +7,8 @@ from natsort import natsorted from ._dataset._genotypes import SparseGenotypes -from ._dataset._impl import RaggedDataset, _get_spliced_bed -from ._dataset._indexing import DatasetIndexer, SpliceIndexer +from ._dataset._impl import RaggedDataset, _parse_splice_info +from ._dataset._indexing import DatasetIndexer from ._dataset._intervals import tracks_to_intervals from ._dataset._reconstruct import Haps, HapsTracks, Reference, Tracks, _Variants from ._dataset._utils import bed_to_regions @@ -48,6 +47,8 @@ def get_dummy_dataset(spliced: bool = False): "chromStart": [5, 13, 8, 2], "chromEnd": [8, 16, 11, 5], "strand": ["+", "-", "+", "+"], + "gene": ["tp53", "shh", "tp53", "tp53"], + "exon": [3, 1, 1, 2], } ) @@ -93,12 +94,10 @@ def get_dummy_dataset(spliced: bool = False): - 1 # idx within region + 4 * np.arange(4)[:, None] # adjust by region/contig offset ) - dummy_genos = SparseGenotypes( - variant_idxs=v_idxs.ravel(), - offsets=np.arange(0, 4 * 4 + 1, dtype=np.int64), # every entry has 1 variant - n_regions=4, - n_samples=4, - ploidy=1, + dummy_genos = SparseGenotypes.from_offsets( + v_idxs.ravel(), + (4, 4, 1), + np.arange(0, 4 * 4 + 1, dtype=np.int64), # every entry has 1 variant ) dummy_haps = Haps(dummy_ref, dummy_vars, dummy_genos, False, None) @@ -131,16 +130,8 @@ def get_dummy_dataset(spliced: bool = False): dummy_recon = HapsTracks(dummy_haps, dummy_tracks) if spliced: - names = ["tp53", "shh"] - sp_map = ak.Array( - [ - [3, 0, 2], - [1], - ] - ) - dummy_spi = SpliceIndexer._init(names, sp_map, dummy_idxer) dummy_bed = dummy_bed.with_columns(chrom=pl.lit("chr1")) - sp_bed = _get_spliced_bed(dummy_spi, dummy_bed) + dummy_spi, sp_bed = _parse_splice_info(("gene", "exon"), dummy_bed, dummy_idxer) else: dummy_spi = None sp_bed = None diff --git a/python/genvarloader/_ragged.py b/python/genvarloader/_ragged.py index 06648c16..b2ffc5bb 100644 --- a/python/genvarloader/_ragged.py +++ b/python/genvarloader/_ragged.py @@ -113,7 +113,7 @@ def ndim(self) -> int: """Number of dimensions of the ragged array.""" return len(self.shape) - def view(self, dtype: np.dtype): + def view(self, dtype: type[DTYPE] | str) -> Ragged[DTYPE]: return Ragged.from_offsets(self.data.view(dtype), self.shape, self.offsets) @property From 17050b9268dcb3a4d465d1eb38fe6ff2787e3d73 Mon Sep 17 00:00:00 2001 From: d-laub Date: Mon, 21 Apr 2025 01:37:01 -0700 Subject: [PATCH 12/53] chore: fix cat_helper for splicing --- pixi.lock | 40 ++++--- python/genvarloader/_dataset/_impl.py | 72 ++++++------- python/genvarloader/_dataset/_indexing.py | 4 +- python/genvarloader/_ragged.py | 125 +++++++++++++++------- 4 files changed, 138 insertions(+), 103 deletions(-) diff --git a/pixi.lock b/pixi.lock index da28db64..d8e6da99 100644 --- a/pixi.lock +++ b/pixi.lock @@ -236,13 +236,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda - pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/53/21f7b97e82772caa61541348427f42435120b32961c92d16f9c8ce9757d6/cslug-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/50/1d3b4a3c06fa113026337a10ea170503864f29716515d6a6aab09c7a1ea6/genoray-0.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f4/fd/d3f955fa252e1e058fa3de4f8e18127855db0c678ba7c0220a3a6d359e07/genoray-0.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/8e/0eccb528701273640dd4f13678a0c1352176166aecd1ee7f4fa29355132b/hirola-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/a9/a6/aa38bddc9f8d90e5ce14023f06ccbf642ab5d507da1ffafb031c0f332dc6/numerary-0.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/ec/5434c4a6012ef2ff12d0e71b6c341532686ee82d63e5101717abc24eb3f5/pgenlib-0.92.0.tar.gz - pypi: https://files.pythonhosted.org/packages/5b/bc/246f452431c592a2a424050e8bb9ccf494fb47613fd97c912f4d573a5e3b/phantom_types-3.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/06/5c9ed34ec048e51e115cd1b3cf9d9c258e3c75b3105b42db11c0282536a3/pysam-0.23.0-cp312-cp312-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/44/6a/82bd7f3e99ce05c203983afa09256edcede7976450eff2640ce11673f71b/seqpro-0.2.0-cp39-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/6d/ad/b485318c8330bfcf68f47487c681d4512d141ae21e667c5b9a6cac4b8e62/seqpro-0.2.4-cp39-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c6/64/3d24181aaea3fb892d4a46f8171845782ee364d60e9494426daf31d12f47/tbb-2022.1.0-py2.py3-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/06/bb/09a6dc2f1110b409d6d2f96429969d7466bde9bf4ad8b2e682d851ef104b/tcmlib-1.3.0-py2.py3-none-manylinux_2_28_x86_64.whl - pypi: . @@ -496,7 +496,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/2d/ea/d6230cc9772edca0fd8c91638dc1c2e2def09b9a22cfabe6532906e96aea/basenji2_pytorch-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/53/21f7b97e82772caa61541348427f42435120b32961c92d16f9c8ce9757d6/cslug-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/50/1d3b4a3c06fa113026337a10ea170503864f29716515d6a6aab09c7a1ea6/genoray-0.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f4/fd/d3f955fa252e1e058fa3de4f8e18127855db0c678ba7c0220a3a6d359e07/genoray-0.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/8e/0eccb528701273640dd4f13678a0c1352176166aecd1ee7f4fa29355132b/hirola-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/1a/c1/31b3184cba7b257a4a3b5ca5b88b9204ccb7aa02fe3c992280899293ed54/lightning_utilities-0.14.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/a6/aa38bddc9f8d90e5ce14023f06ccbf642ab5d507da1ffafb031c0f332dc6/numerary-0.4.4-py3-none-any.whl @@ -504,7 +504,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/5b/bc/246f452431c592a2a424050e8bb9ccf494fb47613fd97c912f4d573a5e3b/phantom_types-3.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/45/38ae786fb646e5032a982029ad1c0964433e74b67e328d2c9d2fc6691639/pysam-0.23.0-cp310-cp310-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/82/ff/5701f79317a1a03e5ee8a1bf48e7273a8445162a2774e51fc06411a67c89/pytorch_lightning-2.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/44/6a/82bd7f3e99ce05c203983afa09256edcede7976450eff2640ce11673f71b/seqpro-0.2.0-cp39-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/6d/ad/b485318c8330bfcf68f47487c681d4512d141ae21e667c5b9a6cac4b8e62/seqpro-0.2.4-cp39-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c6/64/3d24181aaea3fb892d4a46f8171845782ee364d60e9494426daf31d12f47/tbb-2022.1.0-py2.py3-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/06/bb/09a6dc2f1110b409d6d2f96429969d7466bde9bf4ad8b2e682d851ef104b/tcmlib-1.3.0-py2.py3-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/72/25/973bd6128381951b23cdcd8a9870c6dcfc5606cb864df8eabd82e529f9c1/torchinfo-1.8.0-py3-none-any.whl @@ -834,7 +834,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/2d/ea/d6230cc9772edca0fd8c91638dc1c2e2def09b9a22cfabe6532906e96aea/basenji2_pytorch-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/53/21f7b97e82772caa61541348427f42435120b32961c92d16f9c8ce9757d6/cslug-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/50/1d3b4a3c06fa113026337a10ea170503864f29716515d6a6aab09c7a1ea6/genoray-0.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f4/fd/d3f955fa252e1e058fa3de4f8e18127855db0c678ba7c0220a3a6d359e07/genoray-0.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/8e/0eccb528701273640dd4f13678a0c1352176166aecd1ee7f4fa29355132b/hirola-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/1a/c1/31b3184cba7b257a4a3b5ca5b88b9204ccb7aa02fe3c992280899293ed54/lightning_utilities-0.14.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/a6/aa38bddc9f8d90e5ce14023f06ccbf642ab5d507da1ffafb031c0f332dc6/numerary-0.4.4-py3-none-any.whl @@ -842,7 +842,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/5b/bc/246f452431c592a2a424050e8bb9ccf494fb47613fd97c912f4d573a5e3b/phantom_types-3.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/45/38ae786fb646e5032a982029ad1c0964433e74b67e328d2c9d2fc6691639/pysam-0.23.0-cp310-cp310-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/82/ff/5701f79317a1a03e5ee8a1bf48e7273a8445162a2774e51fc06411a67c89/pytorch_lightning-2.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/44/6a/82bd7f3e99ce05c203983afa09256edcede7976450eff2640ce11673f71b/seqpro-0.2.0-cp39-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/6d/ad/b485318c8330bfcf68f47487c681d4512d141ae21e667c5b9a6cac4b8e62/seqpro-0.2.4-cp39-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c6/64/3d24181aaea3fb892d4a46f8171845782ee364d60e9494426daf31d12f47/tbb-2022.1.0-py2.py3-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/06/bb/09a6dc2f1110b409d6d2f96429969d7466bde9bf4ad8b2e682d851ef104b/tcmlib-1.3.0-py2.py3-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/72/25/973bd6128381951b23cdcd8a9870c6dcfc5606cb864df8eabd82e529f9c1/torchinfo-1.8.0-py3-none-any.whl @@ -1866,13 +1866,14 @@ packages: - pkg:pypi/fsspec?source=compressed-mapping size: 142117 timestamp: 1743437355974 -- pypi: https://files.pythonhosted.org/packages/52/50/1d3b4a3c06fa113026337a10ea170503864f29716515d6a6aab09c7a1ea6/genoray-0.5.0-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/f4/fd/d3f955fa252e1e058fa3de4f8e18127855db0c678ba7c0220a3a6d359e07/genoray-0.5.1-py3-none-any.whl name: genoray - version: 0.5.0 - sha256: 349f1f369eb2e4a50ff70807c90e61035cc3aea852869da4c69c7fd0f76efd4c + version: 0.5.1 + sha256: 1574b24488b7ed1e23fc1f09d49618871a02d73eaaa98ada1b480de6d895a803 requires_dist: - cyvcf2>=0.31.1 - hirola>=0.3.0 + - loguru>=0.7.0 - more-itertools>=10 - numpy>=1.26 - pandas>=2.2.2 @@ -1887,7 +1888,7 @@ packages: - pypi: . name: genvarloader version: 0.12.0 - sha256: 8f90c5fc2b3b543835e15bb6aee15574b364358146814e3279e8d3477eb1c8b2 + sha256: 4a99c9def2024c70f26e36d3e9850b554b5fd6086549e7e8a975b5ca76c33145 requires_dist: - numba>=0.58.1 - loguru @@ -1906,10 +1907,10 @@ packages: - tbb - joblib - pooch - - seqpro>=0.2.0 + - seqpro>=0.2.4 - awkward - hirola>=0.3,<0.4 - - genoray>=0.5.0 + - genoray>=0.5.1 requires_python: '>=3.10,<3.13' editable: true - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda @@ -5298,10 +5299,10 @@ packages: purls: [] size: 352907 timestamp: 1743805258946 -- pypi: https://files.pythonhosted.org/packages/44/6a/82bd7f3e99ce05c203983afa09256edcede7976450eff2640ce11673f71b/seqpro-0.2.0-cp39-abi3-manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/6d/ad/b485318c8330bfcf68f47487c681d4512d141ae21e667c5b9a6cac4b8e62/seqpro-0.2.4-cp39-abi3-manylinux_2_28_x86_64.whl name: seqpro - version: 0.2.0 - sha256: 247bb319b9ca346fb01af709d33273a3d866b713694efb781173e88704b06382 + version: 0.2.4 + sha256: 13bbfae57a5c15276522f4027c3c88a2b074f7bf1b4d4a56ae76b809ee25c4d7 requires_dist: - numba>=0.58.1 - numpy>=1.26.0 @@ -5310,12 +5311,9 @@ packages: - pandera>=0.19 - pandas - pyarrow - - matplotlib ; extra == 'dev' - - pytest<8 ; extra == 'dev' - - pytest-cases ; extra == 'dev' - - hypothesis ; extra == 'dev' - - pytest-benchmark ; extra == 'dev' - - biopython ; extra == 'dev' + - natsort + - setuptools>=70 + - awkward>=2.5.0 requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.8.2-pyhff2d567_0.conda sha256: 91d664ace7c22e787775069418daa9f232ee8bafdd0a6a080a5ed2395a6fa6b2 diff --git a/python/genvarloader/_dataset/_impl.py b/python/genvarloader/_dataset/_impl.py index b9260e91..2439b053 100644 --- a/python/genvarloader/_dataset/_impl.py +++ b/python/genvarloader/_dataset/_impl.py @@ -19,10 +19,11 @@ ) import awkward as ak -import numba as nb import numpy as np import polars as pl from attrs import define, evolve, field +from awkward.contents import ListOffsetArray +from awkward.index import Index64 from loguru import logger from more_itertools import collapse from numpy.typing import NDArray @@ -38,7 +39,7 @@ ) from .._torch import TorchDataset, get_dataloader from .._types import DTYPE, AnnotatedHaps, Idx, StrIdx -from .._utils import _lengths_to_offsets, idx_like_to_array, is_dtype +from .._utils import idx_like_to_array, is_dtype from ._genotypes import SparseGenotypes from ._indexing import DatasetIndexer, SpliceIndexer from ._reconstruct import Haps, HapsTracks, Reference, Seqs, SeqsTracks, Tracks @@ -775,11 +776,12 @@ def __len__(self): def __str__(self) -> str: splice_status = "Spliced" if self.is_spliced else "Unspliced" - if self._available_sequences is None or self.sequence_type is None: - seq_type = "None" + if self._available_sequences is None: + seq_type = None else: seqs = self._available_sequences - seqs[seqs.index(self.sequence_type)] = f"[{self.sequence_type}]" + if self.sequence_type is not None: + seqs[seqs.index(self.sequence_type)] = f"[{self.sequence_type}]" seq_type = " ".join(seqs) if self.available_tracks is None: @@ -1454,7 +1456,29 @@ def _cat_length( ) -> Ragged | RaggedAnnotatedHaps: """Concatenate the lengths of the ragged data.""" if isinstance(rag, Ragged): - cat = Ragged.from_awkward(ak.concatenate(rag.to_awkward(), -1)) + if rag.ndim == 1 or rag.shape[1:] == (1,) * ( + rag.ndim - 1 + ): # (b [1] [1] ~l) => layout is correct + new_lengths = np.add.reduceat(rag.lengths, offsets[:-1], 0) + cat = Ragged.from_lengths(rag.data, new_lengths) + elif rag.ndim == 2: # (b p ~l) or (b t ~l) + grouped = ak.Array( + ListOffsetArray(Index64(offsets), rag.to_awkward().layout) + ) + cat = Ragged.from_awkward( + ak.concatenate( + [ + ak.flatten(grouped[:, :, i], -1)[:, None] # (g 1 ~l) + for i in range(rag.shape[1]) + ], + 1, + ) + ) + elif rag.ndim == 3: # hap tracks: (b t p ~l) + raise NotImplementedError("Splicing haplotype tracks.") + else: + raise RuntimeError("Should never see a 4+ dim ragged array.") + if is_rag_dtype(rag, np.bytes_): cat = cat.view("S1") return cat @@ -1467,42 +1491,6 @@ def _cat_length( assert_never(rag) -# @nb.njit(parallel=True, nogil=True, cache=True) -def _cat_helper( - data: NDArray[DTYPE], - lengths: NDArray[np.integer], - offsets: NDArray[np.integer], - splice_groups: NDArray[np.integer], -) -> tuple[NDArray[DTYPE], NDArray[np.integer]]: - """Concatenate the data and offsets of the ragged data.""" - # data could be - # ref: (b ~l) - # haps or annotations: (b p ~l) - # tracks: (b t ~l) - # hap_tracks: (b t p ~l) - in_strides = np.array(lengths.strides) // lengths.itemsize - - # (s [t] [p] ~cat_length) - out_data = np.empty_like(data) - # (b [t] [p]) -> (s [t] [p]) - out_lengths = np.add.reduceat(lengths, splice_groups[:-1], 0) - out_strides = np.array(out_lengths.strides) // out_lengths.itemsize - out_offsets = _lengths_to_offsets(out_lengths) - - n_splice = len(splice_groups) - 1 - if lengths.ndim == 1: - for s in nb.prange(n_splice): - s_s, s_e = splice_groups[s : s + 1] - o_s = out_offsets[s] - for b in range(s_s, s_e): - i_s, i_e = offsets[b], offsets[b + 1] - sub_o_s = o_s + (i_s - offsets[s_s]) - sub_o_e = o_s + (i_e - offsets[s_s]) - out_data[sub_o_s:sub_o_e] = data[i_s:i_e] - - return out_data, out_offsets - - SEQ = TypeVar("SEQ", None, NDArray[np.bytes_], AnnotatedHaps) TRK = TypeVar("TRK", None, NDArray[np.float32]) RSEQ = TypeVar("RSEQ", None, Ragged[np.bytes_], RaggedAnnotatedHaps) diff --git a/python/genvarloader/_dataset/_indexing.py b/python/genvarloader/_dataset/_indexing.py index 2c7082fd..db492103 100644 --- a/python/genvarloader/_dataset/_indexing.py +++ b/python/genvarloader/_dataset/_indexing.py @@ -98,8 +98,8 @@ def sample_idxs(self, mode: Literal["i2d", "d2i"]) -> NDArray[np.integer]: @property def samples(self) -> List[str]: if self.sample_subset_idxs is None: - return self.full_samples.tolist() - return self.full_samples[self.sample_subset_idxs].tolist() + return self.full_samples.tolist() # type: ignore + return self.full_samples[self.sample_subset_idxs].tolist() # type: ignore @property def shape(self) -> tuple[int, int]: diff --git a/python/genvarloader/_ragged.py b/python/genvarloader/_ragged.py index b2ffc5bb..82cc4331 100644 --- a/python/genvarloader/_ragged.py +++ b/python/genvarloader/_ragged.py @@ -6,7 +6,7 @@ import numba as nb import numpy as np from attrs import define -from awkward.contents import ListOffsetArray, NumpyArray, RegularArray +from awkward.contents import ListArray, ListOffsetArray, NumpyArray, RegularArray from awkward.index import Index64 from einops import repeat from numpy.typing import NDArray @@ -61,6 +61,9 @@ def is_rag_dtype(rag: Ragged, dtype: type[DTYPE]) -> TypeGuard[Ragged[DTYPE]]: return np.issubdtype(rag.data.dtype, dtype) +OFFSET_TYPE = np.int64 + + @define class Ragged(Generic[RDTYPE]): """Ragged array i.e. a rectilinear array where the final axis is ragged. Should not be initialized @@ -87,7 +90,7 @@ class Ragged(Generic[RDTYPE]): the shape is (2, 3), then the j, k-th element can be mapped to an index for offsets with :code:`i = np.ravel_multi_index((j, k), shape)`. The number of ragged elements corresponds to the product of the shape.""" - maybe_offsets: Optional[NDArray[np.int64]] = None + maybe_offsets: Optional[NDArray[OFFSET_TYPE]] = None maybe_lengths: Optional[NDArray[np.int32]] = None def __attrs_post_init__(self): @@ -117,7 +120,7 @@ def view(self, dtype: type[DTYPE] | str) -> Ragged[DTYPE]: return Ragged.from_offsets(self.data.view(dtype), self.shape, self.offsets) @property - def offsets(self) -> NDArray[np.int64]: + def offsets(self) -> NDArray[OFFSET_TYPE]: """Offsets into the data array to get corresponding elements. The i-th element is accessible as :code:`data[offsets[i]:offsets[i+1]]`.""" if self.maybe_offsets is None: @@ -136,7 +139,7 @@ def from_offsets( cls, data: NDArray[RDTYPE], shape: Union[int, Tuple[int, ...]], - offsets: NDArray[np.int64], + offsets: NDArray[OFFSET_TYPE], ) -> Self: """Create a Ragged array from data and offsets. @@ -271,25 +274,21 @@ def __getitem__(self, idx: Union[Idx, Tuple[Idx, ...]]): def to_awkward(self) -> ak.Array: """Convert to an `Awkward `_ array without copying. Note that this effectively - returns a view of the data, so modifying the data will modify the original array. - - .. note:: - Sequence arrays (i.e. dtype of "S1") will return awkward arrays with dtype np.uint8 since strings are represented - in Awkward differently than in GVL such that it does not support "S1" data. - - """ - if self.dtype.type == np.bytes_: - data = self.data.view(np.uint8) + returns a view of the data, so modifying the data will modify the original array.""" + if self.dtype.type == np.bytes_ and self.dtype.itemsize == 1: + data = NumpyArray( + self.data.view(np.uint8), # type: ignore + parameters={"__array__": "char"}, + ) else: - data = self.data + data = NumpyArray(self.data) # type: ignore - if self.shape == (): - return ak.Array(data) - - layout = ListOffsetArray( - Index64(self.offsets), - NumpyArray(data), # type: ignore | NDArray[RDTYPE] is ArrayLike - ) + if self.offsets.ndim == 1: + layout = ListOffsetArray(Index64(self.offsets), data) + else: + layout = ListArray( + Index64(self.offsets[:, 0]), Index64(self.offsets[:, 1]), data + ) for size in reversed(self.shape[1:]): layout = RegularArray(layout, size) @@ -310,19 +309,43 @@ def from_awkward(cls, awk: "ak.Array") -> Self: ) from err # extract data and offsets - data = ak.flatten(awk, axis=None).to_numpy() layout = awk.layout + offsets = None while hasattr(layout, "content"): if isinstance(layout, ListOffsetArray): - offsets = layout.offsets.data - offsets = cast(NDArray[np.int64], offsets) - rag = cls.from_offsets(data, shape, offsets) + offsets = np.asarray(layout.offsets.data, dtype=OFFSET_TYPE) + content = layout.content + break + elif isinstance(layout, ListArray): + starts = layout.starts.data + stops = layout.stops.data + offsets = cast( + NDArray[OFFSET_TYPE], + np.stack( + [starts, stops], # type: ignore + axis=-1, + dtype=OFFSET_TYPE, + ), + ) + content = layout.content break else: layout = layout.content else: - lengths = ak.count(awk, axis=-1).to_numpy() - rag = cls.from_lengths(data, lengths) + raise ValueError + + if offsets is None: + raise ValueError + + data = np.asarray(content.data) # type: ignore + if content.parameter("__array__") == "char": + data = data.view("S1") + + rag = cls.from_offsets( + data, # type: ignore + shape, + offsets, + ) return rag @@ -340,8 +363,13 @@ def pad_ragged( pad_value: DTYPE, out: NDArray[DTYPE], ): - for i in nb.prange(len(offsets) - 1): - start, end = offsets[i], offsets[i + 1] + for i in nb.prange(len(offsets)): + if offsets.ndim == 1: + if i == len(offsets) - 1: + continue + start, end = offsets[i], offsets[i + 1] + else: + start, end = offsets[i, 0], offsets[i, 1] entry_len = end - start out[i, :entry_len] = data[start:end] out[i, entry_len:] = pad_value @@ -354,11 +382,16 @@ def pad_ragged( @nb.njit(parallel=True, nogil=True, cache=True) def _rc_helper( - data: NDArray[np.uint8], offsets: NDArray[np.int64], mask: NDArray[np.bool_] + data: NDArray[np.uint8], offsets: NDArray[OFFSET_TYPE], mask: NDArray[np.bool_] ) -> NDArray[np.uint8]: out = data.copy() - for i in nb.prange(len(offsets) - 1): - start, end = offsets[i], offsets[i + 1] + for i in nb.prange(len(offsets)): + if offsets.ndim == 1: + if i == len(offsets) - 1: + continue + start, end = offsets[i], offsets[i + 1] + else: + start, end = offsets[i, 0], offsets[i, 1] _data = data[start:end] _out = out[start:end] if mask[i]: @@ -383,10 +416,17 @@ def _reverse_complement( #! for whatever reason, this causes data corruption with parallel=True?! @nb.njit(nogil=True, cache=True) -def _reverse_helper(data: NDArray, offsets: NDArray[np.int64], mask: NDArray[np.bool_]): - for i in nb.prange(len(offsets) - 1): +def _reverse_helper( + data: NDArray, offsets: NDArray[OFFSET_TYPE], mask: NDArray[np.bool_] +): + for i in nb.prange(len(offsets)): if mask[i]: - start, end = offsets[i], offsets[i + 1] + if offsets.ndim == 1: + if i == len(offsets) - 1: + continue + start, end = offsets[i], offsets[i + 1] + else: + start, end = offsets[i, 0], offsets[i, 1] data[start:end] = np.flip(data[start:end]) @@ -440,9 +480,9 @@ def _jitter( @nb.njit(parallel=True, nogil=True, cache=True) def _jitter_helper( data: Tuple[NDArray, ...], - offsets: Tuple[NDArray[np.int64], ...], + offsets: Tuple[NDArray[OFFSET_TYPE], ...], shapes: Tuple[Tuple[int, ...], ...], - out_offsets: Tuple[NDArray[np.int64], ...], + out_offsets: Tuple[NDArray[OFFSET_TYPE], ...], starts: NDArray[np.int64], ) -> Tuple[NDArray, ...]: """Helper to jitter ragged data. Ragged arrays should have shape (batch, ...). @@ -481,7 +521,16 @@ def _jitter_helper( for row in nb.prange(idx_s, idx_e): row_s = arr_offsets[row] - out_row_s, out_row_e = out_arr_offsets[row], out_arr_offsets[row + 1] + if out_arr_offsets.ndim == 1: + out_row_s, out_row_e = ( + out_arr_offsets[row], + out_arr_offsets[row + 1], + ) + else: + out_row_s, out_row_e = ( + out_arr_offsets[row, 0], + out_arr_offsets[row, 1], + ) out_len = out_row_e - out_row_s out_arr_data[out_row_s:out_row_e] = arr_data[ row_s + jit_s : row_s + jit_s + out_len From bd5525c74e69b5f229e9134dd35e7227ec77e3c0 Mon Sep 17 00:00:00 2001 From: d-laub Date: Mon, 21 Apr 2025 08:01:34 -0700 Subject: [PATCH 13/53] chore: wip on svar support --- pixi.lock | 48 +++++++------ pixi.toml | 5 +- pyproject.toml | 4 +- python/genvarloader/_dataset/_genotypes.py | 21 ++++-- python/genvarloader/_dataset/_reconstruct.py | 67 +++++++++++++----- python/genvarloader/_dataset/_tracks.py | 6 +- python/genvarloader/_dataset/_write.py | 62 ++++++++++++++-- tests/data/generate_ground_truth.py | 20 ++++-- tests/data/pgen/filtered_sample.pvar | 8 +-- tests/data/vcf/filtered_sample.gvl.arrow | Bin 2837 -> 0 bytes tests/data/vcf/filtered_sample.gvl.ends.arrow | Bin 2549 -> 0 bytes tests/data/vcf/filtered_sample.vcf | 6 +- tests/data/vcf/filtered_sample.vcf.gz | Bin 1374 -> 1373 bytes tests/data/vcf/filtered_sample.vcf.gz.csi | Bin 203 -> 203 bytes 14 files changed, 181 insertions(+), 66 deletions(-) delete mode 100644 tests/data/vcf/filtered_sample.gvl.arrow delete mode 100644 tests/data/vcf/filtered_sample.gvl.ends.arrow diff --git a/pixi.lock b/pixi.lock index 2799b28b..b390b49a 100644 --- a/pixi.lock +++ b/pixi.lock @@ -236,13 +236,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda - pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/53/21f7b97e82772caa61541348427f42435120b32961c92d16f9c8ce9757d6/cslug-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/50/1d3b4a3c06fa113026337a10ea170503864f29716515d6a6aab09c7a1ea6/genoray-0.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/57/b76283dde9c3e9c3fe8985f6d6b2d79ce3b65b54b190d09e696ba4b80b02/genoray-0.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/8e/0eccb528701273640dd4f13678a0c1352176166aecd1ee7f4fa29355132b/hirola-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/a9/a6/aa38bddc9f8d90e5ce14023f06ccbf642ab5d507da1ffafb031c0f332dc6/numerary-0.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/ec/5434c4a6012ef2ff12d0e71b6c341532686ee82d63e5101717abc24eb3f5/pgenlib-0.92.0.tar.gz - pypi: https://files.pythonhosted.org/packages/5b/bc/246f452431c592a2a424050e8bb9ccf494fb47613fd97c912f4d573a5e3b/phantom_types-3.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/06/5c9ed34ec048e51e115cd1b3cf9d9c258e3c75b3105b42db11c0282536a3/pysam-0.23.0-cp312-cp312-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/44/6a/82bd7f3e99ce05c203983afa09256edcede7976450eff2640ce11673f71b/seqpro-0.2.0-cp39-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/2c/b0/f719dc735e3c9c3ba410e057497cf78a315eb48d013b120666ea3623f9c8/seqpro-0.2.3-cp39-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c6/64/3d24181aaea3fb892d4a46f8171845782ee364d60e9494426daf31d12f47/tbb-2022.1.0-py2.py3-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/06/bb/09a6dc2f1110b409d6d2f96429969d7466bde9bf4ad8b2e682d851ef104b/tcmlib-1.3.0-py2.py3-none-manylinux_2_28_x86_64.whl - pypi: . @@ -496,7 +496,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/2d/ea/d6230cc9772edca0fd8c91638dc1c2e2def09b9a22cfabe6532906e96aea/basenji2_pytorch-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/53/21f7b97e82772caa61541348427f42435120b32961c92d16f9c8ce9757d6/cslug-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/50/1d3b4a3c06fa113026337a10ea170503864f29716515d6a6aab09c7a1ea6/genoray-0.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/57/b76283dde9c3e9c3fe8985f6d6b2d79ce3b65b54b190d09e696ba4b80b02/genoray-0.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/8e/0eccb528701273640dd4f13678a0c1352176166aecd1ee7f4fa29355132b/hirola-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/1a/c1/31b3184cba7b257a4a3b5ca5b88b9204ccb7aa02fe3c992280899293ed54/lightning_utilities-0.14.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/a6/aa38bddc9f8d90e5ce14023f06ccbf642ab5d507da1ffafb031c0f332dc6/numerary-0.4.4-py3-none-any.whl @@ -504,7 +504,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/5b/bc/246f452431c592a2a424050e8bb9ccf494fb47613fd97c912f4d573a5e3b/phantom_types-3.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/45/38ae786fb646e5032a982029ad1c0964433e74b67e328d2c9d2fc6691639/pysam-0.23.0-cp310-cp310-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/82/ff/5701f79317a1a03e5ee8a1bf48e7273a8445162a2774e51fc06411a67c89/pytorch_lightning-2.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/44/6a/82bd7f3e99ce05c203983afa09256edcede7976450eff2640ce11673f71b/seqpro-0.2.0-cp39-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/2c/b0/f719dc735e3c9c3ba410e057497cf78a315eb48d013b120666ea3623f9c8/seqpro-0.2.3-cp39-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c6/64/3d24181aaea3fb892d4a46f8171845782ee364d60e9494426daf31d12f47/tbb-2022.1.0-py2.py3-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/06/bb/09a6dc2f1110b409d6d2f96429969d7466bde9bf4ad8b2e682d851ef104b/tcmlib-1.3.0-py2.py3-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/72/25/973bd6128381951b23cdcd8a9870c6dcfc5606cb864df8eabd82e529f9c1/torchinfo-1.8.0-py3-none-any.whl @@ -834,7 +834,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/2d/ea/d6230cc9772edca0fd8c91638dc1c2e2def09b9a22cfabe6532906e96aea/basenji2_pytorch-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/53/21f7b97e82772caa61541348427f42435120b32961c92d16f9c8ce9757d6/cslug-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/50/1d3b4a3c06fa113026337a10ea170503864f29716515d6a6aab09c7a1ea6/genoray-0.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/57/b76283dde9c3e9c3fe8985f6d6b2d79ce3b65b54b190d09e696ba4b80b02/genoray-0.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/8e/0eccb528701273640dd4f13678a0c1352176166aecd1ee7f4fa29355132b/hirola-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/1a/c1/31b3184cba7b257a4a3b5ca5b88b9204ccb7aa02fe3c992280899293ed54/lightning_utilities-0.14.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/a6/aa38bddc9f8d90e5ce14023f06ccbf642ab5d507da1ffafb031c0f332dc6/numerary-0.4.4-py3-none-any.whl @@ -842,7 +842,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/5b/bc/246f452431c592a2a424050e8bb9ccf494fb47613fd97c912f4d573a5e3b/phantom_types-3.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/45/38ae786fb646e5032a982029ad1c0964433e74b67e328d2c9d2fc6691639/pysam-0.23.0-cp310-cp310-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/82/ff/5701f79317a1a03e5ee8a1bf48e7273a8445162a2774e51fc06411a67c89/pytorch_lightning-2.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/44/6a/82bd7f3e99ce05c203983afa09256edcede7976450eff2640ce11673f71b/seqpro-0.2.0-cp39-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/2c/b0/f719dc735e3c9c3ba410e057497cf78a315eb48d013b120666ea3623f9c8/seqpro-0.2.3-cp39-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c6/64/3d24181aaea3fb892d4a46f8171845782ee364d60e9494426daf31d12f47/tbb-2022.1.0-py2.py3-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/06/bb/09a6dc2f1110b409d6d2f96429969d7466bde9bf4ad8b2e682d851ef104b/tcmlib-1.3.0-py2.py3-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/72/25/973bd6128381951b23cdcd8a9870c6dcfc5606cb864df8eabd82e529f9c1/torchinfo-1.8.0-py3-none-any.whl @@ -1866,28 +1866,33 @@ packages: - pkg:pypi/fsspec?source=compressed-mapping size: 142117 timestamp: 1743437355974 -- pypi: https://files.pythonhosted.org/packages/52/50/1d3b4a3c06fa113026337a10ea170503864f29716515d6a6aab09c7a1ea6/genoray-0.5.0-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/b7/57/b76283dde9c3e9c3fe8985f6d6b2d79ce3b65b54b190d09e696ba4b80b02/genoray-0.7.0-py3-none-any.whl name: genoray - version: 0.5.0 - sha256: 349f1f369eb2e4a50ff70807c90e61035cc3aea852869da4c69c7fd0f76efd4c + version: 0.7.0 + sha256: b6b864441c847f685a990047a590ecfad04fdd37fd077bf4fb984ab4ed81e315 requires_dist: + - attrs + - awkward - cyvcf2>=0.31.1 - hirola>=0.3.0 + - loguru>=0.7.0 - more-itertools>=10 + - numba - numpy>=1.26 - pandas>=2.2.2 - pgenlib>=0.92.0 - phantom-types>=3 - polars>=1.26 - pyarrow>=16 - - pyranges>=0.1.1 + - pyranges>=0.1.3 + - seqpro>=0.2.3 - tqdm>=4.65 - typing-extensions>=4.11 requires_python: '>=3.9' - pypi: . name: genvarloader - version: 0.11.0 - sha256: fccf9d11a59a226ef7747f93f0ff04558d3f2a2b17b34a5b9d3d74618f414961 + version: 0.12.0 + sha256: 29405e26f8098122a7c9cc90a1b51eea010b49740df55e984d642759336fde63 requires_dist: - numba>=0.58.1 - loguru @@ -1906,10 +1911,10 @@ packages: - tbb - joblib - pooch - - seqpro>=0.2.0 + - seqpro>=0.2.3 - awkward - hirola>=0.3,<0.4 - - genoray>=0.5.0 + - genoray>=0.7.0 requires_python: '>=3.10,<3.13' editable: true - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda @@ -5298,10 +5303,10 @@ packages: purls: [] size: 352907 timestamp: 1743805258946 -- pypi: https://files.pythonhosted.org/packages/44/6a/82bd7f3e99ce05c203983afa09256edcede7976450eff2640ce11673f71b/seqpro-0.2.0-cp39-abi3-manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/2c/b0/f719dc735e3c9c3ba410e057497cf78a315eb48d013b120666ea3623f9c8/seqpro-0.2.3-cp39-abi3-manylinux_2_28_x86_64.whl name: seqpro - version: 0.2.0 - sha256: 247bb319b9ca346fb01af709d33273a3d866b713694efb781173e88704b06382 + version: 0.2.3 + sha256: 6f0ec116d42850e502026d060560430d0b1c4cc5bf941671e73aec3285a394f5 requires_dist: - numba>=0.58.1 - numpy>=1.26.0 @@ -5310,12 +5315,9 @@ packages: - pandera>=0.19 - pandas - pyarrow - - matplotlib ; extra == 'dev' - - pytest<8 ; extra == 'dev' - - pytest-cases ; extra == 'dev' - - hypothesis ; extra == 'dev' - - pytest-benchmark ; extra == 'dev' - - biopython ; extra == 'dev' + - natsort + - setuptools>=70 + - awkward>=2.5.0 requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.8.2-pyhff2d567_0.conda sha256: 91d664ace7c22e787775069418daa9f232ee8bafdd0a6a080a5ed2395a6fa6b2 diff --git a/pixi.toml b/pixi.toml index 6434fa18..6c4f2b0b 100644 --- a/pixi.toml +++ b/pixi.toml @@ -40,9 +40,9 @@ typer = "*" [pypi-dependencies] genvarloader = { path = ".", editable = true } -seqpro = "==0.2.0" +seqpro = "==0.2.3" hirola = "==0.3" -genoray = "==0.5.0" +genoray = "==0.7.0" [feature.docs.dependencies] sphinx = ">=7.4.7" @@ -83,6 +83,7 @@ docs = { features = ["docs", "pytorch-cpu", "basenji2", "py310"] } [tasks] pre-commit = "pre-commit install --hook-type commit-msg" +gen = "python tests/data/generate_ground_truth.py" [feature.docs.tasks] i-kernel = "ipython kernel install --user --name 'gvl-docs' --display-name 'GVL Docs'" diff --git a/pyproject.toml b/pyproject.toml index 948a4818..38a5be70 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,10 +27,10 @@ dependencies = [ "tbb", "joblib", "pooch", - "seqpro>=0.2.0", + "seqpro>=0.2.3", "awkward", "hirola>=0.3,<0.4", - "genoray>=0.5.0", + "genoray>=0.7.0", ] [project.urls] diff --git a/python/genvarloader/_dataset/_genotypes.py b/python/genvarloader/_dataset/_genotypes.py index 9a58b730..7c9c2b6b 100644 --- a/python/genvarloader/_dataset/_genotypes.py +++ b/python/genvarloader/_dataset/_genotypes.py @@ -706,7 +706,10 @@ def get_diffs_sparse( for query in nb.prange(n_queries): for hap in nb.prange(ploidy): o_idx = geno_offset_idxs[query, hap] - o_s, o_e = geno_offsets[o_idx], geno_offsets[o_idx + 1] + if geno_offset_idxs.ndim == 1: + o_s, o_e = geno_offsets[o_idx], geno_offsets[o_idx + 1] + else: + o_s, o_e = geno_offsets[o_idx] n_variants = o_e - o_s if n_variants == 0: diffs[query, hap] = 0 @@ -921,7 +924,11 @@ def reconstruct_haplotype_from_sparse( annot_ref_pos: Optional[NDArray[np.int32]] Shape = (out_length) Reference positions for annotations """ - _variant_idxs = geno_v_idxs[geno_offsets[offset_idx] : geno_offsets[offset_idx + 1]] + if geno_offsets.ndim == 1: + o_s, o_e = geno_offsets[offset_idx], geno_offsets[offset_idx + 1] + else: + o_s, o_e = geno_offsets[offset_idx] + _variant_idxs = geno_v_idxs[o_s : o_e] length = len(out) n_variants = len(_variant_idxs) @@ -1106,7 +1113,10 @@ def choose_unphased_variants( for query in nb.prange(n_regions): for hap in range(ploidy): o_idx = geno_offset_idxs[query, hap] - o_s, o_e = geno_offsets[o_idx], geno_offsets[o_idx + 1] + if geno_offset_idxs.ndim == 1: + o_s, o_e = geno_offsets[o_idx], geno_offsets[o_idx + 1] + else: + o_s, o_e = geno_offsets[o_idx] lengths[query, hap] = o_e - o_s keep_offsets = np.empty(n_regions * ploidy + 1, np.int64) keep_offsets[0] = 0 @@ -1123,7 +1133,10 @@ def choose_unphased_variants( ref_end: int = ends[query] for hap in nb.prange(ploidy): o_idx = geno_offset_idxs[query, hap] - o_s, o_e = geno_offsets[o_idx], geno_offsets[o_idx + 1] + if geno_offset_idxs.ndim == 1: + o_s, o_e = geno_offsets[o_idx], geno_offsets[o_idx + 1] + else: + o_s, o_e = geno_offsets[o_idx] qh_genos = geno_v_idxs[o_s:o_e] qh_ccfs = ccfs[o_s:o_e] diff --git a/python/genvarloader/_dataset/_reconstruct.py b/python/genvarloader/_dataset/_reconstruct.py index c0256af1..01b0e4c5 100644 --- a/python/genvarloader/_dataset/_reconstruct.py +++ b/python/genvarloader/_dataset/_reconstruct.py @@ -1,5 +1,6 @@ from __future__ import annotations +import json from pathlib import Path from typing import ( TYPE_CHECKING, @@ -209,29 +210,61 @@ def from_path( samples: List[str], ploidy: int, ) -> Haps[Ragged[np.bytes_]]: - variants = _Variants.from_table(path / "genotypes" / "variants.arrow") - if phased: + if not (path / "genotypes" / "svar_meta.json").exists(): + variants = _Variants.from_table(path / "genotypes" / "variants.arrow") + if phased: + v_idxs = np.memmap( + path / "genotypes" / "variant_idxs.npy", + dtype=np.int32, + mode="r", + ) + offsets = np.memmap( + path / "genotypes" / "offsets.npy", dtype=np.int64, mode="r" + ) + shape = (len(regions), len(samples), ploidy) + genotypes = SparseGenotypes.from_offsets(v_idxs, shape, offsets) + else: + genotypes = SparseSomaticGenotypes( + np.memmap( + path / "genotypes" / "variant_idxs.npy", + dtype=np.int32, + mode="r", + ), + np.memmap( + path / "genotypes" / "ccfs.npy", dtype=np.float32, mode="r" + ), + np.memmap( + path / "genotypes" / "offsets.npy", dtype=np.int64, mode="r" + ), + len(regions), + len(samples), + ) + else: v_idxs = np.memmap( - path / "genotypes" / "variant_idxs.npy", + path / "genotypes" / "link.svar" / "variant_idxs.npy", dtype=np.int32, mode="r", ) + with open(path / "genotypes" / "svar_meta.json") as f: + metadata = json.load(f) + # (r s p 2) + shape: tuple[int, ...] = metadata["shape"] + dtype: str = metadata["dtype"] offsets = np.memmap( - path / "genotypes" / "offsets.npy", dtype=np.int64, mode="r" + path / "genotypes" / "offsets.npy", shape=shape, dtype=dtype, mode="r" ) - shape = (len(regions), len(samples), ploidy) - genotypes = SparseGenotypes.from_offsets(v_idxs, shape, offsets) - else: - genotypes = SparseSomaticGenotypes( - np.memmap( - path / "genotypes" / "variant_idxs.npy", - dtype=np.int32, - mode="r", - ), - np.memmap(path / "genotypes" / "ccfs.npy", dtype=np.float32, mode="r"), - np.memmap(path / "genotypes" / "offsets.npy", dtype=np.int64, mode="r"), - len(regions), - len(samples), + genotypes = SparseGenotypes.from_offsets( + v_idxs, shape[:-1], offsets.reshape(-1, 2) + ) + svar_index = pl.read_ipc( + path / "genotypes" / "link.svar" / "index.arrow", + memory_map=False, + columns=["POS", "ILEN", "ALT"], + ).with_columns(pl.col("ILEN", "ALT").list.first()) + variants = _Variants( + svar_index["POS"].to_numpy() - 1, + svar_index["ILEN"].to_numpy(), + VLenAlleles.from_polars(svar_index["ALT"]), ) return cls( reference=reference, diff --git a/python/genvarloader/_dataset/_tracks.py b/python/genvarloader/_dataset/_tracks.py index b85b45d3..05289a97 100644 --- a/python/genvarloader/_dataset/_tracks.py +++ b/python/genvarloader/_dataset/_tracks.py @@ -120,7 +120,11 @@ def shift_and_realign_track_sparse( keep : Optional[NDArray[np.bool_]] Shape = (n_variants) Keep mask for genotypes. """ - _variant_idxs = geno_v_idxs[geno_offsets[offset_idx] : geno_offsets[offset_idx + 1]] + if geno_offsets.ndim == 1: + o_s, o_e = geno_offsets[offset_idx], geno_offsets[offset_idx + 1] + else: + o_s, o_e = geno_offsets[offset_idx] + _variant_idxs = geno_v_idxs[o_s:o_e] length = len(out) n_variants = len(_variant_idxs) diff --git a/python/genvarloader/_dataset/_write.py b/python/genvarloader/_dataset/_write.py index 41801c23..c4d34f26 100644 --- a/python/genvarloader/_dataset/_write.py +++ b/python/genvarloader/_dataset/_write.py @@ -8,7 +8,7 @@ import awkward as ak import numpy as np import polars as pl -from genoray import PGEN, VCF, Reader +from genoray import PGEN, VCF, Reader, SparseVar from genoray._utils import parse_memory from loguru import logger from more_itertools import mark_ends @@ -159,11 +159,14 @@ def write( if variants is not None: logger.info("Writing genotypes.") - variants.set_samples(samples) if isinstance(variants, VCF): + variants.set_samples(samples) gvl_bed = _write_from_vcf(path, gvl_bed, variants, max_mem) elif isinstance(variants, PGEN): + variants.set_samples(samples) gvl_bed = _write_from_pgen(path, gvl_bed, variants, max_mem) + elif isinstance(variants, SparseVar): + gvl_bed = _write_from_svar(path, gvl_bed, variants, samples) metadata["ploidy"] = variants.ploidy metadata["phased"] = True # free memory @@ -239,10 +242,7 @@ def _write_from_vcf(path: Path, bed: pl.DataFrame, vcf: VCF, max_mem: int): if vcf._index is None: if not vcf._index_path().exists(): - vcf._write_gvi_index(preset="genvarloader") - - if vcf._index_compat() != "genvarloader": - vcf._make_index_gvl_compat() + vcf._write_gvi_index() vcf._load_index() @@ -499,6 +499,56 @@ def _write_from_pgen(path: Path, bed: pl.DataFrame, pgen: PGEN, max_mem: int): return bed +def _write_from_svar( + path: Path, bed: pl.DataFrame, svar: SparseVar, samples: list[str] +): + out_dir = path / "genotypes" + out_dir.mkdir(parents=True, exist_ok=True) + + offsets = np.memmap( + out_dir / "offsets.npy", + np.int64, + "w+", + shape=(bed.height, len(samples), svar.ploidy, 2), + ) + + with open(out_dir / "svar_meta.json", "w") as f: + json.dump({"shape": offsets.shape, "dtype": offsets.dtype.str}, f) + + max_ends = np.empty(bed.height, np.int32) + region_offset = 0 + for (c,), df in bed.partition_by( + "chrom", as_dict=True, maintain_order=True + ).items(): + c = cast(str, c) + starts = df["chromStart"] + ends = df["chromEnd"] + # (r s p 2) + out = offsets[region_offset : region_offset + df.height] + svar._find_starts_ends_with_length(c, starts, ends, samples=samples, out=out) + region_offset += df.height + + # compute max_ends for the bed + shape = (df.height, len(samples), svar.ploidy, 2) + # (r s p 2 ~v) + sp_genos = SparseGenotypes.from_offsets( + svar.genos.data, shape, out.reshape(-1, 2) + ) + # (r s p 2) + # this is fine if there aren't any overlapping variants that could make a v_idx < -1 + # have a further end than v_idx == -1 + v_idxs = sp_genos.to_awkward()[..., -1].to_numpy() # type: ignore + max_ends[region_offset : region_offset + df.height] = ( + svar.granges.End.to_numpy()[v_idxs].max((1, 2, 3)) + ) + + offsets.flush() + + (out_dir / "link.svar").symlink_to(svar.path, True) + + return bed.with_columns(chromEnd=pl.Series(max_ends)) + + def _write_phased_variants_chunk( out_dir: Path, genos: SparseGenotypes, diff --git a/tests/data/generate_ground_truth.py b/tests/data/generate_ground_truth.py index ee0a13a1..a6b5bf25 100644 --- a/tests/data/generate_ground_truth.py +++ b/tests/data/generate_ground_truth.py @@ -56,7 +56,7 @@ def main( import genvarloader as gvl import polars as pl import polars.selectors as cs - from genoray import VCF + from genoray import VCF, SparseVar from loguru import logger from tqdm.auto import tqdm @@ -163,6 +163,11 @@ def main( ] ) + logger.info("Generating SVAR file.") + SparseVar.from_vcf( + WDIR / "filtered.svar", VCF(filtered_vcf), "50mb", overwrite=True + ) + bed = pl.read_csv( filtered_vcf, separator="\t", @@ -245,13 +250,20 @@ def main( bed = WDIR / "vcf" / f"{name}.bed" - logger.info("Generating phased dataset.") + logger.info("Generating phased datasets.") reader = VCF(filtered_vcf) if not reader._index_path().exists(): - reader._write_gvi_index(preset="genvarloader") + reader._write_gvi_index() reader._load_index() gvl.write( - path=WDIR / "phased_dataset.gvl", bed=bed, variants=reader, overwrite=True + path=WDIR / "phased_dataset.vcf.gvl", bed=bed, variants=reader, overwrite=True + ) + + gvl.write( + path=WDIR / "phased_dataset.svar.gvl", + bed=bed, + variants=SparseVar(WDIR / "filtered.svar"), + overwrite=True, ) # logger.info("Generating unphased dataset.") diff --git a/tests/data/pgen/filtered_sample.pvar b/tests/data/pgen/filtered_sample.pvar index 8a431512..9c715b31 100644 --- a/tests/data/pgen/filtered_sample.pvar +++ b/tests/data/pgen/filtered_sample.pvar @@ -16,11 +16,11 @@ ##ALT= ##ALT= ##bcftools_normVersion=1.21+htslib-1.21 -##bcftools_normCommand=norm -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz; Date=Thu Apr 17 21:21:10 2025 -##bcftools_normCommand=norm -a --atom-overlaps . -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz -m -; Date=Thu Apr 17 21:21:10 2025 +##bcftools_normCommand=norm -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz; Date=Mon Apr 21 08:00:03 2025 +##bcftools_normCommand=norm -a --atom-overlaps . -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz -m -; Date=Mon Apr 21 08:00:03 2025 ##bcftools_viewVersion=1.21+htslib-1.21 -##bcftools_viewCommand=view -e TYPE="OTHER"; Date=Thu Apr 17 21:21:10 2025 -##bcftools_viewCommand=view -O z -o /carter/users/dlaub/projects/GenVarLoader/tests/data/vcf/filtered_sample.vcf.gz /carter/users/dlaub/projects/GenVarLoader/tests/data/vcf/filtered_sample.vcf; Date=Thu Apr 17 21:21:10 2025 +##bcftools_viewCommand=view -e TYPE="OTHER"; Date=Mon Apr 21 08:00:03 2025 +##bcftools_viewCommand=view -O z -o /carter/users/dlaub/projects/GenVarLoader/tests/data/vcf/filtered_sample.vcf.gz /carter/users/dlaub/projects/GenVarLoader/tests/data/vcf/filtered_sample.vcf; Date=Mon Apr 21 08:00:03 2025 #CHROM POS ID REF ALT QUAL FILTER INFO 19 111 . N C 9.6 . . 19 1010695 . CGAGACG C 10 . . diff --git a/tests/data/vcf/filtered_sample.gvl.arrow b/tests/data/vcf/filtered_sample.gvl.arrow deleted file mode 100644 index 1cca5b84053d6789eea8a337bb23e4ca600daf01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2837 zcmeHJy>1gh5T4*8F^L6^aY1QBn}SdUiGtNBxgZ5>8B0+50Z>Et%c}Qf6p<6y z^&pw0DL0^Rf<>O}Y(9hVan>MvU>^sMsyN>fCxd4Lc5Y|%TYkgMt-0Qtxd;8{SI)f% zzkB)iu>TYT5I*JnH44Hyu#P2aM+)oFke1x`HE6-&0Q!}nmP5!#VAd(nO^h?xw*kAp zHm0eP%T<#)_gQ6`*cj#-dE!FGqLx?khhgnUt%tWZ#q>jLFR=kTweGY?ngpZ`!xvaqA2p* z`%jfHV!X?6Zo$+(#iK+Y<4EO)%$NG7IDAR)qZAb?}_bG|2o)()E7R# zp`U+%Pr*qmTfmCMr!BwzH})|jf|LP{{I@<6L{3{}A zXeg*6giw?yd2er@IaXNmVHXsPH8(puvv1~Rcf7aN>m58_1FlH#=YR~r8OO_%890Fk z7LoIr;V0*toXPo<^(LRIboom8j(iwqfp7HN;J8g*Aj>vKRep(^rynnd+a{x?o-sl*`$9pAK~nEj-FD~!fDgLiZf5WyWa^I4>^`S z)P|2g)#ie=$ykwF^n0+q(>vJXfW+ymV*)EL)fud(bf^W|MM$V=o8XT^vgzivUi6FFU5)x8C&)cF&oQvEBkTqsp` zcYQkN`Mo6nAje}~3q(1K)qBd*tlY%PXw+Q^{HrUnQoqI>;jVz+L)mZ{JDj)s|57moIIeU#|zb>})x-roQ|Ze!FNZ%$iyORh^U zq0gzM`$P4cgoI ##ALT= ##bcftools_normVersion=1.21+htslib-1.21 -##bcftools_normCommand=norm -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz; Date=Thu Apr 17 21:21:10 2025 -##bcftools_normCommand=norm -a --atom-overlaps . -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz -m -; Date=Thu Apr 17 21:21:10 2025 +##bcftools_normCommand=norm -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz; Date=Mon Apr 21 08:00:03 2025 +##bcftools_normCommand=norm -a --atom-overlaps . -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz -m -; Date=Mon Apr 21 08:00:03 2025 ##bcftools_viewVersion=1.21+htslib-1.21 -##bcftools_viewCommand=view -e TYPE="OTHER"; Date=Thu Apr 17 21:21:10 2025 +##bcftools_viewCommand=view -e TYPE="OTHER"; Date=Mon Apr 21 08:00:03 2025 #CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA00001 NA00002 NA00003 19 111 . N C 9.6 . . GT:VAF:HQ 0|0:.:10,15 0|0:.:10,10 0/1:0.3:3,3 19 1010695 . CGAGACG C 10 . . GT:VAF:HQ 0|0:.:10,10 0|0:0.5:10,15 0/1:0.15:3,3 diff --git a/tests/data/vcf/filtered_sample.vcf.gz b/tests/data/vcf/filtered_sample.vcf.gz index 1429b997f65b4428637a036d8734f7ebbdce19eb..3ee6903d0955a4c74a4cdae8e801c0cbcb5632fd 100644 GIT binary patch delta 876 zcmV-y1C#vT3f&5SABzYC000000RIL6LPG)oUjx0B+m7N!5QeYeDN1AIDqw7rk#;8W zN)CqsiPHc>k}Fi$W$dWk-P_%;VxB%~P61~!%dS>?<;K+i^1YlV~=pwMoY+mnIiHyo(rvG-rl?lm>}fQ*!sQ>g+*nG!zD2 z(DWXHhpOXfu~9LF#jan-jX|rQD6v*pESj!gbsR-0DdI7OJyD3IMwt`W?$flDH9xr0 zZ!WjK_uwWRT_Yr;EipGmcl}y*oLF#^ulFYXhmY4U0x6gT!AE->#A3sZWu9R*NQDBzID=>~KWAkDy(}sAwD-oiSftgV`UzZR( zCT$clIKWCd{C+}sClgo#B&*qI0tMM9o#nCyt4+=l@PmhIRxkJ>tA}!kGPt1a5f>kt zzW1&r1JW8yh8*s_pKN>RW6x!{B}h&^cY*limk`ezWVzYFikSEezIPCer^9Hz7d*{x zILD`dW80L)i+}4F{cjx?sB+{6-mK@PljmDn>SP6uiIpk0HRhBsx#-Iaeedidct_tu z$^L628XP@z29LweV>EcVR<((dUD--TgBKu11#xqwZH*S!qLz@m(}398qg*ipMeAJf zy>Jz$MhK>tT&Q9}N?Voh2L8{P(JWup?YbO)*Ahj6JPGX@>M1m0REAVzqe-{ zNG1NJ*yzR+@dc`Zz=Tx8kT$wuTd$F#HrRM;YTIEgRbHUlE$#JCtk}*D?bZ7ASJ>YW zL%|`E3IZRz509Sr=rtkmg8TQ4BGl_>L{S%8QVgXA_s6=2dI9yXNMW1P=UZxG<4&n! z+BMV(=6_8(;oW%N>rC&ya?5Mf7+#?+zU`E@aoRZC^pq?Q)5qP$sk?stuDmbi*Xm8j z!^&hltMuEIX{TF>2J_1EOEjn)hF`@_;>zJWu8bnj^F06f435uc^&dk9;hnQx0|5d& C47mIN delta 877 zcmV-z1CspR3f>BTABzYC000000RIL6LPG)oU<19CZI9wM5XWD`rx(vE!sUqg1E@O}J?H zwm-RE)p2@*;k-Kye;ahdNi>_)I;3NjOOp#8-bIW-nlnRxN`pkLDY^Slb@reR8VUn1 zXnL)nRdpOKHY%pD*bNG~F=+J@CDsayMbq`Gj-x0gMLedkFAA~LD0AZ4eVn$l<}a@F zo6D{5wcLcGYlLL9CFZ8+u3xK;6ANzg_1>i4`f&Xs@JcWKw7+GBI_K+9qB1$Ms^bhs zz48A4(X2Lq+7v5NpO&<{4IlR45>fGl+)sHGxbqT>^ z(ncYJ1FV$8?_w%SuSg^+T<(&KWJUE`oU*eeUwiqgA3Xoaq*$) zd+%B@B(1?@$l>1m!M2A!_FRTrg5=b57l@C33Guu^mYW@{h>1_&dk4XI`V`Igg2(v{ z=lFPkY@4!p@oycY|E=Q!RgT=ioAtbO@_b86ovgqyu`=bh#+(u+7kzo5@1I=+@96s| z*?(f`5rXL@7php0(pKfWf&XJ>G|N|YyDrCnwM9`NPeQwfdJ2sgl_AyGXi~b7Fx;#f zQi;DQHoEahe1U2xFd@}2q>XOa)@!7w4L07I+ICn=l^3XXOM5*OE4H&kd$oT374|p8 zJljAd75G0x;6DWZgYQA$1^4e8MX1-&h@vjGq!>yK?)P;M^#bZ&kis^nPq);>#+_1Q zwQHyo%>SBn!@Kdk-<{rl;g;8^F}y-ueBCK+q14YZ=cQc}FdI)XaUsPp%I& y|6^z7tGnx4It^Og`DQWSnfoHQ$XA+n=B~P&eeC%IpIY5H^9DFSh3VWwk*gqYnM$_+ delta 144 zcmV;B0B`@x0m}i9CVwlL%E}k;GfYeopTS3B+H-TQdXj4^?m1S{qt&&Dtbi>L05$&4 z&Ugu&uW~tcP6XQA;QOq^HmH+vhF^!`Qy;3H@3~R232vW$E#rA3@2Dk@nz=9d$@QV; yf9%YBb$5MBr$MVb-z?@kb6?~Z`AXBy+*Oyek3E0jQ>!~?9tP(J3e>1_k*grQy-GL$ From d773a2529041324c519b7fcf79971b99419e72b8 Mon Sep 17 00:00:00 2001 From: d-laub Date: Tue, 22 Apr 2025 17:48:56 -0700 Subject: [PATCH 14/53] feat: SVAR support passes all tests --- pixi.lock | 13 +- pixi.toml | 3 +- pyproject.toml | 1 + python/genvarloader/_dataset/_genotypes.py | 322 +++++++++---------- python/genvarloader/_dataset/_reconstruct.py | 28 +- python/genvarloader/_dataset/_write.py | 67 ++-- python/genvarloader/_ragged.py | 301 +++-------------- python/genvarloader/_utils.py | 225 +------------ tests/data/pgen/filtered_sample.pvar | 8 +- tests/data/vcf/filtered_sample.vcf | 6 +- tests/data/vcf/filtered_sample.vcf.gz | Bin 1373 -> 1374 bytes tests/data/vcf/filtered_sample.vcf.gz.csi | Bin 203 -> 203 bytes tests/dataset/genotypes/test_dense2sparse.py | 242 -------------- tests/dataset/genotypes/test_reconstruct.py | 22 +- tests/dataset/test_ds_haps.py | 20 +- tests/dataset/test_realign.py | 22 +- tests/dataset/test_write.py | 19 +- tests/test_pgen.py | 168 ---------- tests/test_variants.py | 16 - tests/tracks/test_i2t_t2i.py | 4 +- 20 files changed, 313 insertions(+), 1174 deletions(-) delete mode 100644 tests/dataset/genotypes/test_dense2sparse.py delete mode 100644 tests/test_pgen.py delete mode 100644 tests/test_variants.py diff --git a/pixi.lock b/pixi.lock index b390b49a..02f87e1f 100644 --- a/pixi.lock +++ b/pixi.lock @@ -242,10 +242,10 @@ environments: - pypi: https://files.pythonhosted.org/packages/18/ec/5434c4a6012ef2ff12d0e71b6c341532686ee82d63e5101717abc24eb3f5/pgenlib-0.92.0.tar.gz - pypi: https://files.pythonhosted.org/packages/5b/bc/246f452431c592a2a424050e8bb9ccf494fb47613fd97c912f4d573a5e3b/phantom_types-3.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/06/5c9ed34ec048e51e115cd1b3cf9d9c258e3c75b3105b42db11c0282536a3/pysam-0.23.0-cp312-cp312-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/2c/b0/f719dc735e3c9c3ba410e057497cf78a315eb48d013b120666ea3623f9c8/seqpro-0.2.3-cp39-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c6/64/3d24181aaea3fb892d4a46f8171845782ee364d60e9494426daf31d12f47/tbb-2022.1.0-py2.py3-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/06/bb/09a6dc2f1110b409d6d2f96429969d7466bde9bf4ad8b2e682d851ef104b/tcmlib-1.3.0-py2.py3-none-manylinux_2_28_x86_64.whl - pypi: . + - pypi: /cellar/users/dlaub/projects/ML4GLand/SeqPro dev: channels: - url: https://conda.anaconda.org/conda-forge/ @@ -504,12 +504,12 @@ environments: - pypi: https://files.pythonhosted.org/packages/5b/bc/246f452431c592a2a424050e8bb9ccf494fb47613fd97c912f4d573a5e3b/phantom_types-3.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/45/38ae786fb646e5032a982029ad1c0964433e74b67e328d2c9d2fc6691639/pysam-0.23.0-cp310-cp310-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/82/ff/5701f79317a1a03e5ee8a1bf48e7273a8445162a2774e51fc06411a67c89/pytorch_lightning-2.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/b0/f719dc735e3c9c3ba410e057497cf78a315eb48d013b120666ea3623f9c8/seqpro-0.2.3-cp39-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c6/64/3d24181aaea3fb892d4a46f8171845782ee364d60e9494426daf31d12f47/tbb-2022.1.0-py2.py3-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/06/bb/09a6dc2f1110b409d6d2f96429969d7466bde9bf4ad8b2e682d851ef104b/tcmlib-1.3.0-py2.py3-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/72/25/973bd6128381951b23cdcd8a9870c6dcfc5606cb864df8eabd82e529f9c1/torchinfo-1.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/ee/4d0a7213a6f412afb3483031009a3b970dd7bed3be24de95ab04fba1c05a/torchmetrics-1.7.1-py3-none-any.whl - pypi: . + - pypi: /cellar/users/dlaub/projects/ML4GLand/SeqPro docs: channels: - url: https://conda.anaconda.org/conda-forge/ @@ -842,12 +842,12 @@ environments: - pypi: https://files.pythonhosted.org/packages/5b/bc/246f452431c592a2a424050e8bb9ccf494fb47613fd97c912f4d573a5e3b/phantom_types-3.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/45/38ae786fb646e5032a982029ad1c0964433e74b67e328d2c9d2fc6691639/pysam-0.23.0-cp310-cp310-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/82/ff/5701f79317a1a03e5ee8a1bf48e7273a8445162a2774e51fc06411a67c89/pytorch_lightning-2.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/b0/f719dc735e3c9c3ba410e057497cf78a315eb48d013b120666ea3623f9c8/seqpro-0.2.3-cp39-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c6/64/3d24181aaea3fb892d4a46f8171845782ee364d60e9494426daf31d12f47/tbb-2022.1.0-py2.py3-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/06/bb/09a6dc2f1110b409d6d2f96429969d7466bde9bf4ad8b2e682d851ef104b/tcmlib-1.3.0-py2.py3-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/72/25/973bd6128381951b23cdcd8a9870c6dcfc5606cb864df8eabd82e529f9c1/torchinfo-1.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/ee/4d0a7213a6f412afb3483031009a3b970dd7bed3be24de95ab04fba1c05a/torchmetrics-1.7.1-py3-none-any.whl - pypi: . + - pypi: /cellar/users/dlaub/projects/ML4GLand/SeqPro packages: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 @@ -5303,10 +5303,10 @@ packages: purls: [] size: 352907 timestamp: 1743805258946 -- pypi: https://files.pythonhosted.org/packages/2c/b0/f719dc735e3c9c3ba410e057497cf78a315eb48d013b120666ea3623f9c8/seqpro-0.2.3-cp39-abi3-manylinux_2_28_x86_64.whl +- pypi: /cellar/users/dlaub/projects/ML4GLand/SeqPro name: seqpro - version: 0.2.3 - sha256: 6f0ec116d42850e502026d060560430d0b1c4cc5bf941671e73aec3285a394f5 + version: 0.2.4 + sha256: c8ffe010a4e5d596388366e26fea9f87b9a99b095a8ce802a7fea9a08723ad34 requires_dist: - numba>=0.58.1 - numpy>=1.26.0 @@ -5319,6 +5319,7 @@ packages: - setuptools>=70 - awkward>=2.5.0 requires_python: '>=3.9' + editable: true - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.8.2-pyhff2d567_0.conda sha256: 91d664ace7c22e787775069418daa9f232ee8bafdd0a6a080a5ed2395a6fa6b2 md5: 9bddfdbf4e061821a1a443f93223be61 diff --git a/pixi.toml b/pixi.toml index 6c4f2b0b..8de234fd 100644 --- a/pixi.toml +++ b/pixi.toml @@ -40,7 +40,7 @@ typer = "*" [pypi-dependencies] genvarloader = { path = ".", editable = true } -seqpro = "==0.2.3" +seqpro = { path = '/cellar/users/dlaub/projects/ML4GLand/SeqPro', editable = true } hirola = "==0.3" genoray = "==0.7.0" @@ -84,6 +84,7 @@ docs = { features = ["docs", "pytorch-cpu", "basenji2", "py310"] } [tasks] pre-commit = "pre-commit install --hook-type commit-msg" gen = "python tests/data/generate_ground_truth.py" +test = "pytest tests" [feature.docs.tasks] i-kernel = "ipython kernel install --user --name 'gvl-docs' --display-name 'GVL Docs'" diff --git a/pyproject.toml b/pyproject.toml index 38a5be70..86fc51f6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -58,6 +58,7 @@ filterwarnings = [ "ignore::DeprecationWarning:pkg_resources.*", "ignore::DeprecationWarning:jupyter_client.*", ] +markers = ["slow: mark test as slow (deselect with '-m \"not slow\"')"] [tool.commitizen] name = "cz_conventional_commits" diff --git a/python/genvarloader/_dataset/_genotypes.py b/python/genvarloader/_dataset/_genotypes.py index 7c9c2b6b..faddd520 100644 --- a/python/genvarloader/_dataset/_genotypes.py +++ b/python/genvarloader/_dataset/_genotypes.py @@ -4,13 +4,13 @@ import numba as nb import numpy as np from attrs import define +from genoray._svar import SparseGenotypes from numpy.typing import NDArray -from .._ragged import Ragged from .._types import ListIdx from .._utils import _lengths_to_offsets -__all__ = [] +__all__ = ["SparseGenotypes"] @define @@ -114,156 +114,156 @@ def get_haplotype_region_ilens( return r_ilens -class SparseGenotypes(Ragged[np.int32]): - """Sparse genotypes corresponding to distinct regions. In this format, genotypes are stored as a ragged 3D array where each - sample, ploid, and region may have a different number of variants, since unknown and REF genotypes are not stored. The - variant indices are aligned to the genotypes. Physically, the genotypes and variant indices are stored as 1D arrays. - Then, each sample and region's info can be sliced out using the offsets: - >>> i = np.ravel_multi_index((r, p, s), (n_regions, ploidy, n_samples)) - >>> variant_idxs[offsets[i]:offsets[i+1]] - - Attributes - ---------- - variant_idxs : NDArray[np.int32] - Shape = (variants * samples * ploidy) Variant indices. - offsets : NDArray[np.int32] - Shape = (regions * samples * ploidy + 1) Offsets into genos. - n_samples : int - Number of samples. - ploidy : int - Ploidy. - n_regions : int - Number of regions. - """ - - @property - def variant_idxs(self): - return self.data - - @property - def n_regions(self): - return self.shape[0] - - @property - def n_samples(self): - return self.shape[1] - - @property - def ploidy(self): - return self.shape[2] - - @property - def effective_shape(self): - return (self.n_regions, self.n_samples, self.ploidy) - - @classmethod - def empty(cls, n_regions: int, n_samples: int, ploidy: int): - """Create an empty sparse genotypes object.""" - return cls.from_offsets( - np.empty(0, np.int32), - (n_regions, n_samples, ploidy), - np.zeros(n_regions * n_samples * ploidy + 1, np.int64), - ) - - @property - def is_empty(self) -> bool: - return len(self.variant_idxs) == 0 - - def vars(self, region: int, sample: int, ploidy: int): - """Get variant indices for a given sample and region.""" - i = np.ravel_multi_index( - (region, sample, ploidy), (self.n_regions, self.n_samples, self.ploidy) - ) - vars = self.variant_idxs[self.offsets[i] : self.offsets[i + 1]] - return vars - - @classmethod - def from_dense( - cls, - genos: NDArray[np.int8], - var_idxs: NDArray[np.integer], - offsets: NDArray[np.int64], - ): - """Convert dense genotypes to sparse genotypes. - - Parameters - ---------- - genos : NDArray[np.int8] - Shape = (sample ploidy ~variants) Genotypes. - var_idxs : NDArray[np.uint32] - Shape = (regions ~variants) variant indices for each region. - offsets : NDArray[np.uint32] - Shape = (regions + 1) Offsets into genotypes and var_idxs for each region. - dosages : Optional[NDArray[np.float32]] - Shape = (sample ploidy ~variants) Dosages. - """ - n_regions = len(offsets) - 1 - n_samples = genos.shape[0] - ploidy = genos.shape[1] - # (s p v) - keep = genos == 1 - n_per_rsp = get_n_per_rsp(keep, offsets, n_regions) - sparse_offsets = _lengths_to_offsets(n_per_rsp.ravel(), np.int64) - variant_idxs = keep_mask_to_rsp_v_idx( - keep, var_idxs, offsets, sparse_offsets, n_regions, n_samples, ploidy - ) - shape = (n_regions, n_samples, ploidy) - return cls.from_offsets(variant_idxs, shape, sparse_offsets) - - @classmethod - def from_dense_with_length( - cls, - genos: NDArray[np.int8], - first_v_idxs: NDArray[np.int32], - offsets: NDArray[np.int64], - ilens: NDArray[np.int32], - positions: NDArray[np.int32], - starts: NDArray[np.int32], - lengths: NDArray[np.int32], - ): - """Convert dense genotypes to sparse genotypes. - - Parameters - ---------- - genos : NDArray[np.int8] - Shape = (sample, ploidy, variants) Genotypes. - first_v_idxs : NDArray[np.uint32] - Shape = (regions) First variant index for each region. - offsets : NDArray[np.uint32] - Shape = (regions + 1) Offsets into genos. - ilens : NDArray[np.int32] - Shape = (total_variants) ILEN of all unique variants. - positions : NDArray[np.int32] - Shape = (total_variants) Positions of unique variants. - starts : NDArray[np.int32] - Shape = (regions) Start of query regions. - lengths : NDArray[np.int32] - Shape = (regions) Lengths of the output haplotypes. - """ - n_regions = len(first_v_idxs) - n_samples = genos.shape[0] - ploidy = genos.shape[1] - # (s p v) - keep, min_ilens = get_keep_mask_for_length( - genos, - offsets, - first_v_idxs, - positions, - ilens, - starts, - lengths, - ) - # (r) - max_ends: NDArray[np.int32] = starts + lengths - min_ilens.clip(max=0) - # (r s p) - n_per_rsp = get_n_per_rsp(keep, offsets, n_regions) - sparse_offsets = _lengths_to_offsets(n_per_rsp.ravel(), np.int64) - variant_idxs = keep_mask_to_rsp_v_idx( - keep, first_v_idxs, offsets, sparse_offsets, n_regions, n_samples, ploidy - ) - shape = (n_regions, n_samples, ploidy) - sparse_genos = cls.from_offsets(variant_idxs, shape, sparse_offsets) - return sparse_genos, max_ends +# class SparseGenotypes(Ragged[np.int32]): +# """Sparse genotypes corresponding to distinct regions. In this format, genotypes are stored as a ragged 3D array where each +# sample, ploid, and region may have a different number of variants, since unknown and REF genotypes are not stored. The +# variant indices are aligned to the genotypes. Physically, the genotypes and variant indices are stored as 1D arrays. +# Then, each sample and region's info can be sliced out using the offsets: +# >>> i = np.ravel_multi_index((r, p, s), (n_regions, ploidy, n_samples)) +# >>> variant_idxs[offsets[i]:offsets[i+1]] + +# Attributes +# ---------- +# variant_idxs : NDArray[np.int32] +# Shape = (variants * samples * ploidy) Variant indices. +# offsets : NDArray[np.int32] +# Shape = (regions * samples * ploidy + 1) Offsets into genos. +# n_samples : int +# Number of samples. +# ploidy : int +# Ploidy. +# n_regions : int +# Number of regions. +# """ + +# @property +# def variant_idxs(self): +# return self.data + +# @property +# def n_regions(self): +# return self.shape[0] + +# @property +# def n_samples(self): +# return self.shape[1] + +# @property +# def ploidy(self): +# return self.shape[2] + +# @property +# def effective_shape(self): +# return (self.n_regions, self.n_samples, self.ploidy) + +# @classmethod +# def empty(cls, n_regions: int, n_samples: int, ploidy: int): +# """Create an empty sparse genotypes object.""" +# return cls.from_offsets( +# np.empty(0, np.int32), +# (n_regions, n_samples, ploidy), +# np.zeros(n_regions * n_samples * ploidy + 1, np.int64), +# ) + +# @property +# def is_empty(self) -> bool: +# return len(self.variant_idxs) == 0 + +# def vars(self, region: int, sample: int, ploidy: int): +# """Get variant indices for a given sample and region.""" +# i = np.ravel_multi_index( +# (region, sample, ploidy), (self.n_regions, self.n_samples, self.ploidy) +# ) +# vars = self.variant_idxs[self.offsets[i] : self.offsets[i + 1]] +# return vars + +# @classmethod +# def from_dense( +# cls, +# genos: NDArray[np.int8], +# var_idxs: NDArray[np.integer], +# offsets: NDArray[np.int64], +# ): +# """Convert dense genotypes to sparse genotypes. + +# Parameters +# ---------- +# genos : NDArray[np.int8] +# Shape = (sample ploidy ~variants) Genotypes. +# var_idxs : NDArray[np.uint32] +# Shape = (regions ~variants) variant indices for each region. +# offsets : NDArray[np.uint32] +# Shape = (regions + 1) Offsets into genotypes and var_idxs for each region. +# dosages : Optional[NDArray[np.float32]] +# Shape = (sample ploidy ~variants) Dosages. +# """ +# n_regions = len(offsets) - 1 +# n_samples = genos.shape[0] +# ploidy = genos.shape[1] +# # (s p v) +# keep = genos == 1 +# n_per_rsp = get_n_per_rsp(keep, offsets, n_regions) +# sparse_offsets = _lengths_to_offsets(n_per_rsp.ravel(), np.int64) +# variant_idxs = keep_mask_to_rsp_v_idx( +# keep, var_idxs, offsets, sparse_offsets, n_regions, n_samples, ploidy +# ) +# shape = (n_regions, n_samples, ploidy) +# return cls.from_offsets(variant_idxs, shape, sparse_offsets) + +# @classmethod +# def from_dense_with_length( +# cls, +# genos: NDArray[np.int8], +# first_v_idxs: NDArray[np.int32], +# offsets: NDArray[np.int64], +# ilens: NDArray[np.int32], +# positions: NDArray[np.int32], +# starts: NDArray[np.int32], +# lengths: NDArray[np.int32], +# ): +# """Convert dense genotypes to sparse genotypes. + +# Parameters +# ---------- +# genos : NDArray[np.int8] +# Shape = (sample, ploidy, variants) Genotypes. +# first_v_idxs : NDArray[np.uint32] +# Shape = (regions) First variant index for each region. +# offsets : NDArray[np.uint32] +# Shape = (regions + 1) Offsets into genos. +# ilens : NDArray[np.int32] +# Shape = (total_variants) ILEN of all unique variants. +# positions : NDArray[np.int32] +# Shape = (total_variants) Positions of unique variants. +# starts : NDArray[np.int32] +# Shape = (regions) Start of query regions. +# lengths : NDArray[np.int32] +# Shape = (regions) Lengths of the output haplotypes. +# """ +# n_regions = len(first_v_idxs) +# n_samples = genos.shape[0] +# ploidy = genos.shape[1] +# # (s p v) +# keep, min_ilens = get_keep_mask_for_length( +# genos, +# offsets, +# first_v_idxs, +# positions, +# ilens, +# starts, +# lengths, +# ) +# # (r) +# max_ends: NDArray[np.int32] = starts + lengths - min_ilens.clip(max=0) +# # (r s p) +# n_per_rsp = get_n_per_rsp(keep, offsets, n_regions) +# sparse_offsets = _lengths_to_offsets(n_per_rsp.ravel(), np.int64) +# variant_idxs = keep_mask_to_rsp_v_idx( +# keep, first_v_idxs, offsets, sparse_offsets, n_regions, n_samples, ploidy +# ) +# shape = (n_regions, n_samples, ploidy) +# sparse_genos = cls.from_offsets(variant_idxs, shape, sparse_offsets) +# return sparse_genos, max_ends @nb.njit(parallel=True, nogil=True, cache=True) @@ -421,7 +421,7 @@ class SparseSomaticGenotypes: Number of regions. """ - variant_idxs: NDArray[np.int32] # (variants * samples) + data: NDArray[np.int32] # (variants * samples) ccfs: NDArray[np.float32] # (variants * samples) offsets: NDArray[np.int64] # (regions * samples + 1) n_regions: int @@ -429,7 +429,7 @@ class SparseSomaticGenotypes: ploidy = 1 @property - def effective_shape(self): + def shape(self): """Effective shape of the sparse genotypes (n_regions, n_samples, ploidy) where ploidy is always represented as 1. The ploidy is treated as 1 to be consistent with.""" return (self.n_regions, self.n_samples, self.ploidy) @@ -447,12 +447,12 @@ def empty(cls, n_regions: int, n_samples: int): @property def is_empty(self) -> bool: - return len(self.variant_idxs) == 0 + return len(self.data) == 0 def vars(self, region: int, sample: int): """Get variant indices for a given sample and region.""" i = np.ravel_multi_index((region, sample), (self.n_regions, self.n_samples)) - vars = self.variant_idxs[self.offsets[i] : self.offsets[i + 1]] + vars = self.data[self.offsets[i] : self.offsets[i + 1]] return vars def concat(*genos: "SparseSomaticGenotypes") -> "SparseSomaticGenotypes": @@ -462,7 +462,7 @@ def concat(*genos: "SparseSomaticGenotypes") -> "SparseSomaticGenotypes": raise ValueError("All genotypes must have the same number of samples.") total_n_regions = sum(g.n_regions for g in genos) - variant_idxs = np.concatenate([g.variant_idxs for g in genos]) + variant_idxs = np.concatenate([g.data for g in genos]) offsets = _lengths_to_offsets( np.concatenate([np.diff(g.offsets) for g in genos]) ) @@ -470,7 +470,7 @@ def concat(*genos: "SparseSomaticGenotypes") -> "SparseSomaticGenotypes": ccfs = np.concatenate([g.ccfs for g in genos if g.ccfs is not None]) return SparseSomaticGenotypes( - variant_idxs=variant_idxs, + data=variant_idxs, offsets=offsets, n_regions=total_n_regions, n_samples=genos[0].n_samples, @@ -512,7 +512,7 @@ def from_dense( # (s v) -> region/variant-major, flattened ccfs = ccfs.T[keep.T] return cls( - variant_idxs=variant_idxs, + data=variant_idxs, ccfs=ccfs, offsets=sparse_offsets, n_regions=n_regions, @@ -576,7 +576,7 @@ def from_dense_with_length( # (s v) -> region/variant-major, flattened ccfs = ccfs.T[keep.T] sparse_genos = cls( - variant_idxs=variant_idxs, + data=variant_idxs, ccfs=ccfs, offsets=sparse_offsets, n_regions=n_regions, @@ -706,7 +706,7 @@ def get_diffs_sparse( for query in nb.prange(n_queries): for hap in nb.prange(ploidy): o_idx = geno_offset_idxs[query, hap] - if geno_offset_idxs.ndim == 1: + if geno_offsets.ndim == 1: o_s, o_e = geno_offsets[o_idx], geno_offsets[o_idx + 1] else: o_s, o_e = geno_offsets[o_idx] diff --git a/python/genvarloader/_dataset/_reconstruct.py b/python/genvarloader/_dataset/_reconstruct.py index 01b0e4c5..604b2e2c 100644 --- a/python/genvarloader/_dataset/_reconstruct.py +++ b/python/genvarloader/_dataset/_reconstruct.py @@ -291,7 +291,7 @@ def _haplotype_ilens( starts=jittered_regions[:, 1], ends=jittered_regions[:, 2], geno_offset_idxs=geno_offset_idxs, - geno_v_idxs=self.genotypes.variant_idxs, + geno_v_idxs=self.genotypes.data, geno_offsets=self.genotypes.offsets, positions=self.variants.positions, sizes=self.variants.sizes, @@ -301,7 +301,7 @@ def _haplotype_ilens( # (r s p) hap_ilens = get_diffs_sparse( geno_offset_idxs=geno_offset_idxs, - geno_v_idxs=self.genotypes.variant_idxs, + geno_v_idxs=self.genotypes.data, geno_offsets=self.genotypes.offsets, size_diffs=self.variants.sizes, keep=keep, @@ -311,7 +311,7 @@ def _haplotype_ilens( # (r s p) hap_ilens = get_diffs_sparse( geno_offset_idxs=geno_offset_idxs, - geno_v_idxs=self.genotypes.variant_idxs, + geno_v_idxs=self.genotypes.data, geno_offsets=self.genotypes.offsets, size_diffs=self.variants.sizes, starts=jittered_regions[:, 1], @@ -319,7 +319,7 @@ def _haplotype_ilens( positions=self.variants.positions, ) - return hap_ilens.reshape(-1, self.genotypes.ploidy) + return hap_ilens.reshape(-1, self.genotypes.shape[-1]) @overload def with_annot(self, annotations: Literal[False]) -> Haps[Ragged[np.bytes_]]: ... @@ -372,7 +372,7 @@ def get_haps_and_shifts( starts=regions[:, 1], ends=regions[:, 2], geno_offset_idxs=geno_offset_idx, - geno_v_idxs=self.genotypes.variant_idxs, + geno_v_idxs=self.genotypes.data, geno_offsets=self.genotypes.offsets, ccfs=self.genotypes.ccfs, positions=self.variants.positions, @@ -389,7 +389,7 @@ def get_haps_and_shifts( if rng is None or isinstance(output_length, str): # (b p) - shifts = np.zeros((batch_size, self.genotypes.ploidy), dtype=np.int32) + shifts = np.zeros((batch_size, self.genotypes.shape[-1]), dtype=np.int32) else: # if the haplotype is longer than the region, shift it randomly # by up to: @@ -407,7 +407,7 @@ def get_haps_and_shifts( out_lengths = hap_lengths else: out_lengths = np.full( - (batch_size, self.genotypes.ploidy), + (batch_size, self.genotypes.shape[-1]), output_length + 2 * jitter, dtype=np.int32, ) @@ -460,10 +460,10 @@ def get_geno_offset_idx( idx: NDArray[np.integer], genotypes: Union[SparseGenotypes, SparseSomaticGenotypes], ) -> NDArray[np.intp]: - r_idx, s_idx = np.unravel_index(idx, genotypes.effective_shape[:2]) - ploid_idx = np.arange(genotypes.ploidy, dtype=np.intp) + r_idx, s_idx = np.unravel_index(idx, genotypes.shape[:2]) + ploid_idx = np.arange(genotypes.shape[-1], dtype=np.intp) rsp_idx = (r_idx[:, None], s_idx[:, None], ploid_idx) - geno_offset_idx = np.ravel_multi_index(rsp_idx, genotypes.effective_shape) + geno_offset_idx = np.ravel_multi_index(rsp_idx, genotypes.shape) return geno_offset_idx @overload @@ -540,7 +540,7 @@ def _get_haplotypes( regions=regions, shifts=shifts, geno_offsets=self.genotypes.offsets, - geno_v_idxs=self.genotypes.variant_idxs, + geno_v_idxs=self.genotypes.data, positions=self.variants.positions, sizes=self.variants.sizes, alt_alleles=self.variants.alts.alleles.view(np.uint8), @@ -714,7 +714,7 @@ def write_transformed_track( # extend ends by max hap diff to match write implementation jittered_regions[:, 2] += ( haps._haplotype_ilens(ds_idx, jittered_regions, True) - .reshape(n_regions, n_samples, haps.genotypes.ploidy) + .reshape(n_regions, n_samples, haps.genotypes.shape[-1]) .max((1, 2)) .clip(min=0) ) @@ -919,7 +919,7 @@ def __call__( regions=regions, # (b, 3) shifts=shifts, # (b p) geno_offset_idxs=geno_idx, # (b p) - geno_v_idxs=self.haps.genotypes.variant_idxs, # (r*s*p*v) + geno_v_idxs=self.haps.genotypes.data, # (r*s*p*v) geno_offsets=self.haps.genotypes.offsets, # (r*s*p+1) positions=self.haps.variants.positions, # (tot_v) sizes=self.haps.variants.sizes, # (tot_v) @@ -932,7 +932,7 @@ def __call__( out_shape = ( len(idx), len(self.tracks.active_tracks), - self.haps.genotypes.ploidy, + self.haps.genotypes.shape[-1], ) # ragged (b t [p] l) diff --git a/python/genvarloader/_dataset/_write.py b/python/genvarloader/_dataset/_write.py index c4d34f26..835badb0 100644 --- a/python/genvarloader/_dataset/_write.py +++ b/python/genvarloader/_dataset/_write.py @@ -9,6 +9,7 @@ import numpy as np import polars as pl from genoray import PGEN, VCF, Reader, SparseVar +from genoray._svar import V_IDX_TYPE, SparseGenotypes from genoray._utils import parse_memory from loguru import logger from more_itertools import mark_ends @@ -19,10 +20,7 @@ from .._bigwig import BigWigs from .._utils import _lengths_to_offsets, _normalize_contig_name, read_bedlike from .._variants._utils import path_is_pgen, path_is_vcf -from ._genotypes import ( - SparseGenotypes, - SparseSomaticGenotypes, -) +from ._genotypes import SparseSomaticGenotypes from ._utils import splits_sum_le_value __all__ = ["write"] @@ -290,10 +288,11 @@ def _write_from_vcf(path: Path, bed: pl.DataFrame, vcf: VCF, max_mem: int): unextended_var_idxs[contig], ends, ): + var_idxs = var_idxs.astype(V_IDX_TYPE) if range_ is None: max_ends.append(e) sp_genos = SparseGenotypes.empty( - n_regions=1, n_samples=vcf.n_samples, ploidy=vcf.ploidy + (1, vcf.n_samples, vcf.ploidy), np.int32 ) ( v_idx_memmap_offsets, @@ -320,8 +319,7 @@ def _write_from_vcf(path: Path, bed: pl.DataFrame, vcf: VCF, max_mem: int): ext_idxs = np.arange(ext_s_idx, ext_s_idx + n_ext, dtype=np.int32) chunk_idxs = np.concatenate([chunk_idxs, ext_idxs]) - offsets = np.array([0, len(chunk_idxs)]) - sp_genos = SparseGenotypes.from_dense(genos, chunk_idxs, offsets) + sp_genos = SparseGenotypes.from_dense(genos, chunk_idxs) ls_sparse.append(sp_genos) if is_last: @@ -330,7 +328,7 @@ def _write_from_vcf(path: Path, bed: pl.DataFrame, vcf: VCF, max_mem: int): if len(ls_sparse) == 0: max_ends.append(e) sp_genos = SparseGenotypes.empty( - n_regions=1, n_samples=vcf.n_samples, ploidy=vcf.ploidy + (1, vcf.n_samples, vcf.ploidy), np.int32 ) ( v_idx_memmap_offsets, @@ -415,7 +413,7 @@ def _write_from_pgen(path: Path, bed: pl.DataFrame, pgen: PGEN, max_mem: int): if range_ is None: max_ends.append(e) sp_genos = SparseGenotypes.empty( - n_regions=1, n_samples=pgen.n_samples, ploidy=pgen.ploidy + (1, pgen.n_samples, pgen.ploidy), np.int32 ) ( v_idx_memmap_offsets, @@ -433,11 +431,8 @@ def _write_from_pgen(path: Path, bed: pl.DataFrame, pgen: PGEN, max_mem: int): ls_sparse: list[SparseGenotypes] = [] for _, is_last, (genos, chunk_end, chunk_idxs) in mark_ends(range_): - n_variants = genos.shape[-1] - offsets = np.array([0, n_variants]) - sp_genos = SparseGenotypes.from_dense( - genos.astype(np.int8), chunk_idxs, offsets - ) + chunk_idxs = chunk_idxs.astype(V_IDX_TYPE) + sp_genos = SparseGenotypes.from_dense(genos.astype(np.int8), chunk_idxs) ls_sparse.append(sp_genos) if is_last: @@ -446,7 +441,7 @@ def _write_from_pgen(path: Path, bed: pl.DataFrame, pgen: PGEN, max_mem: int): if len(ls_sparse) == 0: max_ends.append(e) sp_genos = SparseGenotypes.empty( - n_regions=1, n_samples=pgen.n_samples, ploidy=pgen.ploidy + (1, pgen.n_samples, pgen.ploidy), np.int32 ) ( v_idx_memmap_offsets, @@ -515,32 +510,36 @@ def _write_from_svar( with open(out_dir / "svar_meta.json", "w") as f: json.dump({"shape": offsets.shape, "dtype": offsets.dtype.str}, f) + v_ends = svar.granges.End max_ends = np.empty(bed.height, np.int32) - region_offset = 0 + contig_offset = 0 for (c,), df in bed.partition_by( "chrom", as_dict=True, maintain_order=True ).items(): c = cast(str, c) - starts = df["chromStart"] - ends = df["chromEnd"] # (r s p 2) - out = offsets[region_offset : region_offset + df.height] - svar._find_starts_ends_with_length(c, starts, ends, samples=samples, out=out) - region_offset += df.height + out = offsets[contig_offset : contig_offset + df.height] + svar._find_starts_ends_with_length( + c, df["chromStart"], df["chromEnd"], samples=samples, out=out + ) # compute max_ends for the bed - shape = (df.height, len(samples), svar.ploidy, 2) - # (r s p 2 ~v) + shape = (df.height, len(samples), svar.ploidy) + # (r s p ~v) sp_genos = SparseGenotypes.from_offsets( svar.genos.data, shape, out.reshape(-1, 2) ) - # (r s p 2) # this is fine if there aren't any overlapping variants that could make a v_idx < -1 # have a further end than v_idx == -1 - v_idxs = sp_genos.to_awkward()[..., -1].to_numpy() # type: ignore - max_ends[region_offset : region_offset + df.height] = ( - svar.granges.End.to_numpy()[v_idxs].max((1, 2, 3)) - ) + # (r s p ~v) -> (r) + v_idxs = ak.max(sp_genos.to_awkward(), -1).to_numpy().max((1, 2)) # type: ignore + c_max_ends = max_ends[contig_offset : contig_offset + df.height] + if v_idxs.mask is np.ma.nomask: + c_max_ends[:] = v_ends[v_idxs.data] + else: + c_max_ends[~v_idxs.mask] = v_ends[v_idxs.data[~v_idxs.mask]] + c_max_ends[v_idxs.mask] = df.filter(v_idxs.mask)['chromEnd'] + contig_offset += df.height offsets.flush() @@ -559,12 +558,12 @@ def _write_phased_variants_chunk( if not genos.is_empty: out = np.memmap( out_dir / "variant_idxs.npy", - dtype=genos.variant_idxs.dtype, + dtype=genos.data.dtype, mode="w+" if v_idx_memmap_offset == 0 else "r+", - shape=genos.variant_idxs.shape, + shape=genos.data.shape, offset=v_idx_memmap_offset, ) - out[:] = genos.variant_idxs[:] + out[:] = genos.data[:] out.flush() v_idx_memmap_offset += out.nbytes @@ -595,12 +594,12 @@ def _write_somatic_variants_chunk( if not genos.is_empty: out = np.memmap( out_dir / "variant_idxs.npy", - dtype=genos.variant_idxs.dtype, + dtype=genos.data.dtype, mode="w+" if v_idx_memmap_offset == 0 else "r+", - shape=genos.variant_idxs.shape, + shape=genos.data.shape, offset=v_idx_memmap_offset, ) - out[:] = genos.variant_idxs[:] + out[:] = genos.data[:] out.flush() v_idx_memmap_offset += out.nbytes diff --git a/python/genvarloader/_ragged.py b/python/genvarloader/_ragged.py index 4b5c53c9..40ea8409 100644 --- a/python/genvarloader/_ragged.py +++ b/python/genvarloader/_ragged.py @@ -1,19 +1,16 @@ from __future__ import annotations -from typing import Any, Generic, Optional, Tuple, TypeGuard, TypeVar, Union, cast +from typing import Any, Optional, Tuple, TypeGuard, TypeVar, Union -import awkward as ak import numba as nb import numpy as np from attrs import define -from awkward.contents import ListOffsetArray, NumpyArray, RegularArray -from awkward.index import Index64 from einops import repeat from numpy.typing import NDArray -from typing_extensions import Self +from seqpro._ragged import Ragged -from ._types import DTYPE, AnnotatedHaps, Idx -from ._utils import _lengths_to_offsets, idx_like_to_array +from ._types import DTYPE, AnnotatedHaps +from ._utils import _lengths_to_offsets __all__ = ["Ragged", "RaggedIntervals", "INTERVAL_DTYPE", "pad_ragged"] @@ -31,9 +28,9 @@ def shape(self): return self.haps.shape def to_padded(self) -> AnnotatedHaps: - haps = self.haps.to_padded(b"N") - var_idxs = self.var_idxs.to_padded(-1) - ref_coords = self.ref_coords.to_padded(-1) + haps = to_padded(self.haps, b"N") + var_idxs = to_padded(self.var_idxs, -1) + ref_coords = to_padded(self.ref_coords, -1) return AnnotatedHaps(haps, var_idxs, ref_coords) def reshape(self, shape: tuple[int, ...]) -> RaggedAnnotatedHaps: @@ -61,254 +58,53 @@ def is_rag_dtype(rag: Ragged, dtype: type[DTYPE]) -> TypeGuard[Ragged[DTYPE]]: return np.issubdtype(rag.data.dtype, dtype) -@define -class Ragged(Generic[RDTYPE]): - """Ragged array i.e. a rectilinear array where the final axis is ragged. Should not be initialized - directly, use :meth:`from_offsets()` or :meth:`from_lengths()` instead. - Does not have a :code:`__getitem__` method currently. +INTERVAL_DTYPE = np.dtype( + [("start", np.int32), ("end", np.int32), ("value", np.float32)], align=True +) +RaggedIntervals = Ragged[np.void] - Examples - -------- - .. code-block:: python +def to_padded(rag: Ragged[RDTYPE], pad_value: Any) -> NDArray[RDTYPE]: + """Convert this Ragged array to a rectilinear array by right-padding each entry with a value. + The final axis will have the maximum length across all entries. - r = Ragged.from_lengths(np.arange(10), np.array([3, 2, 5])) - assert r.offsets == np.array([0, 3, 5, 10]) - assert r.data[r.offsets[0]:r.offsets[1]] == np.array([0, 1, 2]) - assert r.data[r.offsets[1]:r.offsets[2]] == np.array([3, 4]) - assert r.data[r.offsets[2]:r.offsets[3]] == np.array([5, 6, 7, 8, 9]) + Parameters + ---------- + pad_value + Value to pad the entries with. + Returns + ------- + Padded array with shape :code:`(*self.shape, self.lengths.max())`. """ - - data: NDArray[RDTYPE] - """A 1D array of the data.""" - shape: Tuple[int, ...] - """Shape of the ragged array, excluding the length dimension. For example, if - the shape is (2, 3), then the j, k-th element can be mapped to an index for - offsets with :code:`i = np.ravel_multi_index((j, k), shape)`. The number of ragged - elements corresponds to the product of the shape.""" - maybe_offsets: Optional[NDArray[np.int64]] = None - maybe_lengths: Optional[NDArray[np.int32]] = None - - def __attrs_post_init__(self): - if self.maybe_offsets is None and self.maybe_lengths is None: - raise ValueError("Either offsets or lengths must be provided.") - - def __len__(self): - return self.shape[0] - - def item(self): - a = self.squeeze() - if a.shape != (): - raise ValueError("Array has more than 1 ragged element.") - return a.data - - @property - def ndim(self) -> int: - """Number of dimensions of the ragged array.""" - return len(self.shape) - - @property - def offsets(self) -> NDArray[np.int64]: - """Offsets into the data array to get corresponding elements. The i-th element - is accessible as :code:`data[offsets[i]:offsets[i+1]]`.""" - if self.maybe_offsets is None: - self.maybe_offsets = _lengths_to_offsets(self.lengths) - return self.maybe_offsets - - @property - def lengths(self) -> NDArray[np.int32]: - """Array with appropriate shape containing lengths of each element in the ragged array.""" - if self.maybe_lengths is None: - self.maybe_lengths = np.diff(self.offsets).reshape(self.shape) - return self.maybe_lengths - - @classmethod - def from_offsets( - cls, - data: NDArray[DTYPE], - shape: Union[int, Tuple[int, ...]], - offsets: NDArray[np.int64], - ) -> Self: - """Create a Ragged array from data and offsets. - - Parameters - ---------- - data - 1D data array. - shape - Shape of the ragged array, excluding the length dimension. - offsets - Offsets into the data array to get corresponding elements. - """ - if isinstance(shape, int): - shape = (shape,) - return cls(data, shape, maybe_offsets=offsets) - - @classmethod - def from_lengths(cls, data: NDArray[DTYPE], lengths: NDArray[np.int32]) -> Self: - """Create a Ragged array from data and lengths. The lengths array should have - the intended shape of the Ragged array. - - Parameters - ---------- - data - 1D data array. - lengths - Lengths of each element in the ragged array. - """ - return cls(data, lengths.shape, maybe_lengths=lengths) - - @staticmethod - def concat(*arrays: "Ragged[DTYPE]", axis: int) -> "Ragged[DTYPE]": - # """Concatenate multiple Ragged arrays along a given axis.""" - # need to check whether this would lead to incorrect indexing - raise NotImplementedError - if len(set((*a.shape[:axis], *a.shape[axis + 1 :]) for a in arrays)) != 1: - raise ValueError( - f"All arrays must have the same shape except along axis {axis}." - ) - - if len(set(a.data.dtype for a in arrays)) != 1: - raise ValueError("All arrays must have the same dtype.") - - data = np.concatenate([a.data for a in arrays]) - lengths = np.concatenate([a.lengths for a in arrays], axis=axis) - return Ragged.from_lengths(data, lengths) - - @staticmethod - def stack(*arrays: "Ragged[DTYPE]") -> "Ragged[DTYPE]": - """Stack multiple ragged arrays along a new first axis.""" - if len(set(a.shape for a in arrays)) != 1: - raise ValueError("All arrays must have the same shape.") - - if len(set(a.data.dtype for a in arrays)) != 1: - raise ValueError("All arrays must have the same dtype.") - - data = np.concatenate([a.data for a in arrays]) - lengths = np.stack([a.lengths for a in arrays], axis=0) - return Ragged.from_lengths(data, lengths) - - def to_padded(self, pad_value: Any) -> NDArray[RDTYPE]: - """Convert this Ragged array to a rectilinear array by right-padding each entry with a value. - The final axis will have the maximum length across all entries. - - Parameters - ---------- - pad_value - Value to pad the entries with. - - Returns - ------- - Padded array with shape :code:`(*self.shape, self.lengths.max())`. - """ - length = self.lengths.max() - shape = (*self.shape, length) - if self.data.dtype.str == "|S1": - if isinstance(pad_value, (str, bytes)): - if len(pad_value) != 1: - raise ValueError( - "Tried padding an S1 array with a `pad_value` that is multiple characters." - ) - pad_value = np.uint8(ord(pad_value)) - elif isinstance(pad_value, int): - if pad_value < 0 or pad_value > 255: - raise ValueError( - "Tried padding an S1 array with an integer `pad_value` outside the ASCII range." - ) - pad_value = np.uint8(pad_value) - else: + length = rag.lengths.max() + shape = (*rag.shape, length) + if rag.data.dtype.str == "|S1": + if isinstance(pad_value, (str, bytes)): + if len(pad_value) != 1: + raise ValueError( + "Tried padding an S1 array with a `pad_value` that is multiple characters." + ) + pad_value = np.uint8(ord(pad_value)) + elif isinstance(pad_value, int): + if pad_value < 0 or pad_value > 255: raise ValueError( - "Tried padding an S1 array with a `pad_value` that isn't a string, byte, or integer." + "Tried padding an S1 array with an integer `pad_value` outside the ASCII range." ) - padded = np.empty((np.prod(shape[:-1]), shape[-1]), dtype=np.uint8) - pad_ragged(self.data.view(np.uint8), self.offsets, pad_value, padded) - padded = padded.view(self.data.dtype).reshape(shape) + pad_value = np.uint8(pad_value) else: - padded = np.empty((np.prod(shape[:-1]), shape[-1]), dtype=self.data.dtype) - pad_ragged(self.data, self.offsets, pad_value, padded) - padded = padded.reshape(shape) - - return padded - - def squeeze(self, axis: Optional[Union[int, Tuple[int, ...]]] = None) -> Self: - """Squeeze the ragged array along the given non-ragged axis.""" - return Ragged.from_lengths(self.data, self.lengths.squeeze(axis)) - - def reshape(self, shape: Tuple[int, ...]) -> Self: - """Reshape non-ragged axes.""" - # this is correct because all reshaping operations preserve the layout i.e. raveled ordered - return Ragged.from_lengths(self.data, self.lengths.reshape(shape)) - - def __str__(self): - return ( - f"Ragged" - ) - - def __getitem__(self, idx: Union[Idx, Tuple[Idx, ...]]): - if not isinstance(idx, tuple): - idx = (idx,) - - if len(idx) < len(self.shape): - raise IndexError( - f"Too few indices for array: expected {len(self.shape)}, got {len(idx)}." - ) - - idx = tuple( - idx_like_to_array(_idx, self.shape[i]) for i, _idx in enumerate(idx) - ) - idx = np.ravel_multi_index(idx, self.shape).squeeze() - - return self.data[self.offsets[idx] : self.offsets[idx + 1]] - - def to_awkward(self) -> ak.Array: - """Convert to an `Awkward `_ array without copying. Note that this effectively - returns a view of the data, so modifying the data will modify the original array.""" - layout = ListOffsetArray( - Index64(self.offsets), - NumpyArray(self.data), # type: ignore | NDArray[RDTYPE] is ArrayLike - ) - - for size in reversed(self.shape[1:]): - layout = RegularArray(layout, size) - - return ak.Array(layout) - - @classmethod - def from_awkward(cls, awk: "ak.Array") -> Self: - """Convert from an `Awkward `_ array without copying. Note that this effectively - returns a view of the data, so modifying the data will modify the original array.""" - # parse shape - shape_str = awk.typestr.split(" * ") - try: - shape = tuple(map(int, shape_str[:-2])) - except ValueError as err: raise ValueError( - f"Only the final axis of an awkward array may be variable to convert to ragged, but got {awk.type}." - ) from err - - # extract data and offsets - data = ak.flatten(awk, axis=None).to_numpy() - layout = awk.layout - while hasattr(layout, "content"): - if isinstance(layout, ListOffsetArray): - offsets = layout.offsets.data - offsets = cast(NDArray[np.int64], offsets) - rag = cls.from_offsets(data, shape, offsets) - break - else: - layout = layout.content - else: - lengths = ak.count(awk, axis=-1).to_numpy() - rag = cls.from_lengths(data, lengths) - - return rag + "Tried padding an S1 array with a `pad_value` that isn't a string, byte, or integer." + ) + padded = np.empty((np.prod(shape[:-1]), shape[-1]), dtype=np.uint8) + pad_ragged(rag.data.view(np.uint8), rag.offsets, pad_value, padded) + padded = padded.view(rag.data.dtype).reshape(shape) + else: + padded = np.empty((np.prod(shape[:-1]), shape[-1]), dtype=rag.data.dtype) + pad_ragged(rag.data, rag.offsets, pad_value, padded) + padded = padded.reshape(shape) - -INTERVAL_DTYPE = np.dtype( - [("start", np.int32), ("end", np.int32), ("value", np.float32)], align=True -) -RaggedIntervals = Ragged[np.void] + return padded @nb.njit(parallel=True, nogil=True, cache=True) @@ -318,8 +114,13 @@ def pad_ragged( pad_value: DTYPE, out: NDArray[DTYPE], ): - for i in nb.prange(len(offsets) - 1): - start, end = offsets[i], offsets[i + 1] + for i in nb.prange(len(offsets)): + if offsets.ndim == 1: + if i == len(offsets) - 1: + continue + start, end = offsets[i], offsets[i + 1] + else: + start, end = offsets[i] entry_len = end - start out[i, :entry_len] = data[start:end] out[i, entry_len:] = pad_value diff --git a/python/genvarloader/_utils.py b/python/genvarloader/_utils.py index 70aa3cf1..ea68db35 100644 --- a/python/genvarloader/_utils.py +++ b/python/genvarloader/_utils.py @@ -1,8 +1,6 @@ from itertools import accumulate, chain, repeat from pathlib import Path from typing import ( - Any, - Dict, Generator, Iterable, Optional, @@ -14,10 +12,9 @@ ) import numpy as np -import pandera as pa -import pandera.typing as pat import polars as pl from numpy.typing import NDArray +from seqpro.bed import read_bedlike, with_length from ._types import DTYPE, Idx @@ -52,36 +49,6 @@ def _process_bed(bed: Union[str, Path, pl.DataFrame], fixed_length: int): return with_length(bed, fixed_length) -def with_length(bed: pl.DataFrame, length: int) -> pl.DataFrame: - """Expands or shrinks each region in a BED-like DataFrame to be fixed-length windows - centered around the midpoint of each region or the "peak" column if it is present. - - .. important:: - - The "peak" column is described in the `narrowPeak `_ - and `broadPeak `_ specifications. It is a 0-based - offset from chromStart, so be sure not to encode your "peak" column as an absolute position! - - Parameters - ---------- - bed - BED-like DataFrame with at least the columns "chrom", "chromStart", and "chromEnd". - length - Length of the fixed-length windows. - """ - if "peak" in bed: - center = pl.col("chromStart") + pl.col("peak") - else: - center = (pl.col("chromStart") + pl.col("chromEnd")) // 2 - left = length // 2 - right = length - left - bed = bed.with_columns( - chromStart=(center - left).cast(pl.Int64), - chromEnd=(center + right).cast(pl.Int64), - ) - return bed - - def _random_chain( *iterables: Iterable[T], seed: Optional[int] = None ) -> Generator[T, None, None]: @@ -96,196 +63,6 @@ def _random_chain( del iterators[i] -def read_bedlike(path: Union[str, Path]) -> pl.DataFrame: - """Reads a bed-like (i.e. `BED3+ `_) file as a - polars DataFrame. The file type is inferred from the file extension. "Bed-like" refers to files - with extension :code:`.bed`, :code:`.narrowPeak`, :code:`.broadPeak`, or otherwise a tabular (CSV, TSV, or feather/arrow) - file with at least the BED3 columns. For tabular data, extra columns that are not part of the BED - specification are allowed and kept in the resulting DataFrame. - - Parameters - ---------- - path - Path to the file. - """ - path = Path(path) - if ".bed" in path.suffixes: - return _read_bed(path) - elif ".narrowPeak" in path.suffixes: - return _read_narrowpeak(path) - elif ".broadPeak" in path.suffixes: - return _read_broadpeak(path) - else: - try: - return _read_bed_table(path) - except ValueError: - raise ValueError( - f"""Unrecognized file extension: {"".join(path.suffixes)}. Expected one - of .bed, .narrowPeak, .broadPeak, or a table file (e.g. .csv, .tsv)""" - ) - - -class _BEDSchema(pa.DataFrameModel): - chrom: pat.Series[str] - chromStart: pat.Series[int] - chromEnd: pat.Series[int] - name: Optional[pat.Series[str]] = pa.Field(nullable=True) - score: Optional[pat.Series[float]] = pa.Field(nullable=True) - strand: Optional[pat.Series[str]] = pa.Field(isin=["+", "-", "."], nullable=True) - thickStart: Optional[pat.Series[int]] = pa.Field(nullable=True) - thickEnd: Optional[pat.Series[int]] = pa.Field(nullable=True) - itemRgb: Optional[pat.Series[str]] = pa.Field(nullable=True) - blockCount: Optional[pat.Series[pa.UInt]] = pa.Field(nullable=True) - blockSizes: Optional[pat.Series[str]] = pa.Field(nullable=True) - blockStarts: Optional[pat.Series[str]] = pa.Field(nullable=True) - - class Config: - coerce = True - - -def _read_bed(bed_path: Union[str, Path]): - with open(bed_path) as f: - skip_rows = 0 - while (line := f.readline()).startswith(("track", "browser")): - skip_rows += 1 - n_cols = line.count("\t") + 1 - bed_cols = [ - "chrom", - "chromStart", - "chromEnd", - "name", - "score", - "strand", - "thickStart", - "thickEnd", - "itemRgb", - "blockCount", - "blockSizes", - "blockStarts", - ] - bed = pl.read_csv( - bed_path, - separator="\t", - has_header=False, - skip_rows=skip_rows, - new_columns=bed_cols[:n_cols], - schema_overrides={"chrom": pl.Utf8, "name": pl.Utf8, "strand": pl.Utf8}, - null_values=".", - ).to_pandas() - bed = _BEDSchema.to_schema()(bed) - return pl.from_pandas(bed) - - -def _read_bed_table(table: Union[str, Path], **table_reader_kwargs): - table = Path(table) - suffixes = set(table.suffixes) - reader_kwargs: Dict[str, Any] = {} - reader_kwargs.update(table_reader_kwargs) - if ".csv" in suffixes: - reader_kwargs["separator"] = "," - reader_kwargs["dtypes"] = {"chrom": pl.Utf8, "name": pl.Utf8, "strand": pl.Utf8} - reader = pl.scan_csv - elif {".txt", ".tsv"} & suffixes: - reader_kwargs["separator"] = "\t" - reader_kwargs["dtypes"] = {"chrom": pl.Utf8, "name": pl.Utf8, "strand": pl.Utf8} - reader = pl.scan_csv - elif {".fth", ".feather", ".ipc", ".arrow"} & suffixes: - reader = pl.scan_ipc # type : ignore[assignment] - else: - raise ValueError(f"Table has unrecognized file extension: {table.name}") - bed = reader(table, **reader_kwargs).collect().to_pandas() - bed = _BEDSchema.to_schema()(bed) - return pl.from_pandas(bed) - - -class _NarrowPeakSchema(pa.DataFrameModel): - chrom: pat.Series[str] - chromStart: pat.Series[int] - chromEnd: pat.Series[int] - name: pat.Series[str] = pa.Field(nullable=True) - score: pat.Series[float] = pa.Field(nullable=True) - strand: pat.Series[str] = pa.Field(isin=["+", "-", "."], nullable=True) - signalValue: pat.Series[float] = pa.Field(nullable=True) - pValue: pat.Series[float] = pa.Field(nullable=True) - qValue: pat.Series[float] = pa.Field(nullable=True) - peak: pat.Series[int] = pa.Field(nullable=True) - - class Config: - coerce = True - - -def _read_narrowpeak(narrowpeak_path: Union[str, Path]): - with open(narrowpeak_path) as f: - skip_rows = 0 - while f.readline().startswith(("track", "browser")): - skip_rows += 1 - narrowpeaks = pl.read_csv( - narrowpeak_path, - separator="\t", - has_header=False, - skip_rows=skip_rows, - new_columns=[ - "chrom", - "chromStart", - "chromEnd", - "name", - "score", - "strand", - "signalValue", - "pValue", - "qValue", - "peak", - ], - schema_overrides={"chrom": pl.Utf8, "name": pl.Utf8, "strand": pl.Utf8}, - null_values=".", - ).to_pandas() - narrowpeaks = _NarrowPeakSchema.to_schema()(narrowpeaks) - return pl.from_pandas(narrowpeaks) - - -class _BroadPeakSchema(pa.DataFrameModel): - chrom: pat.Series[str] - chromStart: pat.Series[int] - chromEnd: pat.Series[int] - name: pat.Series[str] = pa.Field(nullable=True) - score: pat.Series[float] = pa.Field(nullable=True) - strand: pat.Series[str] = pa.Field(isin=["+", "-", "."], nullable=True) - signalValue: pat.Series[float] = pa.Field(nullable=True) - pValue: pat.Series[float] = pa.Field(nullable=True) - qValue: pat.Series[float] = pa.Field(nullable=True) - - class Config: - coerce = True - - -def _read_broadpeak(broadpeak_path: Union[str, Path]): - with open(broadpeak_path) as f: - skip_rows = 0 - while f.readline().startswith(("track", "browser")): - skip_rows += 1 - broadpeaks = pl.read_csv( - broadpeak_path, - separator="\t", - has_header=False, - skip_rows=skip_rows, - new_columns=[ - "chrom", - "chromStart", - "chromEnd", - "name", - "score", - "strand", - "signalValue", - "pValue", - "qValue", - ], - schema_overrides={"chrom": pl.Utf8, "name": pl.Utf8, "strand": pl.Utf8}, - null_values=".", - ).to_pandas() - broadpeaks = _BroadPeakSchema.to_schema()(broadpeaks) - return pl.from_pandas(broadpeaks) - - def _cartesian_product(arrays: Sequence[NDArray]) -> NDArray: """Get the cartesian product of multiple arrays such that each entry corresponds to a unique combination of the input arrays' values. diff --git a/tests/data/pgen/filtered_sample.pvar b/tests/data/pgen/filtered_sample.pvar index 9c715b31..1f827af0 100644 --- a/tests/data/pgen/filtered_sample.pvar +++ b/tests/data/pgen/filtered_sample.pvar @@ -16,11 +16,11 @@ ##ALT= ##ALT= ##bcftools_normVersion=1.21+htslib-1.21 -##bcftools_normCommand=norm -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz; Date=Mon Apr 21 08:00:03 2025 -##bcftools_normCommand=norm -a --atom-overlaps . -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz -m -; Date=Mon Apr 21 08:00:03 2025 +##bcftools_normCommand=norm -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz; Date=Mon Apr 21 14:08:33 2025 +##bcftools_normCommand=norm -a --atom-overlaps . -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz -m -; Date=Mon Apr 21 14:08:33 2025 ##bcftools_viewVersion=1.21+htslib-1.21 -##bcftools_viewCommand=view -e TYPE="OTHER"; Date=Mon Apr 21 08:00:03 2025 -##bcftools_viewCommand=view -O z -o /carter/users/dlaub/projects/GenVarLoader/tests/data/vcf/filtered_sample.vcf.gz /carter/users/dlaub/projects/GenVarLoader/tests/data/vcf/filtered_sample.vcf; Date=Mon Apr 21 08:00:03 2025 +##bcftools_viewCommand=view -e TYPE="OTHER"; Date=Mon Apr 21 14:08:33 2025 +##bcftools_viewCommand=view -O z -o /carter/users/dlaub/projects/GenVarLoader/tests/data/vcf/filtered_sample.vcf.gz /carter/users/dlaub/projects/GenVarLoader/tests/data/vcf/filtered_sample.vcf; Date=Mon Apr 21 14:08:33 2025 #CHROM POS ID REF ALT QUAL FILTER INFO 19 111 . N C 9.6 . . 19 1010695 . CGAGACG C 10 . . diff --git a/tests/data/vcf/filtered_sample.vcf b/tests/data/vcf/filtered_sample.vcf index 9f53afd3..d9170a28 100644 --- a/tests/data/vcf/filtered_sample.vcf +++ b/tests/data/vcf/filtered_sample.vcf @@ -25,10 +25,10 @@ ##ALT= ##ALT= ##bcftools_normVersion=1.21+htslib-1.21 -##bcftools_normCommand=norm -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz; Date=Mon Apr 21 08:00:03 2025 -##bcftools_normCommand=norm -a --atom-overlaps . -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz -m -; Date=Mon Apr 21 08:00:03 2025 +##bcftools_normCommand=norm -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz; Date=Mon Apr 21 14:08:33 2025 +##bcftools_normCommand=norm -a --atom-overlaps . -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz -m -; Date=Mon Apr 21 14:08:33 2025 ##bcftools_viewVersion=1.21+htslib-1.21 -##bcftools_viewCommand=view -e TYPE="OTHER"; Date=Mon Apr 21 08:00:03 2025 +##bcftools_viewCommand=view -e TYPE="OTHER"; Date=Mon Apr 21 14:08:33 2025 #CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA00001 NA00002 NA00003 19 111 . N C 9.6 . . GT:VAF:HQ 0|0:.:10,15 0|0:.:10,10 0/1:0.3:3,3 19 1010695 . CGAGACG C 10 . . GT:VAF:HQ 0|0:.:10,10 0|0:0.5:10,15 0/1:0.15:3,3 diff --git a/tests/data/vcf/filtered_sample.vcf.gz b/tests/data/vcf/filtered_sample.vcf.gz index 3ee6903d0955a4c74a4cdae8e801c0cbcb5632fd..6d7044f494ef07f5a75128dd8f56d756b0d9566b 100644 GIT binary patch delta 877 zcmV-z1CspR3f>BTABzYC000000RIL6LPG)oU<19C+m7N!5QeYeDN1AIDqw80BkfG$ zl^hNO5~l%%Bv+`g%h*x7ySKYx#XNn~oC3~dmW@_><;K+i^_)+N5KZOOp#8-bIW-nlnRxN`pkLDY^Spb@re(8VUn1 zXnGI9L)CG#*r=GoV%IO^#-P8*PfmeF*hy5)x)Hz>=5|zo3RUM~4 z>W=sSk7l)h(WY3D3jNxACn@Z6Lu*pksUJc>q%gxmGScvSZZc@2!TlMWana}&+*}xB zz|T-*j4U+g5ZiSEYvRJ}BH(R z-+R}R0ci~;Lk{=ePqsbuvF9?}5+tXdyFh&QONi$UvfS)oMNE7F-#ZA#(_u8<3!dgT zoa57fv2DuY#Xoh7{y7~rLD?$1OMmDXqK<)c3qBtYl)&jo`iM{^%NR0DnqKV(WG=EVYpc} zq!NEoY;@y^_yW~HU_z>4NE_X-t=C9V8*IEawe7H$Dlbs&miBrmR%~a7_G&Z6ro;6BZ|7%l42+|xIflC)C;J8LkioRzT8q18+S@$ z)vlpVF#mJX3Gc@9UT1pujay!$#_$St@&8U~8>fxKO;5@4Fn!!@oVx4R@5=jXey!eg zJgiK{vr4~RnRdFBXfUrlzeIz|Vfa<-B(5C3k}Fi$W$dWk-P_%;VxB%~P61~!%dS>?<;K+i^1YlV~=pwMoY+mnIiHyo(rvG-rl?lm>}fQ*!sQ>g+*nG!zD2 z(DWXHhpOXfu~9LF#jan-jX|rQD6v*pESj!gbsR-0DdI7OJyD3IMwt`W?$flDH9xr0 zZ!WjK_uwWRT_Yr;EipGmcl}y*oLF#^ulFYXhmY4U0x6gT!AE->#A3sZWu9R*NQDBzID=>~KWAkDy(}sAwD-oiSftgV`UzZR( zCT$clIKWCd{C+}sClgo#B&*qI0tMM9o#nCyt4+=l@PmhIRxkJ>tA}!kGPt1a5f>kt zzW1&r1JW8yh8*s_pKN>RW6x!{B}h&^cY*limk`ezWVzYFikSEezIPCer^9Hz7d*{x zILD`dW80L)i+}4F{cjx?sB+{6-mK@PljmDn>SP6uiIpk0HRhBsx#-Iaeedidct_tu z$^L628XP@z29LweV>EcVR<((dUD--TgBKu11#xqwZH*S!qLz@m(}398qg*ipMeAJf zy>Jz$MhK>tT&Q9}N?Voh2L8{P(JWup?YbO)*Ahj6JPGX@>M1m0REAVzqe-{ zNG1NJ*yzR+@dc`Zz=Tx8kT$wuTd$F#HrRM;YTIEgRbHUlE$#JCtk}*D?bZ7ASJ>YW zL%|`E3IZRz509Sr=rtkmg8TQ4BGl_>L{S%8QVgXA_s6=2dI9yXNMW1P=UZxG<4&n! z+BMV(=6_8(;oW%N>rC&ya?5Mf7+#?+zU`E@aoRZC^pq?Q)5qP$sk?stuDmbi*Xm8j z!^&hltMuEIX{TF>2J_1EOEjn)hF`@_;>zJWu8bnj^F06f435uc^&dk9;hnQx0|5d& C47mIN diff --git a/tests/data/vcf/filtered_sample.vcf.gz.csi b/tests/data/vcf/filtered_sample.vcf.gz.csi index 88200cb7fa8d1c43eab03dfb719e20cd8ba5b33f..5965356ee65054fcf736434c0b6f4d2f83c2ce68 100644 GIT binary patch delta 144 zcmV;B0B`@x0m}i9CVwlL%E}k;GfYeopTS3B+H-TQdXj4^?m1S{qt&&Dtbi>L05$&4 z&Ugu&uW~tcP6XQA;QOq^HmH+vhF^!`Qy;3H@3~R232vW$E#rA3@2Dk@nz=9d$@QV; yf9%YBb$5MBr$MVb-z?@kb6?~Z`AXBy+*Oyek3E0jQ>!~?9tP(J3e>1_k*grQy-GL$ delta 144 zcmV;B0B`@x0m}i9CVwN!R91d~uVG?}_zXT0)1I4a)stLXanG@m9<8oLWCd)20I2bQ zcE(HKe3i?ob0W~@2H$5Twn3eYGyFOfpZZYse9w)FO>q14YZ=cQc}FdI)XaUsPp%I& y|6^z7tGnx4It^Og`DQWSnfoHQ$XA+n=B~P&eeC%IpIY5H^9DFSh3VWwk*gqYnM$_+ diff --git a/tests/dataset/genotypes/test_dense2sparse.py b/tests/dataset/genotypes/test_dense2sparse.py deleted file mode 100644 index 626175e7..00000000 --- a/tests/dataset/genotypes/test_dense2sparse.py +++ /dev/null @@ -1,242 +0,0 @@ -# %% - -import numpy as np -import pytest -from einops import repeat -from genvarloader._dataset._genotypes import ( - DenseGenotypes, - SparseGenotypes, - SparseSomaticGenotypes, -) -from pytest_cases import parametrize_with_cases - - -# %% -def case_snps(): - n_regions = 1 - n_samples = 2 - ploidy = 2 - genos = np.array([0, 1, -9], np.int8) - n_alt = (genos == 1).sum() - n_variants = len(genos) - genos = repeat(genos, "v -> s p v", s=n_samples, p=ploidy) - first_v_idxs = np.arange(n_regions, dtype=np.int32) - offsets = np.array([0, n_variants], np.int64) - - sparse_v_idxs = (genos == 1).nonzero()[-1].astype(np.int32) - sparse_offsets = np.empty(n_regions * ploidy * n_samples + 1, np.int64) - sparse_offsets[0] = 0 - sparse_offsets[1:] = n_alt * np.arange(1, n_regions * ploidy * n_samples + 1) - dense = DenseGenotypes( - genos=genos, first_v_idxs=first_v_idxs, offsets=offsets, n_samples=n_samples - ) - shape = (n_regions, n_samples, ploidy) - sparse = SparseGenotypes(sparse_v_idxs, shape, sparse_offsets) - - sparse_v_idxs = (genos == 1).any(1).nonzero()[-1].astype(np.int32) - sparse_offsets = np.empty(n_regions * n_samples + 1, np.int64) - sparse_offsets[0] = 0 - sparse_offsets[1:] = n_alt * np.arange(1, n_regions * n_samples + 1) - ccfs = np.array([0, 0.5, -9.0], np.float32) - ccfs = repeat(ccfs, "v -> s v", s=n_samples) - sparse_somatic = SparseSomaticGenotypes( - variant_idxs=sparse_v_idxs, - ccfs=ccfs[:, [1]].T.ravel(), - offsets=sparse_offsets, - n_regions=n_regions, - n_samples=n_samples, - ) - - ilens = np.zeros(n_variants, np.int32) - positions = np.arange(n_variants, dtype=np.int32) - starts = np.arange(n_regions, dtype=np.int32) - lengths = np.full(n_regions, 3, np.int32) - max_ends = np.array([3], np.int32) - - return ( - dense, - sparse, - sparse_somatic, - ilens, - positions, - starts, - lengths, - max_ends, - ccfs, - ) - - -def case_indels(): - n_regions = 1 - n_samples = 2 - ploidy = 2 - genos = np.array([0, 1, -9, 1], np.int8) - n_alt = (genos > 0).sum() - n_variants = len(genos) - genos = repeat(genos, "v -> s p v", s=n_samples, p=ploidy) - first_v_idxs = np.arange(n_regions, dtype=np.int32) - offsets = np.array([0, n_variants], np.int64) - - sparse_v_idxs = (genos > 0).nonzero()[-1].astype(np.int32) - sparse_offsets = np.empty(n_regions * ploidy * n_samples + 1, np.int64) - sparse_offsets[0] = 0 - sparse_offsets[1:] = n_alt * np.arange(1, n_regions * ploidy * n_samples + 1) - dense = DenseGenotypes( - genos=genos, first_v_idxs=first_v_idxs, offsets=offsets, n_samples=n_samples - ) - shape = (n_regions, n_samples, ploidy) - sparse = SparseGenotypes.from_offsets(sparse_v_idxs, shape, sparse_offsets) - - sparse_v_idxs = (genos == 1).any(1).nonzero()[-1].astype(np.int32) - sparse_offsets = np.empty(n_regions * n_samples + 1, np.int64) - sparse_offsets[0] = 0 - sparse_offsets[1:] = n_alt * np.arange(1, n_regions * n_samples + 1) - ccfs = np.array([0, 0.5, -9.0, 0.4], np.float32) - ccfs = repeat(ccfs, "v -> s v", s=n_samples) - sparse_somatic = SparseSomaticGenotypes( - variant_idxs=sparse_v_idxs, - ccfs=ccfs[:, [1, 3]].T.ravel(), - offsets=sparse_offsets, - n_regions=n_regions, - n_samples=n_samples, - ) - - ilens = np.array([0, -2, 0, 2]) - positions = np.arange(n_variants, dtype=np.int32) - starts = np.arange(n_regions, dtype=np.int32) - lengths = np.full(n_regions, 4, np.int32) - max_ends = np.array([4], np.int32) - - return ( - dense, - sparse, - sparse_somatic, - ilens, - positions, - starts, - lengths, - max_ends, - ccfs, - ) - - -@parametrize_with_cases( - "dense, sparse, sparse_somatic, ilens, positions, starts, length, max_ends, dosages", - cases=".", -) -def test_from_dense( - dense: DenseGenotypes, - sparse: SparseGenotypes, - sparse_somatic: SparseSomaticGenotypes, - ilens, - positions, - starts, - length, - max_ends, - dosages, -): - desired = sparse - n_variants = dense.offsets[-1] - var_idxs = np.arange(n_variants, dtype=np.int32) - actual = SparseGenotypes.from_dense(dense.genos, var_idxs, dense.offsets) - - np.testing.assert_equal(actual.offsets, desired.offsets) - np.testing.assert_equal(actual.variant_idxs, desired.variant_idxs) - - -@pytest.mark.skip -@parametrize_with_cases( - "dense, sparse, sparse_somatic, ilens, positions, starts, lengths, max_ends, dosages", - cases=".", -) -def test_from_dense_with_length( - dense: DenseGenotypes, - sparse: SparseGenotypes, - sparse_somatic: SparseSomaticGenotypes, - ilens, - positions, - starts, - lengths, - max_ends, - dosages, -): - desired = sparse - desired_max_ends = max_ends - - actual, max_ends = SparseGenotypes.from_dense_with_length( - dense.genos, - dense.first_v_idxs, - dense.offsets, - ilens, - positions, - starts, - lengths, - ) - - np.testing.assert_equal(actual.offsets, desired.offsets) - np.testing.assert_equal(actual.variant_idxs, desired.variant_idxs) - np.testing.assert_equal(max_ends, desired_max_ends) - - -@parametrize_with_cases( - "dense, sparse, sparse_somatic, ilens, positions, starts, lengths, max_ends, dosages", - cases=".", -) -def test_somatic_from_dense( - dense: DenseGenotypes, - sparse: SparseGenotypes, - sparse_somatic: SparseSomaticGenotypes, - ilens, - positions, - starts, - lengths, - max_ends, - dosages, -): - desired = sparse_somatic - actual = SparseSomaticGenotypes.from_dense( - dense.genos, dense.first_v_idxs, dense.offsets, dosages - ) - - np.testing.assert_equal(actual.offsets, desired.offsets) - np.testing.assert_equal(actual.variant_idxs, desired.variant_idxs) - np.testing.assert_equal(actual.ccfs, desired.ccfs) - - -@parametrize_with_cases( - "dense, sparse, sparse_somatic, ilens, positions, starts, lengths, max_ends, dosages", - cases=".", -) -def test_somatic_from_dense_with_length( - dense: DenseGenotypes, - sparse: SparseGenotypes, - sparse_somatic: SparseSomaticGenotypes, - ilens, - positions, - starts, - lengths, - max_ends, - dosages, -): - desired = sparse_somatic - desired_max_ends = max_ends - - actual, max_ends = SparseSomaticGenotypes.from_dense_with_length( - dense.genos, - dense.first_v_idxs, - dense.offsets, - ilens, - positions, - starts, - lengths, - dosages, - ) - - np.testing.assert_equal(actual.offsets, desired.offsets) - np.testing.assert_equal(actual.variant_idxs, desired.variant_idxs) - np.testing.assert_equal(max_ends, desired_max_ends) - - -# %% -# test_from_dense_with_length(*case_snps()) -# test_from_dense_with_length(*case_indels()) diff --git a/tests/dataset/genotypes/test_reconstruct.py b/tests/dataset/genotypes/test_reconstruct.py index 1017a5ea..9266484f 100644 --- a/tests/dataset/genotypes/test_reconstruct.py +++ b/tests/dataset/genotypes/test_reconstruct.py @@ -15,7 +15,6 @@ def case_snps(): # (s p v) genos = np.array([[[0, 1]]], dtype=np.int8) var_idxs = np.array([0, 1], dtype=np.int32) - offsets = np.array([0, 2], np.int64) shift = 0 alt_alleles = np.frombuffer(b"A" + b"T", dtype=np.uint8) @@ -27,9 +26,7 @@ def case_snps(): annot_v_idxs = np.array([-1, -1, 1], dtype=np.int32) annot_pos = np.array([1, 2, 3], dtype=np.int32) - sparse_genos = SparseGenotypes.from_dense( - genos=genos, var_idxs=var_idxs, offsets=offsets - ) + sparse_genos = SparseGenotypes.from_dense(genos=genos, var_idxs=var_idxs) return ( positions, @@ -53,7 +50,6 @@ def case_indels(): # (s p v) : (1 1 2) genos = np.array([[[1, 1]]], dtype=np.int8) var_idxs = np.array([0, 1], dtype=np.int32) - offsets = np.array([0, 2], np.int64) shift = 0 alt_alleles = np.frombuffer(b"G" + b"AT", dtype=np.uint8) @@ -65,9 +61,7 @@ def case_indels(): annot_v_idxs = np.array([-1, 0, 1, 1], dtype=np.int32) annot_pos = np.array([0, 1, 3, 3], dtype=np.int32) - sparse_genos = SparseGenotypes.from_dense( - genos=genos, var_idxs=var_idxs, offsets=offsets - ) + sparse_genos = SparseGenotypes.from_dense(genos=genos, var_idxs=var_idxs) return ( positions, @@ -91,7 +85,6 @@ def case_spanning_del_pad(): # (s p v) : (1 1 2) genos = np.array([[[1]]], dtype=np.int8) var_idxs = np.array([0], dtype=np.int32) - offsets = np.array([0, 1], np.int64) shift = 0 alt_alleles = np.frombuffer(b"G", dtype=np.uint8) @@ -103,9 +96,7 @@ def case_spanning_del_pad(): annot_v_idxs = np.array([-1, -1, -1], dtype=np.int32) annot_pos = np.array([2, 3, -1], dtype=np.int32) - sparse_genos = SparseGenotypes.from_dense( - genos=genos, var_idxs=var_idxs, offsets=offsets - ) + sparse_genos = SparseGenotypes.from_dense(genos=genos, var_idxs=var_idxs) return ( positions, @@ -129,7 +120,6 @@ def case_shift_ins(): # (s p v) : (1 1 2) genos = np.array([[[1, 1]]], dtype=np.int8) var_idxs = np.array([0, 1], dtype=np.int32) - offsets = np.array([0, 2], np.int64) shift = 1 alt_alleles = np.frombuffer(b"TC" + b"GA", dtype=np.uint8) @@ -141,9 +131,7 @@ def case_shift_ins(): annot_v_idxs = np.array([0, 0, -1, 1], dtype=np.int32) annot_pos = np.array([1, 1, 2, 3], dtype=np.int32) - sparse_genos = SparseGenotypes.from_dense( - genos=genos, var_idxs=var_idxs, offsets=offsets - ) + sparse_genos = SparseGenotypes.from_dense(genos=genos, var_idxs=var_idxs) return ( positions, @@ -183,7 +171,7 @@ def test_sparse( actual_annot_pos = np.empty(len(ref) - ref_start, np.int32) reconstruct_haplotype_from_sparse( offset_idx=offset_idx, - geno_v_idxs=sparse_genos.variant_idxs, + geno_v_idxs=sparse_genos.data, geno_offsets=sparse_genos.offsets, positions=positions, sizes=sizes, diff --git a/tests/dataset/test_ds_haps.py b/tests/dataset/test_ds_haps.py index cf24fa64..0fb3d18e 100644 --- a/tests/dataset/test_ds_haps.py +++ b/tests/dataset/test_ds_haps.py @@ -4,25 +4,33 @@ import genvarloader as gvl import numpy as np import pysam -import pytest import seqpro as sp +from pytest_cases import parametrize_with_cases data_dir = Path(__file__).resolve().parents[1] / "data" -ds_path = data_dir / "phased_dataset.gvl" ref = data_dir / "fasta" / "Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz" cons_dir = data_dir / "consensus" -@pytest.fixture -def dataset(): +def dataset_vcf(): ds = ( - gvl.Dataset.open(ds_path, ref, deterministic=True) + gvl.Dataset.open(data_dir / "phased_dataset.vcf.gvl", ref) .with_len("ragged") .with_seqs("haplotypes") ) return ds +def dataset_svar(): + ds = ( + gvl.Dataset.open(data_dir / "phased_dataset.svar.gvl", ref) + .with_len("ragged") + .with_seqs("haplotypes") + ) + return ds + + +@parametrize_with_cases("dataset", cases=".", prefix="dataset_") def test_ds_haps(dataset: gvl.RaggedDataset[gvl.Ragged[np.bytes_], None, None, None]): for region, sample in product(range(dataset.n_regions), dataset.samples): c, s, e = dataset.regions.select("chrom", "chromStart", "chromEnd").row(region) @@ -37,4 +45,4 @@ def test_ds_haps(dataset: gvl.RaggedDataset[gvl.Ragged[np.bytes_], None, None, N actual, desired, f"region: {region}, sample: {sample}, hap: {h}, coords: {c}:{s + 1}-{e}", - ) \ No newline at end of file + ) diff --git a/tests/dataset/test_realign.py b/tests/dataset/test_realign.py index b72aa1ca..55f868f3 100644 --- a/tests/dataset/test_realign.py +++ b/tests/dataset/test_realign.py @@ -13,16 +13,13 @@ def case_snps(): # (s p v) genos = np.array([[[0, 1]]], dtype=np.int8) var_idxs = np.array([0, 1], dtype=np.int32) - offsets = np.array([0, 2], np.int64) shift = 0 track = np.arange(4, dtype=np.float32) desired = track.copy() query_start = 0 - sparse_genos = SparseGenotypes.from_dense( - genos=genos, var_idxs=var_idxs, offsets=offsets - ) + sparse_genos = SparseGenotypes.from_dense(genos=genos, var_idxs=var_idxs) return ( positions, @@ -42,16 +39,13 @@ def case_indels(): # (s p v) : (1 1 2) genos = np.array([[[1, 1]]], dtype=np.int8) var_idxs = np.array([0, 1], dtype=np.int32) - offsets = np.array([0, 2], np.int64) shift = 0 track = np.arange(4, dtype=np.float32) desired = np.array([0, 1, 3, 3], np.float32) query_start = 0 - sparse_genos = SparseGenotypes.from_dense( - genos=genos, var_idxs=var_idxs, offsets=offsets - ) + sparse_genos = SparseGenotypes.from_dense(genos=genos, var_idxs=var_idxs) return ( positions, @@ -71,7 +65,6 @@ def case_spanning_del(): # (s p v) : (1 1 2) genos = np.array([[[1]]], dtype=np.int8) var_idxs = np.array([0], dtype=np.int32) - offsets = np.array([0, 1], np.int64) shift = 0 track = np.arange(1, 6, dtype=np.float32) @@ -80,9 +73,7 @@ def case_spanning_del(): desired = track[1:] query_start = 1 - sparse_genos = SparseGenotypes.from_dense( - genos=genos, var_idxs=var_idxs, offsets=offsets - ) + sparse_genos = SparseGenotypes.from_dense(genos=genos, var_idxs=var_idxs) return ( positions, @@ -102,7 +93,6 @@ def case_shift_ins(): # (s p v) : (1 1 2) genos = np.array([[[1, 1]]], dtype=np.int8) var_idxs = np.array([0, 1], dtype=np.int32) - offsets = np.array([0, 2], np.int64) shift = 1 track = np.arange(4, dtype=np.float32) @@ -110,9 +100,7 @@ def case_shift_ins(): desired = np.array([1, 1, 2, 3], np.float32) query_start = 0 - sparse_genos = SparseGenotypes.from_dense( - genos=genos, var_idxs=var_idxs, offsets=offsets - ) + sparse_genos = SparseGenotypes.from_dense(genos=genos, var_idxs=var_idxs) return ( positions, @@ -142,7 +130,7 @@ def test_sparse( actual = np.empty(len(track) - query_start, np.float32) shift_and_realign_track_sparse( offset_idx=offset_idx, - geno_v_idxs=sparse_genos.variant_idxs, + geno_v_idxs=sparse_genos.data, geno_offsets=sparse_genos.offsets, positions=positions, sizes=sizes, diff --git a/tests/dataset/test_write.py b/tests/dataset/test_write.py index 5762c67f..84ca1069 100644 --- a/tests/dataset/test_write.py +++ b/tests/dataset/test_write.py @@ -9,24 +9,24 @@ from genvarloader._dataset._genotypes import SparseGenotypes from genvarloader._utils import _lengths_to_offsets from polars.testing.asserts import assert_frame_equal -from pytest import fixture +from pytest import fixture, mark from pytest_cases import parametrize_with_cases ddir = Path(__file__).parents[1] / "data" def reader_vcf(): - _vcf = VCF(ddir / "vcf" / "filtered_sample.vcf.gz") - _vcf._write_gvi_index(preset="genvarloader") - _vcf._load_index() - return _vcf + vcf = VCF(ddir / "vcf" / "filtered_sample.vcf.gz") + vcf._write_gvi_index() + vcf._load_index() + return vcf def reader_pgen(): - _pgen = PGEN(ddir / "pgen" / "filtered_sample.pgen") - _pgen._index_path().unlink() - _pgen = PGEN(ddir / "pgen" / "filtered_sample.pgen") - return _pgen + index_path = (ddir / "pgen" / "filtered_sample.pvar.gvi") + index_path.unlink() + pgen = PGEN(ddir / "pgen" / "filtered_sample.pgen") + return pgen @fixture @@ -39,6 +39,7 @@ def ref(): return ddir / "fasta" / "Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz" +@mark.skip @parametrize_with_cases("reader", cases=".", prefix="reader_") def test_write(reader: Reader, bed: pl.DataFrame, ref: Path, tmp_path): out = tmp_path / "test.gvl" diff --git a/tests/test_pgen.py b/tests/test_pgen.py deleted file mode 100644 index dc8a7e85..00000000 --- a/tests/test_pgen.py +++ /dev/null @@ -1,168 +0,0 @@ -from pathlib import Path - -import genvarloader as gvl -import numpy as np -import pytest -from pytest import fixture - - -@fixture -def pgen(): - pgen_path = Path(__file__).parent / "data" / "pgen" / "sample.pgen" - pgen = gvl.Variants.from_file(pgen_path) - return pgen - - -@pytest.mark.skip -def test_snp(pgen: gvl.Variants): - contig = "19" - start = np.array([110]) # VCF is 1-based - end = np.array([111]) - - true_geno = np.array( - [ - [[0], [0]], - [[0], [0]], - [[0], [1]], - ], - dtype=np.int8, - ) - - gvl_geno = pgen.read(contig, start, end) - - assert gvl_geno is not None - np.testing.assert_equal(gvl_geno.genotypes, true_geno) - - -@pytest.mark.skip -def test_del(pgen: gvl.Variants): - contig = "19" - start = np.array([1010695]) - end = np.array([1010696]) - - true_positions = np.array([1010694, 1010695, 1010695], np.int32) - true_size_diffs = np.array([-6, -3, -10], np.int32) - true_ref = np.frombuffer(b"CGAGACGGAGAGAGACGGGGCC", "S1") - true_ref_offsets = np.array([0, 7, 11, 22], np.uint32) - true_alt = np.frombuffer(b"CGG", "S1") - true_alt_offsets = np.array([0, 1, 2, 3], np.uint32) - true_geno = np.array( - [ - [[0, 1, 0], [0, 0, 1]], - [[0, 0, 1], [0, 0, 1]], - [[0, 0, 0], [1, 0, 0]], - ], - dtype=np.int8, - ) - true_offsets = np.array([0, 3], np.uint32) - - gvl_geno = pgen.read(contig, start, end) - gvl_hap_geno, max_ends = pgen.read_for_haplotype_construction(contig, start, end) - - assert gvl_geno is not None - np.testing.assert_equal(gvl_geno.positions, true_positions) - np.testing.assert_equal(gvl_geno.size_diffs, true_size_diffs) - np.testing.assert_equal(gvl_geno.ref.alleles, true_ref) - np.testing.assert_equal(gvl_geno.ref.offsets, true_ref_offsets) - np.testing.assert_equal(gvl_geno.alt.alleles, true_alt) - np.testing.assert_equal(gvl_geno.alt.offsets, true_alt_offsets) - np.testing.assert_equal(gvl_geno.genotypes, true_geno) - np.testing.assert_equal(gvl_geno.offsets, true_offsets) - - assert gvl_hap_geno is not None - np.testing.assert_equal(gvl_hap_geno.positions, true_positions) - np.testing.assert_equal(gvl_hap_geno.size_diffs, true_size_diffs) - np.testing.assert_equal(gvl_hap_geno.ref.alleles, true_ref) - np.testing.assert_equal(gvl_hap_geno.ref.offsets, true_ref_offsets) - np.testing.assert_equal(gvl_hap_geno.alt.alleles, true_alt) - np.testing.assert_equal(gvl_hap_geno.alt.offsets, true_alt_offsets) - np.testing.assert_equal(gvl_hap_geno.genotypes, true_geno) - np.testing.assert_equal(gvl_hap_geno.offsets, true_offsets) - np.testing.assert_equal(max_ends, np.array([1010696 + 10], np.int64)) - - -@pytest.mark.skip -def test_ins(pgen: gvl.Variants): - contig = "19" - start = np.array([1110695]) - end = np.array([1110696]) - - true_positions = np.array([1110695, 1110695], np.int32) - true_size_diffs = np.array([75, 0], np.int32) - true_ref = np.frombuffer(b"AA", "S1") - true_ref_offsets = np.array([0, 1, 2], np.uint32) - true_alt = np.frombuffer( - b"AGATAGATAGATAGATAGATAGATAGATAGATAGATAGATAGATAGATAGATAGATAGATAGATAGATAGATAGATG", - "S1", - ) - true_alt_offsets = np.array([0, 76, 77], np.uint32) - true_geno = np.array( - [ - [[0, 0], [1, 0]], - [[1, 0], [1, 0]], - [[0, 0], [0, 1]], - ], - dtype=np.int8, - ) - true_offsets = np.array([0, 2], np.uint32) - - gvl_geno = pgen.read(contig, start, end) - gvl_hap_geno, max_ends = pgen.read_for_haplotype_construction(contig, start, end) - - assert gvl_geno is not None - np.testing.assert_equal(gvl_geno.positions, true_positions) - np.testing.assert_equal(gvl_geno.size_diffs, true_size_diffs) - np.testing.assert_equal(gvl_geno.ref.alleles, true_ref) - np.testing.assert_equal(gvl_geno.ref.offsets, true_ref_offsets) - np.testing.assert_equal(gvl_geno.alt.alleles, true_alt) - np.testing.assert_equal(gvl_geno.alt.offsets, true_alt_offsets) - np.testing.assert_equal(gvl_geno.genotypes, true_geno) - np.testing.assert_equal(gvl_geno.offsets, true_offsets) - - assert gvl_hap_geno is not None - np.testing.assert_equal(gvl_hap_geno.positions, true_positions) - np.testing.assert_equal(gvl_hap_geno.size_diffs, true_size_diffs) - np.testing.assert_equal(gvl_hap_geno.ref.alleles, true_ref) - np.testing.assert_equal(gvl_hap_geno.ref.offsets, true_ref_offsets) - np.testing.assert_equal(gvl_hap_geno.alt.alleles, true_alt) - np.testing.assert_equal(gvl_hap_geno.alt.offsets, true_alt_offsets) - np.testing.assert_equal(gvl_hap_geno.genotypes, true_geno) - np.testing.assert_equal(gvl_hap_geno.offsets, true_offsets) - np.testing.assert_equal(max_ends, end) - - -@pytest.mark.skip -def test_split_snp(pgen: gvl.Variants): - contig = "20" - start = np.array([1110695]) # VCF is 1-based - end = np.array([1110696]) - - true_positions = np.array([1110695, 1110695], np.int32) - true_size_diffs = np.array([0, 0], np.int32) - true_ref = np.array([b"G", b"G"]) - true_alt = np.array([b"A", b"T"]) - true_geno = np.array( - [ - [[1, 0], [0, 1]], - [[0, 1], [1, 0]], - [[-9, 1], [-9, 1]], - ], - dtype=np.int8, - ) - true_offsets = np.array([0, 2], np.uint32) - - gvl_geno = pgen.read(contig, start, end) - gvl_hap_geno, max_ends = pgen.read_for_haplotype_construction(contig, start, end) - - assert gvl_geno is not None - np.testing.assert_equal(gvl_geno.positions, true_positions) - np.testing.assert_equal(gvl_geno.size_diffs, true_size_diffs) - np.testing.assert_equal(gvl_geno.ref.alleles, true_ref) - np.testing.assert_equal(gvl_geno.alt.alleles, true_alt) - np.testing.assert_equal(gvl_geno.genotypes, true_geno) - np.testing.assert_equal(gvl_geno.offsets, true_offsets) - - -if __name__ == "__main__": - # test_del(pgen()) - test_split_snp(pgen()) diff --git a/tests/test_variants.py b/tests/test_variants.py deleted file mode 100644 index a27ce755..00000000 --- a/tests/test_variants.py +++ /dev/null @@ -1,16 +0,0 @@ -from pathlib import Path - -import genvarloader as gvl -from pytest_cases import fixture - - -@fixture -def pgen_variants(): - pgen_path = Path(__file__).parent / "data" / "pgen" / "filtered_sample.pgen" - return gvl.Variants.from_file(pgen_path) - - -@fixture -def vcf_variants(): - vcf_path = Path(__file__).parent / "data" / "vcf" / "filtered_sample.vcf" - return gvl.Variants.from_file(vcf_path) diff --git a/tests/tracks/test_i2t_t2i.py b/tests/tracks/test_i2t_t2i.py index 686d8da2..631a6153 100644 --- a/tests/tracks/test_i2t_t2i.py +++ b/tests/tracks/test_i2t_t2i.py @@ -37,7 +37,7 @@ def case_simple(): intervals["end"] = coordinates[:, 1] intervals["value"] = values intervals = RaggedIntervals.from_lengths( - intervals, np.array([n_intervals], np.int32) + intervals, np.array([n_intervals], np.uint32) ) interval_idx = np.array([0], dtype=np.intp) @@ -73,7 +73,7 @@ def case_two_regions(): intervals = repeat(intervals, "n -> (r n)", r=2) intervals = RaggedIntervals.from_lengths( - intervals, np.array([n_intervals, n_intervals], np.int32) + intervals, np.array([n_intervals, n_intervals], np.uint32) ) interval_idx = np.array([0, 1], dtype=np.intp) From c7b606b0422d93c850a73ef4f94e8556588e8055 Mon Sep 17 00:00:00 2001 From: d-laub Date: Tue, 22 Apr 2025 18:42:58 -0700 Subject: [PATCH 15/53] fix: add spanning dels to test and fix hap ilens for this case --- pixi.lock | 2 +- python/genvarloader/_dataset/_genotypes.py | 41 ++++++++++--------- python/genvarloader/_dataset/_reconstruct.py | 10 ++--- tests/data/generate_ground_truth.py | 12 +++++- tests/data/pgen/filtered_sample.pvar | 8 ++-- tests/data/vcf/filtered_sample.vcf | 6 +-- tests/data/vcf/filtered_sample.vcf.gz | Bin 1374 -> 1373 bytes tests/data/vcf/filtered_sample.vcf.gz.csi | Bin 203 -> 203 bytes tests/data/vcf/sample.bed | 1 + 9 files changed, 46 insertions(+), 34 deletions(-) diff --git a/pixi.lock b/pixi.lock index 02f87e1f..ca20eeb9 100644 --- a/pixi.lock +++ b/pixi.lock @@ -1892,7 +1892,7 @@ packages: - pypi: . name: genvarloader version: 0.12.0 - sha256: 29405e26f8098122a7c9cc90a1b51eea010b49740df55e984d642759336fde63 + sha256: e547e134d9f5e5966cc728f918b5cf9a3b0943ee268461fc650cac7a9247b2a1 requires_dist: - numba>=0.58.1 - loguru diff --git a/python/genvarloader/_dataset/_genotypes.py b/python/genvarloader/_dataset/_genotypes.py index faddd520..57dd855c 100644 --- a/python/genvarloader/_dataset/_genotypes.py +++ b/python/genvarloader/_dataset/_genotypes.py @@ -669,12 +669,12 @@ def get_diffs_sparse( geno_offset_idxs: NDArray[np.intp], geno_v_idxs: NDArray[np.int32], geno_offsets: NDArray[np.int64], - size_diffs: NDArray[np.int32], + ilens: NDArray[np.int32], keep: Optional[NDArray[np.bool_]] = None, keep_offsets: Optional[NDArray[np.int64]] = None, - starts: Optional[NDArray[np.int32]] = None, - ends: Optional[NDArray[np.int32]] = None, - positions: Optional[NDArray[np.int32]] = None, + q_starts: Optional[NDArray[np.int32]] = None, + q_ends: Optional[NDArray[np.int32]] = None, + v_starts: Optional[NDArray[np.int32]] = None, ): """Get difference in length wrt reference genome for given genotypes. @@ -688,17 +688,17 @@ def get_diffs_sparse( Shape = (variants*samples*ploidy) Sparse genotypes i.e. variant indices for ALT genotypes. geno_offsets : NDArray[np.int32] Shape = (regions*samples*ploidy + 1) Offsets into sparse genotypes. - size_diffs : NDArray[np.int32] + ilens : NDArray[np.int32] Shape = (total_variants) Size of all unique variants. keep : Optional[NDArray[np.bool_]] Shape = (variants*samples*ploidy) Keep mask for genotypes. keep_offsets : Optional[NDArray[np.int64]] Shape = (regions*samples*ploidy + 1) Offsets into keep. - starts : Optional[NDArray[np.int32]] + q_starts : Optional[NDArray[np.int32]] Shape = (regions) Start of query regions. - ends : Optional[NDArray[np.int32]] + q_ends : Optional[NDArray[np.int32]] Shape = (regions) End of query regions. - positions : Optional[NDArray[np.int32]] + v_starts : Optional[NDArray[np.int32]] Shape = (total_variants) Positions of unique variants. """ n_queries, ploidy = geno_offset_idxs.shape @@ -713,7 +713,7 @@ def get_diffs_sparse( n_variants = o_e - o_s if n_variants == 0: diffs[query, hap] = 0 - elif starts is not None and ends is not None and positions is not None: + elif q_starts is not None and q_ends is not None and v_starts is not None: diffs[query, hap] = 0 for v in range(o_s, o_e): if keep is not None and keep_offsets is not None: @@ -723,16 +723,16 @@ def get_diffs_sparse( continue v_idx: int = geno_v_idxs[v] - v_pos = positions[v_idx] - v_diff = size_diffs[v_idx] + v_start = v_starts[v_idx] + v_ilen = ilens[v_idx] # +1 assumes atomized variants - v_end = v_pos - min(0, v_diff) + 1 + v_end = v_start - min(0, v_ilen) + 1 - if v_end <= starts[query]: + if v_end <= q_starts[query]: # variant doesn't span region continue - if v_pos >= ends[query]: + if v_start >= q_ends[query]: # variants are sorted by position so this variant and everything # after will be outside the region break @@ -743,20 +743,21 @@ def get_diffs_sparse( # DEL r - s - e - - : +max(0, 0 - 2) -> -1 + 0 = -1 # where r is region start, s is variant start, e is variant end (exclusive) # count the "-" to get ilen - if v_diff < 0: - v_diff += max(0, starts[query] - v_pos) + # but also atomic deletions include 1 bp of ref so add it back (- 1) + if v_ilen < 0: + v_ilen += max(0, q_starts[query] - v_start - 1) # deletion may end after region - v_diff += max(0, v_end - ends[query]) + v_ilen += max(0, v_end - q_ends[query]) - diffs[query, hap] += v_diff + diffs[query, hap] += v_ilen elif keep is not None and keep_offsets is not None: v_idxs = geno_v_idxs[o_s:o_e] k_idx = query * ploidy + hap qh_keep = keep[keep_offsets[k_idx] : keep_offsets[k_idx + 1]] v_idxs = v_idxs[qh_keep] - diffs[query, hap] = size_diffs[v_idxs].sum() + diffs[query, hap] = ilens[v_idxs].sum() else: - diffs[query, hap] = size_diffs[geno_v_idxs[o_s:o_e]].sum() + diffs[query, hap] = ilens[geno_v_idxs[o_s:o_e]].sum() return diffs diff --git a/python/genvarloader/_dataset/_reconstruct.py b/python/genvarloader/_dataset/_reconstruct.py index 604b2e2c..cea6cfec 100644 --- a/python/genvarloader/_dataset/_reconstruct.py +++ b/python/genvarloader/_dataset/_reconstruct.py @@ -303,7 +303,7 @@ def _haplotype_ilens( geno_offset_idxs=geno_offset_idxs, geno_v_idxs=self.genotypes.data, geno_offsets=self.genotypes.offsets, - size_diffs=self.variants.sizes, + ilens=self.variants.sizes, keep=keep, keep_offsets=keep_offsets, ) @@ -313,10 +313,10 @@ def _haplotype_ilens( geno_offset_idxs=geno_offset_idxs, geno_v_idxs=self.genotypes.data, geno_offsets=self.genotypes.offsets, - size_diffs=self.variants.sizes, - starts=jittered_regions[:, 1], - ends=jittered_regions[:, 2], - positions=self.variants.positions, + ilens=self.variants.sizes, + q_starts=jittered_regions[:, 1], + q_ends=jittered_regions[:, 2], + v_starts=self.variants.positions, ) return hap_ilens.reshape(-1, self.genotypes.shape[-1]) diff --git a/tests/data/generate_ground_truth.py b/tests/data/generate_ground_truth.py index a6b5bf25..b31c5a68 100644 --- a/tests/data/generate_ground_truth.py +++ b/tests/data/generate_ground_truth.py @@ -187,6 +187,7 @@ def main( "NA00002", "NA00003", ], + schema_overrides={"chrom": pl.Utf8}, ) samples = bed.select(cs.matches(r"^NA\d{5}$")).columns @@ -207,8 +208,17 @@ def main( ) .drop("group") .sample(fraction=1, shuffle=True, seed=0) - .with_row_index() ) + # manual additions + # spanning del + rows = pl.DataFrame( + { + "chrom": ["19"], + "start": [1010696], + "end": [1010696 + SEQ_LEN], + } + ) + bed = bed.vstack(rows).with_row_index() logger.info("Generating BED file.") ( diff --git a/tests/data/pgen/filtered_sample.pvar b/tests/data/pgen/filtered_sample.pvar index 1f827af0..6da9565d 100644 --- a/tests/data/pgen/filtered_sample.pvar +++ b/tests/data/pgen/filtered_sample.pvar @@ -16,11 +16,11 @@ ##ALT= ##ALT= ##bcftools_normVersion=1.21+htslib-1.21 -##bcftools_normCommand=norm -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz; Date=Mon Apr 21 14:08:33 2025 -##bcftools_normCommand=norm -a --atom-overlaps . -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz -m -; Date=Mon Apr 21 14:08:33 2025 +##bcftools_normCommand=norm -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz; Date=Tue Apr 22 18:29:29 2025 +##bcftools_normCommand=norm -a --atom-overlaps . -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz -m -; Date=Tue Apr 22 18:29:29 2025 ##bcftools_viewVersion=1.21+htslib-1.21 -##bcftools_viewCommand=view -e TYPE="OTHER"; Date=Mon Apr 21 14:08:33 2025 -##bcftools_viewCommand=view -O z -o /carter/users/dlaub/projects/GenVarLoader/tests/data/vcf/filtered_sample.vcf.gz /carter/users/dlaub/projects/GenVarLoader/tests/data/vcf/filtered_sample.vcf; Date=Mon Apr 21 14:08:33 2025 +##bcftools_viewCommand=view -e TYPE="OTHER"; Date=Tue Apr 22 18:29:29 2025 +##bcftools_viewCommand=view -O z -o /carter/users/dlaub/projects/GenVarLoader/tests/data/vcf/filtered_sample.vcf.gz /carter/users/dlaub/projects/GenVarLoader/tests/data/vcf/filtered_sample.vcf; Date=Tue Apr 22 18:29:29 2025 #CHROM POS ID REF ALT QUAL FILTER INFO 19 111 . N C 9.6 . . 19 1010695 . CGAGACG C 10 . . diff --git a/tests/data/vcf/filtered_sample.vcf b/tests/data/vcf/filtered_sample.vcf index d9170a28..055ab816 100644 --- a/tests/data/vcf/filtered_sample.vcf +++ b/tests/data/vcf/filtered_sample.vcf @@ -25,10 +25,10 @@ ##ALT= ##ALT= ##bcftools_normVersion=1.21+htslib-1.21 -##bcftools_normCommand=norm -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz; Date=Mon Apr 21 14:08:33 2025 -##bcftools_normCommand=norm -a --atom-overlaps . -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz -m -; Date=Mon Apr 21 14:08:33 2025 +##bcftools_normCommand=norm -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz; Date=Tue Apr 22 18:29:29 2025 +##bcftools_normCommand=norm -a --atom-overlaps . -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz -m -; Date=Tue Apr 22 18:29:29 2025 ##bcftools_viewVersion=1.21+htslib-1.21 -##bcftools_viewCommand=view -e TYPE="OTHER"; Date=Mon Apr 21 14:08:33 2025 +##bcftools_viewCommand=view -e TYPE="OTHER"; Date=Tue Apr 22 18:29:29 2025 #CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA00001 NA00002 NA00003 19 111 . N C 9.6 . . GT:VAF:HQ 0|0:.:10,15 0|0:.:10,10 0/1:0.3:3,3 19 1010695 . CGAGACG C 10 . . GT:VAF:HQ 0|0:.:10,10 0|0:0.5:10,15 0/1:0.15:3,3 diff --git a/tests/data/vcf/filtered_sample.vcf.gz b/tests/data/vcf/filtered_sample.vcf.gz index 6d7044f494ef07f5a75128dd8f56d756b0d9566b..02d36ff27bd0c8baa96a4959f4b2a649ec949030 100644 GIT binary patch delta 842 zcmV-Q1GW6#3f&5SABzYC000000RIL6LPG)oUjx0BZI9wM5XWD`rx}fQ*!sQ>g+)sG!zD2 z(DYhCtLivf6e^}L-wkqE7_|C{5^II|qUrio$5E7$A|6xN7r9t!lo@gDK2F=4<_A~$ z&E?kjT5iJ8H9|7l5_3~@*RNH_i3K;=dT-KieY}1Vc%>JA+TU`6I^*k5qB0q>s^bhs zz48A4(X2LqD)JSn(67yRlEMKuv?g_(`XK~F3Ny?lBMpCKW&<5GxIcq4E*jl}n+t;s z_!)|fk%eX)V!KXYOX!=j}U_+q3JCG@Fw9Uderr2{dnidhaRvR1lAMB|=m(Ff%IS>k@*; zq>Vxb2UsbG-%kkdWCBZoWHlR2ASWB8H<_%#s>oOZe$cvR^@A_6`Y4}J1{btF;^ITo z_ujQ+NLqv0AcuSJC)*zS*mE1)5+tXdyFh&MONi$JS!Q;yA|^hA?;Ql==~Fb{3m)e; zoa5sTv2DuY#lLlo{B0vmsSb`iXz@1tb@wGj=E9=gMar|v^Ee7RP2h>=~{ zN=CyMAVxWHbER#M7T2P-kh{}>*xI99F#<*FOz^#M6{kiBrk7l(d_hWEmG1`r&l{sz zwyN88Ij$}89C;GjHPlmR#Hb9ZMxjaRM#8XIHKY=MQ*3nOk@y1DP+&r;VMvpt0uX=8 zQSFxYddOF7XNUG`{rW5HZ-{w85J?3=0RD%Ep!E>6An=0w_l+Xd>u5w?7h6&cr3UxM zx`%oW^{+@_o6+Z6YGUI~soFKv3Fd!Iy5Ze;-tSKDzH-ZJ)EHi&F23!QwsG1x-1L+z z57Wop#;Lo0{jR((=GX2|$4`~XcvdMHbSl$suM!RCmFJgeSUC*8ik-xj!*^U6MV{w* U{_zBTABzYC000000RIL6LPG)oU<19C+m7N!5QeYeDN1AIDqw80BkfG$ zl^hNO5~l%%Bv+`g%h*x7ySKYx#XNn~oC3~dmW@_><;K+i^_)+N5KZOOp#8-bIW-nlnRxN`pkLDY^Spb@re(8VUn1 zXnGI9L)CG#*r=GoV%IO^#-P8*PfmeF*hy5)x)Hz>=5|zo3RUM~4 z>W=sSk7l)h(WY3D3jNxACn@Z6Lu*pksUJc>q%gxmGScvSZZc@2!TlMWana}&+*}xB zz|T-*j4U+g5ZiSEYvRJ}BH(R z-+R}R0ci~;Lk{=ePqsbuvF9?}5+tXdyFh&QONi$UvfS)oMNE7F-#ZA#(_u8<3!dgT zoa56Dv2DuY#Xoh7{wh;}E9y)`^VdpU#yj-i=#K^8} zC8NO$5Tk;)xze^qi)&F!$lYl`Z0%957=fa7F8E%!ic=#5(@QQ?u^^?b%69|*=ger9 zuj+PPj%$gcK%Rtl4fPZnF)BlvYJRQWbUds~#q14YZ=cQc}FdI)XaUsPp%I& y|6^z7tGnx4It^Og`DQWSnfoHQ$XA+n=B~P&eeC%IpIY5H^9DFSh3VWwk*gqYnM$_+ delta 144 zcmV;B0B`@x0m}i9CVwlL%E}k;GfYeopTS3B+H-TQdXj4^?m1S{qt&&Dtbi>L05$&4 z&Ugu&uW~tcP6XQA;QOq^HmH+vhF^!`Qy;3H@3~R232vW$E#rA3@2Dk@nz=9d$@QV; yf9%YBb$5MBr$MVb-z?@kb6?~Z`AXBy+*Oyek3E0jQ>!~?9tP(J3e>1_k*grQy-GL$ diff --git a/tests/data/vcf/sample.bed b/tests/data/vcf/sample.bed index bc3866df..6e82c59a 100644 --- a/tests/data/vcf/sample.bed +++ b/tests/data/vcf/sample.bed @@ -6,3 +6,4 @@ 19 1210686 1210706 20 1110686 1110706 20 1234555 1234575 +19 1010696 1010716 From 892ced21eb19d3e54e53fb777b0b86700f2ec759 Mon Sep 17 00:00:00 2001 From: d-laub Date: Wed, 23 Apr 2025 21:56:16 -0700 Subject: [PATCH 16/53] fix: variant index -> variant info mapping --- pixi.lock | 519 ++++++------------- pixi.toml | 7 +- pyproject.toml | 4 +- python/genvarloader/_dataset/_genotypes.py | 9 +- python/genvarloader/_dataset/_reconstruct.py | 9 +- python/genvarloader/_dataset/_write.py | 2 +- 6 files changed, 172 insertions(+), 378 deletions(-) diff --git a/pixi.lock b/pixi.lock index ca20eeb9..0f5b8596 100644 --- a/pixi.lock +++ b/pixi.lock @@ -38,7 +38,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py312h2ec8cdc_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2025.1.31-hbcca054_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.1.31-hbd8a1cb_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.1.31-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_1.conda @@ -66,9 +66,9 @@ environments: - conda: https://conda.anaconda.org/bioconda/linux-64/htslib-1.21-h566b1c6_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.7-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/icecream-2.1.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.10-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.6.1-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda @@ -78,7 +78,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250127.1-cxx17_hbbce691_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h4585015_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h75ea233_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-19.0.1-h27f8bab_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-19.0.1-hcb10f89_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-19.0.1-hcb10f89_8_cpu.conda @@ -105,7 +105,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h767d61c_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.36.0-hc4361e1_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.36.0-h0121fbd_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.71.0-he753a82_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.71.0-h8e591d7_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.11.2-default_h0d58e46_1001.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h4ce23a2_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libidn2-2.3.8-ha4ef2c3_0.conda @@ -118,7 +118,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.20.0-hd1b1c89_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.20.0-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-19.0.1-h081d1f1_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h501fc15_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h501fc15_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2024.07.02-hba17884_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.1-hee588c1_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda @@ -145,7 +145,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.1-py312hba68c3b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyh29332c3_1.conda - conda: https://conda.anaconda.org/bioconda/linux-64/ncls-0.0.68-py312h0fa9677_5.tar.bz2 @@ -154,11 +154,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/nlohmann_json-3.12.0-h3f2d84a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numba-0.61.2-py312h2e6246c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.4-py312h72c5963_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.5-py312h72c5963_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.0-h7b32b05_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.1.1-h17f744e_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/p11-kit-0.24.1-hc5aa10d_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py312hf9745cd_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-0.23.1-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-base-0.23.1-pyhd8ed1ab_0.conda @@ -190,7 +190,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.10-h9e4cc4f_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-6_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-7_cp312.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py312h178313f_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/questionary-2.1.0-pyhd8ed1ab_1.conda @@ -200,7 +200,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.0.0-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.6-py312h286b59f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.16-hba75a32_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-78.1.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-79.0.0-pyhff2d567_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.1-h8bd8927_1.conda @@ -209,7 +209,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2022.1.0-h4ce085d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/termcolor-2.5.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/textual-3.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/textual-3.1.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda @@ -227,6 +227,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-1.0.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py312h68727a3_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.6.16-h0f3a69f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.30.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 @@ -234,18 +235,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312h66e93f0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda - - pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/53/21f7b97e82772caa61541348427f42435120b32961c92d16f9c8ce9757d6/cslug-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/57/b76283dde9c3e9c3fe8985f6d6b2d79ce3b65b54b190d09e696ba4b80b02/genoray-0.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/8e/0eccb528701273640dd4f13678a0c1352176166aecd1ee7f4fa29355132b/hirola-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/a9/a6/aa38bddc9f8d90e5ce14023f06ccbf642ab5d507da1ffafb031c0f332dc6/numerary-0.4.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/18/ec/5434c4a6012ef2ff12d0e71b6c341532686ee82d63e5101717abc24eb3f5/pgenlib-0.92.0.tar.gz - - pypi: https://files.pythonhosted.org/packages/5b/bc/246f452431c592a2a424050e8bb9ccf494fb47613fd97c912f4d573a5e3b/phantom_types-3.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bd/06/5c9ed34ec048e51e115cd1b3cf9d9c258e3c75b3105b42db11c0282536a3/pysam-0.23.0-cp312-cp312-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c6/64/3d24181aaea3fb892d4a46f8171845782ee364d60e9494426daf31d12f47/tbb-2022.1.0-py2.py3-none-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/06/bb/09a6dc2f1110b409d6d2f96429969d7466bde9bf4ad8b2e682d851ef104b/tcmlib-1.3.0-py2.py3-none-manylinux_2_28_x86_64.whl - - pypi: . - - pypi: /cellar/users/dlaub/projects/ML4GLand/SeqPro + - pypi: https://files.pythonhosted.org/packages/6d/ad/b485318c8330bfcf68f47487c681d4512d141ae21e667c5b9a6cac4b8e62/seqpro-0.2.4-cp39-abi3-manylinux_2_28_x86_64.whl dev: channels: - url: https://conda.anaconda.org/conda-forge/ @@ -283,7 +275,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py310hf71b8c6_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2025.1.31-hbcca054_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.1.31-hbd8a1cb_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.1.31-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py310h8deb56e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_1.conda @@ -314,9 +306,9 @@ environments: - conda: https://conda.anaconda.org/bioconda/linux-64/htslib-1.21-h566b1c6_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.7-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/icecream-2.1.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.10-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.6.1-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda @@ -326,7 +318,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250127.1-cxx17_hbbce691_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h4585015_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h75ea233_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-19.0.1-h27f8bab_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-19.0.1-hcb10f89_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-19.0.1-hcb10f89_8_cpu.conda @@ -350,7 +342,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-0.23.1-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.36.0-hc4361e1_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.36.0-h0121fbd_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.71.0-he753a82_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.71.0-h8e591d7_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.11.2-default_h0d58e46_1001.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h4ce23a2_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libidn2-2.3.8-ha4ef2c3_0.conda @@ -362,7 +354,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.20.0-hd1b1c89_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.20.0-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-19.0.1-h081d1f1_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h501fc15_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h501fc15_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2024.07.02-hba17884_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.1-hee588c1_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda @@ -393,7 +385,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.1-py310hfc232cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2024.2.2-ha957f24_16.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mpc-1.3.1-h24ddda3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.1-h90cbb55_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda @@ -406,12 +398,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/nlohmann_json-3.12.0-h3f2d84a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numba-0.61.2-py310h699fe88_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.4-py310hefbff90_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.5-py310hefbff90_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.0-h7b32b05_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/optree-0.15.0-py310h3788b33_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.1.1-h17f744e_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/p11-kit-0.24.1-hc5aa10d_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py310h5eaa309_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-0.23.1-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-base-0.23.1-pyhd8ed1ab_0.conda @@ -445,7 +437,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.10.17-hd6af730_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.10-6_cp310.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.10-7_cp310.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.6.0-cpu_mkl_py310_h8ec2884_104.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-cpu-2.6.0-cpu_mkl_hc60beec_104.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda @@ -468,7 +460,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.13.0-hceb3a55_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/termcolor-2.5.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/textual-3.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/textual-3.1.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda @@ -486,6 +478,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-1.0.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py310h3788b33_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.6.16-h0f3a69f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.30.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 @@ -494,22 +487,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py310ha75aee5_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda - pypi: https://files.pythonhosted.org/packages/2d/ea/d6230cc9772edca0fd8c91638dc1c2e2def09b9a22cfabe6532906e96aea/basenji2_pytorch-0.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/53/21f7b97e82772caa61541348427f42435120b32961c92d16f9c8ce9757d6/cslug-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/57/b76283dde9c3e9c3fe8985f6d6b2d79ce3b65b54b190d09e696ba4b80b02/genoray-0.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/8e/0eccb528701273640dd4f13678a0c1352176166aecd1ee7f4fa29355132b/hirola-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/1a/c1/31b3184cba7b257a4a3b5ca5b88b9204ccb7aa02fe3c992280899293ed54/lightning_utilities-0.14.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a9/a6/aa38bddc9f8d90e5ce14023f06ccbf642ab5d507da1ffafb031c0f332dc6/numerary-0.4.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/55/20/93ef95a37e1aa3c3dd2ca1cd1cba8c8849823311d034921c0ec38949ffad/Pgenlib-0.92.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/5b/bc/246f452431c592a2a424050e8bb9ccf494fb47613fd97c912f4d573a5e3b/phantom_types-3.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5a/45/38ae786fb646e5032a982029ad1c0964433e74b67e328d2c9d2fc6691639/pysam-0.23.0-cp310-cp310-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/82/ff/5701f79317a1a03e5ee8a1bf48e7273a8445162a2774e51fc06411a67c89/pytorch_lightning-2.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c6/64/3d24181aaea3fb892d4a46f8171845782ee364d60e9494426daf31d12f47/tbb-2022.1.0-py2.py3-none-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/06/bb/09a6dc2f1110b409d6d2f96429969d7466bde9bf4ad8b2e682d851ef104b/tcmlib-1.3.0-py2.py3-none-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/6d/ad/b485318c8330bfcf68f47487c681d4512d141ae21e667c5b9a6cac4b8e62/seqpro-0.2.4-cp39-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/72/25/973bd6128381951b23cdcd8a9870c6dcfc5606cb864df8eabd82e529f9c1/torchinfo-1.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/ee/4d0a7213a6f412afb3483031009a3b970dd7bed3be24de95ab04fba1c05a/torchmetrics-1.7.1-py3-none-any.whl - - pypi: . - - pypi: /cellar/users/dlaub/projects/ML4GLand/SeqPro docs: channels: - url: https://conda.anaconda.org/conda-forge/ @@ -554,7 +538,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py310hf71b8c6_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2025.1.31-hbcca054_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.1.31-hbd8a1cb_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.1.31-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py310h8deb56e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_1.conda @@ -591,9 +575,9 @@ environments: - conda: https://conda.anaconda.org/bioconda/linux-64/htslib-1.21-h566b1c6_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.7-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/icecream-2.1.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.10-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.6.1-pyha770c72_0.conda @@ -606,7 +590,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.4.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.23.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2024.10.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.4.1-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.7.2-pyh31011fe_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda @@ -615,7 +599,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250127.1-cxx17_hbbce691_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h4585015_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h75ea233_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-19.0.1-h27f8bab_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-19.0.1-hcb10f89_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-19.0.1-hcb10f89_8_cpu.conda @@ -639,7 +623,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-0.23.1-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.36.0-hc4361e1_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.36.0-h0121fbd_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.71.0-he753a82_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.71.0-h8e591d7_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.11.2-default_h0d58e46_1001.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h4ce23a2_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libidn2-2.3.8-ha4ef2c3_0.conda @@ -651,7 +635,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.20.0-hd1b1c89_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.20.0-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-19.0.1-h081d1f1_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h501fc15_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h501fc15_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2024.07.02-hba17884_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.1-hee588c1_2.conda @@ -685,7 +669,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.1-py310hfc232cf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.1.3-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2024.2.2-ha957f24_16.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mpc-1.3.1-h24ddda3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.1-h90cbb55_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda @@ -706,12 +690,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/nlohmann_json-3.12.0-h3f2d84a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numba-0.61.2-py310h699fe88_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.4-py310hefbff90_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.5-py310hefbff90_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.0-h7b32b05_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/optree-0.15.0-py310h3788b33_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.1.1-h17f744e_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/p11-kit-0.24.1-hc5aa10d_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py310h5eaa309_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-0.23.1-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-base-0.23.1-pyhd8ed1ab_0.conda @@ -756,7 +740,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.10-6_cp310.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.10-7_cp310.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.6.0-cpu_mkl_py310_h8ec2884_104.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-cpu-2.6.0-cpu_mkl_hc60beec_104.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda @@ -797,7 +781,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.13.0-hceb3a55_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/termcolor-2.5.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/textual-3.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/textual-3.1.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda @@ -818,7 +802,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-1.0.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py310h3788b33_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.34.1-pyh31011fe_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.6.16-h0f3a69f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.34.2-pyh31011fe_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.30.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/watchfiles-1.0.5-py310h505e2c1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda @@ -832,22 +817,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py310ha75aee5_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda - pypi: https://files.pythonhosted.org/packages/2d/ea/d6230cc9772edca0fd8c91638dc1c2e2def09b9a22cfabe6532906e96aea/basenji2_pytorch-0.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/53/21f7b97e82772caa61541348427f42435120b32961c92d16f9c8ce9757d6/cslug-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/57/b76283dde9c3e9c3fe8985f6d6b2d79ce3b65b54b190d09e696ba4b80b02/genoray-0.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/8e/0eccb528701273640dd4f13678a0c1352176166aecd1ee7f4fa29355132b/hirola-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/1a/c1/31b3184cba7b257a4a3b5ca5b88b9204ccb7aa02fe3c992280899293ed54/lightning_utilities-0.14.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a9/a6/aa38bddc9f8d90e5ce14023f06ccbf642ab5d507da1ffafb031c0f332dc6/numerary-0.4.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/55/20/93ef95a37e1aa3c3dd2ca1cd1cba8c8849823311d034921c0ec38949ffad/Pgenlib-0.92.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/5b/bc/246f452431c592a2a424050e8bb9ccf494fb47613fd97c912f4d573a5e3b/phantom_types-3.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5a/45/38ae786fb646e5032a982029ad1c0964433e74b67e328d2c9d2fc6691639/pysam-0.23.0-cp310-cp310-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/82/ff/5701f79317a1a03e5ee8a1bf48e7273a8445162a2774e51fc06411a67c89/pytorch_lightning-2.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c6/64/3d24181aaea3fb892d4a46f8171845782ee364d60e9494426daf31d12f47/tbb-2022.1.0-py2.py3-none-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/06/bb/09a6dc2f1110b409d6d2f96429969d7466bde9bf4ad8b2e682d851ef104b/tcmlib-1.3.0-py2.py3-none-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/6d/ad/b485318c8330bfcf68f47487c681d4512d141ae21e667c5b9a6cac4b8e62/seqpro-0.2.4-cp39-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/72/25/973bd6128381951b23cdcd8a9870c6dcfc5606cb864df8eabd82e529f9c1/torchinfo-1.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/ee/4d0a7213a6f412afb3483031009a3b970dd7bed3be24de95ab04fba1c05a/torchmetrics-1.7.1-py3-none-any.whl - - pypi: . - - pypi: /cellar/users/dlaub/projects/ML4GLand/SeqPro packages: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 @@ -1322,76 +1298,6 @@ packages: - torchinfo>=1.8.0 - torchmetrics>=1.6.2 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl - name: beartype - version: 0.20.2 - sha256: 5171a91ecf01438a59884f0cde37d2d5da2c992198b53d6ba31db3940f47ff04 - requires_dist: - - autoapi>=0.9.0 ; extra == 'dev' - - click ; extra == 'dev' - - coverage>=5.5 ; extra == 'dev' - - equinox ; sys_platform == 'linux' and extra == 'dev' - - jax[cpu] ; sys_platform == 'linux' and extra == 'dev' - - jaxtyping ; sys_platform == 'linux' and extra == 'dev' - - langchain ; extra == 'dev' - - mypy>=0.800 ; platform_python_implementation != 'PyPy' and extra == 'dev' - - nuitka>=1.2.6 ; sys_platform == 'linux' and extra == 'dev' - - numba ; python_full_version < '3.13' and extra == 'dev' - - numpy ; platform_python_implementation != 'PyPy' and sys_platform != 'darwin' and extra == 'dev' - - pandera ; extra == 'dev' - - pydata-sphinx-theme<=0.7.2 ; extra == 'dev' - - pygments ; extra == 'dev' - - pyright>=1.1.370 ; extra == 'dev' - - pytest>=4.0.0 ; extra == 'dev' - - rich-click ; extra == 'dev' - - sphinx ; extra == 'dev' - - sphinx>=4.2.0,<6.0.0 ; extra == 'dev' - - sphinxext-opengraph>=0.7.5 ; extra == 'dev' - - tox>=3.20.1 ; extra == 'dev' - - typing-extensions>=3.10.0.0 ; extra == 'dev' - - xarray ; extra == 'dev' - - autoapi>=0.9.0 ; extra == 'doc-rtd' - - pydata-sphinx-theme<=0.7.2 ; extra == 'doc-rtd' - - sphinx>=4.2.0,<6.0.0 ; extra == 'doc-rtd' - - sphinxext-opengraph>=0.7.5 ; extra == 'doc-rtd' - - click ; extra == 'test' - - coverage>=5.5 ; extra == 'test' - - equinox ; sys_platform == 'linux' and extra == 'test' - - jax[cpu] ; sys_platform == 'linux' and extra == 'test' - - jaxtyping ; sys_platform == 'linux' and extra == 'test' - - langchain ; extra == 'test' - - mypy>=0.800 ; platform_python_implementation != 'PyPy' and extra == 'test' - - nuitka>=1.2.6 ; sys_platform == 'linux' and extra == 'test' - - numba ; python_full_version < '3.13' and extra == 'test' - - numpy ; platform_python_implementation != 'PyPy' and sys_platform != 'darwin' and extra == 'test' - - pandera ; extra == 'test' - - pygments ; extra == 'test' - - pyright>=1.1.370 ; extra == 'test' - - pytest>=4.0.0 ; extra == 'test' - - rich-click ; extra == 'test' - - sphinx ; extra == 'test' - - tox>=3.20.1 ; extra == 'test' - - typing-extensions>=3.10.0.0 ; extra == 'test' - - xarray ; extra == 'test' - - click ; extra == 'test-tox' - - equinox ; sys_platform == 'linux' and extra == 'test-tox' - - jax[cpu] ; sys_platform == 'linux' and extra == 'test-tox' - - jaxtyping ; sys_platform == 'linux' and extra == 'test-tox' - - langchain ; extra == 'test-tox' - - mypy>=0.800 ; platform_python_implementation != 'PyPy' and extra == 'test-tox' - - nuitka>=1.2.6 ; sys_platform == 'linux' and extra == 'test-tox' - - numba ; python_full_version < '3.13' and extra == 'test-tox' - - numpy ; platform_python_implementation != 'PyPy' and sys_platform != 'darwin' and extra == 'test-tox' - - pandera ; extra == 'test-tox' - - pygments ; extra == 'test-tox' - - pyright>=1.1.370 ; extra == 'test-tox' - - pytest>=4.0.0 ; extra == 'test-tox' - - rich-click ; extra == 'test-tox' - - sphinx ; extra == 'test-tox' - - typing-extensions>=3.10.0.0 ; extra == 'test-tox' - - xarray ; extra == 'test-tox' - - coverage>=5.5 ; extra == 'test-tox-coverage' - requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.13.4-pyha770c72_0.conda sha256: ddb0df12fd30b2d36272f5daf6b6251c7625d6a99414d7ea930005bbaecad06d md5: 9f07c4fc992adb2d6c30da7fab3959a7 @@ -1485,13 +1391,15 @@ packages: purls: [] size: 206884 timestamp: 1744127994291 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2025.1.31-hbcca054_0.conda - sha256: bf832198976d559ab44d6cdb315642655547e26d826e34da67cbee6624cda189 - md5: 19f3a56f68d2fd06c516076bff482c52 +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.1.31-hbd8a1cb_1.conda + sha256: 43878eddf8eb46e3ba7fcbe77a2f8d00aab9a66d9ff63bc4d072b7af17481197 + md5: e74273d9fc5ab633d613cde474b55157 + depends: + - __unix license: ISC purls: [] - size: 158144 - timestamp: 1738298224464 + size: 158834 + timestamp: 1745260472197 - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.1.31-pyhd8ed1ab_0.conda sha256: 42a78446da06a2568cb13e69be3355169fbd0ea424b00fc80b7d840f5baaacf3 md5: c207fa5ac7ea99b149344385a9c0880d @@ -1866,57 +1774,6 @@ packages: - pkg:pypi/fsspec?source=compressed-mapping size: 142117 timestamp: 1743437355974 -- pypi: https://files.pythonhosted.org/packages/b7/57/b76283dde9c3e9c3fe8985f6d6b2d79ce3b65b54b190d09e696ba4b80b02/genoray-0.7.0-py3-none-any.whl - name: genoray - version: 0.7.0 - sha256: b6b864441c847f685a990047a590ecfad04fdd37fd077bf4fb984ab4ed81e315 - requires_dist: - - attrs - - awkward - - cyvcf2>=0.31.1 - - hirola>=0.3.0 - - loguru>=0.7.0 - - more-itertools>=10 - - numba - - numpy>=1.26 - - pandas>=2.2.2 - - pgenlib>=0.92.0 - - phantom-types>=3 - - polars>=1.26 - - pyarrow>=16 - - pyranges>=0.1.3 - - seqpro>=0.2.3 - - tqdm>=4.65 - - typing-extensions>=4.11 - requires_python: '>=3.9' -- pypi: . - name: genvarloader - version: 0.12.0 - sha256: e547e134d9f5e5966cc728f918b5cf9a3b0943ee268461fc650cac7a9247b2a1 - requires_dist: - - numba>=0.58.1 - - loguru - - attrs - - natsort - - polars>=1.26 - - cyvcf2 - - pandera - - pysam - - pyarrow - - pyranges - - more-itertools - - tqdm - - pybigwig - - einops - - tbb - - joblib - - pooch - - seqpro>=0.2.3 - - awkward - - hirola>=0.3,<0.4 - - genoray>=0.7.0 - requires_python: '>=3.10,<3.13' - editable: true - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda sha256: 6c33bf0c4d8f418546ba9c250db4e4221040936aef8956353bc764d4877bc39a md5: d411fc29e338efb48c5fd4576d71d881 @@ -2071,9 +1928,9 @@ packages: - pkg:pypi/hyperframe?source=hash-mapping size: 17397 timestamp: 1737618427549 -- conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.3-pyha770c72_0.conda - sha256: 7c4449b93afbc10ce810d6ed9faeb28dbda47f21299b8f70879b74d27a2130ca - md5: 5c66e43d4aee5bac7af495f806dbbef1 +- conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.7-pyha770c72_0.conda + sha256: 5d38590c340a7967ce61521592d67a53915c04207808330cc8027b8fa3d82b21 + md5: 13ad8ceaadfd3776229a6d2bc91cafa4 depends: - attrs >=22.2.0 - click >=7.0 @@ -2084,8 +1941,8 @@ packages: license: MPL-2.0 purls: - pkg:pypi/hypothesis?source=hash-mapping - size: 353436 - timestamp: 1744980919660 + size: 355402 + timestamp: 1745379310409 - conda: https://conda.anaconda.org/conda-forge/noarch/icecream-2.1.4-pyhd8ed1ab_0.conda sha256: 0a724bd8cce7200d0d880e4a5ddab8605fea19d799c18f035a55e16939013898 md5: 6bca4364a57090f77e9c3920e2cc4d1e @@ -2101,9 +1958,9 @@ packages: - pkg:pypi/icecream?source=hash-mapping size: 18697 timestamp: 1736498252208 -- conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.9-pyhd8ed1ab_0.conda - sha256: b74a2ffa7be9278d7b8770b6870c360747149c683865e63476b0e1db23038429 - md5: 542f45bf054c6b9cf8d00a3b1976f945 +- conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.10-pyhd8ed1ab_0.conda + sha256: 02f47df6c6982b796aecb086b434627207e87c0a90a50226f11f2cc99c089770 + md5: 8d5b9b702810fb3054d52ba146023bc3 depends: - python >=3.9 - ukkonen @@ -2111,8 +1968,8 @@ packages: license_family: MIT purls: - pkg:pypi/identify?source=hash-mapping - size: 78600 - timestamp: 1741502780749 + size: 79057 + timestamp: 1745098917031 - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda sha256: d7a472c9fd479e2e8dcb83fb8d433fce971ea369d704ece380e876f9c3494e87 md5: 39a4f67be3286c86d696df570b1201b7 @@ -2288,18 +2145,18 @@ packages: - pkg:pypi/jsonschema?source=hash-mapping size: 74256 timestamp: 1733472818764 -- conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2024.10.1-pyhd8ed1ab_1.conda - sha256: 37127133837444cf0e6d1a95ff5a505f8214ed4e89e8e9343284840e674c6891 - md5: 3b519bc21bc80e60b456f1e62962a766 +- conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.4.1-pyh29332c3_0.conda + sha256: 66fbad7480f163509deec8bd028cd3ea68e58022982c838683586829f63f3efa + md5: 41ff526b1083fde51fbdc93f29282e0e depends: - python >=3.9 - referencing >=0.31.0 + - python license: MIT - license_family: MIT purls: - pkg:pypi/jsonschema-specifications?source=hash-mapping - size: 16170 - timestamp: 1733493624968 + size: 19168 + timestamp: 1745424244298 - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda sha256: 19d8bd5bb2fde910ec59e081eeb59529491995ce0d653a5209366611023a0b3a md5: 4ebae00eae9705b0c3d6d1018a81d047 @@ -2409,25 +2266,25 @@ packages: purls: [] size: 1325007 timestamp: 1742369558286 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h4585015_3.conda - sha256: 2466803e26ae9dbd2263de3a102b572b741c056549875c04b6ec10830bd5d338 - md5: a28808eae584c7f519943719b2a2b386 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h75ea233_4.conda + sha256: d49b2a3617b689763d1377a5d1fbfc3c914ee0afa26b3c1858e1c4329329c6df + md5: b80309616f188ac77c4740acba40f796 depends: - __glibc >=2.17,<3.0.a0 - bzip2 >=1.0.8,<2.0a0 - libgcc >=13 - - liblzma >=5.6.3,<6.0a0 - - libxml2 >=2.13.5,<2.14.0a0 + - liblzma >=5.8.1,<6.0a0 + - libxml2 >=2.13.7,<2.14.0a0 - libzlib >=1.3.1,<2.0a0 - lz4-c >=1.10.0,<1.11.0a0 - lzo >=2.10,<3.0a0 - - openssl >=3.4.0,<4.0a0 - - zstd >=1.5.6,<1.6.0a0 + - openssl >=3.5.0,<4.0a0 + - zstd >=1.5.7,<1.6.0a0 license: BSD-2-Clause license_family: BSD purls: [] - size: 878021 - timestamp: 1734020918345 + size: 866358 + timestamp: 1745335292389 - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-19.0.1-h27f8bab_8_cpu.conda build_number: 8 sha256: 20de06f0fa883263a86bdcb04332a25b2c1c57321dda42e92a815a481adf7fab @@ -2837,28 +2694,28 @@ packages: purls: [] size: 785719 timestamp: 1741878763994 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.71.0-he753a82_0.conda - sha256: bd8686a8aa0f840e7a7e63b3be57200d36c136cf1c6280b44a98b89ffac06186 - md5: 65e3fc5e73aa153bb069c1baec51fc12 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.71.0-h8e591d7_1.conda + sha256: 37267300b25f292a6024d7fd9331085fe4943897940263c3a41d6493283b2a18 + md5: c3cfd72cbb14113abee7bbd86f44ad69 depends: - __glibc >=2.17,<3.0.a0 - - c-ares >=1.34.4,<2.0a0 + - c-ares >=1.34.5,<2.0a0 - libabseil * cxx17* - - libabseil >=20250127.0,<20250128.0a0 + - libabseil >=20250127.1,<20250128.0a0 - libgcc >=13 - libprotobuf >=5.29.3,<5.29.4.0a0 - libre2-11 >=2024.7.2 - libstdcxx >=13 - libzlib >=1.3.1,<2.0a0 - - openssl >=3.4.1,<4.0a0 + - openssl >=3.5.0,<4.0a0 - re2 constrains: - grpc-cpp =1.71.0 license: Apache-2.0 license_family: APACHE purls: [] - size: 8228423 - timestamp: 1741431701085 + size: 7920187 + timestamp: 1745229332239 - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.11.2-default_h0d58e46_1001.conda sha256: d14c016482e1409ae1c50109a9ff933460a50940d2682e745ab1c172b5282a69 md5: 804ca9e91bcaea0824a341d55b1684f2 @@ -3036,21 +2893,21 @@ packages: purls: [] size: 1252840 timestamp: 1744939311536 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h501fc15_0.conda - sha256: 9965b1ada1f997202ad8c5a960e69057280b7b926c718df9b07c62924d9c1d73 - md5: 452518a9744fbac05fb45531979bdf29 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h501fc15_1.conda + sha256: 691af28446345674c6b3fb864d0e1a1574b6cc2f788e0f036d73a6b05dcf81cf + md5: edb86556cf4a0c133e7932a1597ff236 depends: - __glibc >=2.17,<3.0.a0 - libabseil * cxx17* - - libabseil >=20250127.0,<20250128.0a0 + - libabseil >=20250127.1,<20250128.0a0 - libgcc >=13 - libstdcxx >=13 - libzlib >=1.3.1,<2.0a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 3352450 - timestamp: 1741126291267 + size: 3358788 + timestamp: 1745159546868 - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2024.07.02-hba17884_3.conda sha256: 392ec1e49370eb03270ffd4cc8d727f8e03e1e3a92b12f10c53f396ae4554668 md5: 545e93a513c10603327c76c15485e946 @@ -3570,17 +3427,17 @@ packages: purls: [] size: 124718448 timestamp: 1730231808335 -- conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.6.0-pyhd8ed1ab_0.conda - sha256: e017ede184823b12a194d058924ca26e1129975cee1cae47f69d6115c0478b55 - md5: 9b1225d67235df5411dbd2c94a5876b7 +- conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.7.0-pyhd8ed1ab_0.conda + sha256: d0c2253dcb1da6c235797b57d29de688dabc2e48cc49645b1cff2b52b7907428 + md5: 7c65a443d58beb0518c35b26c70e201d depends: - python >=3.9 license: MIT license_family: MIT purls: - pkg:pypi/more-itertools?source=hash-mapping - size: 58739 - timestamp: 1736883940984 + size: 61359 + timestamp: 1745349566387 - conda: https://conda.anaconda.org/conda-forge/linux-64/mpc-1.3.1-h24ddda3_1.conda sha256: 1bf794ddf2c8b3a3e14ae182577c624fa92dea975537accff4bc7e5fea085212 md5: aa14b9a5196a6d8dd364164b7ce56acf @@ -3903,21 +3760,9 @@ packages: - pkg:pypi/numba?source=compressed-mapping size: 5892431 timestamp: 1744232231353 -- pypi: https://files.pythonhosted.org/packages/a9/a6/aa38bddc9f8d90e5ce14023f06ccbf642ab5d507da1ffafb031c0f332dc6/numerary-0.4.4-py3-none-any.whl - name: numerary - version: 0.4.4 - sha256: ad955ddf7f5275f8e52f5520b2d6c654cc3bf1e3ae4bfb45664c9d51b208d0c6 - requires_dist: - - beartype~=0.15 - - pre-commit ; extra == 'dev' - - numpy~=1.25 ; extra == 'dev' - - sympy~=1.9 ; extra == 'dev' - - tox~=4.0 ; extra == 'dev' - - versioningit~=2.0 ; extra == 'dev' - requires_python: '>=3.8' -- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.4-py310hefbff90_0.conda - sha256: 98d7fc28869de4a43909e36317f42a1c8b2c131315b43b0d74077422b70682c3 - md5: b3a99849aa14b78d32250c0709e8792a +- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.5-py310hefbff90_0.conda + sha256: f0c9f295a58dabdc1ff9ceadd31ab7a6e8d3c903c37f749bfd058afcb0d534ed + md5: 5526bc875ec897f0d335e38da832b6ee depends: - __glibc >=2.17,<3.0.a0 - libblas >=3.9.0,<4.0a0 @@ -3930,14 +3775,13 @@ packages: constrains: - numpy-base <0a0 license: BSD-3-Clause - license_family: BSD purls: - pkg:pypi/numpy?source=hash-mapping - size: 7981846 - timestamp: 1742255356889 -- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.4-py312h72c5963_0.conda - sha256: 47b3b2ae21efb227db7410f2701291cf47d816fd96461bdede415d7d75d8a436 - md5: 3f2871f111d8c0abd9c3150a8627507e + size: 7963864 + timestamp: 1745119540801 +- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.5-py312h72c5963_0.conda + sha256: af293ba6f715983f71543ed0111e6bb77423d409c1d13062474601257c2eebca + md5: 505bcfc142b97010c162863c38d90016 depends: - __glibc >=2.17,<3.0.a0 - libblas >=3.9.0,<4.0a0 @@ -3950,11 +3794,10 @@ packages: constrains: - numpy-base <0a0 license: BSD-3-Clause - license_family: BSD purls: - - pkg:pypi/numpy?source=compressed-mapping - size: 8424727 - timestamp: 1742255434709 + - pkg:pypi/numpy?source=hash-mapping + size: 8543883 + timestamp: 1745119461819 - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.0-h7b32b05_0.conda sha256: 38285d280f84f1755b7c54baf17eccf2e3e696287954ce0adca16546b85ee62c md5: bb539841f2a3fde210f387d00ed4bb9d @@ -4013,17 +3856,17 @@ packages: purls: [] size: 4702497 timestamp: 1654868759643 -- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - sha256: da157b19bcd398b9804c5c52fc000fcb8ab0525bdb9c70f95beaa0bb42f85af1 - md5: 3bfed7e6228ebf2f7b9eaa47f1b4e2aa +- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + sha256: 289861ed0c13a15d7bbb408796af4de72c2fe67e2bcb0de98f4c3fce259d7991 + md5: 58335b26c38bf4a20f399384c33cbcf9 depends: - python >=3.8 + - python license: Apache-2.0 - license_family: APACHE purls: - - pkg:pypi/packaging?source=hash-mapping - size: 60164 - timestamp: 1733203368787 + - pkg:pypi/packaging?source=compressed-mapping + size: 62477 + timestamp: 1745345660407 - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py310h5eaa309_3.conda sha256: 43fd80e57ebc9e0c00d169aafce533c49359174dea327a7fa8ca7454628a56f7 md5: 07697a584fab513ce895c4511f7a2403 @@ -4208,49 +4051,6 @@ packages: - pkg:pypi/pexpect?source=compressed-mapping size: 53561 timestamp: 1733302019362 -- pypi: https://files.pythonhosted.org/packages/18/ec/5434c4a6012ef2ff12d0e71b6c341532686ee82d63e5101717abc24eb3f5/pgenlib-0.92.0.tar.gz - name: pgenlib - version: 0.92.0 - sha256: 805c87976d8371d5c33a1d87ba1bd2f08150805119b1ff0453bb2aca813b74f9 - requires_dist: - - numpy>=1.19.0 - requires_python: '>=3.5' -- pypi: https://files.pythonhosted.org/packages/55/20/93ef95a37e1aa3c3dd2ca1cd1cba8c8849823311d034921c0ec38949ffad/Pgenlib-0.92.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - name: pgenlib - version: 0.92.0 - sha256: 56cc9715c3464f2d5559f0779cf671922c7651ed2aff3b851974968b86c167f7 - requires_dist: - - numpy>=1.19.0 - requires_python: '>=3.5' -- pypi: https://files.pythonhosted.org/packages/5b/bc/246f452431c592a2a424050e8bb9ccf494fb47613fd97c912f4d573a5e3b/phantom_types-3.0.2-py3-none-any.whl - name: phantom-types - version: 3.0.2 - sha256: 509cb32babae7d2d62ab3cdc36e3f11e6324ed21f2ce13c7be598377d49d4e63 - requires_dist: - - typeguard>=4,!=4.3.* - - typing-extensions>=4.3.0 - - numerary>=0.4.3 - - phantom-types[phonenumbers] ; extra == 'all' - - phantom-types[pydantic] ; extra == 'all' - - phantom-types[dateutil] ; extra == 'all' - - phantom-types[hypothesis] ; extra == 'all' - - python-dateutil>=2.8.2 ; extra == 'dateutil' - - phantom-types[all] ; extra == 'docs' - - sphinx ; extra == 'docs' - - sphinx-autodoc-typehints ; extra == 'docs' - - furo ; extra == 'docs' - - hypothesis[zoneinfo]>=6.68.0 ; extra == 'hypothesis' - - phonenumbers>=8.12.41 ; extra == 'phonenumbers' - - pydantic>=1.9.0,<2 ; extra == 'pydantic' - - mypy>=0.991 ; extra == 'test' - - pytest ; extra == 'test' - - pytest-mypy-plugins>=1.9.3 ; extra == 'test' - - coverage ; extra == 'test' - - phantom-types[all] ; extra == 'type-check' - - mypy ; extra == 'type-check' - - pytest ; extra == 'type-check' - - types-python-dateutil ; extra == 'type-check' - requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-pyhd8ed1ab_1004.conda sha256: e2ac3d66c367dada209fc6da43e645672364b9fd5f9d28b9f016e24b81af475b md5: 11a9d1d09a3615fc07c3faf79bc0b943 @@ -4728,16 +4528,6 @@ packages: - pkg:pypi/pyranges?source=hash-mapping size: 1488324 timestamp: 1741965990888 -- pypi: https://files.pythonhosted.org/packages/5a/45/38ae786fb646e5032a982029ad1c0964433e74b67e328d2c9d2fc6691639/pysam-0.23.0-cp310-cp310-manylinux_2_28_x86_64.whl - name: pysam - version: 0.23.0 - sha256: e681d04efe21040b3888f7484f84a2636433503cfb903bbf9b91d671726ceaed - requires_python: '>=3.6' -- pypi: https://files.pythonhosted.org/packages/bd/06/5c9ed34ec048e51e115cd1b3cf9d9c258e3c75b3105b42db11c0282536a3/pysam-0.23.0-cp312-cp312-manylinux_2_28_x86_64.whl - name: pysam - version: 0.23.0 - sha256: 4fd54bae72a832317aab23ad45970f9091ac2c7c233c5a6826941095fbd7f103 - requires_python: '>=3.6' - conda: https://conda.anaconda.org/bioconda/linux-64/pysam-0.23.0-py310h64e62c9_0.tar.bz2 sha256: a6313ee84df3b44a30fb594d5ef2f2e59b0984b9c631baf2560f561d71627e5e md5: f04bd0d137ca5bdb9c6073b28e35ea0e @@ -4930,28 +4720,28 @@ packages: - pkg:pypi/tzdata?source=compressed-mapping size: 144160 timestamp: 1742745254292 -- conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.10-6_cp310.conda - build_number: 6 - sha256: 716287b4c15fb9a78b49a627dd7057c9fc7a29c6d4056b506fc84dab2cd2ca85 - md5: 01f0f2104b8466714804a72e511de599 +- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.10-7_cp310.conda + build_number: 7 + sha256: 1316c66889313d9caebcfa5d5e9e6af25f8ba09396fc1bc196a08a3febbbabb8 + md5: 44e871cba2b162368476a84b8d040b6c constrains: - python 3.10.* *_cpython license: BSD-3-Clause license_family: BSD purls: [] - size: 6858 - timestamp: 1743483189130 -- conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-6_cp312.conda - build_number: 6 - sha256: 09aff7ca31d1dbee63a504dba89aefa079b7c13a50dae18e1fe40a40ea71063e - md5: 95bd67b1113859774c30418e8481f9d8 + size: 6974 + timestamp: 1745258864549 +- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-7_cp312.conda + build_number: 7 + sha256: a1bbced35e0df66cc713105344263570e835625c28d1bdee8f748f482b2d7793 + md5: 0dfcdc155cf23812a0c9deada86fb723 constrains: - python 3.12.* *_cpython license: BSD-3-Clause license_family: BSD purls: [] - size: 6872 - timestamp: 1743483197238 + size: 6971 + timestamp: 1745258861359 - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.6.0-cpu_mkl_py310_h8ec2884_104.conda sha256: e5fa4d701e50de1e7db15b19225d04cab0b865e57866e28e2904a328577e508a md5: df91ebc9c16c4332750f739f4b8b6d37 @@ -5303,10 +5093,10 @@ packages: purls: [] size: 352907 timestamp: 1743805258946 -- pypi: /cellar/users/dlaub/projects/ML4GLand/SeqPro +- pypi: https://files.pythonhosted.org/packages/6d/ad/b485318c8330bfcf68f47487c681d4512d141ae21e667c5b9a6cac4b8e62/seqpro-0.2.4-cp39-abi3-manylinux_2_28_x86_64.whl name: seqpro version: 0.2.4 - sha256: c8ffe010a4e5d596388366e26fea9f87b9a99b095a8ce802a7fea9a08723ad34 + sha256: 13bbfae57a5c15276522f4027c3c88a2b074f7bf1b4d4a56ae76b809ee25c4d7 requires_dist: - numba>=0.58.1 - numpy>=1.26.0 @@ -5319,7 +5109,6 @@ packages: - setuptools>=70 - awkward>=2.5.0 requires_python: '>=3.9' - editable: true - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.8.2-pyhff2d567_0.conda sha256: 91d664ace7c22e787775069418daa9f232ee8bafdd0a6a080a5ed2395a6fa6b2 md5: 9bddfdbf4e061821a1a443f93223be61 @@ -5331,17 +5120,17 @@ packages: - pkg:pypi/setuptools?source=hash-mapping size: 777736 timestamp: 1740654030775 -- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-78.1.0-pyhff2d567_0.conda - sha256: d4c74d2140f2fbc72fe5320cbd65f3fd1d1f7832ab4d7825c37c38ab82440ae2 - md5: a42da9837e46c53494df0044c3eb1f53 +- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-79.0.0-pyhff2d567_0.conda + sha256: b0415e169a4b39ebe4fbbbb224a45607dcceb77162761dfd8bb94533a6ff9f97 + md5: 36c8697843eb7573fe3dde0e36193a06 depends: - python >=3.9 license: MIT license_family: MIT purls: - pkg:pypi/setuptools?source=compressed-mapping - size: 786557 - timestamp: 1743775941985 + size: 787746 + timestamp: 1745258095343 - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_1.conda sha256: 0557c090913aa63cdbe821dbdfa038a321b488e22bc80196c4b3b1aace4914ef md5: 7c3c2a0f3ebdea2bbc35538d162b43bf @@ -5656,12 +5445,6 @@ packages: - pkg:pypi/tabulate?source=hash-mapping size: 37554 timestamp: 1733589854804 -- pypi: https://files.pythonhosted.org/packages/c6/64/3d24181aaea3fb892d4a46f8171845782ee364d60e9494426daf31d12f47/tbb-2022.1.0-py2.py3-none-manylinux_2_28_x86_64.whl - name: tbb - version: 2022.1.0 - sha256: 4992a3f2268b33f9a7b4c274af9d7001f550e74246436647b267d58e4947628a - requires_dist: - - tcmlib==1.* - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.13.0-hceb3a55_1.conda sha256: 65463732129899770d54b1fbf30e1bb82fdebda9d7553caf08d23db4590cd691 md5: ba7726b8df7b9d34ea80e82b097a4893 @@ -5688,10 +5471,6 @@ packages: purls: [] size: 179639 timestamp: 1743578685131 -- pypi: https://files.pythonhosted.org/packages/06/bb/09a6dc2f1110b409d6d2f96429969d7466bde9bf4ad8b2e682d851ef104b/tcmlib-1.3.0-py2.py3-none-manylinux_2_28_x86_64.whl - name: tcmlib - version: 1.3.0 - sha256: c328ba464c556e46174879c694cafd17ba17c3e7406a79fee47bb3e8c9c6a6c5 - conda: https://conda.anaconda.org/conda-forge/noarch/termcolor-2.5.0-pyhd8ed1ab_1.conda sha256: 4a7e13776ebd78afcdba3985ea42317e4e0a20722d2c27ecaae3d9f8849e6516 md5: 1ce02d60767af357e864ce61895268d2 @@ -5703,9 +5482,9 @@ packages: - pkg:pypi/termcolor?source=hash-mapping size: 12665 timestamp: 1733754731291 -- conda: https://conda.anaconda.org/conda-forge/noarch/textual-3.1.0-pyhd8ed1ab_0.conda - sha256: d3c0c74096ba6ba9e9ce5c5d69159fa1a7e57f14badf7d2f237455b34764a268 - md5: 4b8b4beab12cbc0053564144c3417802 +- conda: https://conda.anaconda.org/conda-forge/noarch/textual-3.1.1-pyhd8ed1ab_0.conda + sha256: f926dce75f0f3e304514d89bb4b339aafc88c2cd3af30e881bc9b5f2d664f2b4 + md5: 20f13c491232f6c7750ec81b90ac430f depends: - linkify-it-py >=1,<3 - markdown-it-py >=2.1.0 @@ -5716,14 +5495,13 @@ packages: - typing-extensions >=4.4.0,<5.0.0 - typing_extensions >=4.4.0,<5.0.0 constrains: - - tree_sitter >=0.23.0 - tree_sitter_languages =1.10.2 + - tree_sitter >=0.23.0 license: MIT - license_family: MIT purls: - pkg:pypi/textual?source=hash-mapping - size: 472881 - timestamp: 1744485553172 + size: 472651 + timestamp: 1745391832694 - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda sha256: cad582d6f978276522f84bd209a5ddac824742fe2d452af6acf900f8650a73a2 md5: f1acf5fdefa8300de697982bcb1761c9 @@ -6135,9 +5913,22 @@ packages: - pkg:pypi/urllib3?source=hash-mapping size: 100791 timestamp: 1744323705540 -- conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.34.1-pyh31011fe_0.conda - sha256: 12fff3fc66d0214db3b68388f9b543c0f32a74ab69bbc48f926287b76f84b4ba - md5: b16572c04a572377c4010aae0b16b1b7 +- conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.6.16-h0f3a69f_0.conda + sha256: 52f8746268ebbb8acca1fd911b384707ee9ab0ed5530aa53f89c7fb7e1ecce71 + md5: 930f4ef778aef7e12d237534a39164e9 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + constrains: + - __glibc >=2.17 + license: Apache-2.0 OR MIT + purls: [] + size: 12010845 + timestamp: 1745316870539 +- conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.34.2-pyh31011fe_0.conda + sha256: d6c504920400354a89e597c5d355288e77481d638cca0489fea3530167895f15 + md5: 7e9f164470d693a5d2537c6b2ce1d9ea depends: - __unix - click >=7.0 @@ -6147,9 +5938,9 @@ packages: license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/uvicorn?source=compressed-mapping - size: 48804 - timestamp: 1744642145682 + - pkg:pypi/uvicorn?source=hash-mapping + size: 48985 + timestamp: 1745173533667 - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.30.0-pyhd8ed1ab_0.conda sha256: 1dbb24b144f7b8400b30cca760cdee1b7de61716cd7f06d7ea82b741645823ce md5: c0e0b4a09aa5a698a1bdd4ebfe28be38 diff --git a/pixi.toml b/pixi.toml index 8de234fd..8c9bb046 100644 --- a/pixi.toml +++ b/pixi.toml @@ -37,12 +37,11 @@ filelock = "*" patchelf = "*" commitizen = "*" typer = "*" +uv = "*" [pypi-dependencies] -genvarloader = { path = ".", editable = true } -seqpro = { path = '/cellar/users/dlaub/projects/ML4GLand/SeqPro', editable = true } hirola = "==0.3" -genoray = "==0.7.0" +seqpro = "==0.2.4" [feature.docs.dependencies] sphinx = ">=7.4.7" @@ -82,11 +81,13 @@ docs = { features = ["docs", "pytorch-cpu", "basenji2", "py310"] } # docs-gpu = { features = ["docs", "pytorch-gpu", "basenji2", "py310"] } [tasks] +install = "uv pip install -e /cellar/users/dlaub/projects/ML4GLand/SeqPro -e /cellar/users/dlaub/projects/genoray -e ." pre-commit = "pre-commit install --hook-type commit-msg" gen = "python tests/data/generate_ground_truth.py" test = "pytest tests" [feature.docs.tasks] +install = "uv pip install -e /cellar/users/dlaub/projects/ML4GLand/SeqPro -e /cellar/users/dlaub/projects/genoray -e ." i-kernel = "ipython kernel install --user --name 'gvl-docs' --display-name 'GVL Docs'" i-kernel-gpu = "ipython kernel install --user --name 'gvl-docs-gpu' --display-name 'GVL Docs GPU'" doc = "cd docs && make clean && make html" diff --git a/pyproject.toml b/pyproject.toml index fb754a2e..5faea0b9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,10 +27,10 @@ dependencies = [ "tbb", "joblib", "pooch", - "seqpro>=0.2.3", "awkward", "hirola>=0.3,<0.4", - "genoray>=0.7.0", + # "seqpro>=0.2.4", + # "genoray>=0.7.0", ] [project.urls] diff --git a/python/genvarloader/_dataset/_genotypes.py b/python/genvarloader/_dataset/_genotypes.py index b47cd528..1dbf86ea 100644 --- a/python/genvarloader/_dataset/_genotypes.py +++ b/python/genvarloader/_dataset/_genotypes.py @@ -761,7 +761,7 @@ def get_diffs_sparse( return diffs -@nb.njit(parallel=True, nogil=True, cache=True) +# @nb.njit(parallel=True, nogil=True, cache=True) def reconstruct_haplotypes_from_sparse( out: NDArray[np.uint8], out_offsets: NDArray[np.int64], @@ -872,7 +872,7 @@ def reconstruct_haplotypes_from_sparse( ) -@nb.njit(nogil=True, cache=True) +# @nb.njit(nogil=True, cache=True) def reconstruct_haplotype_from_sparse( offset_idx: int, geno_v_idxs: NDArray[np.int32], @@ -1314,7 +1314,10 @@ def choose_exonic_variants( for query in nb.prange(n_regions): for hap in range(ploidy): o_idx = geno_offset_idxs[query, hap] - o_s, o_e = geno_offsets[o_idx], geno_offsets[o_idx + 1] + if geno_offsets.ndim == 1: + o_s, o_e = geno_offsets[o_idx], geno_offsets[o_idx + 1] + else: + o_s, o_e = geno_offsets[o_idx] lengths[query, hap] = o_e - o_s keep_offsets = np.empty(n_regions * ploidy + 1, np.int64) keep_offsets[0] = 0 diff --git a/python/genvarloader/_dataset/_reconstruct.py b/python/genvarloader/_dataset/_reconstruct.py index ea28bc9e..5ec6ee15 100644 --- a/python/genvarloader/_dataset/_reconstruct.py +++ b/python/genvarloader/_dataset/_reconstruct.py @@ -316,7 +316,7 @@ def _haplotype_ilens( starts=jittered_regions[:, 1], ends=jittered_regions[:, 2], geno_offset_idxs=geno_offset_idxs, - geno_v_idxs=self.genotypes.variant_idxs, + geno_v_idxs=self.genotypes.data, geno_offsets=self.genotypes.offsets, positions=self.variants.positions, sizes=self.variants.sizes, @@ -324,9 +324,9 @@ def _haplotype_ilens( # (r s p) hap_ilens = get_diffs_sparse( geno_offset_idxs=geno_offset_idxs, - geno_v_idxs=self.genotypes.variant_idxs, + geno_v_idxs=self.genotypes.data, geno_offsets=self.genotypes.offsets, - size_diffs=self.variants.sizes, + ilens=self.variants.sizes, keep=keep, keep_offsets=keep_offsets, ) @@ -407,7 +407,7 @@ def get_haps_and_shifts( starts=regions[:, 1], ends=regions[:, 2], geno_offset_idxs=geno_offset_idx, - geno_v_idxs=self.genotypes.variant_idxs, + geno_v_idxs=self.genotypes.data, geno_offsets=self.genotypes.offsets, positions=self.variants.positions, sizes=self.variants.sizes, @@ -521,7 +521,6 @@ def _get_haplotypes( keep_offsets: Optional[NDArray[np.int64]], annotate: Literal[True], ) -> Tuple[Ragged[np.bytes_], Ragged[np.int32], Ragged[np.int32]]: ... - def _get_haplotypes( self, geno_offset_idx: NDArray[np.intp], diff --git a/python/genvarloader/_dataset/_write.py b/python/genvarloader/_dataset/_write.py index 835badb0..2859744f 100644 --- a/python/genvarloader/_dataset/_write.py +++ b/python/genvarloader/_dataset/_write.py @@ -253,7 +253,7 @@ def _write_from_vcf(path: Path, bed: pl.DataFrame, vcf: VCF, max_mem: int): pl.DataFrame( { - "POS": vcf._index.gr.df["Start"], + "POS": vcf._index.df['POS'] - 1, "ALT": vcf._index.df["ALT"].list.first(), "ILEN": vcf._index.df.select( pl.col("ALT").list.first().str.len_bytes().cast(pl.Int32) From f05489543ea64c5eac43e19436bdc62e507bde58 Mon Sep 17 00:00:00 2001 From: d-laub Date: Fri, 25 Apr 2025 11:26:48 -0700 Subject: [PATCH 17/53] build: update dependencies --- pixi.lock | 175 ++++++++++++++++++++++++++++++++-- pixi.toml | 9 +- pyproject.toml | 4 +- python/genvarloader/_dummy.py | 2 +- 4 files changed, 178 insertions(+), 12 deletions(-) diff --git a/pixi.lock b/pixi.lock index 0f5b8596..1765a0c6 100644 --- a/pixi.lock +++ b/pixi.lock @@ -235,9 +235,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312h66e93f0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda + - pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/53/21f7b97e82772caa61541348427f42435120b32961c92d16f9c8ce9757d6/cslug-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/69/3a19d72e9816baae81766eccd2ea2a0ff4245542911ce0d25631606e4de4/genoray-0.7.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/8e/0eccb528701273640dd4f13678a0c1352176166aecd1ee7f4fa29355132b/hirola-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/6d/ad/b485318c8330bfcf68f47487c681d4512d141ae21e667c5b9a6cac4b8e62/seqpro-0.2.4-cp39-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a9/a6/aa38bddc9f8d90e5ce14023f06ccbf642ab5d507da1ffafb031c0f332dc6/numerary-0.4.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/ec/5434c4a6012ef2ff12d0e71b6c341532686ee82d63e5101717abc24eb3f5/pgenlib-0.92.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/5b/bc/246f452431c592a2a424050e8bb9ccf494fb47613fd97c912f4d573a5e3b/phantom_types-3.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8f/e7/8b61f94042c32887deb7053380b3e09d0e44d9614d8edde1baa6396dcae2/seqpro-0.3.0-cp39-abi3-manylinux_2_28_x86_64.whl dev: channels: - url: https://conda.anaconda.org/conda-forge/ @@ -487,11 +492,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py310ha75aee5_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda - pypi: https://files.pythonhosted.org/packages/2d/ea/d6230cc9772edca0fd8c91638dc1c2e2def09b9a22cfabe6532906e96aea/basenji2_pytorch-0.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/53/21f7b97e82772caa61541348427f42435120b32961c92d16f9c8ce9757d6/cslug-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/69/3a19d72e9816baae81766eccd2ea2a0ff4245542911ce0d25631606e4de4/genoray-0.7.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/8e/0eccb528701273640dd4f13678a0c1352176166aecd1ee7f4fa29355132b/hirola-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/1a/c1/31b3184cba7b257a4a3b5ca5b88b9204ccb7aa02fe3c992280899293ed54/lightning_utilities-0.14.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a9/a6/aa38bddc9f8d90e5ce14023f06ccbf642ab5d507da1ffafb031c0f332dc6/numerary-0.4.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/20/93ef95a37e1aa3c3dd2ca1cd1cba8c8849823311d034921c0ec38949ffad/Pgenlib-0.92.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5b/bc/246f452431c592a2a424050e8bb9ccf494fb47613fd97c912f4d573a5e3b/phantom_types-3.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/82/ff/5701f79317a1a03e5ee8a1bf48e7273a8445162a2774e51fc06411a67c89/pytorch_lightning-2.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6d/ad/b485318c8330bfcf68f47487c681d4512d141ae21e667c5b9a6cac4b8e62/seqpro-0.2.4-cp39-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/8f/e7/8b61f94042c32887deb7053380b3e09d0e44d9614d8edde1baa6396dcae2/seqpro-0.3.0-cp39-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/72/25/973bd6128381951b23cdcd8a9870c6dcfc5606cb864df8eabd82e529f9c1/torchinfo-1.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/ee/4d0a7213a6f412afb3483031009a3b970dd7bed3be24de95ab04fba1c05a/torchmetrics-1.7.1-py3-none-any.whl docs: @@ -817,11 +827,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py310ha75aee5_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda - pypi: https://files.pythonhosted.org/packages/2d/ea/d6230cc9772edca0fd8c91638dc1c2e2def09b9a22cfabe6532906e96aea/basenji2_pytorch-0.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/53/21f7b97e82772caa61541348427f42435120b32961c92d16f9c8ce9757d6/cslug-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/69/3a19d72e9816baae81766eccd2ea2a0ff4245542911ce0d25631606e4de4/genoray-0.7.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/8e/0eccb528701273640dd4f13678a0c1352176166aecd1ee7f4fa29355132b/hirola-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/1a/c1/31b3184cba7b257a4a3b5ca5b88b9204ccb7aa02fe3c992280899293ed54/lightning_utilities-0.14.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a9/a6/aa38bddc9f8d90e5ce14023f06ccbf642ab5d507da1ffafb031c0f332dc6/numerary-0.4.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/20/93ef95a37e1aa3c3dd2ca1cd1cba8c8849823311d034921c0ec38949ffad/Pgenlib-0.92.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5b/bc/246f452431c592a2a424050e8bb9ccf494fb47613fd97c912f4d573a5e3b/phantom_types-3.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/82/ff/5701f79317a1a03e5ee8a1bf48e7273a8445162a2774e51fc06411a67c89/pytorch_lightning-2.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6d/ad/b485318c8330bfcf68f47487c681d4512d141ae21e667c5b9a6cac4b8e62/seqpro-0.2.4-cp39-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/8f/e7/8b61f94042c32887deb7053380b3e09d0e44d9614d8edde1baa6396dcae2/seqpro-0.3.0-cp39-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/72/25/973bd6128381951b23cdcd8a9870c6dcfc5606cb864df8eabd82e529f9c1/torchinfo-1.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/ee/4d0a7213a6f412afb3483031009a3b970dd7bed3be24de95ab04fba1c05a/torchmetrics-1.7.1-py3-none-any.whl packages: @@ -1298,6 +1313,76 @@ packages: - torchinfo>=1.8.0 - torchmetrics>=1.6.2 requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl + name: beartype + version: 0.20.2 + sha256: 5171a91ecf01438a59884f0cde37d2d5da2c992198b53d6ba31db3940f47ff04 + requires_dist: + - autoapi>=0.9.0 ; extra == 'dev' + - click ; extra == 'dev' + - coverage>=5.5 ; extra == 'dev' + - equinox ; sys_platform == 'linux' and extra == 'dev' + - jax[cpu] ; sys_platform == 'linux' and extra == 'dev' + - jaxtyping ; sys_platform == 'linux' and extra == 'dev' + - langchain ; extra == 'dev' + - mypy>=0.800 ; platform_python_implementation != 'PyPy' and extra == 'dev' + - nuitka>=1.2.6 ; sys_platform == 'linux' and extra == 'dev' + - numba ; python_full_version < '3.13' and extra == 'dev' + - numpy ; platform_python_implementation != 'PyPy' and sys_platform != 'darwin' and extra == 'dev' + - pandera ; extra == 'dev' + - pydata-sphinx-theme<=0.7.2 ; extra == 'dev' + - pygments ; extra == 'dev' + - pyright>=1.1.370 ; extra == 'dev' + - pytest>=4.0.0 ; extra == 'dev' + - rich-click ; extra == 'dev' + - sphinx ; extra == 'dev' + - sphinx>=4.2.0,<6.0.0 ; extra == 'dev' + - sphinxext-opengraph>=0.7.5 ; extra == 'dev' + - tox>=3.20.1 ; extra == 'dev' + - typing-extensions>=3.10.0.0 ; extra == 'dev' + - xarray ; extra == 'dev' + - autoapi>=0.9.0 ; extra == 'doc-rtd' + - pydata-sphinx-theme<=0.7.2 ; extra == 'doc-rtd' + - sphinx>=4.2.0,<6.0.0 ; extra == 'doc-rtd' + - sphinxext-opengraph>=0.7.5 ; extra == 'doc-rtd' + - click ; extra == 'test' + - coverage>=5.5 ; extra == 'test' + - equinox ; sys_platform == 'linux' and extra == 'test' + - jax[cpu] ; sys_platform == 'linux' and extra == 'test' + - jaxtyping ; sys_platform == 'linux' and extra == 'test' + - langchain ; extra == 'test' + - mypy>=0.800 ; platform_python_implementation != 'PyPy' and extra == 'test' + - nuitka>=1.2.6 ; sys_platform == 'linux' and extra == 'test' + - numba ; python_full_version < '3.13' and extra == 'test' + - numpy ; platform_python_implementation != 'PyPy' and sys_platform != 'darwin' and extra == 'test' + - pandera ; extra == 'test' + - pygments ; extra == 'test' + - pyright>=1.1.370 ; extra == 'test' + - pytest>=4.0.0 ; extra == 'test' + - rich-click ; extra == 'test' + - sphinx ; extra == 'test' + - tox>=3.20.1 ; extra == 'test' + - typing-extensions>=3.10.0.0 ; extra == 'test' + - xarray ; extra == 'test' + - click ; extra == 'test-tox' + - equinox ; sys_platform == 'linux' and extra == 'test-tox' + - jax[cpu] ; sys_platform == 'linux' and extra == 'test-tox' + - jaxtyping ; sys_platform == 'linux' and extra == 'test-tox' + - langchain ; extra == 'test-tox' + - mypy>=0.800 ; platform_python_implementation != 'PyPy' and extra == 'test-tox' + - nuitka>=1.2.6 ; sys_platform == 'linux' and extra == 'test-tox' + - numba ; python_full_version < '3.13' and extra == 'test-tox' + - numpy ; platform_python_implementation != 'PyPy' and sys_platform != 'darwin' and extra == 'test-tox' + - pandera ; extra == 'test-tox' + - pygments ; extra == 'test-tox' + - pyright>=1.1.370 ; extra == 'test-tox' + - pytest>=4.0.0 ; extra == 'test-tox' + - rich-click ; extra == 'test-tox' + - sphinx ; extra == 'test-tox' + - typing-extensions>=3.10.0.0 ; extra == 'test-tox' + - xarray ; extra == 'test-tox' + - coverage>=5.5 ; extra == 'test-tox-coverage' + requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.13.4-pyha770c72_0.conda sha256: ddb0df12fd30b2d36272f5daf6b6251c7625d6a99414d7ea930005bbaecad06d md5: 9f07c4fc992adb2d6c30da7fab3959a7 @@ -1774,6 +1859,29 @@ packages: - pkg:pypi/fsspec?source=compressed-mapping size: 142117 timestamp: 1743437355974 +- pypi: https://files.pythonhosted.org/packages/3e/69/3a19d72e9816baae81766eccd2ea2a0ff4245542911ce0d25631606e4de4/genoray-0.7.1-py3-none-any.whl + name: genoray + version: 0.7.1 + sha256: d2138faa6999d93ea156acaf659817db66080213c584f8254f442817e53daf68 + requires_dist: + - attrs + - awkward + - cyvcf2>=0.31.1 + - hirola>=0.3.0 + - loguru>=0.7.0 + - more-itertools>=10 + - numba + - numpy>=1.26 + - pandas>=2.2.2 + - pgenlib>=0.92.0 + - phantom-types>=3 + - polars>=1.26 + - pyarrow>=16 + - pyranges>=0.1.3 + - seqpro>=0.3.0 + - tqdm>=4.65 + - typing-extensions>=4.11 + requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda sha256: 6c33bf0c4d8f418546ba9c250db4e4221040936aef8956353bc764d4877bc39a md5: d411fc29e338efb48c5fd4576d71d881 @@ -3760,6 +3868,18 @@ packages: - pkg:pypi/numba?source=compressed-mapping size: 5892431 timestamp: 1744232231353 +- pypi: https://files.pythonhosted.org/packages/a9/a6/aa38bddc9f8d90e5ce14023f06ccbf642ab5d507da1ffafb031c0f332dc6/numerary-0.4.4-py3-none-any.whl + name: numerary + version: 0.4.4 + sha256: ad955ddf7f5275f8e52f5520b2d6c654cc3bf1e3ae4bfb45664c9d51b208d0c6 + requires_dist: + - beartype~=0.15 + - pre-commit ; extra == 'dev' + - numpy~=1.25 ; extra == 'dev' + - sympy~=1.9 ; extra == 'dev' + - tox~=4.0 ; extra == 'dev' + - versioningit~=2.0 ; extra == 'dev' + requires_python: '>=3.8' - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.5-py310hefbff90_0.conda sha256: f0c9f295a58dabdc1ff9ceadd31ab7a6e8d3c903c37f749bfd058afcb0d534ed md5: 5526bc875ec897f0d335e38da832b6ee @@ -4051,6 +4171,49 @@ packages: - pkg:pypi/pexpect?source=compressed-mapping size: 53561 timestamp: 1733302019362 +- pypi: https://files.pythonhosted.org/packages/18/ec/5434c4a6012ef2ff12d0e71b6c341532686ee82d63e5101717abc24eb3f5/pgenlib-0.92.0.tar.gz + name: pgenlib + version: 0.92.0 + sha256: 805c87976d8371d5c33a1d87ba1bd2f08150805119b1ff0453bb2aca813b74f9 + requires_dist: + - numpy>=1.19.0 + requires_python: '>=3.5' +- pypi: https://files.pythonhosted.org/packages/55/20/93ef95a37e1aa3c3dd2ca1cd1cba8c8849823311d034921c0ec38949ffad/Pgenlib-0.92.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: pgenlib + version: 0.92.0 + sha256: 56cc9715c3464f2d5559f0779cf671922c7651ed2aff3b851974968b86c167f7 + requires_dist: + - numpy>=1.19.0 + requires_python: '>=3.5' +- pypi: https://files.pythonhosted.org/packages/5b/bc/246f452431c592a2a424050e8bb9ccf494fb47613fd97c912f4d573a5e3b/phantom_types-3.0.2-py3-none-any.whl + name: phantom-types + version: 3.0.2 + sha256: 509cb32babae7d2d62ab3cdc36e3f11e6324ed21f2ce13c7be598377d49d4e63 + requires_dist: + - typeguard>=4,!=4.3.* + - typing-extensions>=4.3.0 + - numerary>=0.4.3 + - phantom-types[phonenumbers] ; extra == 'all' + - phantom-types[pydantic] ; extra == 'all' + - phantom-types[dateutil] ; extra == 'all' + - phantom-types[hypothesis] ; extra == 'all' + - python-dateutil>=2.8.2 ; extra == 'dateutil' + - phantom-types[all] ; extra == 'docs' + - sphinx ; extra == 'docs' + - sphinx-autodoc-typehints ; extra == 'docs' + - furo ; extra == 'docs' + - hypothesis[zoneinfo]>=6.68.0 ; extra == 'hypothesis' + - phonenumbers>=8.12.41 ; extra == 'phonenumbers' + - pydantic>=1.9.0,<2 ; extra == 'pydantic' + - mypy>=0.991 ; extra == 'test' + - pytest ; extra == 'test' + - pytest-mypy-plugins>=1.9.3 ; extra == 'test' + - coverage ; extra == 'test' + - phantom-types[all] ; extra == 'type-check' + - mypy ; extra == 'type-check' + - pytest ; extra == 'type-check' + - types-python-dateutil ; extra == 'type-check' + requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-pyhd8ed1ab_1004.conda sha256: e2ac3d66c367dada209fc6da43e645672364b9fd5f9d28b9f016e24b81af475b md5: 11a9d1d09a3615fc07c3faf79bc0b943 @@ -5093,10 +5256,10 @@ packages: purls: [] size: 352907 timestamp: 1743805258946 -- pypi: https://files.pythonhosted.org/packages/6d/ad/b485318c8330bfcf68f47487c681d4512d141ae21e667c5b9a6cac4b8e62/seqpro-0.2.4-cp39-abi3-manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/8f/e7/8b61f94042c32887deb7053380b3e09d0e44d9614d8edde1baa6396dcae2/seqpro-0.3.0-cp39-abi3-manylinux_2_28_x86_64.whl name: seqpro - version: 0.2.4 - sha256: 13bbfae57a5c15276522f4027c3c88a2b074f7bf1b4d4a56ae76b809ee25c4d7 + version: 0.3.0 + sha256: a93533581b47419f41d95d38e552a78386ff467cc093e2256fdb001347c2f835 requires_dist: - numba>=0.58.1 - numpy>=1.26.0 diff --git a/pixi.toml b/pixi.toml index 8c9bb046..c9ae16fd 100644 --- a/pixi.toml +++ b/pixi.toml @@ -41,7 +41,8 @@ uv = "*" [pypi-dependencies] hirola = "==0.3" -seqpro = "==0.2.4" +seqpro = "==0.3.0" +genoray = "==0.7.1" [feature.docs.dependencies] sphinx = ">=7.4.7" @@ -81,13 +82,15 @@ docs = { features = ["docs", "pytorch-cpu", "basenji2", "py310"] } # docs-gpu = { features = ["docs", "pytorch-gpu", "basenji2", "py310"] } [tasks] -install = "uv pip install -e /cellar/users/dlaub/projects/ML4GLand/SeqPro -e /cellar/users/dlaub/projects/genoray -e ." +install-e = "uv pip install -e /cellar/users/dlaub/projects/ML4GLand/SeqPro -e /cellar/users/dlaub/projects/genoray -e ." +install = "uv pip install -e ." pre-commit = "pre-commit install --hook-type commit-msg" gen = "python tests/data/generate_ground_truth.py" test = "pytest tests" [feature.docs.tasks] -install = "uv pip install -e /cellar/users/dlaub/projects/ML4GLand/SeqPro -e /cellar/users/dlaub/projects/genoray -e ." +install-e = "uv pip install -e /cellar/users/dlaub/projects/ML4GLand/SeqPro -e /cellar/users/dlaub/projects/genoray -e ." +install = "uv pip install -e ." i-kernel = "ipython kernel install --user --name 'gvl-docs' --display-name 'GVL Docs'" i-kernel-gpu = "ipython kernel install --user --name 'gvl-docs-gpu' --display-name 'GVL Docs GPU'" doc = "cd docs && make clean && make html" diff --git a/pyproject.toml b/pyproject.toml index 5faea0b9..f450cdce 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,8 +29,8 @@ dependencies = [ "pooch", "awkward", "hirola>=0.3,<0.4", - # "seqpro>=0.2.4", - # "genoray>=0.7.0", + "seqpro>=0.3.0", + "genoray>=0.7.1", ] [project.urls] diff --git a/python/genvarloader/_dummy.py b/python/genvarloader/_dummy.py index 47d16c22..413d06a3 100644 --- a/python/genvarloader/_dummy.py +++ b/python/genvarloader/_dummy.py @@ -93,7 +93,7 @@ def get_dummy_dataset(spliced: bool = False): ] # target lengths - 1 # idx within region + 4 * np.arange(4)[:, None] # adjust by region/contig offset - ) + ).astype(np.int32) dummy_genos = SparseGenotypes.from_offsets( v_idxs.ravel(), (4, 4, 1), From 3f062580179cc1195e2490d382cad646d59c00e7 Mon Sep 17 00:00:00 2001 From: d-laub Date: Mon, 21 Apr 2025 08:01:34 -0700 Subject: [PATCH 18/53] chore: wip on svar support --- pixi.lock | 62 +++++++++++++++++----- pixi.toml | 5 +- python/genvarloader/_dataset/_genotypes.py | 2 +- tests/data/pgen/filtered_sample.pvar | 8 +-- tests/data/vcf/filtered_sample.vcf | 6 +-- 5 files changed, 60 insertions(+), 23 deletions(-) diff --git a/pixi.lock b/pixi.lock index 1765a0c6..fd07a08a 100644 --- a/pixi.lock +++ b/pixi.lock @@ -237,12 +237,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda - pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/53/21f7b97e82772caa61541348427f42435120b32961c92d16f9c8ce9757d6/cslug-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3e/69/3a19d72e9816baae81766eccd2ea2a0ff4245542911ce0d25631606e4de4/genoray-0.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/57/b76283dde9c3e9c3fe8985f6d6b2d79ce3b65b54b190d09e696ba4b80b02/genoray-0.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/8e/0eccb528701273640dd4f13678a0c1352176166aecd1ee7f4fa29355132b/hirola-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/a9/a6/aa38bddc9f8d90e5ce14023f06ccbf642ab5d507da1ffafb031c0f332dc6/numerary-0.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/ec/5434c4a6012ef2ff12d0e71b6c341532686ee82d63e5101717abc24eb3f5/pgenlib-0.92.0.tar.gz - pypi: https://files.pythonhosted.org/packages/5b/bc/246f452431c592a2a424050e8bb9ccf494fb47613fd97c912f4d573a5e3b/phantom_types-3.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8f/e7/8b61f94042c32887deb7053380b3e09d0e44d9614d8edde1baa6396dcae2/seqpro-0.3.0-cp39-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/bd/06/5c9ed34ec048e51e115cd1b3cf9d9c258e3c75b3105b42db11c0282536a3/pysam-0.23.0-cp312-cp312-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/2c/b0/f719dc735e3c9c3ba410e057497cf78a315eb48d013b120666ea3623f9c8/seqpro-0.2.3-cp39-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c6/64/3d24181aaea3fb892d4a46f8171845782ee364d60e9494426daf31d12f47/tbb-2022.1.0-py2.py3-none-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/06/bb/09a6dc2f1110b409d6d2f96429969d7466bde9bf4ad8b2e682d851ef104b/tcmlib-1.3.0-py2.py3-none-manylinux_2_28_x86_64.whl + - pypi: . dev: channels: - url: https://conda.anaconda.org/conda-forge/ @@ -494,14 +498,16 @@ environments: - pypi: https://files.pythonhosted.org/packages/2d/ea/d6230cc9772edca0fd8c91638dc1c2e2def09b9a22cfabe6532906e96aea/basenji2_pytorch-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/53/21f7b97e82772caa61541348427f42435120b32961c92d16f9c8ce9757d6/cslug-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3e/69/3a19d72e9816baae81766eccd2ea2a0ff4245542911ce0d25631606e4de4/genoray-0.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/57/b76283dde9c3e9c3fe8985f6d6b2d79ce3b65b54b190d09e696ba4b80b02/genoray-0.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/8e/0eccb528701273640dd4f13678a0c1352176166aecd1ee7f4fa29355132b/hirola-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/1a/c1/31b3184cba7b257a4a3b5ca5b88b9204ccb7aa02fe3c992280899293ed54/lightning_utilities-0.14.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/a6/aa38bddc9f8d90e5ce14023f06ccbf642ab5d507da1ffafb031c0f332dc6/numerary-0.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/55/20/93ef95a37e1aa3c3dd2ca1cd1cba8c8849823311d034921c0ec38949ffad/Pgenlib-0.92.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/5b/bc/246f452431c592a2a424050e8bb9ccf494fb47613fd97c912f4d573a5e3b/phantom_types-3.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/82/ff/5701f79317a1a03e5ee8a1bf48e7273a8445162a2774e51fc06411a67c89/pytorch_lightning-2.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8f/e7/8b61f94042c32887deb7053380b3e09d0e44d9614d8edde1baa6396dcae2/seqpro-0.3.0-cp39-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/2c/b0/f719dc735e3c9c3ba410e057497cf78a315eb48d013b120666ea3623f9c8/seqpro-0.2.3-cp39-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c6/64/3d24181aaea3fb892d4a46f8171845782ee364d60e9494426daf31d12f47/tbb-2022.1.0-py2.py3-none-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/06/bb/09a6dc2f1110b409d6d2f96429969d7466bde9bf4ad8b2e682d851ef104b/tcmlib-1.3.0-py2.py3-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/72/25/973bd6128381951b23cdcd8a9870c6dcfc5606cb864df8eabd82e529f9c1/torchinfo-1.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/ee/4d0a7213a6f412afb3483031009a3b970dd7bed3be24de95ab04fba1c05a/torchmetrics-1.7.1-py3-none-any.whl docs: @@ -829,14 +835,16 @@ environments: - pypi: https://files.pythonhosted.org/packages/2d/ea/d6230cc9772edca0fd8c91638dc1c2e2def09b9a22cfabe6532906e96aea/basenji2_pytorch-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/53/21f7b97e82772caa61541348427f42435120b32961c92d16f9c8ce9757d6/cslug-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3e/69/3a19d72e9816baae81766eccd2ea2a0ff4245542911ce0d25631606e4de4/genoray-0.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/57/b76283dde9c3e9c3fe8985f6d6b2d79ce3b65b54b190d09e696ba4b80b02/genoray-0.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/8e/0eccb528701273640dd4f13678a0c1352176166aecd1ee7f4fa29355132b/hirola-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/1a/c1/31b3184cba7b257a4a3b5ca5b88b9204ccb7aa02fe3c992280899293ed54/lightning_utilities-0.14.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/a6/aa38bddc9f8d90e5ce14023f06ccbf642ab5d507da1ffafb031c0f332dc6/numerary-0.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/55/20/93ef95a37e1aa3c3dd2ca1cd1cba8c8849823311d034921c0ec38949ffad/Pgenlib-0.92.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/5b/bc/246f452431c592a2a424050e8bb9ccf494fb47613fd97c912f4d573a5e3b/phantom_types-3.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/82/ff/5701f79317a1a03e5ee8a1bf48e7273a8445162a2774e51fc06411a67c89/pytorch_lightning-2.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8f/e7/8b61f94042c32887deb7053380b3e09d0e44d9614d8edde1baa6396dcae2/seqpro-0.3.0-cp39-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/2c/b0/f719dc735e3c9c3ba410e057497cf78a315eb48d013b120666ea3623f9c8/seqpro-0.2.3-cp39-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c6/64/3d24181aaea3fb892d4a46f8171845782ee364d60e9494426daf31d12f47/tbb-2022.1.0-py2.py3-none-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/06/bb/09a6dc2f1110b409d6d2f96429969d7466bde9bf4ad8b2e682d851ef104b/tcmlib-1.3.0-py2.py3-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/72/25/973bd6128381951b23cdcd8a9870c6dcfc5606cb864df8eabd82e529f9c1/torchinfo-1.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/ee/4d0a7213a6f412afb3483031009a3b970dd7bed3be24de95ab04fba1c05a/torchmetrics-1.7.1-py3-none-any.whl packages: @@ -1859,10 +1867,10 @@ packages: - pkg:pypi/fsspec?source=compressed-mapping size: 142117 timestamp: 1743437355974 -- pypi: https://files.pythonhosted.org/packages/3e/69/3a19d72e9816baae81766eccd2ea2a0ff4245542911ce0d25631606e4de4/genoray-0.7.1-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/b7/57/b76283dde9c3e9c3fe8985f6d6b2d79ce3b65b54b190d09e696ba4b80b02/genoray-0.7.0-py3-none-any.whl name: genoray - version: 0.7.1 - sha256: d2138faa6999d93ea156acaf659817db66080213c584f8254f442817e53daf68 + version: 0.7.0 + sha256: b6b864441c847f685a990047a590ecfad04fdd37fd077bf4fb984ab4ed81e315 requires_dist: - attrs - awkward @@ -1878,10 +1886,38 @@ packages: - polars>=1.26 - pyarrow>=16 - pyranges>=0.1.3 - - seqpro>=0.3.0 + - seqpro>=0.2.3 - tqdm>=4.65 - typing-extensions>=4.11 requires_python: '>=3.9' +- pypi: . + name: genvarloader + version: 0.12.0 + sha256: 29405e26f8098122a7c9cc90a1b51eea010b49740df55e984d642759336fde63 + requires_dist: + - numba>=0.58.1 + - loguru + - attrs + - natsort + - polars>=1.26 + - cyvcf2 + - pandera + - pysam + - pyarrow + - pyranges + - more-itertools + - tqdm + - pybigwig + - einops + - tbb + - joblib + - pooch + - seqpro>=0.2.3 + - awkward + - hirola>=0.3,<0.4 + - genoray>=0.7.0 + requires_python: '>=3.10,<3.13' + editable: true - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda sha256: 6c33bf0c4d8f418546ba9c250db4e4221040936aef8956353bc764d4877bc39a md5: d411fc29e338efb48c5fd4576d71d881 @@ -5256,10 +5292,10 @@ packages: purls: [] size: 352907 timestamp: 1743805258946 -- pypi: https://files.pythonhosted.org/packages/8f/e7/8b61f94042c32887deb7053380b3e09d0e44d9614d8edde1baa6396dcae2/seqpro-0.3.0-cp39-abi3-manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/2c/b0/f719dc735e3c9c3ba410e057497cf78a315eb48d013b120666ea3623f9c8/seqpro-0.2.3-cp39-abi3-manylinux_2_28_x86_64.whl name: seqpro - version: 0.3.0 - sha256: a93533581b47419f41d95d38e552a78386ff467cc093e2256fdb001347c2f835 + version: 0.2.3 + sha256: 6f0ec116d42850e502026d060560430d0b1c4cc5bf941671e73aec3285a394f5 requires_dist: - numba>=0.58.1 - numpy>=1.26.0 diff --git a/pixi.toml b/pixi.toml index c9ae16fd..5c97426b 100644 --- a/pixi.toml +++ b/pixi.toml @@ -40,9 +40,10 @@ typer = "*" uv = "*" [pypi-dependencies] +genvarloader = { path = ".", editable = true } +seqpro = "==0.2.3" hirola = "==0.3" -seqpro = "==0.3.0" -genoray = "==0.7.1" +genoray = "==0.7.0" [feature.docs.dependencies] sphinx = ">=7.4.7" diff --git a/python/genvarloader/_dataset/_genotypes.py b/python/genvarloader/_dataset/_genotypes.py index 1dbf86ea..623b8e58 100644 --- a/python/genvarloader/_dataset/_genotypes.py +++ b/python/genvarloader/_dataset/_genotypes.py @@ -706,7 +706,7 @@ def get_diffs_sparse( for query in nb.prange(n_queries): for hap in nb.prange(ploidy): o_idx = geno_offset_idxs[query, hap] - if geno_offsets.ndim == 1: + if geno_offset_idxs.ndim == 1: o_s, o_e = geno_offsets[o_idx], geno_offsets[o_idx + 1] else: o_s, o_e = geno_offsets[o_idx] diff --git a/tests/data/pgen/filtered_sample.pvar b/tests/data/pgen/filtered_sample.pvar index 6da9565d..9c715b31 100644 --- a/tests/data/pgen/filtered_sample.pvar +++ b/tests/data/pgen/filtered_sample.pvar @@ -16,11 +16,11 @@ ##ALT= ##ALT= ##bcftools_normVersion=1.21+htslib-1.21 -##bcftools_normCommand=norm -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz; Date=Tue Apr 22 18:29:29 2025 -##bcftools_normCommand=norm -a --atom-overlaps . -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz -m -; Date=Tue Apr 22 18:29:29 2025 +##bcftools_normCommand=norm -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz; Date=Mon Apr 21 08:00:03 2025 +##bcftools_normCommand=norm -a --atom-overlaps . -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz -m -; Date=Mon Apr 21 08:00:03 2025 ##bcftools_viewVersion=1.21+htslib-1.21 -##bcftools_viewCommand=view -e TYPE="OTHER"; Date=Tue Apr 22 18:29:29 2025 -##bcftools_viewCommand=view -O z -o /carter/users/dlaub/projects/GenVarLoader/tests/data/vcf/filtered_sample.vcf.gz /carter/users/dlaub/projects/GenVarLoader/tests/data/vcf/filtered_sample.vcf; Date=Tue Apr 22 18:29:29 2025 +##bcftools_viewCommand=view -e TYPE="OTHER"; Date=Mon Apr 21 08:00:03 2025 +##bcftools_viewCommand=view -O z -o /carter/users/dlaub/projects/GenVarLoader/tests/data/vcf/filtered_sample.vcf.gz /carter/users/dlaub/projects/GenVarLoader/tests/data/vcf/filtered_sample.vcf; Date=Mon Apr 21 08:00:03 2025 #CHROM POS ID REF ALT QUAL FILTER INFO 19 111 . N C 9.6 . . 19 1010695 . CGAGACG C 10 . . diff --git a/tests/data/vcf/filtered_sample.vcf b/tests/data/vcf/filtered_sample.vcf index 055ab816..9f53afd3 100644 --- a/tests/data/vcf/filtered_sample.vcf +++ b/tests/data/vcf/filtered_sample.vcf @@ -25,10 +25,10 @@ ##ALT= ##ALT= ##bcftools_normVersion=1.21+htslib-1.21 -##bcftools_normCommand=norm -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz; Date=Tue Apr 22 18:29:29 2025 -##bcftools_normCommand=norm -a --atom-overlaps . -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz -m -; Date=Tue Apr 22 18:29:29 2025 +##bcftools_normCommand=norm -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz; Date=Mon Apr 21 08:00:03 2025 +##bcftools_normCommand=norm -a --atom-overlaps . -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz -m -; Date=Mon Apr 21 08:00:03 2025 ##bcftools_viewVersion=1.21+htslib-1.21 -##bcftools_viewCommand=view -e TYPE="OTHER"; Date=Tue Apr 22 18:29:29 2025 +##bcftools_viewCommand=view -e TYPE="OTHER"; Date=Mon Apr 21 08:00:03 2025 #CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA00001 NA00002 NA00003 19 111 . N C 9.6 . . GT:VAF:HQ 0|0:.:10,15 0|0:.:10,10 0/1:0.3:3,3 19 1010695 . CGAGACG C 10 . . GT:VAF:HQ 0|0:.:10,10 0|0:0.5:10,15 0/1:0.15:3,3 From 049e9a8a1f8ec7dc6eccfc57896b06537f03e0c0 Mon Sep 17 00:00:00 2001 From: d-laub Date: Tue, 22 Apr 2025 17:48:56 -0700 Subject: [PATCH 19/53] feat: SVAR support passes all tests --- pixi.lock | 15 +++++++++------ pixi.toml | 2 +- python/genvarloader/_dataset/_genotypes.py | 2 +- tests/data/pgen/filtered_sample.pvar | 8 ++++---- tests/data/vcf/filtered_sample.vcf | 6 +++--- tests/data/vcf/filtered_sample.vcf.gz.csi | Bin 203 -> 203 bytes 6 files changed, 18 insertions(+), 15 deletions(-) diff --git a/pixi.lock b/pixi.lock index fd07a08a..20869cae 100644 --- a/pixi.lock +++ b/pixi.lock @@ -243,10 +243,10 @@ environments: - pypi: https://files.pythonhosted.org/packages/18/ec/5434c4a6012ef2ff12d0e71b6c341532686ee82d63e5101717abc24eb3f5/pgenlib-0.92.0.tar.gz - pypi: https://files.pythonhosted.org/packages/5b/bc/246f452431c592a2a424050e8bb9ccf494fb47613fd97c912f4d573a5e3b/phantom_types-3.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/06/5c9ed34ec048e51e115cd1b3cf9d9c258e3c75b3105b42db11c0282536a3/pysam-0.23.0-cp312-cp312-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/2c/b0/f719dc735e3c9c3ba410e057497cf78a315eb48d013b120666ea3623f9c8/seqpro-0.2.3-cp39-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c6/64/3d24181aaea3fb892d4a46f8171845782ee364d60e9494426daf31d12f47/tbb-2022.1.0-py2.py3-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/06/bb/09a6dc2f1110b409d6d2f96429969d7466bde9bf4ad8b2e682d851ef104b/tcmlib-1.3.0-py2.py3-none-manylinux_2_28_x86_64.whl - pypi: . + - pypi: /cellar/users/dlaub/projects/ML4GLand/SeqPro dev: channels: - url: https://conda.anaconda.org/conda-forge/ @@ -505,11 +505,12 @@ environments: - pypi: https://files.pythonhosted.org/packages/55/20/93ef95a37e1aa3c3dd2ca1cd1cba8c8849823311d034921c0ec38949ffad/Pgenlib-0.92.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/5b/bc/246f452431c592a2a424050e8bb9ccf494fb47613fd97c912f4d573a5e3b/phantom_types-3.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/82/ff/5701f79317a1a03e5ee8a1bf48e7273a8445162a2774e51fc06411a67c89/pytorch_lightning-2.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/b0/f719dc735e3c9c3ba410e057497cf78a315eb48d013b120666ea3623f9c8/seqpro-0.2.3-cp39-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c6/64/3d24181aaea3fb892d4a46f8171845782ee364d60e9494426daf31d12f47/tbb-2022.1.0-py2.py3-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/06/bb/09a6dc2f1110b409d6d2f96429969d7466bde9bf4ad8b2e682d851ef104b/tcmlib-1.3.0-py2.py3-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/72/25/973bd6128381951b23cdcd8a9870c6dcfc5606cb864df8eabd82e529f9c1/torchinfo-1.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/ee/4d0a7213a6f412afb3483031009a3b970dd7bed3be24de95ab04fba1c05a/torchmetrics-1.7.1-py3-none-any.whl + - pypi: . + - pypi: /cellar/users/dlaub/projects/ML4GLand/SeqPro docs: channels: - url: https://conda.anaconda.org/conda-forge/ @@ -842,11 +843,12 @@ environments: - pypi: https://files.pythonhosted.org/packages/55/20/93ef95a37e1aa3c3dd2ca1cd1cba8c8849823311d034921c0ec38949ffad/Pgenlib-0.92.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/5b/bc/246f452431c592a2a424050e8bb9ccf494fb47613fd97c912f4d573a5e3b/phantom_types-3.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/82/ff/5701f79317a1a03e5ee8a1bf48e7273a8445162a2774e51fc06411a67c89/pytorch_lightning-2.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/b0/f719dc735e3c9c3ba410e057497cf78a315eb48d013b120666ea3623f9c8/seqpro-0.2.3-cp39-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c6/64/3d24181aaea3fb892d4a46f8171845782ee364d60e9494426daf31d12f47/tbb-2022.1.0-py2.py3-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/06/bb/09a6dc2f1110b409d6d2f96429969d7466bde9bf4ad8b2e682d851ef104b/tcmlib-1.3.0-py2.py3-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/72/25/973bd6128381951b23cdcd8a9870c6dcfc5606cb864df8eabd82e529f9c1/torchinfo-1.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/ee/4d0a7213a6f412afb3483031009a3b970dd7bed3be24de95ab04fba1c05a/torchmetrics-1.7.1-py3-none-any.whl + - pypi: . + - pypi: /cellar/users/dlaub/projects/ML4GLand/SeqPro packages: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 @@ -5292,10 +5294,10 @@ packages: purls: [] size: 352907 timestamp: 1743805258946 -- pypi: https://files.pythonhosted.org/packages/2c/b0/f719dc735e3c9c3ba410e057497cf78a315eb48d013b120666ea3623f9c8/seqpro-0.2.3-cp39-abi3-manylinux_2_28_x86_64.whl +- pypi: /cellar/users/dlaub/projects/ML4GLand/SeqPro name: seqpro - version: 0.2.3 - sha256: 6f0ec116d42850e502026d060560430d0b1c4cc5bf941671e73aec3285a394f5 + version: 0.2.4 + sha256: c8ffe010a4e5d596388366e26fea9f87b9a99b095a8ce802a7fea9a08723ad34 requires_dist: - numba>=0.58.1 - numpy>=1.26.0 @@ -5308,6 +5310,7 @@ packages: - setuptools>=70 - awkward>=2.5.0 requires_python: '>=3.9' + editable: true - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.8.2-pyhff2d567_0.conda sha256: 91d664ace7c22e787775069418daa9f232ee8bafdd0a6a080a5ed2395a6fa6b2 md5: 9bddfdbf4e061821a1a443f93223be61 diff --git a/pixi.toml b/pixi.toml index 5c97426b..09d05ebf 100644 --- a/pixi.toml +++ b/pixi.toml @@ -41,7 +41,7 @@ uv = "*" [pypi-dependencies] genvarloader = { path = ".", editable = true } -seqpro = "==0.2.3" +seqpro = { path = '/cellar/users/dlaub/projects/ML4GLand/SeqPro', editable = true } hirola = "==0.3" genoray = "==0.7.0" diff --git a/python/genvarloader/_dataset/_genotypes.py b/python/genvarloader/_dataset/_genotypes.py index 623b8e58..1dbf86ea 100644 --- a/python/genvarloader/_dataset/_genotypes.py +++ b/python/genvarloader/_dataset/_genotypes.py @@ -706,7 +706,7 @@ def get_diffs_sparse( for query in nb.prange(n_queries): for hap in nb.prange(ploidy): o_idx = geno_offset_idxs[query, hap] - if geno_offset_idxs.ndim == 1: + if geno_offsets.ndim == 1: o_s, o_e = geno_offsets[o_idx], geno_offsets[o_idx + 1] else: o_s, o_e = geno_offsets[o_idx] diff --git a/tests/data/pgen/filtered_sample.pvar b/tests/data/pgen/filtered_sample.pvar index 9c715b31..1f827af0 100644 --- a/tests/data/pgen/filtered_sample.pvar +++ b/tests/data/pgen/filtered_sample.pvar @@ -16,11 +16,11 @@ ##ALT= ##ALT= ##bcftools_normVersion=1.21+htslib-1.21 -##bcftools_normCommand=norm -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz; Date=Mon Apr 21 08:00:03 2025 -##bcftools_normCommand=norm -a --atom-overlaps . -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz -m -; Date=Mon Apr 21 08:00:03 2025 +##bcftools_normCommand=norm -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz; Date=Mon Apr 21 14:08:33 2025 +##bcftools_normCommand=norm -a --atom-overlaps . -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz -m -; Date=Mon Apr 21 14:08:33 2025 ##bcftools_viewVersion=1.21+htslib-1.21 -##bcftools_viewCommand=view -e TYPE="OTHER"; Date=Mon Apr 21 08:00:03 2025 -##bcftools_viewCommand=view -O z -o /carter/users/dlaub/projects/GenVarLoader/tests/data/vcf/filtered_sample.vcf.gz /carter/users/dlaub/projects/GenVarLoader/tests/data/vcf/filtered_sample.vcf; Date=Mon Apr 21 08:00:03 2025 +##bcftools_viewCommand=view -e TYPE="OTHER"; Date=Mon Apr 21 14:08:33 2025 +##bcftools_viewCommand=view -O z -o /carter/users/dlaub/projects/GenVarLoader/tests/data/vcf/filtered_sample.vcf.gz /carter/users/dlaub/projects/GenVarLoader/tests/data/vcf/filtered_sample.vcf; Date=Mon Apr 21 14:08:33 2025 #CHROM POS ID REF ALT QUAL FILTER INFO 19 111 . N C 9.6 . . 19 1010695 . CGAGACG C 10 . . diff --git a/tests/data/vcf/filtered_sample.vcf b/tests/data/vcf/filtered_sample.vcf index 9f53afd3..d9170a28 100644 --- a/tests/data/vcf/filtered_sample.vcf +++ b/tests/data/vcf/filtered_sample.vcf @@ -25,10 +25,10 @@ ##ALT= ##ALT= ##bcftools_normVersion=1.21+htslib-1.21 -##bcftools_normCommand=norm -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz; Date=Mon Apr 21 08:00:03 2025 -##bcftools_normCommand=norm -a --atom-overlaps . -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz -m -; Date=Mon Apr 21 08:00:03 2025 +##bcftools_normCommand=norm -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz; Date=Mon Apr 21 14:08:33 2025 +##bcftools_normCommand=norm -a --atom-overlaps . -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz -m -; Date=Mon Apr 21 14:08:33 2025 ##bcftools_viewVersion=1.21+htslib-1.21 -##bcftools_viewCommand=view -e TYPE="OTHER"; Date=Mon Apr 21 08:00:03 2025 +##bcftools_viewCommand=view -e TYPE="OTHER"; Date=Mon Apr 21 14:08:33 2025 #CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA00001 NA00002 NA00003 19 111 . N C 9.6 . . GT:VAF:HQ 0|0:.:10,15 0|0:.:10,10 0/1:0.3:3,3 19 1010695 . CGAGACG C 10 . . GT:VAF:HQ 0|0:.:10,10 0|0:0.5:10,15 0/1:0.15:3,3 diff --git a/tests/data/vcf/filtered_sample.vcf.gz.csi b/tests/data/vcf/filtered_sample.vcf.gz.csi index 88200cb7fa8d1c43eab03dfb719e20cd8ba5b33f..5965356ee65054fcf736434c0b6f4d2f83c2ce68 100644 GIT binary patch delta 144 zcmV;B0B`@x0m}i9CVwlL%E}k;GfYeopTS3B+H-TQdXj4^?m1S{qt&&Dtbi>L05$&4 z&Ugu&uW~tcP6XQA;QOq^HmH+vhF^!`Qy;3H@3~R232vW$E#rA3@2Dk@nz=9d$@QV; yf9%YBb$5MBr$MVb-z?@kb6?~Z`AXBy+*Oyek3E0jQ>!~?9tP(J3e>1_k*grQy-GL$ delta 144 zcmV;B0B`@x0m}i9CVwN!R91d~uVG?}_zXT0)1I4a)stLXanG@m9<8oLWCd)20I2bQ zcE(HKe3i?ob0W~@2H$5Twn3eYGyFOfpZZYse9w)FO>q14YZ=cQc}FdI)XaUsPp%I& y|6^z7tGnx4It^Og`DQWSnfoHQ$XA+n=B~P&eeC%IpIY5H^9DFSh3VWwk*gqYnM$_+ From ba2d1c62a65f14f7b723ea36e9618d033ed2320e Mon Sep 17 00:00:00 2001 From: d-laub Date: Tue, 22 Apr 2025 18:42:58 -0700 Subject: [PATCH 20/53] fix: add spanning dels to test and fix hap ilens for this case --- pixi.lock | 2 +- tests/data/pgen/filtered_sample.pvar | 8 ++++---- tests/data/vcf/filtered_sample.vcf | 6 +++--- tests/data/vcf/filtered_sample.vcf.gz.csi | Bin 203 -> 203 bytes 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/pixi.lock b/pixi.lock index 20869cae..22b3e1c7 100644 --- a/pixi.lock +++ b/pixi.lock @@ -1895,7 +1895,7 @@ packages: - pypi: . name: genvarloader version: 0.12.0 - sha256: 29405e26f8098122a7c9cc90a1b51eea010b49740df55e984d642759336fde63 + sha256: e547e134d9f5e5966cc728f918b5cf9a3b0943ee268461fc650cac7a9247b2a1 requires_dist: - numba>=0.58.1 - loguru diff --git a/tests/data/pgen/filtered_sample.pvar b/tests/data/pgen/filtered_sample.pvar index 1f827af0..6da9565d 100644 --- a/tests/data/pgen/filtered_sample.pvar +++ b/tests/data/pgen/filtered_sample.pvar @@ -16,11 +16,11 @@ ##ALT= ##ALT= ##bcftools_normVersion=1.21+htslib-1.21 -##bcftools_normCommand=norm -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz; Date=Mon Apr 21 14:08:33 2025 -##bcftools_normCommand=norm -a --atom-overlaps . -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz -m -; Date=Mon Apr 21 14:08:33 2025 +##bcftools_normCommand=norm -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz; Date=Tue Apr 22 18:29:29 2025 +##bcftools_normCommand=norm -a --atom-overlaps . -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz -m -; Date=Tue Apr 22 18:29:29 2025 ##bcftools_viewVersion=1.21+htslib-1.21 -##bcftools_viewCommand=view -e TYPE="OTHER"; Date=Mon Apr 21 14:08:33 2025 -##bcftools_viewCommand=view -O z -o /carter/users/dlaub/projects/GenVarLoader/tests/data/vcf/filtered_sample.vcf.gz /carter/users/dlaub/projects/GenVarLoader/tests/data/vcf/filtered_sample.vcf; Date=Mon Apr 21 14:08:33 2025 +##bcftools_viewCommand=view -e TYPE="OTHER"; Date=Tue Apr 22 18:29:29 2025 +##bcftools_viewCommand=view -O z -o /carter/users/dlaub/projects/GenVarLoader/tests/data/vcf/filtered_sample.vcf.gz /carter/users/dlaub/projects/GenVarLoader/tests/data/vcf/filtered_sample.vcf; Date=Tue Apr 22 18:29:29 2025 #CHROM POS ID REF ALT QUAL FILTER INFO 19 111 . N C 9.6 . . 19 1010695 . CGAGACG C 10 . . diff --git a/tests/data/vcf/filtered_sample.vcf b/tests/data/vcf/filtered_sample.vcf index d9170a28..055ab816 100644 --- a/tests/data/vcf/filtered_sample.vcf +++ b/tests/data/vcf/filtered_sample.vcf @@ -25,10 +25,10 @@ ##ALT= ##ALT= ##bcftools_normVersion=1.21+htslib-1.21 -##bcftools_normCommand=norm -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz; Date=Mon Apr 21 14:08:33 2025 -##bcftools_normCommand=norm -a --atom-overlaps . -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz -m -; Date=Mon Apr 21 14:08:33 2025 +##bcftools_normCommand=norm -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz; Date=Tue Apr 22 18:29:29 2025 +##bcftools_normCommand=norm -a --atom-overlaps . -f /carter/users/dlaub/projects/GenVarLoader/tests/data/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.bgz -m -; Date=Tue Apr 22 18:29:29 2025 ##bcftools_viewVersion=1.21+htslib-1.21 -##bcftools_viewCommand=view -e TYPE="OTHER"; Date=Mon Apr 21 14:08:33 2025 +##bcftools_viewCommand=view -e TYPE="OTHER"; Date=Tue Apr 22 18:29:29 2025 #CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA00001 NA00002 NA00003 19 111 . N C 9.6 . . GT:VAF:HQ 0|0:.:10,15 0|0:.:10,10 0/1:0.3:3,3 19 1010695 . CGAGACG C 10 . . GT:VAF:HQ 0|0:.:10,10 0|0:0.5:10,15 0/1:0.15:3,3 diff --git a/tests/data/vcf/filtered_sample.vcf.gz.csi b/tests/data/vcf/filtered_sample.vcf.gz.csi index 5965356ee65054fcf736434c0b6f4d2f83c2ce68..88200cb7fa8d1c43eab03dfb719e20cd8ba5b33f 100644 GIT binary patch delta 144 zcmV;B0B`@x0m}i9CVwN!R91d~uVG?}_zXT0)1I4a)stLXanG@m9<8oLWCd)20I2bQ zcE(HKe3i?ob0W~@2H$5Twn3eYGyFOfpZZYse9w)FO>q14YZ=cQc}FdI)XaUsPp%I& y|6^z7tGnx4It^Og`DQWSnfoHQ$XA+n=B~P&eeC%IpIY5H^9DFSh3VWwk*gqYnM$_+ delta 144 zcmV;B0B`@x0m}i9CVwlL%E}k;GfYeopTS3B+H-TQdXj4^?m1S{qt&&Dtbi>L05$&4 z&Ugu&uW~tcP6XQA;QOq^HmH+vhF^!`Qy;3H@3~R232vW$E#rA3@2Dk@nz=9d$@QV; yf9%YBb$5MBr$MVb-z?@kb6?~Z`AXBy+*Oyek3E0jQ>!~?9tP(J3e>1_k*grQy-GL$ From e1e6f786dd230d3e0cce8aab4be7c9fddf585e91 Mon Sep 17 00:00:00 2001 From: d-laub Date: Tue, 29 Apr 2025 16:13:29 -0700 Subject: [PATCH 21/53] fix: continue migrating to seqpro Ragged, enable logger at module level, add warnings about potential reference genome mismatches --- Cargo.lock | 286 ++++++++++--------- pyproject.toml | 3 - python/genvarloader/__init__.py | 5 - python/genvarloader/__main__.py | 129 --------- python/genvarloader/_dataset/_impl.py | 18 +- python/genvarloader/_dataset/_reconstruct.py | 14 +- python/genvarloader/_dataset/_write.py | 42 ++- python/genvarloader/_utils.py | 9 +- python/genvarloader/_variants/_records.py | 2 +- 9 files changed, 230 insertions(+), 278 deletions(-) delete mode 100644 python/genvarloader/__main__.py diff --git a/Cargo.lock b/Cargo.lock index 1d1b81fc..ce37fd54 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "addr2line" @@ -78,9 +78,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.95" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" +checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" [[package]] name = "attohttpc" @@ -125,9 +125,9 @@ checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "bigtools" -version = "0.5.4" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91f1c37f11670ccdb1b49313e8244be46543d06e9e68aae3d182796d8f78f256" +checksum = "83e0a7f18529896a324e1bb0a733e258c285e10564e21d1aba24216666e52867" dependencies = [ "anyhow", "attohttpc", @@ -162,9 +162,9 @@ dependencies = [ [[package]] name = "bitflags" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" +checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" [[package]] name = "byteorder" @@ -183,15 +183,15 @@ dependencies = [ [[package]] name = "bytes" -version = "1.9.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] name = "cc" -version = "1.2.10" +version = "1.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13208fcbb66eaeffe09b99fffbe1af420f00a7b35aa99ad683dfc1aa76145229" +checksum = "04da6a0d40b948dfc4fa8f5bbf402b0fc1a64a28dbf7d12ffd683550f2c1b63a" dependencies = [ "shlex", ] @@ -204,9 +204,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "clap" -version = "4.5.27" +version = "4.5.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "769b0145982b4b48713e01ec42d61614425f27b7058bda7180a3a41f30104796" +checksum = "eccb054f56cbd38340b380d4a8e69ef1f02f1af43db2f0cc817a4774d80ae071" dependencies = [ "clap_builder", "clap_derive", @@ -214,9 +214,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.27" +version = "4.5.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b26884eb4b57140e4d2d93652abfa49498b938b3c9179f9fc487b0acc3edad7" +checksum = "efd9466fac8543255d3b1fcad4762c5e116ffe808c8a3043d4263cd4fd4862a2" dependencies = [ "anstream", "anstyle", @@ -226,14 +226,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.24" +version = "4.5.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54b755194d6389280185988721fffba69495eed5ee9feeee9a599b53db80318c" +checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -266,9 +266,9 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "crossbeam-channel" -version = "0.5.14" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" dependencies = [ "crossbeam-utils", ] @@ -306,26 +306,26 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] name = "either" -version = "1.13.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "equivalent" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" +checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" dependencies = [ "libc", "windows-sys 0.59.0", @@ -409,7 +409,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -464,13 +464,25 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", ] [[package]] @@ -555,9 +567,9 @@ dependencies = [ [[package]] name = "icu_locid_transform_data" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" +checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d" [[package]] name = "icu_normalizer" @@ -579,9 +591,9 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" +checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7" [[package]] name = "icu_properties" @@ -600,9 +612,9 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" +checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" [[package]] name = "icu_provider" @@ -629,7 +641,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -661,9 +673,9 @@ checksum = "fa38453685e5fe724fd23ff6c1a158c1e2ca21ce0c2718fa11e96e70e99fd4de" [[package]] name = "indexmap" -version = "2.7.1" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" +checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" dependencies = [ "equivalent", "hashbrown", @@ -671,9 +683,9 @@ dependencies = [ [[package]] name = "indoc" -version = "2.0.5" +version = "2.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" +checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd" [[package]] name = "is_terminal_polyfill" @@ -701,15 +713,15 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "libc" -version = "0.2.169" +version = "0.2.172" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" +checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" [[package]] name = "libdeflate-sys" @@ -731,21 +743,21 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.4.15" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" +checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" [[package]] name = "litemap" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" +checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" [[package]] name = "log" -version = "0.4.25" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] name = "matrixmultiply" @@ -774,9 +786,9 @@ dependencies = [ [[package]] name = "miniz_oxide" -version = "0.8.3" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8402cab7aefae129c6977bb0ff1b8fd9a04eb5b51efc50a70bea51cda0c7924" +checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" dependencies = [ "adler2", ] @@ -859,9 +871,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.20.2" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "openssl-probe" @@ -889,9 +901,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "portable-atomic" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" +checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" [[package]] name = "portable-atomic-util" @@ -904,27 +916,27 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.2.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" dependencies = [ "toml_edit", ] [[package]] name = "proc-macro2" -version = "1.0.93" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" dependencies = [ "unicode-ident", ] [[package]] name = "pyo3" -version = "0.23.4" +version = "0.23.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57fe09249128b3173d092de9523eaa75136bf7ba85e0d69eca241c7939c933cc" +checksum = "7778bffd85cf38175ac1f545509665d0b9b92a198ca7941f131f85f7a4f9a872" dependencies = [ "cfg-if", "indoc", @@ -940,9 +952,9 @@ dependencies = [ [[package]] name = "pyo3-build-config" -version = "0.23.4" +version = "0.23.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd3927b5a78757a0d71aa9dff669f903b1eb64b54142a9bd9f757f8fde65fd7" +checksum = "94f6cbe86ef3bf18998d9df6e0f3fc1050a8c5efa409bf712e661a4366e010fb" dependencies = [ "once_cell", "target-lexicon", @@ -950,9 +962,9 @@ dependencies = [ [[package]] name = "pyo3-ffi" -version = "0.23.4" +version = "0.23.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dab6bb2102bd8f991e7749f130a70d05dd557613e39ed2deeee8e9ca0c4d548d" +checksum = "e9f1b4c431c0bb1c8fb0a338709859eed0d030ff6daa34368d3b152a63dfdd8d" dependencies = [ "libc", "pyo3-build-config", @@ -960,38 +972,44 @@ dependencies = [ [[package]] name = "pyo3-macros" -version = "0.23.4" +version = "0.23.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91871864b353fd5ffcb3f91f2f703a22a9797c91b9ab497b1acac7b07ae509c7" +checksum = "fbc2201328f63c4710f68abdf653c89d8dbc2858b88c5d88b0ff38a75288a9da" dependencies = [ "proc-macro2", "pyo3-macros-backend", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] name = "pyo3-macros-backend" -version = "0.23.4" +version = "0.23.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43abc3b80bc20f3facd86cd3c60beed58c3e2aa26213f3cda368de39c60a27e4" +checksum = "fca6726ad0f3da9c9de093d6f116a93c1a38e417ed73bf138472cf4064f72028" dependencies = [ "heck", "proc-macro2", "pyo3-build-config", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] name = "quote" -version = "1.0.38" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" + [[package]] name = "rawpointer" version = "0.2.1" @@ -1055,15 +1073,14 @@ checksum = "ba39f3699c378cd8970968dcbff9c43159ea4cfbd88d43c00b22f2ef10a435d2" [[package]] name = "ring" -version = "0.17.8" +version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom", + "getrandom 0.2.16", "libc", - "spin", "untrusted", "windows-sys 0.52.0", ] @@ -1094,7 +1111,7 @@ dependencies = [ "regex", "relative-path", "rustc_version", - "syn 2.0.96", + "syn 2.0.100", "unicode-ident", ] @@ -1106,9 +1123,9 @@ checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc-hash" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" [[package]] name = "rustc_version" @@ -1121,9 +1138,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.44" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" +checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf" dependencies = [ "bitflags", "errno", @@ -1177,9 +1194,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.18" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "schannel" @@ -1225,28 +1242,28 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.25" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" [[package]] name = "serde" -version = "1.0.217" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.217" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -1266,15 +1283,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" - -[[package]] -name = "spin" -version = "0.9.8" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" [[package]] name = "stable_deref_trait" @@ -1301,9 +1312,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.96" +version = "2.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" +checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" dependencies = [ "proc-macro2", "quote", @@ -1318,7 +1329,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -1329,13 +1340,12 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tempfile" -version = "3.15.0" +version = "3.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8a559c81686f576e8cd0290cd2a24a2a9ad80c98b3478856500fcbd7acd704" +checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf" dependencies = [ - "cfg-if", "fastrand", - "getrandom", + "getrandom 0.3.2", "once_cell", "rustix", "windows-sys 0.59.0", @@ -1358,7 +1368,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] [[package]] @@ -1373,9 +1383,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.43.0" +version = "1.44.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" +checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48" dependencies = [ "backtrace", "pin-project-lite", @@ -1383,15 +1393,15 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.8" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +checksum = "3da5db5a963e24bc68be8b17b6fa82814bb22ee8660f192bb182771d498f09a3" [[package]] name = "toml_edit" -version = "0.22.22" +version = "0.22.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +checksum = "10558ed0bd2a1562e630926a2d1f0b98c827da99fabd3fe20920a59642504485" dependencies = [ "indexmap", "toml_datetime", @@ -1427,15 +1437,15 @@ checksum = "e87a2ed6b42ec5e28cc3b94c09982969e9227600b2e3dcbc1db927a84c06bd69" [[package]] name = "unicode-ident" -version = "1.0.15" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11cd88e12b17c6494200a9c1b683a04fcac9573ed74cd1b62aeb2727c5592243" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] name = "unindent" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7de7d73e1754487cb58364ee906a499937a0dfabd86bcb980fa99ec8c8fa2ce" +checksum = "7264e107f553ccae879d21fbea1d6724ac785e8c3bfc762137959b5802826ef3" [[package]] name = "untrusted" @@ -1478,6 +1488,15 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasi" +version = "0.14.2+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +dependencies = [ + "wit-bindgen-rt", +] + [[package]] name = "webpki" version = "0.22.4" @@ -1572,13 +1591,22 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.6.24" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d71a593cc5c42ad7876e2c1fda56f314f3754c084128833e64f1345ff8a03a" +checksum = "6cb8234a863ea0e8cd7284fcdd4f145233eb00fee02bbdd9861aec44e6477bc5" dependencies = [ "memchr", ] +[[package]] +name = "wit-bindgen-rt" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +dependencies = [ + "bitflags", +] + [[package]] name = "write16" version = "1.0.0" @@ -1611,28 +1639,28 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", "synstructure", ] [[package]] name = "zerofrom" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", "synstructure", ] @@ -1655,5 +1683,5 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.100", ] diff --git a/pyproject.toml b/pyproject.toml index f450cdce..3897f9ab 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,9 +38,6 @@ source = "https://github.com/mcvickerlab/GenVarLoader" documentation = "https://genvarloader.readthedocs.io/en/stable/" issues = "https://github.com/mcvickerlab/GenVarLoader/issues" -[project.scripts] -genvarloader = 'genvarloader.__main__:app' - [tool.ruff] lint.ignore = ["E501"] diff --git a/python/genvarloader/__init__.py b/python/genvarloader/__init__.py index 0595f69a..f4093133 100644 --- a/python/genvarloader/__init__.py +++ b/python/genvarloader/__init__.py @@ -1,7 +1,5 @@ import importlib.metadata -from loguru import logger - from ._bigwig import BigWigs from ._dataset._impl import ArrayDataset, Dataset, RaggedDataset from ._dataset._write import write @@ -22,6 +20,3 @@ "ArrayDataset", "RaggedDataset", ] - - -logger.disable("genvarloader") diff --git a/python/genvarloader/__main__.py b/python/genvarloader/__main__.py deleted file mode 100644 index 12196291..00000000 --- a/python/genvarloader/__main__.py +++ /dev/null @@ -1,129 +0,0 @@ -from enum import Enum -from pathlib import Path -from typing import Annotated, Optional - -from typer import Argument, Option, Typer - -__all__ = [] - - -app = Typer(rich_markup_mode="rich") - - -class LOG_LEVEL(str, Enum): - DEBUG = "DEBUG" - INFO = "INFO" - WARNING = "WARNING" - ERROR = "ERROR" - CRITICAL = "CRITICAL" - - -@app.command(no_args_is_help=True) -def main( - path: Annotated[ - Path, - Argument( - help="Path to the output directory, using the .gvl extension for clarity is encouraged." - ), - ], - bed: Annotated[Path, Argument(help="Path to the BED file.")], - variants: Annotated[ - Optional[Path], Option(help="Path to variants file, either VCF or PGEN.") - ] = None, - bigwig_table: Annotated[ - Optional[Path], - Option( - help='CSV or TSV with columns "sample" and "path" mapping each sample to its BigWig.' - ), - ] = None, - samples: Annotated[ - Optional[str], - Option(help="Comma-separated list of samples to include/subset to."), - ] = None, - length: Annotated[ - Optional[int], - Option( - help="Length of the sequences. If not provided, will default to maximum length seen in the BED file." - ), - ] = None, - max_jitter: Annotated[ - int, - Option( - help="Maximum jitter to allow. Permitted by expanding the region length by 2 * max jitter." - ), - ] = 0, - overwrite: Annotated[ - bool, - Option(help="Overwrite the output directory if it exists."), - ] = False, - max_memory: Annotated[ - str, - Option( - help="Hint for maximum memory to use. Can be a number or use suffixes M and G to specify units. Actual usage will be marginally higher than this. Default is 4 GiB." - ), - ] = "4G", - log_level: Annotated[ - LOG_LEVEL, - Option( - help="Log level to use. One of DEBUG, INFO, WARNING, ERROR, CRITICAL. Default is INFO." - ), - ] = LOG_LEVEL.INFO, -): - """Write a GenVarLoader dataset from a BED3+ file and a VCF file and/or BigWig files. - - If a VCF is included, the dataset will support yielding haplotypes. - If BigWigs are included, the dataset will support yielding base-pair resolution tracks. - One of either a VCF or BigWigs must be provided. - - [b]Sample subsetting behavior:[/b] - If a VCF and BigWigs are provided, the samples will be subset to the intersection of the samples in the VCF and BigWigs. - If a list of specific samples are provided via --samples, that subset will take precedence. - """ - if path.exists() and not overwrite: - raise FileExistsError( - f"Output directory {path} already exists. Use --overwrite to overwrite." - ) - - import sys - - from loguru import logger - - from genvarloader._bigwig import BigWigs - from genvarloader._dataset._write import write - - if bigwig_table is not None: - bigwigs = BigWigs.from_table("bws", bigwig_table) - else: - bigwigs = None - - if samples is not None: - _samples = samples.split(",") - else: - _samples = None - - if max_memory[-1] == "M": - _max_memory = int(max_memory[:-1]) * 1024**2 - elif max_memory[-1] == "G": - _max_memory = int(max_memory[:-1]) * 1024**3 - else: - _max_memory = int(max_memory) - - logger.remove() - logger.add(sys.stderr, level=log_level.value) - logger.enable("genvarloader") - - write( - path=path, - bed=bed, - variants=variants, - bigwigs=bigwigs, - samples=_samples, - length=length, - max_jitter=max_jitter, - overwrite=overwrite, - max_mem=_max_memory, - ) - - -if __name__ == "__main__": - app() diff --git a/python/genvarloader/_dataset/_impl.py b/python/genvarloader/_dataset/_impl.py index 2439b053..2f43845f 100644 --- a/python/genvarloader/_dataset/_impl.py +++ b/python/genvarloader/_dataset/_impl.py @@ -272,6 +272,22 @@ def open( splice_idxer = None spliced_bed = None + if seqs is not None: + contig_lengths = dict( + zip(seqs.reference.contigs, np.diff(seqs.reference.offsets)) + ) + out_of_bounds = bed.select( + ( + pl.col("chromStart") >= pl.col("chrom").replace_strict(contig_lengths) + ).any() + ).item() + if out_of_bounds: + logger.warning( + "Some regions in the dataset have a start coordinate that is out" + " of bounds for the reference genome provided. This may happen if" + " the dataset's regions are for a different reference genome." + ) + dataset = RaggedDataset( path=path, output_length="ragged", @@ -998,7 +1014,7 @@ def haplotype_lengths( hap_lens = hap_lens.squeeze(0) if out_reshape is not None: - hap_lens = hap_lens.reshape(*out_reshape, self._seqs.genotypes.ploidy) + hap_lens = hap_lens.reshape(*out_reshape, self._seqs.genotypes.shape[-1]) return hap_lens diff --git a/python/genvarloader/_dataset/_reconstruct.py b/python/genvarloader/_dataset/_reconstruct.py index 5ec6ee15..52749f13 100644 --- a/python/genvarloader/_dataset/_reconstruct.py +++ b/python/genvarloader/_dataset/_reconstruct.py @@ -213,6 +213,7 @@ def from_path( ploidy: int, ) -> Haps[Ragged[np.bytes_]]: if not (path / "genotypes" / "svar_meta.json").exists(): + logger.info("Loading variant data.") variants = _Variants.from_table(path / "genotypes" / "variants.arrow") if phased: v_idxs = np.memmap( @@ -258,11 +259,14 @@ def from_path( genotypes = SparseGenotypes.from_offsets( v_idxs, shape[:-1], offsets.reshape(-1, 2) ) - svar_index = pl.read_ipc( - path / "genotypes" / "link.svar" / "index.arrow", - memory_map=False, - columns=["POS", "ILEN", "ALT"], - ).with_columns(pl.col("ILEN", "ALT").list.first()) + logger.info("Loading variant data.") + svar_index = ( + pl.scan_ipc( + path / "genotypes" / "link.svar" / "index.arrow", memory_map=False + ) + .select("POS", pl.col("ILEN", "ALT").list.first()) + .collect() + ) variants = _Variants( svar_index["POS"].to_numpy() - 1, svar_index["ILEN"].to_numpy(), diff --git a/python/genvarloader/_dataset/_write.py b/python/genvarloader/_dataset/_write.py index 2859744f..d1d93a98 100644 --- a/python/genvarloader/_dataset/_write.py +++ b/python/genvarloader/_dataset/_write.py @@ -15,6 +15,7 @@ from more_itertools import mark_ends from natsort import natsorted from numpy.typing import NDArray +from seqpro._ragged import OFFSET_TYPE from tqdm.auto import tqdm from .._bigwig import BigWigs @@ -290,6 +291,12 @@ def _write_from_vcf(path: Path, bed: pl.DataFrame, vcf: VCF, max_mem: int): ): var_idxs = var_idxs.astype(V_IDX_TYPE) if range_ is None: + logger.warning( + "All regions in this chunk have no variants for any sample. This could be expected depending on the region lengths" + " and source of variants. However, this can also be caused by a mismatch between the" + " reference genome used for the BED file coordinates and the one used for the variants." + ) + max_ends.append(e) sp_genos = SparseGenotypes.empty( (1, vcf.n_samples, vcf.ploidy), np.int32 @@ -347,6 +354,14 @@ def _write_from_vcf(path: Path, bed: pl.DataFrame, vcf: VCF, max_mem: int): ).to_numpy() # (r s p) lengths = np.stack([a.lengths for a in ls_sparse], 0).sum(0) + + if (lengths == 0).all((1, 2)).any(): + logger.warning( + "Some regions in this chunk have no variants for any sample. This could be expected depending on the region lengths" + " and source of variants. However, this can also be caused by a mismatch between the" + " reference genome used for the BED file coordinates and the one used for the variants." + ) + sp_genos = SparseGenotypes.from_lengths(var_idxs, lengths) ( v_idx_memmap_offsets, @@ -411,6 +426,12 @@ def _write_from_pgen(path: Path, bed: pl.DataFrame, pgen: PGEN, max_mem: int): pgen._chunk_ranges_with_length(contig, starts, ends, max_mem), ends ): if range_ is None: + logger.warning( + "All regions in this chunk have no variants for any sample. This could be expected depending on the region lengths" + " and source of variants. However, this can also be caused by a mismatch between the" + " reference genome used for the BED file coordinates and the one used for the variants." + ) + max_ends.append(e) sp_genos = SparseGenotypes.empty( (1, pgen.n_samples, pgen.ploidy), np.int32 @@ -464,6 +485,14 @@ def _write_from_pgen(path: Path, bed: pl.DataFrame, pgen: PGEN, max_mem: int): ).to_numpy() # (r s p) lengths = np.stack([a.lengths for a in ls_sparse], 0).sum(0) + + if (lengths == 0).all((1, 2)).any(): + logger.warning( + "Some regions in this chunk have no variants for any sample. This could be expected depending on the region lengths" + " and source of variants. However, this can also be caused by a mismatch between the" + " reference genome used for the BED file coordinates and the one used for the variants." + ) + sp_genos = SparseGenotypes.from_lengths(var_idxs, lengths) ( @@ -513,16 +542,25 @@ def _write_from_svar( v_ends = svar.granges.End max_ends = np.empty(bed.height, np.int32) contig_offset = 0 + pbar = tqdm(total=bed.height, unit=" region") for (c,), df in bed.partition_by( "chrom", as_dict=True, maintain_order=True ).items(): c = cast(str, c) + pbar.set_description(f"Processing {df.height} regions on contig {c}") # (r s p 2) out = offsets[contig_offset : contig_offset + df.height] svar._find_starts_ends_with_length( c, df["chromStart"], df["chromEnd"], samples=samples, out=out ) + if (out == np.iinfo(OFFSET_TYPE).max).all((1, 2, 3)).any(): + logger.warning( + "Some regions have no variants for any sample. This could be expected depending on the region lengths" + " and source of variants. However, this can also be caused by a mismatch between the" + " reference genome used for the BED file coordinates and the one used for the variants." + ) + # compute max_ends for the bed shape = (df.height, len(samples), svar.ploidy) # (r s p ~v) @@ -538,9 +576,11 @@ def _write_from_svar( c_max_ends[:] = v_ends[v_idxs.data] else: c_max_ends[~v_idxs.mask] = v_ends[v_idxs.data[~v_idxs.mask]] - c_max_ends[v_idxs.mask] = df.filter(v_idxs.mask)['chromEnd'] + c_max_ends[v_idxs.mask] = df.filter(v_idxs.mask)["chromEnd"] contig_offset += df.height + pbar.update(df.height) + pbar.close() offsets.flush() (out_dir / "link.svar").symlink_to(svar.path, True) diff --git a/python/genvarloader/_utils.py b/python/genvarloader/_utils.py index ea68db35..55e2c4dd 100644 --- a/python/genvarloader/_utils.py +++ b/python/genvarloader/_utils.py @@ -1,6 +1,7 @@ from itertools import accumulate, chain, repeat from pathlib import Path from typing import ( + Any, Generator, Iterable, Optional, @@ -26,8 +27,8 @@ T = TypeVar("T") -def is_dtype(arr: NDArray, dtype: type[DTYPE]) -> TypeGuard[NDArray[DTYPE]]: - return np.issubdtype(arr.dtype, dtype) +def is_dtype(arr: Any, dtype: type[DTYPE]) -> TypeGuard[NDArray[DTYPE]]: + return isinstance(arr, np.ndarray) and np.issubdtype(arr.dtype, dtype) def _process_bed(bed: Union[str, Path, pl.DataFrame], fixed_length: int): @@ -141,10 +142,10 @@ def idx_like_to_array(idx: Idx, max_len: int) -> NDArray[np.intp]: indices are preserved.""" if isinstance(idx, slice): _idx = np.arange(max_len, dtype=np.intp)[idx] - elif isinstance(idx, np.ndarray) and np.issubdtype(idx.dtype, np.bool_): + elif is_dtype(idx, np.bool_): _idx = idx.nonzero()[0] elif isinstance(idx, Sequence): - _idx = np.asarray(idx, np.intp) + _idx = np.array(idx, np.intp) else: _idx = idx diff --git a/python/genvarloader/_variants/_records.py b/python/genvarloader/_variants/_records.py index 72a5c709..2b7d07cc 100644 --- a/python/genvarloader/_variants/_records.py +++ b/python/genvarloader/_variants/_records.py @@ -105,7 +105,7 @@ def from_polars(cls, alleles: pl.Series): offsets[0] = 0 offsets[1:] = alleles.str.len_bytes().cast(pl.Int64).cum_sum().to_numpy() flat_alleles = np.frombuffer( - alleles.str.concat("").to_numpy()[0].encode(), "S1" + alleles.str.join().to_numpy()[0].encode(), "S1" ) return cls(offsets, flat_alleles) From 2650716bcc6435faae075f98e045e095f813f96b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 30 Apr 2025 03:09:50 +0000 Subject: [PATCH 22/53] =?UTF-8?q?bump:=20version=200.12.0=20=E2=86=92=200.?= =?UTF-8?q?13.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/changelog.md | 11 +++++++++++ pyproject.toml | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/docs/source/changelog.md b/docs/source/changelog.md index 918d52a8..dbe3e754 100644 --- a/docs/source/changelog.md +++ b/docs/source/changelog.md @@ -1,3 +1,14 @@ +## v0.13.0 (2025-04-30) + +### Feat + +- SVAR support passes all tests + +### Fix + +- continue migrating to seqpro Ragged, enable logger at module level, add warnings about potential reference genome mismatches +- add spanning dels to test and fix hap ilens for this case + ## v0.12.0 (2025-04-18) ### Feat diff --git a/pyproject.toml b/pyproject.toml index 3897f9ab..8d60e8ba 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "genvarloader" -version = "0.12.0" +version = "0.13.0" description = "Pipeline for efficient genomic data processing." authors = [ { name = "David Laub", email = "dlaub@ucsd.edu" }, From 222daef8ad9f10ca47d3c43262a21d6a7fd1094a Mon Sep 17 00:00:00 2001 From: d-laub Date: Tue, 29 Apr 2025 20:21:22 -0700 Subject: [PATCH 23/53] build: change gh workflows to run on stable --- .github/workflows/bumpversion.yaml | 2 +- Cargo.lock | 284 +++++++++++++---------------- 2 files changed, 129 insertions(+), 157 deletions(-) diff --git a/.github/workflows/bumpversion.yaml b/.github/workflows/bumpversion.yaml index 71380248..7e47b2a8 100644 --- a/.github/workflows/bumpversion.yaml +++ b/.github/workflows/bumpversion.yaml @@ -3,7 +3,7 @@ name: Bump version on: push: branches: - - main + - stable jobs: bump-version: diff --git a/Cargo.lock b/Cargo.lock index ce37fd54..edafd439 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -78,9 +78,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.98" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" +checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" [[package]] name = "attohttpc" @@ -125,9 +125,9 @@ checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "bigtools" -version = "0.5.6" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83e0a7f18529896a324e1bb0a733e258c285e10564e21d1aba24216666e52867" +checksum = "91f1c37f11670ccdb1b49313e8244be46543d06e9e68aae3d182796d8f78f256" dependencies = [ "anyhow", "attohttpc", @@ -162,9 +162,9 @@ dependencies = [ [[package]] name = "bitflags" -version = "2.9.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" +checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" [[package]] name = "byteorder" @@ -183,15 +183,15 @@ dependencies = [ [[package]] name = "bytes" -version = "1.10.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" [[package]] name = "cc" -version = "1.2.20" +version = "1.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04da6a0d40b948dfc4fa8f5bbf402b0fc1a64a28dbf7d12ffd683550f2c1b63a" +checksum = "13208fcbb66eaeffe09b99fffbe1af420f00a7b35aa99ad683dfc1aa76145229" dependencies = [ "shlex", ] @@ -204,9 +204,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "clap" -version = "4.5.37" +version = "4.5.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eccb054f56cbd38340b380d4a8e69ef1f02f1af43db2f0cc817a4774d80ae071" +checksum = "769b0145982b4b48713e01ec42d61614425f27b7058bda7180a3a41f30104796" dependencies = [ "clap_builder", "clap_derive", @@ -214,9 +214,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.37" +version = "4.5.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efd9466fac8543255d3b1fcad4762c5e116ffe808c8a3043d4263cd4fd4862a2" +checksum = "1b26884eb4b57140e4d2d93652abfa49498b938b3c9179f9fc487b0acc3edad7" dependencies = [ "anstream", "anstyle", @@ -226,14 +226,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.32" +version = "4.5.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7" +checksum = "54b755194d6389280185988721fffba69495eed5ee9feeee9a599b53db80318c" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.96", ] [[package]] @@ -266,9 +266,9 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "crossbeam-channel" -version = "0.5.15" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471" dependencies = [ "crossbeam-utils", ] @@ -306,26 +306,26 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.96", ] [[package]] name = "either" -version = "1.15.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "equivalent" -version = "1.0.2" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.11" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", "windows-sys 0.59.0", @@ -409,7 +409,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.96", ] [[package]] @@ -464,25 +464,13 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.11.0+wasi-snapshot-preview1", -] - -[[package]] -name = "getrandom" -version = "0.3.2" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", - "r-efi", - "wasi 0.14.2+wasi-0.2.4", + "wasi", ] [[package]] @@ -567,9 +555,9 @@ dependencies = [ [[package]] name = "icu_locid_transform_data" -version = "1.5.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" [[package]] name = "icu_normalizer" @@ -591,9 +579,9 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "1.5.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" [[package]] name = "icu_properties" @@ -612,9 +600,9 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "1.5.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" [[package]] name = "icu_provider" @@ -641,7 +629,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.96", ] [[package]] @@ -673,9 +661,9 @@ checksum = "fa38453685e5fe724fd23ff6c1a158c1e2ca21ce0c2718fa11e96e70e99fd4de" [[package]] name = "indexmap" -version = "2.9.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" +checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" dependencies = [ "equivalent", "hashbrown", @@ -683,9 +671,9 @@ dependencies = [ [[package]] name = "indoc" -version = "2.0.6" +version = "2.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd" +checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" [[package]] name = "is_terminal_polyfill" @@ -713,15 +701,15 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.15" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "libc" -version = "0.2.172" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "libdeflate-sys" @@ -743,21 +731,21 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.9.4" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "litemap" -version = "0.7.5" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" [[package]] name = "log" -version = "0.4.27" +version = "0.4.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" +checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" [[package]] name = "matrixmultiply" @@ -786,9 +774,9 @@ dependencies = [ [[package]] name = "miniz_oxide" -version = "0.8.8" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" +checksum = "b8402cab7aefae129c6977bb0ff1b8fd9a04eb5b51efc50a70bea51cda0c7924" dependencies = [ "adler2", ] @@ -871,9 +859,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.21.3" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "openssl-probe" @@ -901,9 +889,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "portable-atomic" -version = "1.11.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" +checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" [[package]] name = "portable-atomic-util" @@ -916,27 +904,27 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.3.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" dependencies = [ "toml_edit", ] [[package]] name = "proc-macro2" -version = "1.0.95" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" dependencies = [ "unicode-ident", ] [[package]] name = "pyo3" -version = "0.23.5" +version = "0.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7778bffd85cf38175ac1f545509665d0b9b92a198ca7941f131f85f7a4f9a872" +checksum = "57fe09249128b3173d092de9523eaa75136bf7ba85e0d69eca241c7939c933cc" dependencies = [ "cfg-if", "indoc", @@ -952,9 +940,9 @@ dependencies = [ [[package]] name = "pyo3-build-config" -version = "0.23.5" +version = "0.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94f6cbe86ef3bf18998d9df6e0f3fc1050a8c5efa409bf712e661a4366e010fb" +checksum = "1cd3927b5a78757a0d71aa9dff669f903b1eb64b54142a9bd9f757f8fde65fd7" dependencies = [ "once_cell", "target-lexicon", @@ -962,9 +950,9 @@ dependencies = [ [[package]] name = "pyo3-ffi" -version = "0.23.5" +version = "0.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9f1b4c431c0bb1c8fb0a338709859eed0d030ff6daa34368d3b152a63dfdd8d" +checksum = "dab6bb2102bd8f991e7749f130a70d05dd557613e39ed2deeee8e9ca0c4d548d" dependencies = [ "libc", "pyo3-build-config", @@ -972,44 +960,38 @@ dependencies = [ [[package]] name = "pyo3-macros" -version = "0.23.5" +version = "0.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc2201328f63c4710f68abdf653c89d8dbc2858b88c5d88b0ff38a75288a9da" +checksum = "91871864b353fd5ffcb3f91f2f703a22a9797c91b9ab497b1acac7b07ae509c7" dependencies = [ "proc-macro2", "pyo3-macros-backend", "quote", - "syn 2.0.100", + "syn 2.0.96", ] [[package]] name = "pyo3-macros-backend" -version = "0.23.5" +version = "0.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fca6726ad0f3da9c9de093d6f116a93c1a38e417ed73bf138472cf4064f72028" +checksum = "43abc3b80bc20f3facd86cd3c60beed58c3e2aa26213f3cda368de39c60a27e4" dependencies = [ "heck", "proc-macro2", "pyo3-build-config", "quote", - "syn 2.0.100", + "syn 2.0.96", ] [[package]] name = "quote" -version = "1.0.40" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] -[[package]] -name = "r-efi" -version = "5.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" - [[package]] name = "rawpointer" version = "0.2.1" @@ -1073,14 +1055,15 @@ checksum = "ba39f3699c378cd8970968dcbff9c43159ea4cfbd88d43c00b22f2ef10a435d2" [[package]] name = "ring" -version = "0.17.14" +version = "0.17.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ "cc", "cfg-if", - "getrandom 0.2.16", + "getrandom", "libc", + "spin", "untrusted", "windows-sys 0.52.0", ] @@ -1111,7 +1094,7 @@ dependencies = [ "regex", "relative-path", "rustc_version", - "syn 2.0.100", + "syn 2.0.96", "unicode-ident", ] @@ -1123,9 +1106,9 @@ checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc-hash" -version = "2.1.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" +checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" [[package]] name = "rustc_version" @@ -1138,9 +1121,9 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.5" +version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ "bitflags", "errno", @@ -1194,9 +1177,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.20" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "schannel" @@ -1242,28 +1225,28 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.26" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" +checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" [[package]] name = "serde" -version = "1.0.219" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.219" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.96", ] [[package]] @@ -1283,9 +1266,15 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.15.0" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "spin" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" [[package]] name = "stable_deref_trait" @@ -1312,9 +1301,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.100" +version = "2.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" +checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" dependencies = [ "proc-macro2", "quote", @@ -1329,7 +1318,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.96", ] [[package]] @@ -1340,12 +1329,13 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tempfile" -version = "3.19.1" +version = "3.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf" +checksum = "9a8a559c81686f576e8cd0290cd2a24a2a9ad80c98b3478856500fcbd7acd704" dependencies = [ + "cfg-if", "fastrand", - "getrandom 0.3.2", + "getrandom", "once_cell", "rustix", "windows-sys 0.59.0", @@ -1368,7 +1358,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.96", ] [[package]] @@ -1383,9 +1373,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.44.2" +version = "1.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48" +checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" dependencies = [ "backtrace", "pin-project-lite", @@ -1393,15 +1383,15 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.9" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3da5db5a963e24bc68be8b17b6fa82814bb22ee8660f192bb182771d498f09a3" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" [[package]] name = "toml_edit" -version = "0.22.25" +version = "0.22.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10558ed0bd2a1562e630926a2d1f0b98c827da99fabd3fe20920a59642504485" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ "indexmap", "toml_datetime", @@ -1437,15 +1427,15 @@ checksum = "e87a2ed6b42ec5e28cc3b94c09982969e9227600b2e3dcbc1db927a84c06bd69" [[package]] name = "unicode-ident" -version = "1.0.18" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "11cd88e12b17c6494200a9c1b683a04fcac9573ed74cd1b62aeb2727c5592243" [[package]] name = "unindent" -version = "0.2.4" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7264e107f553ccae879d21fbea1d6724ac785e8c3bfc762137959b5802826ef3" +checksum = "c7de7d73e1754487cb58364ee906a499937a0dfabd86bcb980fa99ec8c8fa2ce" [[package]] name = "untrusted" @@ -1488,15 +1478,6 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" -[[package]] -name = "wasi" -version = "0.14.2+wasi-0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" -dependencies = [ - "wit-bindgen-rt", -] - [[package]] name = "webpki" version = "0.22.4" @@ -1591,22 +1572,13 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.7.7" +version = "0.6.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cb8234a863ea0e8cd7284fcdd4f145233eb00fee02bbdd9861aec44e6477bc5" +checksum = "c8d71a593cc5c42ad7876e2c1fda56f314f3754c084128833e64f1345ff8a03a" dependencies = [ "memchr", ] -[[package]] -name = "wit-bindgen-rt" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" -dependencies = [ - "bitflags", -] - [[package]] name = "write16" version = "1.0.0" @@ -1639,28 +1611,28 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.96", "synstructure", ] [[package]] name = "zerofrom" -version = "0.1.6" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.6" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.96", "synstructure", ] @@ -1683,5 +1655,5 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.96", ] From d820b7a482be0d2751baccec7872836428afe48e Mon Sep 17 00:00:00 2001 From: d-laub Date: Tue, 29 Apr 2025 20:24:03 -0700 Subject: [PATCH 24/53] build: change tag format --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 8d60e8ba..51ef0005 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -59,8 +59,8 @@ markers = ["slow: mark test as slow (deselect with '-m \"not slow\"')"] [tool.commitizen] name = "cz_conventional_commits" -tag_format = "v$version" -legacy_tag_formats = ["$version"] +tag_format = "$version" +legacy_tag_formats = ['v$version'] version_scheme = "semver2" version_provider = "pep621" update_changelog_on_bump = true From 6630714e9be6afdecd7cf3d741930689107d0632 Mon Sep 17 00:00:00 2001 From: d-laub Date: Tue, 29 Apr 2025 20:30:19 -0700 Subject: [PATCH 25/53] build: bump dependencies --- pixi.toml | 10 ++-------- pyproject.toml | 4 ++-- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/pixi.toml b/pixi.toml index 09d05ebf..aa8aef30 100644 --- a/pixi.toml +++ b/pixi.toml @@ -41,9 +41,9 @@ uv = "*" [pypi-dependencies] genvarloader = { path = ".", editable = true } -seqpro = { path = '/cellar/users/dlaub/projects/ML4GLand/SeqPro', editable = true } +seqpro = "==0.3.1" hirola = "==0.3" -genoray = "==0.7.0" +genoray = "==0.8.0" [feature.docs.dependencies] sphinx = ">=7.4.7" @@ -71,12 +71,6 @@ basenji2-pytorch = ">=0.1.2" [feature.py310.dependencies] python = "3.10.*" -# [feature.py311.dependencies] -# python = "3.11.*" - -# [feature.py312.dependencies] -# python = "3.12.*" - [environments] dev = { features = ["pytorch-cpu", "basenji2", "py310"] } docs = { features = ["docs", "pytorch-cpu", "basenji2", "py310"] } diff --git a/pyproject.toml b/pyproject.toml index 51ef0005..aa4a78d2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,10 +27,10 @@ dependencies = [ "tbb", "joblib", "pooch", + "seqpro>=0.3.1", "awkward", "hirola>=0.3,<0.4", - "seqpro>=0.3.0", - "genoray>=0.7.1", + "genoray>=0.8.0", ] [project.urls] From 6b8fa5d6af0ca94c39d4220de4b73e5b8256e85f Mon Sep 17 00:00:00 2001 From: d-laub Date: Tue, 29 Apr 2025 20:31:17 -0700 Subject: [PATCH 26/53] docs: update requirements --- docs/requirements.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index 0c4d1d9a..73c17e29 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -10,13 +10,14 @@ pyarrow more-itertools urllib3>=2.0.7 tqdm>=4.66.1 -seqpro>=0.1.12 +seqpro>=0.3.1 cyvcf2>=0.30.28 pybigwig>=0.3.22 einops>=0.7.0 typer>=0.11.0 tbb>=2021.12.0 joblib>=1.3.2 +genoray>=0.8.0 sphinx>=7.3 sphinx-book-theme>=1.1 sphinx-autodoc-typehints From 7537162bb4bd0f17a3f822b388a998b2aace295f Mon Sep 17 00:00:00 2001 From: d-laub Date: Tue, 29 Apr 2025 20:32:43 -0700 Subject: [PATCH 27/53] docs: annotate doc requirements --- docs/requirements.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index 73c17e29..6d2c9dca 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,3 +1,4 @@ +# package dependencies loguru>=0.7.2 attrs>=23.1.0 natsort>=8.4.0 @@ -18,6 +19,8 @@ typer>=0.11.0 tbb>=2021.12.0 joblib>=1.3.2 genoray>=0.8.0 +awkward +# doc dependencies sphinx>=7.3 sphinx-book-theme>=1.1 sphinx-autodoc-typehints @@ -25,5 +28,4 @@ myst-parser>=3 nbsphinx ipywidgets torch -ipython -awkward \ No newline at end of file +ipython \ No newline at end of file From d36be0046fa79a653b718463ebad1b413b8482bb Mon Sep 17 00:00:00 2001 From: d-laub Date: Tue, 29 Apr 2025 20:37:21 -0700 Subject: [PATCH 28/53] build: bump rust extension, python ABI compatibility --- Cargo.toml | 2 +- pixi.lock | 81 +++++++++++++++++++++++++++++++++++++++++------------- 2 files changed, 63 insertions(+), 20 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index c7b27503..1938bcd3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,7 +20,7 @@ rayon = "1.10.0" [dependencies.pyo3] version = "0.23.4" -features = ["abi3-py39", "extension-module"] +features = ["abi3-py310", "extension-module"] [dev-dependencies] rstest = "0.24.0" \ No newline at end of file diff --git a/pixi.lock b/pixi.lock index 22b3e1c7..7d5a71ea 100644 --- a/pixi.lock +++ b/pixi.lock @@ -237,16 +237,20 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda - pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/53/21f7b97e82772caa61541348427f42435120b32961c92d16f9c8ce9757d6/cslug-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/57/b76283dde9c3e9c3fe8985f6d6b2d79ce3b65b54b190d09e696ba4b80b02/genoray-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a1/e4/06181f540be1a95ee11b78ead071401d9e7b7937eff6499c38c509f21f19/cyclopts-3.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/7c/e9fcff7623954d86bdc17782036cbf715ecab1bec4847c008557affe1ca8/docstring_parser-0.16-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/57/11/8ce841f9d665bdaead1df9224cff0f77249e1d22073c2b515196a7c4806d/genoray-0.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/8e/0eccb528701273640dd4f13678a0c1352176166aecd1ee7f4fa29355132b/hirola-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/a9/a6/aa38bddc9f8d90e5ce14023f06ccbf642ab5d507da1ffafb031c0f332dc6/numerary-0.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/ec/5434c4a6012ef2ff12d0e71b6c341532686ee82d63e5101717abc24eb3f5/pgenlib-0.92.0.tar.gz - pypi: https://files.pythonhosted.org/packages/5b/bc/246f452431c592a2a424050e8bb9ccf494fb47613fd97c912f4d573a5e3b/phantom_types-3.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/06/5c9ed34ec048e51e115cd1b3cf9d9c258e3c75b3105b42db11c0282536a3/pysam-0.23.0-cp312-cp312-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fd/bc/cc4e3dbc5e7992398dcb7a8eda0cbcf4fb792a0cdb93f857b478bf3cf884/rich_rst-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e6/b4/dc7833332b43e3a301c46c0384263f87fe600ed4891d5bcd83e42024e662/seqpro-0.3.1-cp39-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c6/64/3d24181aaea3fb892d4a46f8171845782ee364d60e9494426daf31d12f47/tbb-2022.1.0-py2.py3-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/06/bb/09a6dc2f1110b409d6d2f96429969d7466bde9bf4ad8b2e682d851ef104b/tcmlib-1.3.0-py2.py3-none-manylinux_2_28_x86_64.whl - pypi: . - - pypi: /cellar/users/dlaub/projects/ML4GLand/SeqPro dev: channels: - url: https://conda.anaconda.org/conda-forge/ @@ -498,19 +502,23 @@ environments: - pypi: https://files.pythonhosted.org/packages/2d/ea/d6230cc9772edca0fd8c91638dc1c2e2def09b9a22cfabe6532906e96aea/basenji2_pytorch-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/53/21f7b97e82772caa61541348427f42435120b32961c92d16f9c8ce9757d6/cslug-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/57/b76283dde9c3e9c3fe8985f6d6b2d79ce3b65b54b190d09e696ba4b80b02/genoray-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a1/e4/06181f540be1a95ee11b78ead071401d9e7b7937eff6499c38c509f21f19/cyclopts-3.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/7c/e9fcff7623954d86bdc17782036cbf715ecab1bec4847c008557affe1ca8/docstring_parser-0.16-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/57/11/8ce841f9d665bdaead1df9224cff0f77249e1d22073c2b515196a7c4806d/genoray-0.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/8e/0eccb528701273640dd4f13678a0c1352176166aecd1ee7f4fa29355132b/hirola-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/1a/c1/31b3184cba7b257a4a3b5ca5b88b9204ccb7aa02fe3c992280899293ed54/lightning_utilities-0.14.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/a6/aa38bddc9f8d90e5ce14023f06ccbf642ab5d507da1ffafb031c0f332dc6/numerary-0.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/55/20/93ef95a37e1aa3c3dd2ca1cd1cba8c8849823311d034921c0ec38949ffad/Pgenlib-0.92.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/5b/bc/246f452431c592a2a424050e8bb9ccf494fb47613fd97c912f4d573a5e3b/phantom_types-3.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/82/ff/5701f79317a1a03e5ee8a1bf48e7273a8445162a2774e51fc06411a67c89/pytorch_lightning-2.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fd/bc/cc4e3dbc5e7992398dcb7a8eda0cbcf4fb792a0cdb93f857b478bf3cf884/rich_rst-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e6/b4/dc7833332b43e3a301c46c0384263f87fe600ed4891d5bcd83e42024e662/seqpro-0.3.1-cp39-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c6/64/3d24181aaea3fb892d4a46f8171845782ee364d60e9494426daf31d12f47/tbb-2022.1.0-py2.py3-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/06/bb/09a6dc2f1110b409d6d2f96429969d7466bde9bf4ad8b2e682d851ef104b/tcmlib-1.3.0-py2.py3-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/72/25/973bd6128381951b23cdcd8a9870c6dcfc5606cb864df8eabd82e529f9c1/torchinfo-1.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/ee/4d0a7213a6f412afb3483031009a3b970dd7bed3be24de95ab04fba1c05a/torchmetrics-1.7.1-py3-none-any.whl - pypi: . - - pypi: /cellar/users/dlaub/projects/ML4GLand/SeqPro docs: channels: - url: https://conda.anaconda.org/conda-forge/ @@ -836,19 +844,22 @@ environments: - pypi: https://files.pythonhosted.org/packages/2d/ea/d6230cc9772edca0fd8c91638dc1c2e2def09b9a22cfabe6532906e96aea/basenji2_pytorch-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/53/21f7b97e82772caa61541348427f42435120b32961c92d16f9c8ce9757d6/cslug-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/57/b76283dde9c3e9c3fe8985f6d6b2d79ce3b65b54b190d09e696ba4b80b02/genoray-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a1/e4/06181f540be1a95ee11b78ead071401d9e7b7937eff6499c38c509f21f19/cyclopts-3.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/7c/e9fcff7623954d86bdc17782036cbf715ecab1bec4847c008557affe1ca8/docstring_parser-0.16-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/57/11/8ce841f9d665bdaead1df9224cff0f77249e1d22073c2b515196a7c4806d/genoray-0.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/8e/0eccb528701273640dd4f13678a0c1352176166aecd1ee7f4fa29355132b/hirola-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/1a/c1/31b3184cba7b257a4a3b5ca5b88b9204ccb7aa02fe3c992280899293ed54/lightning_utilities-0.14.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/a6/aa38bddc9f8d90e5ce14023f06ccbf642ab5d507da1ffafb031c0f332dc6/numerary-0.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/55/20/93ef95a37e1aa3c3dd2ca1cd1cba8c8849823311d034921c0ec38949ffad/Pgenlib-0.92.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/5b/bc/246f452431c592a2a424050e8bb9ccf494fb47613fd97c912f4d573a5e3b/phantom_types-3.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/82/ff/5701f79317a1a03e5ee8a1bf48e7273a8445162a2774e51fc06411a67c89/pytorch_lightning-2.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fd/bc/cc4e3dbc5e7992398dcb7a8eda0cbcf4fb792a0cdb93f857b478bf3cf884/rich_rst-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e6/b4/dc7833332b43e3a301c46c0384263f87fe600ed4891d5bcd83e42024e662/seqpro-0.3.1-cp39-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c6/64/3d24181aaea3fb892d4a46f8171845782ee364d60e9494426daf31d12f47/tbb-2022.1.0-py2.py3-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/06/bb/09a6dc2f1110b409d6d2f96429969d7466bde9bf4ad8b2e682d851ef104b/tcmlib-1.3.0-py2.py3-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/72/25/973bd6128381951b23cdcd8a9870c6dcfc5606cb864df8eabd82e529f9c1/torchinfo-1.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/ee/4d0a7213a6f412afb3483031009a3b970dd7bed3be24de95ab04fba1c05a/torchmetrics-1.7.1-py3-none-any.whl - pypi: . - - pypi: /cellar/users/dlaub/projects/ML4GLand/SeqPro packages: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 @@ -1675,6 +1686,20 @@ packages: version: 1.0.0 sha256: e151f506d8fbab7756db3ec29e439e0ab425a26423b9c6efe1daee6ddc37bca1 requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/a1/e4/06181f540be1a95ee11b78ead071401d9e7b7937eff6499c38c509f21f19/cyclopts-3.14.0-py3-none-any.whl + name: cyclopts + version: 3.14.0 + sha256: 2ffcd7742158f42e177f13dfbcb06aa9a3fd196366ec6f0a95cd2aa80325f1bb + requires_dist: + - attrs>=23.1.0 + - docstring-parser>=0.15 ; python_full_version < '4.0' + - importlib-metadata>=4.4 ; python_full_version < '3.10' + - pyyaml>=6.0.1 ; extra == 'yaml' + - rich>=13.6.0 + - rich-rst>=1.3.1,<2.0.0 + - tomli>=2.0.0 ; python_full_version < '3.11' and extra == 'toml' + - typing-extensions>=4.8.0 ; python_full_version < '3.11' + requires_python: '>=3.9' - conda: https://conda.anaconda.org/bioconda/linux-64/cyvcf2-0.31.1-py310h0195497_1.tar.bz2 sha256: 87520470e5dc2f958407e5e4e8b2edc8742cf22469b49c5fe1a39ab7baad8195 md5: 1b5bb94c3dfe9748000c57d57c67c653 @@ -1786,6 +1811,16 @@ packages: - pkg:pypi/distlib?source=hash-mapping size: 274151 timestamp: 1733238487461 +- pypi: https://files.pythonhosted.org/packages/d5/7c/e9fcff7623954d86bdc17782036cbf715ecab1bec4847c008557affe1ca8/docstring_parser-0.16-py3-none-any.whl + name: docstring-parser + version: '0.16' + sha256: bf0a1387354d3691d102edef7ec124f219ef639982d096e26e3b60aeffa90637 + requires_python: '>=3.6,<4.0' +- pypi: https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl + name: docutils + version: 0.21.2 + sha256: dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2 + requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_1.conda sha256: fa5966bb1718bbf6967a85075e30e4547901410cc7cb7b16daf68942e9a94823 md5: 24c1ca34138ee57de72a943237cde4cc @@ -1869,13 +1904,14 @@ packages: - pkg:pypi/fsspec?source=compressed-mapping size: 142117 timestamp: 1743437355974 -- pypi: https://files.pythonhosted.org/packages/b7/57/b76283dde9c3e9c3fe8985f6d6b2d79ce3b65b54b190d09e696ba4b80b02/genoray-0.7.0-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/57/11/8ce841f9d665bdaead1df9224cff0f77249e1d22073c2b515196a7c4806d/genoray-0.8.0-py3-none-any.whl name: genoray - version: 0.7.0 - sha256: b6b864441c847f685a990047a590ecfad04fdd37fd077bf4fb984ab4ed81e315 + version: 0.8.0 + sha256: 7d3bbb84dfdeb85c94231c341af8e1c3e3c01a45de74937331aedb19be62f491 requires_dist: - attrs - awkward + - cyclopts - cyvcf2>=0.31.1 - hirola>=0.3.0 - loguru>=0.7.0 @@ -1888,14 +1924,14 @@ packages: - polars>=1.26 - pyarrow>=16 - pyranges>=0.1.3 - - seqpro>=0.2.3 + - seqpro>=0.3.0 - tqdm>=4.65 - typing-extensions>=4.11 - requires_python: '>=3.9' + requires_python: '>=3.9,<3.13' - pypi: . name: genvarloader - version: 0.12.0 - sha256: e547e134d9f5e5966cc728f918b5cf9a3b0943ee268461fc650cac7a9247b2a1 + version: 0.13.0 + sha256: 9d2f0d249fbc2806122dbbddfc102122ff4db3487277c98f2a022f610174dbf8 requires_dist: - numba>=0.58.1 - loguru @@ -1914,10 +1950,10 @@ packages: - tbb - joblib - pooch - - seqpro>=0.2.3 + - seqpro>=0.3.1 - awkward - hirola>=0.3,<0.4 - - genoray>=0.7.0 + - genoray>=0.8.0 requires_python: '>=3.10,<3.13' editable: true - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda @@ -5232,6 +5268,14 @@ packages: - pkg:pypi/rich?source=hash-mapping size: 200323 timestamp: 1743371105291 +- pypi: https://files.pythonhosted.org/packages/fd/bc/cc4e3dbc5e7992398dcb7a8eda0cbcf4fb792a0cdb93f857b478bf3cf884/rich_rst-1.3.1-py3-none-any.whl + name: rich-rst + version: 1.3.1 + sha256: 498a74e3896507ab04492d326e794c3ef76e7cda078703aa592d1853d91098c1 + requires_dist: + - docutils + - rich>=12.0.0 + requires_python: '>=3.6' - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.24.0-py310hc1293b2_0.conda sha256: b0c896af1d8ce85d7948624664d87bd9286223ea5a19884d6f295d37d5cd4e0f md5: 2170ed457a6427f37c90104f6a63437d @@ -5294,10 +5338,10 @@ packages: purls: [] size: 352907 timestamp: 1743805258946 -- pypi: /cellar/users/dlaub/projects/ML4GLand/SeqPro +- pypi: https://files.pythonhosted.org/packages/e6/b4/dc7833332b43e3a301c46c0384263f87fe600ed4891d5bcd83e42024e662/seqpro-0.3.1-cp39-abi3-manylinux_2_28_x86_64.whl name: seqpro - version: 0.2.4 - sha256: c8ffe010a4e5d596388366e26fea9f87b9a99b095a8ce802a7fea9a08723ad34 + version: 0.3.1 + sha256: 28e0367bfd875728e420362f09e6f43cae3949f5e3331370b636da42ac3d6225 requires_dist: - numba>=0.58.1 - numpy>=1.26.0 @@ -5310,7 +5354,6 @@ packages: - setuptools>=70 - awkward>=2.5.0 requires_python: '>=3.9' - editable: true - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.8.2-pyhff2d567_0.conda sha256: 91d664ace7c22e787775069418daa9f232ee8bafdd0a6a080a5ed2395a6fa6b2 md5: 9bddfdbf4e061821a1a443f93223be61 From 6fa4244e972bc51453274a9a993c6e3fba11ca13 Mon Sep 17 00:00:00 2001 From: d-laub Date: Tue, 29 Apr 2025 21:14:05 -0700 Subject: [PATCH 29/53] chore: merge conflicts --- python/genvarloader/_dataset/_impl.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/python/genvarloader/_dataset/_impl.py b/python/genvarloader/_dataset/_impl.py index 2f43845f..7bd13a25 100644 --- a/python/genvarloader/_dataset/_impl.py +++ b/python/genvarloader/_dataset/_impl.py @@ -36,6 +36,7 @@ _reverse, _reverse_complement, is_rag_dtype, + to_padded, ) from .._torch import TorchDataset, get_dataloader from .._types import DTYPE, AnnotatedHaps, Idx, StrIdx @@ -1428,9 +1429,9 @@ def _pad(rag: RaggedAnnotatedHaps) -> AnnotatedHaps: ... def _pad(rag: Ragged | RaggedAnnotatedHaps) -> NDArray | AnnotatedHaps: if isinstance(rag, Ragged): if is_rag_dtype(rag, np.bytes_): - return rag.to_padded(b"N") + return to_padded(rag, b"N") elif is_rag_dtype(rag, np.float32): - return rag.to_padded(0) + return to_padded(rag, 0) else: raise ValueError(f"Unsupported pad dtype: {rag.data.dtype}") elif isinstance(rag, RaggedAnnotatedHaps): From 248d959a6c0b2d16b6c1b068e2c1f21e508682ae Mon Sep 17 00:00:00 2001 From: d-laub Date: Tue, 29 Apr 2025 21:22:34 -0700 Subject: [PATCH 30/53] style: ignore type error on view using str argument --- python/genvarloader/_dataset/_impl.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/genvarloader/_dataset/_impl.py b/python/genvarloader/_dataset/_impl.py index 7bd13a25..f178b764 100644 --- a/python/genvarloader/_dataset/_impl.py +++ b/python/genvarloader/_dataset/_impl.py @@ -1497,7 +1497,7 @@ def _cat_length( raise RuntimeError("Should never see a 4+ dim ragged array.") if is_rag_dtype(rag, np.bytes_): - cat = cat.view("S1") + cat = cat.view("S1") # type: ignore return cat elif isinstance(rag, RaggedAnnotatedHaps): haps = _cat_length(rag.haps, offsets) From d0aa8b98d1e860c22973f6f1825d2b2b39c2dd49 Mon Sep 17 00:00:00 2001 From: d-laub Date: Fri, 9 May 2025 10:42:16 -0700 Subject: [PATCH 31/53] ci: update lockfile --- pixi.lock | 2391 ++++++++++++++++------------------------------------- 1 file changed, 691 insertions(+), 1700 deletions(-) diff --git a/pixi.lock b/pixi.lock index cba4a281..5c7f3f1e 100644 --- a/pixi.lock +++ b/pixi.lock @@ -12,24 +12,24 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/_x86_64-microarch-level-1-2_x86_64.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.5.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.6.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/awkward-2.8.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/awkward-2.8.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/awkward-cpp-45-py312ha6dbfeb_100.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h094d708_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.8.9-hada3f3f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-hf4d4f31_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.0-hada3f3f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.2-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.1-hc2d532b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-h8170a11_5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.9.5-hca9d837_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.18.0-h7b13e6b_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.12.3-h773eac8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.15-h46af1f8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-h9312af0_8.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.0-hc373b34_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.19.0-h756d8c7_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.0-h2d6f568_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.17-h3b40de3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.3-hc2d532b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.5-hc2d532b_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.4-h7d42c6f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-h5b777a2_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.7-hc2d532b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.5-h7c1a40b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-h7cc6b5f_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.13.0-h3cf044e_1.conda @@ -39,15 +39,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py312h2ec8cdc_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.1.31-hbd8a1cb_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.1.31-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.4.26-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.4.26-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/commitizen-4.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.6.3-py312h7900ff3_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.0-py312h178313f_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/cyvcf2-0.31.1-py312h68a07e8_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/decli-0.6.2-pyhd8ed1ab_1.conda @@ -56,7 +56,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/einops-0.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/elfutils-0.192-h7f4e02f_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.18.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.3.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda @@ -68,24 +68,25 @@ environments: - conda: https://conda.anaconda.org/bioconda/linux-64/htslib-1.21-h566b1c6_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.7-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.15-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/icecream-2.1.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.10-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.6.1-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.4.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250127.1-cxx17_hbbce691_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h75ea233_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-19.0.1-h27f8bab_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-19.0.1-hcb10f89_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-19.0.1-hcb10f89_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-19.0.1-h1bed206_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.23.1-h8e693c7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-20.0.0-hebdba27_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-20.0.0-hcb10f89_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-20.0.0-hcb10f89_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-20.0.0-h1bed206_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.24.1-h8e693c7_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-31_h59b9bed_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda @@ -99,12 +100,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.0-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h767d61c_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-0.23.1-h5888daf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-14.2.0-h69a702a_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.2.0-hf1ad2bd_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h767d61c_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.1.0-h767d61c_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-0.24.1-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.1.0-h69a702a_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.1.0-hcea5267_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.1.0-h767d61c_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.36.0-hc4361e1_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.36.0-h0121fbd_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.71.0-h8e591d7_1.conda @@ -112,20 +113,20 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h4ce23a2_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libidn2-2.3.8-ha4ef2c3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-31_h7ac8fdf_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmicrohttpd-1.0.1-hbc5bc17_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.29-pthreads_h94d23a6_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.20.0-hd1b1c89_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.20.0-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-19.0.1-h081d1f1_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-20.0.0-h081d1f1_2_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h501fc15_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2024.07.02-hba17884_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.1-hee588c1_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-h8f9b012_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.2-hee588c1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.1.0-h8f9b012_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.1.0-h4852527_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libtasn1-4.20.0-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.21.0-h0e7cc3e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libunistring-0.9.10-h7f98852_0.tar.bz2 @@ -133,11 +134,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.10.0-h4c51ac1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.7-h81593ed_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.8-h4bc477f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.0.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.44.0-py312h374181b_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/loguru-0.7.2-py312h7900ff3_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/loguru-0.7.3-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-hd590300_1001.conda - conda: https://conda.anaconda.org/conda-forge/noarch/makefun-1.15.6-pyhd8ed1ab_1.conda @@ -146,9 +147,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.3-py312h6ab59e4_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.1-py312hba68c3b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.2-py312hba68c3b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.7.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyh29332c3_1.conda - conda: https://conda.anaconda.org/bioconda/linux-64/ncls-0.0.68-py312h0fa9677_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda @@ -157,16 +158,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numba-0.61.2-py312h2e6246c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.5-py312h72c5963_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.0-h7b32b05_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.1.1-h17f744e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.0-h7b32b05_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.1.2-h17f744e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/p11-kit-0.24.1-hc5aa10d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py312hf9745cd_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-0.23.1-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-base-0.23.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.17.2-h58526e2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.18.0-h3f2d84a_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.7-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.8-pyhe01879c_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/plink2-2.0.0a.6.9-h9948957_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/polars-1.26.0-py312hda0fa55_0.conda @@ -177,12 +178,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.36-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/py-cpuinfo-9.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/py-spy-0.4.0-h4c5a871_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-19.0.1-py312h7900ff3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-19.0.1-py312h01725c0_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-20.0.0-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-20.0.0-py312h01725c0_0_cpu.conda - conda: https://conda.anaconda.org/bioconda/linux-64/pybigwig-0.3.24-py312h0e9d276_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.3-pyh3cfb1c2_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.1-py312h3b7be25_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.4-pyh3cfb1c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.2-py312h680f630_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/bioconda/noarch/pyranges-0.1.4-pyhdfd78af_0.tar.bz2 - conda: https://conda.anaconda.org/bioconda/linux-64/pysam-0.23.0-py312h47d5410_0.tar.bz2 @@ -202,10 +203,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.0.0-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.6-py312h286b59f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.16-hba75a32_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.8-py312h286b59f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.18-h763c568_1.conda - conda: https://conda.anaconda.org/bioconda/linux-64/samtools-1.21-h96c455f_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-78.1.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.1.0-pyhff2d567_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.1-h8bd8927_1.conda @@ -214,16 +215,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2022.1.0-h4ce085d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/termcolor-2.5.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/textual-3.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/textual-3.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.4.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.15.2-pyhff008b6_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.15.2-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.2-h801b22e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.15.3-pyhf21524f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.15.3-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.3-h1a15894_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.13.2-h0e9735f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.13.2-pyh29332c3_0.conda @@ -232,17 +233,17 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-1.0.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py312h68727a3_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.7.2-h2f11bb8_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.30.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.7.3-h2f11bb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.31.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312h66e93f0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312h66e93f0_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda - pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/53/21f7b97e82772caa61541348427f42435120b32961c92d16f9c8ce9757d6/cslug-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c8/14/299f99ce0fde4985cc5ba6f2258c624a5b9bbc547c3d243d99919ca53761/cyclopts-3.14.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/51/ec/fce39003eeb778eed2b62675a02bd207388baa135e9d23997b9df074c838/cyclopts-3.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d5/7c/e9fcff7623954d86bdc17782036cbf715ecab1bec4847c008557affe1ca8/docstring_parser-0.16-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/50/29/3090ef07838bfcbec6bf88ae1fbab1f13e35f6e20dccbff4500e82d4c21e/genoray-0.10.2-py3-none-any.whl @@ -263,24 +264,24 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-3_kmp_llvm.conda - conda: https://conda.anaconda.org/conda-forge/noarch/_x86_64-microarch-level-1-2_x86_64.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.5.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.6.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/awkward-2.8.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/awkward-2.8.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/awkward-cpp-45-py310h0900883_100.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h094d708_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.8.9-hada3f3f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-hf4d4f31_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.0-hada3f3f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.2-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.1-hc2d532b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-h8170a11_5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.9.5-hca9d837_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.18.0-h7b13e6b_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.12.3-h773eac8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.15-h46af1f8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-h9312af0_8.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.0-hc373b34_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.19.0-h756d8c7_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.0-h2d6f568_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.17-h3b40de3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.3-hc2d532b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.5-hc2d532b_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.4-h7d42c6f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-h5b777a2_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.7-hc2d532b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.5-h7c1a40b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-h7cc6b5f_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.13.0-h3cf044e_1.conda @@ -290,15 +291,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py310hf71b8c6_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.1.31-hbd8a1cb_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.1.31-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.4.26-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.4.26-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py310h8deb56e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/commitizen-4.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.6.3-py310hff52083_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.0-py310h89163eb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.10.17-py310hd8ed1ab_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/cyvcf2-0.31.1-py310h0195497_1.tar.bz2 @@ -308,13 +309,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/einops-0.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/elfutils-0.192-h7f4e02f_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.18.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.3.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hbabe93e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gmpy2-2.1.5-py310he8512ff_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gmpy2-2.2.1-py310he8512ff_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.8.9-h5746830_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gsl-2.7-he838d99_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.2.0-pyhd8ed1ab_0.conda @@ -322,24 +323,25 @@ environments: - conda: https://conda.anaconda.org/bioconda/linux-64/htslib-1.21-h566b1c6_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.7-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.15-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/icecream-2.1.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.10-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.6.1-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.4.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250127.1-cxx17_hbbce691_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h75ea233_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-19.0.1-h27f8bab_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-19.0.1-hcb10f89_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-19.0.1-hcb10f89_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-19.0.1-h1bed206_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.23.1-h8e693c7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-20.0.0-hebdba27_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-20.0.0-hcb10f89_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-20.0.0-hcb10f89_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-20.0.0-h1bed206_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.24.1-h8e693c7_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-31_hfdb39a5_mkl.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda @@ -353,9 +355,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.0-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h767d61c_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-0.23.1-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.1.0-h767d61c_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-0.24.1-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.36.0-hc4361e1_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.36.0-h0121fbd_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.71.0-h8e591d7_1.conda @@ -363,34 +365,34 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h4ce23a2_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libidn2-2.3.8-ha4ef2c3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-31_hc41d3b0_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmicrohttpd-1.0.1-hbc5bc17_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.20.0-hd1b1c89_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.20.0-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-19.0.1-h081d1f1_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-20.0.0-h081d1f1_2_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h501fc15_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2024.07.02-hba17884_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.1-hee588c1_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-h8f9b012_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.2-hee588c1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.1.0-h8f9b012_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.1.0-h4852527_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libtasn1-4.20.0-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.21.0-h0e7cc3e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.6.0-cpu_mkl_hf6ddc5a_104.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.7.0-cpu_mkl_hf6ddc5a_100.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libunistring-0.9.10-h7f98852_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.6.2-h9c3ff4c_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.10.0-h4c51ac1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.50.0-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.7-h81593ed_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.8-h4bc477f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.0.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-20.1.3-h024ca30_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-20.1.4-h024ca30_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.44.0-py310h1a6248f_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/loguru-0.7.2-py310hff52083_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/loguru-0.7.3-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-hd590300_1001.conda - conda: https://conda.anaconda.org/conda-forge/noarch/makefun-1.15.6-pyhd8ed1ab_1.conda @@ -399,13 +401,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.3-py310hdb7682f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.1-py310hfc232cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.2-py310hfc232cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2024.2.2-ha957f24_16.conda - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mpc-1.3.1-h24ddda3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.1-h90cbb55_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyh29332c3_1.conda - conda: https://conda.anaconda.org/bioconda/linux-64/ncls-0.0.68-py310h1fe012e_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda @@ -415,17 +417,17 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numba-0.61.2-py310h699fe88_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.5-py310hefbff90_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.0-h7b32b05_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.0-h7b32b05_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/optree-0.15.0-py310h3788b33_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.1.1-h17f744e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.1.2-h17f744e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/p11-kit-0.24.1-hc5aa10d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py310h5eaa309_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-0.23.1-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-base-0.23.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.17.2-h58526e2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.18.0-h3f2d84a_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.7-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.8-pyhe01879c_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/plink2-2.0.0a.6.9-h9948957_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/polars-1.26.0-py310hc556931_0.conda @@ -436,14 +438,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.36-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/py-cpuinfo-9.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/py-spy-0.4.0-h4c5a871_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-19.0.1-py310hff52083_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-19.0.1-py310hac404ae_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-20.0.0-py310hff52083_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-20.0.0-py310hac404ae_0_cpu.conda - conda: https://conda.anaconda.org/bioconda/linux-64/pybigwig-0.3.24-py310h95e9690_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-2.13.6-pyh1ec8472_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-2.13.6-pyh415d2e4_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.3-pyh3cfb1c2_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.1-py310hc1293b2_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.4-pyh3cfb1c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.2-py310hbcd0ec0_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/bioconda/noarch/pyranges-0.1.4-pyhdfd78af_0.tar.bz2 - conda: https://conda.anaconda.org/bioconda/linux-64/pysam-0.23.0-py310h64e62c9_0.tar.bz2 @@ -456,8 +458,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.10-7_cp310.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.6.0-cpu_mkl_py310_h8ec2884_104.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-cpu-2.6.0-cpu_mkl_hc60beec_104.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.7.0-cpu_mkl_py310_h8ec2884_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-cpu-2.7.0-cpu_mkl_hc60beec_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py310h89163eb_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/questionary-2.1.0-pyhd8ed1ab_1.conda @@ -465,8 +467,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.0.0-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.6-py310h01b0e6a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.16-hba75a32_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.8-py310h01b0e6a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.18-h763c568_1.conda - conda: https://conda.anaconda.org/bioconda/linux-64/samtools-1.21-h96c455f_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.8.2-pyhff2d567_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_1.conda @@ -475,20 +477,20 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.1-h8bd8927_1.conda - conda: https://conda.anaconda.org/bioconda/linux-64/sorted_nearest-0.0.39-py310h1fe012e_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sympy-1.13.3-pyh2585a3b_105.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.13.0-hceb3a55_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/termcolor-2.5.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/textual-3.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/textual-3.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.4.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.15.2-pyhff008b6_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.15.2-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.2-h801b22e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.15.3-pyhf21524f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.15.3-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.3-h1a15894_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.13.2-h0e9735f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.13.2-pyh29332c3_0.conda @@ -497,18 +499,18 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-1.0.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py310h3788b33_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.7.2-h2f11bb8_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.30.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.7.3-h2f11bb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.31.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py310ha75aee5_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py310ha75aee5_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda - pypi: https://files.pythonhosted.org/packages/2d/ea/d6230cc9772edca0fd8c91638dc1c2e2def09b9a22cfabe6532906e96aea/basenji2_pytorch-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/53/21f7b97e82772caa61541348427f42435120b32961c92d16f9c8ce9757d6/cslug-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c8/14/299f99ce0fde4985cc5ba6f2258c624a5b9bbc547c3d243d99919ca53761/cyclopts-3.14.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/51/ec/fce39003eeb778eed2b62675a02bd207388baa135e9d23997b9df074c838/cyclopts-3.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d5/7c/e9fcff7623954d86bdc17782036cbf715ecab1bec4847c008557affe1ca8/docstring_parser-0.16-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/50/29/3090ef07838bfcbec6bf88ae1fbab1f13e35f6e20dccbff4500e82d4c21e/genoray-0.10.2-py3-none-any.whl @@ -517,7 +519,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/a9/a6/aa38bddc9f8d90e5ce14023f06ccbf642ab5d507da1ffafb031c0f332dc6/numerary-0.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/55/20/93ef95a37e1aa3c3dd2ca1cd1cba8c8849823311d034921c0ec38949ffad/Pgenlib-0.92.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/5b/bc/246f452431c592a2a424050e8bb9ccf494fb47613fd97c912f4d573a5e3b/phantom_types-3.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/82/ff/5701f79317a1a03e5ee8a1bf48e7273a8445162a2774e51fc06411a67c89/pytorch_lightning-2.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/de/a9/e14821cfaf08e8d78185cca0477c9d3a62bafe1b4b530100f7b66bb1f7bb/pytorch_lightning-2.5.1.post0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/fd/bc/cc4e3dbc5e7992398dcb7a8eda0cbcf4fb792a0cdb93f857b478bf3cf884/rich_rst-1.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f5/a1/6de4f7bf0a7704a200de5d0fbaf4d333fd5ca56b9a3e6f3a3ad05e99ba98/seqpro-0.3.2-cp39-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/72/25/973bd6128381951b23cdcd8a9870c6dcfc5606cb864df8eabd82e529f9c1/torchinfo-1.8.0-py3-none-any.whl @@ -536,24 +538,24 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.9.0-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.5.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.6.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/awkward-2.8.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/awkward-2.8.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/awkward-cpp-45-py312ha6dbfeb_100.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h094d708_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.8.9-hada3f3f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-hf4d4f31_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.0-hada3f3f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.2-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.1-hc2d532b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-h8170a11_5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.9.5-hca9d837_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.18.0-h7b13e6b_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.12.3-h773eac8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.15-h46af1f8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-h9312af0_8.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.0-hc373b34_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.19.0-h756d8c7_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.0-h2d6f568_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.17-h3b40de3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.3-hc2d532b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.5-hc2d532b_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.4-h7d42c6f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-h5b777a2_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.7-hc2d532b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.5-h7c1a40b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-h7cc6b5f_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.13.0-h3cf044e_1.conda @@ -567,16 +569,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py312h2ec8cdc_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.1.31-hbd8a1cb_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.1.31-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.4.26-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.4.26-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/commitizen-4.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.6.3-py312h7900ff3_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.0-py312h178313f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.10-py312hd8ed1ab_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/cyvcf2-0.31.1-py312h68a07e8_1.tar.bz2 @@ -590,7 +592,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/einops-0.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/elfutils-0.192-h7f4e02f_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.18.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.3.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda @@ -599,14 +601,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/gmpy2-2.2.1-py312h7201bc8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.8.9-h5746830_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gsl-2.7-he838d99_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/htslib-1.21-h566b1c6_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.7-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.15-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/icecream-2.1.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.10-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 @@ -614,27 +617,28 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.5-pyh3099207_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-8.35.0-pyh907856f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.2.0-pyhfb0248b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.4.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.23.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.4.1-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.7.2-pyh31011fe_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.14-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.15-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250127.1-cxx17_hbbce691_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h4585015_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-20.0.0-hf00d7f4_1_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-20.0.0-hcb10f89_1_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-20.0.0-hcb10f89_1_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-20.0.0-h1bed206_1_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.23.1-h8e693c7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h75ea233_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-20.0.0-hebdba27_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-20.0.0-hcb10f89_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-20.0.0-hcb10f89_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-20.0.0-h1bed206_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.24.1-h8e693c7_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-31_hfdb39a5_mkl.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda @@ -648,9 +652,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.0-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h767d61c_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-0.23.1-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.1.0-h767d61c_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-0.24.1-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.36.0-hc4361e1_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.36.0-h0121fbd_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.71.0-h8e591d7_1.conda @@ -658,33 +662,33 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h4ce23a2_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libidn2-2.3.8-ha4ef2c3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-31_hc41d3b0_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmicrohttpd-1.0.1-hbc5bc17_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.20.0-hd1b1c89_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.20.0-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-20.0.0-h081d1f1_1_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h501fc15_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-20.0.0-h081d1f1_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h501fc15_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2024.07.02-hba17884_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.1-hee588c1_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-h8f9b012_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.2-hee588c1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.1.0-h8f9b012_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.1.0-h4852527_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libtasn1-4.20.0-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.21.0-h0e7cc3e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.6.0-cpu_mkl_hf6ddc5a_104.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.7.0-cpu_mkl_hf6ddc5a_100.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libunistring-0.9.10-h7f98852_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.6.2-h9c3ff4c_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.10.0-h4c51ac1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.50.0-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.7-h81593ed_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.8-h4bc477f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.0.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-20.1.3-h024ca30_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-20.1.4-h024ca30_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.44.0-py312h374181b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/loguru-0.7.3-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda @@ -696,14 +700,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.3-py312h6ab59e4_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.1-py312hba68c3b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.2-py312hba68c3b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.1.3-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2024.2.2-ha957f24_16.conda - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mpc-1.3.1-h24ddda3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.1-h90cbb55_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/myst-parser-4.0.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.2-pyhd8ed1ab_0.conda @@ -721,23 +725,23 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numba-0.61.2-py312h2e6246c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.5-py312h72c5963_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.0-h7b32b05_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.0-h7b32b05_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/optree-0.15.0-py312h68727a3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.1.2-h17f744e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/p11-kit-0.24.1-hc5aa10d_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py312hf9745cd_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-0.23.1-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-base-0.23.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pandoc-3.6.4-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.17.2-h58526e2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.18.0-h3f2d84a_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-pyhd8ed1ab_1004.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.7-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.8-pyhe01879c_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/plink2-2.0.0a.6.9-h9948957_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/polars-1.26.0-py312hda0fa55_0.conda @@ -757,8 +761,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-2.13.6-pyh1ec8472_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-2.13.6-pyh415d2e4_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.3-pyh3cfb1c2_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.1-py312h3b7be25_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.4-pyh3cfb1c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.2-py312h680f630_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.15.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/bioconda/noarch/pyranges-0.1.4-pyhdfd78af_0.tar.bz2 @@ -773,8 +777,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-7_cp312.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.6.0-cpu_mkl_py312_h6a7998d_104.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-cpu-2.6.0-cpu_mkl_hc60beec_104.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.7.0-cpu_mkl_py312_h6a7998d_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-cpu-2.7.0-cpu_mkl_hc60beec_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py312h178313f_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-26.4.0-py312hbf22597_0.conda @@ -784,9 +788,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.36.2-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.0.0-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/roman-numerals-py-3.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.24.0-py312h3b7be25_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.8-py312h286b59f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.16-hba75a32_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.18-h763c568_1.conda - conda: https://conda.anaconda.org/bioconda/linux-64/samtools-1.21-h96c455f_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.8.2-pyhff2d567_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_1.conda @@ -797,10 +802,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/bioconda/linux-64/sorted_nearest-0.0.39-py312h0fa9677_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-8.1.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-8.2.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-autobuild-2024.10.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-autodoc-typehints-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-autodoc-typehints-3.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-book-theme-1.1.4-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_1.conda @@ -810,11 +815,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/starlette-0.46.2-pyh81abbef_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sympy-1.13.3-pyh2585a3b_105.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.13.0-hceb3a55_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/termcolor-2.5.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/textual-3.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/textual-3.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda @@ -824,9 +829,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.4.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.15.2-pyhff008b6_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.15.2-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.2-h801b22e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.15.3-pyhf21524f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.15.3-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.3-h1a15894_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.13.2-h0e9735f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.13.2-pyh29332c3_0.conda @@ -835,9 +840,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-1.0.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py312h68727a3_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.7.2-h2f11bb8_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.34.1-pyh31011fe_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.30.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.7.3-h2f11bb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.34.2-pyh31011fe_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.31.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/watchfiles-1.0.5-py312h12e396e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda @@ -852,7 +857,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/2d/ea/d6230cc9772edca0fd8c91638dc1c2e2def09b9a22cfabe6532906e96aea/basenji2_pytorch-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/53/21f7b97e82772caa61541348427f42435120b32961c92d16f9c8ce9757d6/cslug-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c8/14/299f99ce0fde4985cc5ba6f2258c624a5b9bbc547c3d243d99919ca53761/cyclopts-3.14.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/51/ec/fce39003eeb778eed2b62675a02bd207388baa135e9d23997b9df074c838/cyclopts-3.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d5/7c/e9fcff7623954d86bdc17782036cbf715ecab1bec4847c008557affe1ca8/docstring_parser-0.16-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/50/29/3090ef07838bfcbec6bf88ae1fbab1f13e35f6e20dccbff4500e82d4c21e/genoray-0.10.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/8e/0eccb528701273640dd4f13678a0c1352176166aecd1ee7f4fa29355132b/hirola-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl @@ -860,7 +865,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/a9/a6/aa38bddc9f8d90e5ce14023f06ccbf642ab5d507da1ffafb031c0f332dc6/numerary-0.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/ec/5434c4a6012ef2ff12d0e71b6c341532686ee82d63e5101717abc24eb3f5/pgenlib-0.92.0.tar.gz - pypi: https://files.pythonhosted.org/packages/5b/bc/246f452431c592a2a424050e8bb9ccf494fb47613fd97c912f4d573a5e3b/phantom_types-3.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/82/ff/5701f79317a1a03e5ee8a1bf48e7273a8445162a2774e51fc06411a67c89/pytorch_lightning-2.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/de/a9/e14821cfaf08e8d78185cca0477c9d3a62bafe1b4b530100f7b66bb1f7bb/pytorch_lightning-2.5.1.post0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/fd/bc/cc4e3dbc5e7992398dcb7a8eda0cbcf4fb792a0cdb93f857b478bf3cf884/rich_rst-1.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f5/a1/6de4f7bf0a7704a200de5d0fbaf4d333fd5ca56b9a3e6f3a3ad05e99ba98/seqpro-0.3.2-cp39-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/72/25/973bd6128381951b23cdcd8a9870c6dcfc5606cb864df8eabd82e529f9c1/torchinfo-1.8.0-py3-none-any.whl @@ -881,19 +886,19 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/awkward-2.8.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/awkward-cpp-45-py310h0900883_100.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h9a6e2ae_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-hf4d4f31_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.0-hada3f3f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.2-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.1-hc2d532b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-hc5e5e9e_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.0-h6884c39_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.18.1-h1a9f769_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.12.3-hef6a231_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.16-h7dfd680_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-h9312af0_8.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.0-hc373b34_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.19.0-h756d8c7_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.0-h2d6f568_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.17-h3b40de3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.3-hc2d532b_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.7-hc2d532b_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.4-h0cee55f_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-h5b777a2_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.5-h7c1a40b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-h7cc6b5f_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.13.0-h3cf044e_1.conda @@ -904,14 +909,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.4.26-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.1.31-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.4.26-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py310h8deb56e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/commitizen-4.6.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.6.3-py310hff52083_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.0-py310h89163eb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.10.17-py310hd8ed1ab_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/cyvcf2-0.31.1-py310h0195497_1.tar.bz2 @@ -935,8 +940,9 @@ environments: - conda: https://conda.anaconda.org/bioconda/linux-64/htslib-1.21-h566b1c6_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.9-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.15-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/icecream-2.1.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.10-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.6.1-pyha770c72_0.conda @@ -948,10 +954,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250127.1-cxx17_hbbce691_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h75ea233_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-20.0.0-h27f8bab_0_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-20.0.0-hcb10f89_0_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-20.0.0-hcb10f89_0_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-20.0.0-h1bed206_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-20.0.0-hebdba27_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-20.0.0-hcb10f89_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-20.0.0-hcb10f89_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-20.0.0-h1bed206_2_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.24.1-h8e693c7_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-31_hfdb39a5_mkl.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda @@ -966,8 +972,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.0-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h767d61c_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.1.0-h767d61c_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-0.24.1-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.36.0-hc4361e1_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.36.0-h0121fbd_1.conda @@ -976,19 +982,19 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h4ce23a2_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libidn2-2.3.8-ha4ef2c3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-31_hc41d3b0_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmicrohttpd-1.0.1-hbc5bc17_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.20.0-hd1b1c89_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.20.0-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-20.0.0-h081d1f1_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-20.0.0-h081d1f1_2_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h501fc15_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2024.07.02-hba17884_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.1-hee588c1_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.2-hee588c1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-h8f9b012_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.1.0-h8f9b012_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.1.0-h4852527_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libtasn1-4.20.0-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.21.0-h0e7cc3e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.7.0-cpu_mkl_hf6ddc5a_100.conda @@ -998,12 +1004,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.50.0-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.7-h81593ed_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.8-h4bc477f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.0.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-20.1.4-h024ca30_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.44.0-py310h1a6248f_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/loguru-0.7.2-py310hff52083_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/loguru-0.7.3-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-hd590300_1001.conda - conda: https://conda.anaconda.org/conda-forge/noarch/makefun-1.15.6-pyhd8ed1ab_1.conda @@ -1012,7 +1018,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.3-py310hdb7682f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.1-py310hfc232cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.2-py310hfc232cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2024.2.2-ha957f24_16.conda - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mpc-1.3.1-h24ddda3_1.conda @@ -1030,7 +1036,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.5-py310hefbff90_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.0-h7b32b05_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/optree-0.15.0-py310h3788b33_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.1.1-h17f744e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.1.2-h17f744e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/p11-kit-0.24.1-hc5aa10d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py310h5eaa309_3.conda @@ -1038,7 +1044,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-base-0.23.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.18.0-h3f2d84a_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.7-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.8-pyhe01879c_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/plink2-2.0.0a.6.9-h9948957_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/polars-1.26.0-py310hc556931_0.conda @@ -1055,8 +1061,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-2.13.6-pyh1ec8472_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-2.13.6-pyh415d2e4_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.3-pyh3cfb1c2_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.1-py310hc1293b2_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.4-pyh3cfb1c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.2-py310hbcd0ec0_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/bioconda/noarch/pyranges-0.1.4-pyhdfd78af_0.tar.bz2 - conda: https://conda.anaconda.org/bioconda/linux-64/pysam-0.23.0-py310h64e62c9_0.tar.bz2 @@ -1079,7 +1085,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.0.0-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.8-py310h01b0e6a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.17-hba75a32_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.18-h763c568_1.conda - conda: https://conda.anaconda.org/bioconda/linux-64/samtools-1.21-h96c455f_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.8.2-pyhff2d567_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_1.conda @@ -1110,8 +1116,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-1.0.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py310h3788b33_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.7.2-h2f11bb8_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.30.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.7.3-h2f11bb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.31.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda @@ -1120,7 +1126,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda - pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/53/21f7b97e82772caa61541348427f42435120b32961c92d16f9c8ce9757d6/cslug-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c8/14/299f99ce0fde4985cc5ba6f2258c624a5b9bbc547c3d243d99919ca53761/cyclopts-3.14.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/51/ec/fce39003eeb778eed2b62675a02bd207388baa135e9d23997b9df074c838/cyclopts-3.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d5/7c/e9fcff7623954d86bdc17782036cbf715ecab1bec4847c008557affe1ca8/docstring_parser-0.16-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/50/29/3090ef07838bfcbec6bf88ae1fbab1f13e35f6e20dccbff4500e82d4c21e/genoray-0.10.2-py3-none-any.whl @@ -1146,19 +1152,19 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/awkward-2.8.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/awkward-cpp-45-py311hc248303_100.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h9a6e2ae_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-hf4d4f31_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.0-hada3f3f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.2-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.1-hc2d532b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-hc5e5e9e_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.0-h6884c39_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.18.1-h1a9f769_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.12.3-hef6a231_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.16-h7dfd680_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-h9312af0_8.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.0-hc373b34_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.19.0-h756d8c7_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.0-h2d6f568_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.17-h3b40de3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.3-hc2d532b_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.7-hc2d532b_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.4-h0cee55f_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-h5b777a2_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.5-h7c1a40b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-h7cc6b5f_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.13.0-h3cf044e_1.conda @@ -1169,14 +1175,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.4.26-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.1.31-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.4.26-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py311hf29c0ef_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/commitizen-4.6.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.6.3-py311h38be061_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.0-py311h2dc5d0c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.11.12-py311hd8ed1ab_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/cyvcf2-0.31.1-py311h94e71d4_1.tar.bz2 @@ -1200,8 +1206,9 @@ environments: - conda: https://conda.anaconda.org/bioconda/linux-64/htslib-1.21-h566b1c6_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.9-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.15-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/icecream-2.1.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.10-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.6.1-pyha770c72_0.conda @@ -1213,10 +1220,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250127.1-cxx17_hbbce691_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h75ea233_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-20.0.0-h27f8bab_0_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-20.0.0-hcb10f89_0_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-20.0.0-hcb10f89_0_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-20.0.0-h1bed206_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-20.0.0-hebdba27_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-20.0.0-hcb10f89_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-20.0.0-hcb10f89_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-20.0.0-h1bed206_2_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.24.1-h8e693c7_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-31_hfdb39a5_mkl.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda @@ -1231,8 +1238,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.0-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h767d61c_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.1.0-h767d61c_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-0.24.1-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.36.0-hc4361e1_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.36.0-h0121fbd_1.conda @@ -1241,19 +1248,19 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h4ce23a2_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libidn2-2.3.8-ha4ef2c3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-31_hc41d3b0_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmicrohttpd-1.0.1-hbc5bc17_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.20.0-hd1b1c89_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.20.0-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-20.0.0-h081d1f1_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-20.0.0-h081d1f1_2_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h501fc15_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2024.07.02-hba17884_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.1-hee588c1_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.2-hee588c1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-h8f9b012_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.1.0-h8f9b012_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.1.0-h4852527_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libtasn1-4.20.0-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.21.0-h0e7cc3e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.7.0-cpu_mkl_hf6ddc5a_100.conda @@ -1263,12 +1270,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.50.0-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.7-h81593ed_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.8-h4bc477f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.0.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-20.1.4-h024ca30_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.44.0-py311h9c9ff8c_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/loguru-0.7.2-py311h38be061_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/loguru-0.7.3-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-hd590300_1001.conda - conda: https://conda.anaconda.org/conda-forge/noarch/makefun-1.15.6-pyhd8ed1ab_1.conda @@ -1277,7 +1284,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.3-py311h9b3a049_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.1-py311hc51bbc3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.2-py311hc51bbc3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2024.2.2-ha957f24_16.conda - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mpc-1.3.1-h24ddda3_1.conda @@ -1295,7 +1302,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.5-py311h5d046bc_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.0-h7b32b05_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/optree-0.15.0-py311hd18a35c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.1.1-h17f744e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.1.2-h17f744e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/p11-kit-0.24.1-hc5aa10d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py311h7db5c69_3.conda @@ -1303,7 +1310,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-base-0.23.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.18.0-h3f2d84a_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.7-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.8-pyhe01879c_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/plink2-2.0.0a.6.9-h9948957_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/polars-1.26.0-py311h03f6b34_0.conda @@ -1320,8 +1327,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-2.13.6-pyh1ec8472_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-2.13.6-pyh415d2e4_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.3-pyh3cfb1c2_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.1-py311h687327b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.4-pyh3cfb1c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.2-py311hdae7d1d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/bioconda/noarch/pyranges-0.1.4-pyhdfd78af_0.tar.bz2 - conda: https://conda.anaconda.org/bioconda/linux-64/pysam-0.23.0-py311hb456a96_0.tar.bz2 @@ -1344,7 +1351,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.0.0-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.8-py311h39e1cd3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.17-hba75a32_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.18-h763c568_1.conda - conda: https://conda.anaconda.org/bioconda/linux-64/samtools-1.21-h96c455f_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.8.2-pyhff2d567_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_1.conda @@ -1375,8 +1382,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-1.0.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py311hd18a35c_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.7.2-h2f11bb8_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.30.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.7.3-h2f11bb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.31.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda @@ -1385,7 +1392,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda - pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/53/21f7b97e82772caa61541348427f42435120b32961c92d16f9c8ce9757d6/cslug-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c8/14/299f99ce0fde4985cc5ba6f2258c624a5b9bbc547c3d243d99919ca53761/cyclopts-3.14.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/51/ec/fce39003eeb778eed2b62675a02bd207388baa135e9d23997b9df074c838/cyclopts-3.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d5/7c/e9fcff7623954d86bdc17782036cbf715ecab1bec4847c008557affe1ca8/docstring_parser-0.16-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/50/29/3090ef07838bfcbec6bf88ae1fbab1f13e35f6e20dccbff4500e82d4c21e/genoray-0.10.2-py3-none-any.whl @@ -1411,19 +1418,19 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/awkward-2.8.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/awkward-cpp-45-py312ha6dbfeb_100.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h9a6e2ae_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-hf4d4f31_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.0-hada3f3f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.2-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.1-hc2d532b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-hc5e5e9e_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.0-h6884c39_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.18.1-h1a9f769_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.12.3-hef6a231_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.16-h7dfd680_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-h9312af0_8.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.0-hc373b34_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.19.0-h756d8c7_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.0-h2d6f568_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.17-h3b40de3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.3-hc2d532b_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.7-hc2d532b_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.4-h0cee55f_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-h5b777a2_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.5-h7c1a40b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-h7cc6b5f_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.13.0-h3cf044e_1.conda @@ -1434,14 +1441,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.4.26-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.1.31-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.4.26-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/commitizen-4.6.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.6.3-py312h7900ff3_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.0-py312h178313f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.10-py312hd8ed1ab_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/cyvcf2-0.31.1-py312h68a07e8_1.tar.bz2 @@ -1465,8 +1472,9 @@ environments: - conda: https://conda.anaconda.org/bioconda/linux-64/htslib-1.21-h566b1c6_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.9-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.15-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/icecream-2.1.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.10-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.6.1-pyha770c72_0.conda @@ -1478,10 +1486,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250127.1-cxx17_hbbce691_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h75ea233_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-20.0.0-h27f8bab_0_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-20.0.0-hcb10f89_0_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-20.0.0-hcb10f89_0_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-20.0.0-h1bed206_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-20.0.0-hebdba27_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-20.0.0-hcb10f89_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-20.0.0-hcb10f89_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-20.0.0-h1bed206_2_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.24.1-h8e693c7_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-31_hfdb39a5_mkl.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda @@ -1496,8 +1504,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.0-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h767d61c_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.1.0-h767d61c_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-0.24.1-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.36.0-hc4361e1_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.36.0-h0121fbd_1.conda @@ -1506,19 +1514,19 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h4ce23a2_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libidn2-2.3.8-ha4ef2c3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-31_hc41d3b0_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmicrohttpd-1.0.1-hbc5bc17_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.20.0-hd1b1c89_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.20.0-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-20.0.0-h081d1f1_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-20.0.0-h081d1f1_2_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h501fc15_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2024.07.02-hba17884_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.1-hee588c1_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.2-hee588c1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-h8f9b012_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.1.0-h8f9b012_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.1.0-h4852527_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libtasn1-4.20.0-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.21.0-h0e7cc3e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.7.0-cpu_mkl_hf6ddc5a_100.conda @@ -1528,12 +1536,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.50.0-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.7-h81593ed_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.8-h4bc477f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.0.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-20.1.4-h024ca30_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.44.0-py312h374181b_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/loguru-0.7.2-py312h7900ff3_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/loguru-0.7.3-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-hd590300_1001.conda - conda: https://conda.anaconda.org/conda-forge/noarch/makefun-1.15.6-pyhd8ed1ab_1.conda @@ -1542,7 +1550,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.3-py312h6ab59e4_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.1-py312hba68c3b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.2-py312hba68c3b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2024.2.2-ha957f24_16.conda - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mpc-1.3.1-h24ddda3_1.conda @@ -1560,7 +1568,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.5-py312h72c5963_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.0-h7b32b05_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/optree-0.15.0-py312h68727a3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.1.1-h17f744e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.1.2-h17f744e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/p11-kit-0.24.1-hc5aa10d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py312hf9745cd_3.conda @@ -1568,7 +1576,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-base-0.23.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.18.0-h3f2d84a_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.7-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.8-pyhe01879c_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/plink2-2.0.0a.6.9-h9948957_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/polars-1.26.0-py312hda0fa55_0.conda @@ -1585,8 +1593,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-2.13.6-pyh1ec8472_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-2.13.6-pyh415d2e4_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.3-pyh3cfb1c2_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.1-py312h3b7be25_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.4-pyh3cfb1c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.2-py312h680f630_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/bioconda/noarch/pyranges-0.1.4-pyhdfd78af_0.tar.bz2 - conda: https://conda.anaconda.org/bioconda/linux-64/pysam-0.23.0-py312h47d5410_0.tar.bz2 @@ -1609,7 +1617,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.0.0-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.8-py312h286b59f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.17-hba75a32_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.18-h763c568_1.conda - conda: https://conda.anaconda.org/bioconda/linux-64/samtools-1.21-h96c455f_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.8.2-pyhff2d567_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_1.conda @@ -1640,8 +1648,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-1.0.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py312h68727a3_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.7.2-h2f11bb8_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.30.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.7.3-h2f11bb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.31.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda @@ -1650,7 +1658,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda - pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/53/21f7b97e82772caa61541348427f42435120b32961c92d16f9c8ce9757d6/cslug-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c8/14/299f99ce0fde4985cc5ba6f2258c624a5b9bbc547c3d243d99919ca53761/cyclopts-3.14.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/51/ec/fce39003eeb778eed2b62675a02bd207388baa135e9d23997b9df074c838/cyclopts-3.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d5/7c/e9fcff7623954d86bdc17782036cbf715ecab1bec4847c008557affe1ca8/docstring_parser-0.16-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/50/29/3090ef07838bfcbec6bf88ae1fbab1f13e35f6e20dccbff4500e82d4c21e/genoray-0.10.2-py3-none-any.whl @@ -1758,17 +1766,6 @@ packages: - pkg:pypi/anyio?source=hash-mapping size: 126346 timestamp: 1742243108743 -- conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.5.2-pyhd8ed1ab_0.conda - sha256: efd33c24573fdf20c9b584cef0e49084d030cf2e5fb512994f67a159df1135d0 - md5: 4229aeacda5e2878871ce03b39d3e11f - depends: - - python >=3.9 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/argcomplete?source=hash-mapping - size: 41399 - timestamp: 1733751477659 - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.6.2-pyhd8ed1ab_0.conda sha256: 66ffcf30550e0788d16090e4b4e8835290b15439bb454b0e217176a09dc1d500 md5: eb9d4263271ca287d2e0cf5a86da2d3a @@ -1804,23 +1801,6 @@ packages: - pkg:pypi/attrs?source=compressed-mapping size: 57181 timestamp: 1741918625732 -- conda: https://conda.anaconda.org/conda-forge/noarch/awkward-2.8.1-pyhd8ed1ab_0.conda - sha256: 74e4c7cd14be1aa6c387a7bf08a35de79d87f3e4b283c3acec9f878ad0a8c1ac - md5: 3c9e3f514e7a261f3daf3a06c3a2d73f - depends: - - awkward-cpp 45 - - fsspec >=2022.11.0 - - importlib-metadata >=4.13.0 - - numpy >=1.18.0 - - packaging - - python >=3.9 - - typing_extensions >=4.1.0 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/awkward?source=hash-mapping - size: 429538 - timestamp: 1742884694088 - conda: https://conda.anaconda.org/conda-forge/noarch/awkward-2.8.2-pyhd8ed1ab_0.conda sha256: 537a2109a6308c8fe02c01f47a410cc51d2c9c2b0d6f5c1150fef744b61f796b md5: f9ef0e6540454d6ac320b8c7d8d34b20 @@ -1833,6 +1813,7 @@ packages: - python >=3.9 - typing_extensions >=4.1.0 license: BSD-3-Clause + license_family: BSD purls: - pkg:pypi/awkward?source=hash-mapping size: 433940 @@ -1888,51 +1869,22 @@ packages: - pkg:pypi/awkward-cpp?source=hash-mapping size: 531289 timestamp: 1742473663256 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h094d708_2.conda - sha256: 52ac77926deb7e9672ab60e330dfad31392ebe9f0f78cdf0bc597d7d7c12a2cb - md5: 9b1e62c9d7b158cf1a234ee49ef6232f - depends: - - __glibc >=2.17,<3.0.a0 - - aws-c-cal >=0.8.9,<0.8.10.0a0 - - aws-c-common >=0.12.2,<0.12.3.0a0 - - aws-c-http >=0.9.5,<0.9.6.0a0 - - aws-c-io >=0.18.0,<0.18.1.0a0 - - aws-c-sdkutils >=0.2.3,<0.2.4.0a0 - - libgcc >=13 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 111498 - timestamp: 1743819638135 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h9a6e2ae_4.conda - sha256: 7444691a43a19510f5b667599034c8fceaca389d52388c6d9d52a4d239594fcd - md5: a948110dbbde6491c62815643a96d589 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-hf4d4f31_5.conda + sha256: 9276ac78b14723f4e5135990be8dca0c2b36d4b8c82b4d17b061aa9eea9e3798 + md5: 775cfc5c8ee47a2f12ca741fbc932b19 depends: - __glibc >=2.17,<3.0.a0 - aws-c-cal >=0.9.0,<0.9.1.0a0 - aws-c-common >=0.12.2,<0.12.3.0a0 - aws-c-http >=0.10.0,<0.10.1.0a0 - - aws-c-io >=0.18.1,<0.18.2.0a0 + - aws-c-io >=0.19.0,<0.19.1.0a0 - aws-c-sdkutils >=0.2.3,<0.2.4.0a0 - libgcc >=13 license: Apache-2.0 license_family: Apache purls: [] - size: 111153 - timestamp: 1746014853526 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.8.9-hada3f3f_0.conda - sha256: b24d9e5a59b11e635db4f02d7f94ab2712c9d09d2503236cfb781cc05bf98702 - md5: f1bc1f3925e2ff734d4a8a5bb3552b1d - depends: - - __glibc >=2.17,<3.0.a0 - - aws-c-common >=0.12.2,<0.12.3.0a0 - - libgcc >=13 - - openssl >=3.4.1,<4.0a0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 50997 - timestamp: 1743664886404 + size: 111221 + timestamp: 1746382015411 - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.0-hada3f3f_0.conda sha256: e635934e54c2145afa06bd69f5d92d14cb2e27a59625f7236493dd9b11717e9b md5: 05a965f6def53dbcb5217945eb0b3689 @@ -1969,156 +1921,83 @@ packages: purls: [] size: 21753 timestamp: 1743446917660 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-h8170a11_5.conda - sha256: 4c718a19cf3411ab54b5ff6a7b6dfd10bb46689880e683ae97e1e0de3c7a13dc - md5: 68614c9a3b3fb09cb1b4e8c4ed9333fb - depends: - - __glibc >=2.17,<3.0.a0 - - libstdcxx >=13 - - libgcc >=13 - - aws-c-common >=0.12.2,<0.12.3.0a0 - - aws-checksums >=0.2.5,<0.2.6.0a0 - - aws-c-io >=0.18.0,<0.18.1.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 57147 - timestamp: 1743815063175 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-hc5e5e9e_7.conda - sha256: 7a5eafd18eb258184cf6fe2cc299cf7e384dd56e9a8392e4da76623af1ac6234 - md5: eb339cb6cd7c881b3f0e7910e99c261b +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-h9312af0_8.conda + sha256: a632fc26e45d277dc8b3b3d35a83f06efb65d3c20a8760ee0e381f144513a801 + md5: 32789e527d9a9ca6fd71f463df708188 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - libstdcxx >=13 - libgcc >=13 - - aws-c-common >=0.12.2,<0.12.3.0a0 - - aws-c-io >=0.18.1,<0.18.2.0a0 + - aws-c-io >=0.19.0,<0.19.1.0a0 - aws-checksums >=0.2.7,<0.2.8.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 57156 - timestamp: 1745524971970 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.0-h6884c39_0.conda - sha256: 82987e2894ca2fa56e3c28944a0ca4ef445b980652a73ae2734c49e18f2f3897 - md5: 76a0f88aeb377e0eee84d48ac65ca747 - depends: - - libgcc >=13 - - __glibc >=2.17,<3.0.a0 - - aws-c-io >=0.18.1,<0.18.2.0a0 - - aws-c-common >=0.12.2,<0.12.3.0a0 - - aws-c-cal >=0.9.0,<0.9.1.0a0 - - aws-c-compression >=0.3.1,<0.3.2.0a0 - license: Apache-2.0 - purls: [] - size: 222970 - timestamp: 1745976470685 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.9.5-hca9d837_2.conda - sha256: 9b5a7323dbe50245790dc9c7527ae9b2f8341eeb491ccead060e2a159bd113fd - md5: 2c3fdcb5a1bf40fd7b6b5598718e5929 - depends: - - libgcc >=13 - - __glibc >=2.17,<3.0.a0 - - aws-c-io >=0.18.0,<0.18.1.0a0 - - aws-c-cal >=0.8.9,<0.8.10.0a0 - aws-c-common >=0.12.2,<0.12.3.0a0 - - aws-c-compression >=0.3.1,<0.3.2.0a0 license: Apache-2.0 license_family: APACHE purls: [] - size: 219143 - timestamp: 1743815079407 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.18.0-h7b13e6b_1.conda - sha256: 6232032b58725ea8b1b706f07b67ef729322f4b0410f885df60bcefc6799a1a8 - md5: 0344e7cd6658502b7cab405637db97a2 + size: 57177 + timestamp: 1746376081324 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.0-hc373b34_1.conda + sha256: af3cf932e5500eb5744669cbe447d3922202001e296a077c5b20c7586fbf690f + md5: 27e6ee47162c1d2ba91d24e64b37509a depends: - libgcc >=13 - __glibc >=2.17,<3.0.a0 - aws-c-common >=0.12.2,<0.12.3.0a0 - - s2n >=1.5.16,<1.5.17.0a0 - - aws-c-cal >=0.8.9,<0.8.10.0a0 + - aws-c-compression >=0.3.1,<0.3.2.0a0 + - aws-c-cal >=0.9.0,<0.9.1.0a0 + - aws-c-io >=0.19.0,<0.19.1.0a0 license: Apache-2.0 license_family: APACHE purls: [] - size: 180213 - timestamp: 1743809472351 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.18.1-h1a9f769_2.conda - sha256: 80366d0d9d079dd6f034c353efbe4eedc1e7fb570fb36039243c0599e926db9d - md5: 19221489bff45371c13b983848f79a24 + size: 222979 + timestamp: 1746377724627 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.19.0-h756d8c7_1.conda + sha256: 1e852cbe527dcfe654573e47287ddc3462de160c9a2f89bfd99da66368a05fe5 + md5: 35ffc73105ad0bdb8e5c2555f4a3c5d6 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - - s2n >=1.5.17,<1.5.18.0a0 - - aws-c-cal >=0.9.0,<0.9.1.0a0 - aws-c-common >=0.12.2,<0.12.3.0a0 + - s2n >=1.5.18,<1.5.19.0a0 + - aws-c-cal >=0.9.0,<0.9.1.0a0 license: Apache-2.0 license_family: APACHE purls: [] - size: 180304 - timestamp: 1745155363667 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.12.3-h773eac8_2.conda - sha256: b097a71a86cd49e1fd18b6a8f2bedd0b0ea88e75c3423b561e48ef2a494ba389 - md5: 53e040407719cf505b7753a6450e4d03 + size: 179062 + timestamp: 1746361007292 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.0-h2d6f568_1.conda + sha256: 360046d75223a159fb05bd948f3352c14e84f5b1cf175138d642c95123f87272 + md5: e9788e2b6c3cfe0dc95cff9a2229c8e6 depends: - libgcc >=13 - __glibc >=2.17,<3.0.a0 - aws-c-common >=0.12.2,<0.12.3.0a0 - - aws-c-io >=0.18.0,<0.18.1.0a0 - - aws-c-http >=0.9.5,<0.9.6.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 213856 - timestamp: 1743819680507 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.12.3-hef6a231_4.conda - sha256: 5d2acf0f4a20e944cdbbf48b968e81fefb843c78100d0d719863d2d79a249188 - md5: fd1d89d79c8287e6bcb2a529292f537a - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - aws-c-common >=0.12.2,<0.12.3.0a0 - - aws-c-io >=0.18.1,<0.18.2.0a0 + - aws-c-io >=0.19.0,<0.19.1.0a0 - aws-c-http >=0.10.0,<0.10.1.0a0 license: Apache-2.0 - purls: [] - size: 213876 - timestamp: 1746015332689 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.15-h46af1f8_1.conda - sha256: 601dc338a99ebb146c89a0dcc4e6e3051427fe068aa05557bd35628cab2c6120 - md5: 4b91da7a394cb7c0a5bd9bb8dd8dcc76 - depends: - - libgcc >=13 - - __glibc >=2.17,<3.0.a0 - - aws-checksums >=0.2.5,<0.2.6.0a0 - - aws-c-http >=0.9.5,<0.9.6.0a0 - - aws-c-cal >=0.8.9,<0.8.10.0a0 - - openssl >=3.4.1,<4.0a0 - - aws-c-common >=0.12.2,<0.12.3.0a0 - - aws-c-io >=0.18.0,<0.18.1.0a0 - - aws-c-auth >=0.9.0,<0.9.1.0a0 - license: Apache-2.0 license_family: APACHE purls: [] - size: 129259 - timestamp: 1743824869782 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.16-h7dfd680_1.conda - sha256: 0cd6ba8718f9f9233f4bb1ac219251e3d1b2fc5324cc023f7e68965ef8b3e554 - md5: d8870015dbf8a8bb44832f4c330bf044 + size: 215709 + timestamp: 1746388395049 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.17-h3b40de3_0.conda + sha256: 22e9db67bce3c96118c004569021c586a4f2c0b0870093444c706f1a535896c8 + md5: 5b0ad650d330d5476c8459568a79d745 depends: - libgcc >=13 - __glibc >=2.17,<3.0.a0 + - aws-c-cal >=0.9.0,<0.9.1.0a0 - aws-c-common >=0.12.2,<0.12.3.0a0 - - aws-checksums >=0.2.7,<0.2.8.0a0 - - aws-c-http >=0.10.0,<0.10.1.0a0 - aws-c-auth >=0.9.0,<0.9.1.0a0 - - aws-c-cal >=0.9.0,<0.9.1.0a0 + - aws-c-io >=0.19.0,<0.19.1.0a0 + - aws-checksums >=0.2.7,<0.2.8.0a0 - openssl >=3.5.0,<4.0a0 - - aws-c-io >=0.18.1,<0.18.2.0a0 + - aws-c-http >=0.10.0,<0.10.1.0a0 license: Apache-2.0 + license_family: APACHE purls: [] - size: 129704 - timestamp: 1746041983017 + size: 129758 + timestamp: 1746598214057 - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.3-hc2d532b_4.conda sha256: 09d276413249df36ecc533d9aff97945cc3a2d4ae818bf50d3968fde7e68bc61 md5: 15a1f6fb713b4cd3fee74588b996a846 @@ -2131,18 +2010,6 @@ packages: purls: [] size: 58917 timestamp: 1743448087115 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.5-hc2d532b_1.conda - sha256: 9b487deca8198e6c5e64102d06420cbf3eb654065ac472d8e97e86f55af34268 - md5: 47e378813c3451a9eb0948625a18418a - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - aws-c-common >=0.12.2,<0.12.3.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 76007 - timestamp: 1743447027086 - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.7-hc2d532b_0.conda sha256: 69141040515c0e52401d5e2e49afcd29b39dc0f6fecac41afda21f99086ac38f md5: 398521f53e58db246658e7cff56d669f @@ -2155,85 +2022,46 @@ packages: purls: [] size: 76585 timestamp: 1744426573605 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.4-h0cee55f_2.conda - sha256: 85dda9bf4a64825aba885fd06e112d8a64981a37d86b3122d94ced6cdb77dcf2 - md5: bc519b9909ef60e85ef2d59cd9542a0f +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.5-h7c1a40b_1.conda + sha256: 6bac1b7c2a7709add6746ba92db6b78912563d5036552ca816abd21ff160b37e + md5: a020de862bc48eb194b5aff9b165ea13 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - libstdcxx >=13 - libgcc >=13 - - aws-c-s3 >=0.7.16,<0.7.17.0a0 - aws-c-event-stream >=0.5.4,<0.5.5.0a0 - - aws-c-mqtt >=0.12.3,<0.12.4.0a0 - - aws-c-common >=0.12.2,<0.12.3.0a0 - aws-c-cal >=0.9.0,<0.9.1.0a0 - aws-c-auth >=0.9.0,<0.9.1.0a0 - - aws-c-sdkutils >=0.2.3,<0.2.4.0a0 - - aws-c-io >=0.18.1,<0.18.2.0a0 - - aws-c-http >=0.10.0,<0.10.1.0a0 - license: Apache-2.0 - purls: [] - size: 390469 - timestamp: 1746342699833 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.4-h7d42c6f_0.conda - sha256: 11726f18d6cdd4ec94cb1f3d3e02cfad0b261db4cb891009bcad467fc2e05546 - md5: e39cbe02d737ce074a59af9d86015c2a - depends: - - libgcc >=13 - - libstdcxx >=13 - - libgcc >=13 - - __glibc >=2.17,<3.0.a0 - - aws-c-io >=0.18.0,<0.18.1.0a0 - - aws-c-s3 >=0.7.15,<0.7.16.0a0 - - aws-c-event-stream >=0.5.4,<0.5.5.0a0 - - aws-c-mqtt >=0.12.3,<0.12.4.0a0 - - aws-c-auth >=0.9.0,<0.9.1.0a0 - - aws-c-http >=0.9.5,<0.9.6.0a0 - - aws-c-cal >=0.8.9,<0.8.10.0a0 - aws-c-common >=0.12.2,<0.12.3.0a0 + - aws-c-io >=0.19.0,<0.19.1.0a0 + - aws-c-s3 >=0.7.17,<0.7.18.0a0 + - aws-c-mqtt >=0.13.0,<0.13.1.0a0 - aws-c-sdkutils >=0.2.3,<0.2.4.0a0 + - aws-c-http >=0.10.0,<0.10.1.0a0 license: Apache-2.0 license_family: APACHE purls: [] - size: 390492 - timestamp: 1744838713428 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-h5b777a2_5.conda - sha256: e2e18bda4be87b778bc15949c3121cb1c4d2e702a8d8acb3a9f4cb6312397462 - md5: 860ec2d406d3956b1a8f8cc8ac18faa4 + size: 394557 + timestamp: 1746670451498 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-h7cc6b5f_7.conda + sha256: cb67f2ed9ea04902bd8fcee528281233668b92d2190e61d8eaebc92330c6fe0f + md5: 35c4d2ece6b4b098501e595f04250bee depends: - libgcc >=13 - - __glibc >=2.17,<3.0.a0 - libstdcxx >=13 - libgcc >=13 - - aws-c-event-stream >=0.5.4,<0.5.5.0a0 - - aws-crt-cpp >=0.32.4,<0.32.5.0a0 - - libcurl >=8.13.0,<9.0a0 - - libzlib >=1.3.1,<2.0a0 - - aws-c-common >=0.12.2,<0.12.3.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 3401408 - timestamp: 1744893400161 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-h5b777a2_6.conda - sha256: aff3fe4e21b66c7725665085236956d6afcbe9146cd19ce64fa9f0957aad677d - md5: 2fd0b0d4cc7fc86024b2965feedd628a - depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - - libgcc >=13 - - aws-c-common >=0.12.2,<0.12.3.0a0 - libzlib >=1.3.1,<2.0a0 - - libcurl >=8.13.0,<9.0a0 - - aws-crt-cpp >=0.32.4,<0.32.5.0a0 + - aws-c-common >=0.12.2,<0.12.3.0a0 - aws-c-event-stream >=0.5.4,<0.5.5.0a0 + - aws-crt-cpp >=0.32.5,<0.32.6.0a0 + - libcurl >=8.13.0,<9.0a0 license: Apache-2.0 license_family: APACHE purls: [] - size: 3401396 - timestamp: 1745604795071 + size: 3401409 + timestamp: 1746625079643 - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda sha256: fe07debdb089a3db17f40a7f20d283d75284bb4fc269ef727b8ba6fc93f7cb5a md5: 0a8838771cc2e985cd295e01ae83baf1 @@ -2525,15 +2353,6 @@ packages: purls: [] size: 206884 timestamp: 1744127994291 -- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.1.31-hbd8a1cb_1.conda - sha256: 43878eddf8eb46e3ba7fcbe77a2f8d00aab9a66d9ff63bc4d072b7af17481197 - md5: e74273d9fc5ab633d613cde474b55157 - depends: - - __unix - license: ISC - purls: [] - size: 158144 - timestamp: 1738298224464 - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.4.26-hbd8a1cb_0.conda sha256: 2a70ed95ace8a3f8a29e6cd1476a943df294a7111dfb3e152e3478c4c889b7ac md5: 95db94f75ba080a22eb623590993167b @@ -2543,16 +2362,16 @@ packages: purls: [] size: 152283 timestamp: 1745653616541 -- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.1.31-pyhd8ed1ab_0.conda - sha256: 42a78446da06a2568cb13e69be3355169fbd0ea424b00fc80b7d840f5baaacf3 - md5: c207fa5ac7ea99b149344385a9c0880d +- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.4.26-pyhd8ed1ab_0.conda + sha256: 52aa837642fd851b3f7ad3b1f66afc5366d133c1d452323f786b0378a391915c + md5: c33eeaaa33f45031be34cda513df39b6 depends: - python >=3.9 license: ISC purls: - - pkg:pypi/certifi?source=compressed-mapping - size: 162721 - timestamp: 1739515973129 + - pkg:pypi/certifi?source=hash-mapping + size: 157200 + timestamp: 1746569627830 - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py310h8deb56e_0.conda sha256: 1b389293670268ab80c3b8735bc61bc71366862953e000efbb82204d00e41b6c md5: 1fc24a3196ad5ede2a68148be61894f4 @@ -2612,23 +2431,13 @@ packages: - pkg:pypi/cfgv?source=hash-mapping size: 12973 timestamp: 1734267180483 -- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.1-pyhd8ed1ab_0.conda - sha256: 4e0ee91b97e5de3e74567bdacea27f0139709fceca4db8adffbe24deffccb09b - md5: e83a31202d1c0a000fce3e9cf3825875 - depends: - - python >=3.9 - license: MIT - license_family: MIT - purls: - - pkg:pypi/charset-normalizer?source=hash-mapping - size: 47438 - timestamp: 1735929811779 - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.2-pyhd8ed1ab_0.conda sha256: 535ae5dcda8022e31c6dc063eb344c80804c537a5a04afba43a845fa6fa130f5 md5: 40fe4284b8b5835a9073a645139f35af depends: - python >=3.9 license: MIT + license_family: MIT purls: - pkg:pypi/charset-normalizer?source=compressed-mapping size: 50481 @@ -2680,52 +2489,73 @@ packages: - pkg:pypi/comm?source=hash-mapping size: 12103 timestamp: 1733503053903 -- conda: https://conda.anaconda.org/conda-forge/noarch/commitizen-4.6.0-pyhd8ed1ab_0.conda - sha256: 2aaf1623bcd0160b4e6fcbd573453a2e07a72edf648f92bd7d298fc3a105fe4a - md5: 1dae27aba235cb09d85435ae5934e77b - depends: - - argcomplete <3.6,>=1.12.1 - - charset-normalizer <4,>=2.1.0 - - colorama <1.0,>=0.4.1 - - decli <1.0,>=0.6.0 - - importlib-metadata >=8.0.0,<9 +- conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.6.3-py310hff52083_2.conda + sha256: 44e034efc80c86d48b90bc435e0e59c4087f9cc2542e784c674df43ebcc95ac1 + md5: 177e08c9cff21949aef3453b27703484 + depends: + - argcomplete >=1.12.1,<3.7 + - charset-normalizer >=2.1.0,<4 + - colorama >=0.4.1,<1.0 + - decli >=0.6.0,<1.0 - jinja2 >=2.10.3 - packaging >=19 - - python >=3.9 + - python >=3.10,<3.11.0a0 + - python_abi 3.10.* *_cp310 - pyyaml >=3.08 - - questionary <3.0,>=2.0 - - termcolor <3,>=1.1 - - tomlkit <1.0.0,>=0.5.3 - - typing_extensions <5.0.0,>=4.0.1 + - questionary >=2.0,<3.0 + - termcolor >=1.1,<3 + - tomlkit >=0.5.3,<1.0.0 + - typing_extensions >=4.0.1,<5.0.0 license: MIT license_family: MIT purls: - pkg:pypi/commitizen?source=hash-mapping - size: 59257 - timestamp: 1744551347444 -- conda: https://conda.anaconda.org/conda-forge/noarch/commitizen-4.6.1-pyhd8ed1ab_0.conda - sha256: ed2e9140e432744f0c433823bd1acb803f128ededcee06a5899218cc51698554 - md5: 48decf6a4c5f6e308d32b842d63cc042 - depends: - - argcomplete <3.7,>=1.12.1 - - charset-normalizer <4,>=2.1.0 - - colorama <1.0,>=0.4.1 - - decli <1.0,>=0.6.0 - - importlib-metadata >=8.0.0,<9 + size: 117233 + timestamp: 1746604407899 +- conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.6.3-py311h38be061_2.conda + sha256: 8fd31ffde523a4ebfc103cc1c4c7d8d5801bd534772be6bc1f46da21f3311b08 + md5: 80932314cda5bd4a30c838b47f45ddab + depends: + - argcomplete >=1.12.1,<3.7 + - charset-normalizer >=2.1.0,<4 + - colorama >=0.4.1,<1.0 + - decli >=0.6.0,<1.0 - jinja2 >=2.10.3 - packaging >=19 - - python >=3.9 + - python >=3.11,<3.12.0a0 + - python_abi 3.11.* *_cp311 + - pyyaml >=3.08 + - questionary >=2.0,<3.0 + - termcolor >=1.1,<3 + - tomlkit >=0.5.3,<1.0.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/commitizen?source=hash-mapping + size: 148419 + timestamp: 1746604379109 +- conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.6.3-py312h7900ff3_2.conda + sha256: 479a03af121f7e7e89e399064ce3f1151e905364597505491cb5721498eaf578 + md5: 15f1eee6772d470b9f88a8355bba1912 + depends: + - argcomplete >=1.12.1,<3.7 + - charset-normalizer >=2.1.0,<4 + - colorama >=0.4.1,<1.0 + - decli >=0.6.0,<1.0 + - jinja2 >=2.10.3 + - packaging >=19 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 - pyyaml >=3.08 - - questionary <3.0,>=2.0 - - termcolor <3,>=1.1 - - tomlkit <1.0.0,>=0.5.3 - - typing_extensions <5.0.0,>=4.0.1 + - questionary >=2.0,<3.0 + - termcolor >=1.1,<3 + - tomlkit >=0.5.3,<1.0.0 license: MIT license_family: MIT purls: - pkg:pypi/commitizen?source=hash-mapping - size: 59244 - timestamp: 1746452613728 + size: 144191 + timestamp: 1746604340560 - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.0-py310h89163eb_0.conda sha256: ac410dbd3b1e28d40b88a27f801210b853ebd388f3cf20f85c0178e97f788013 md5: 9f7865c17117d16f804b687b498e35fa @@ -2809,10 +2639,10 @@ packages: version: 1.0.0 sha256: e151f506d8fbab7756db3ec29e439e0ab425a26423b9c6efe1daee6ddc37bca1 requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/c8/14/299f99ce0fde4985cc5ba6f2258c624a5b9bbc547c3d243d99919ca53761/cyclopts-3.14.2-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/51/ec/fce39003eeb778eed2b62675a02bd207388baa135e9d23997b9df074c838/cyclopts-3.16.0-py3-none-any.whl name: cyclopts - version: 3.14.2 - sha256: 6ae88e093ffa96e589454226d95ffe383f5d4cecf55e72b6d44b5bfb66bdecb7 + version: 3.16.0 + sha256: ca0dcc5c5554db89071e0c8c7628e335e0be3ed0bbd64ba2bb62640c9043d0b2 requires_dist: - attrs>=23.1.0 - docstring-parser>=0.15 ; python_full_version < '4.0' @@ -2821,6 +2651,7 @@ packages: - rich>=13.6.0 - rich-rst>=1.3.1,<2.0.0 - tomli>=2.0.0 ; python_full_version < '3.11' and extra == 'toml' + - trio>=0.10.0 ; extra == 'trio' - typing-extensions>=4.8.0 ; python_full_version < '3.11' requires_python: '>=3.9' - conda: https://conda.anaconda.org/bioconda/linux-64/cyvcf2-0.31.1-py310h0195497_1.tar.bz2 @@ -3015,17 +2846,6 @@ packages: - pkg:pypi/exceptiongroup?source=hash-mapping size: 20486 timestamp: 1733208916977 -- conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_1.conda - sha256: 28d25ea375ebab4bf7479228f8430db20986187b04999136ff5c722ebd32eb60 - md5: ef8b5fca76806159fc25b4f48d8737eb - depends: - - python >=3.9 - license: MIT - license_family: MIT - purls: - - pkg:pypi/executing?source=hash-mapping - size: 28348 - timestamp: 1733569440265 - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.0-pyhd8ed1ab_0.conda sha256: 7510dd93b9848c6257c43fdf9ad22adf62e7aa6da5f12a6a757aed83bcfedf05 md5: 81d30c08f9a3e556e8ca9e124b044d14 @@ -3116,23 +2936,6 @@ packages: purls: [] size: 460055 timestamp: 1718980856608 -- conda: https://conda.anaconda.org/conda-forge/linux-64/gmpy2-2.1.5-py310he8512ff_3.conda - sha256: 18866d66175a957fd5a61125bb618b160c77c8d08d0d9d5be991e9f77c19b288 - md5: 832c93fd1bee415d2833b023f5ebb2dc - depends: - - __glibc >=2.17,<3.0.a0 - - gmp >=6.3.0,<7.0a0 - - libgcc >=13 - - mpc >=1.3.1,<2.0a0 - - mpfr >=4.2.1,<5.0a0 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - license: LGPL-3.0-or-later - license_family: LGPL - purls: - - pkg:pypi/gmpy2?source=hash-mapping - size: 202700 - timestamp: 1733462653858 - conda: https://conda.anaconda.org/conda-forge/linux-64/gmpy2-2.2.1-py310he8512ff_0.conda sha256: ea27ef97976eb0d709e4ef296f8ce83d7775ea56833cdbef107b42ef39867276 md5: 2086c92c9e98a12acfc287412c18f2e8 @@ -3212,9 +3015,9 @@ packages: purls: [] size: 3376423 timestamp: 1626369596591 -- conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_1.conda - sha256: 622516185a7c740d5c7f27016d0c15b45782c1501e5611deec63fd70344ce7c8 - md5: 7ee49e89531c0dcbba9466f6d115d585 +- conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhd8ed1ab_0.conda + sha256: f64b68148c478c3bfc8f8d519541de7d2616bf59d44485a5271041d40c061887 + md5: 4b69232755285701bc86a5afe4d9933a depends: - python >=3.9 - typing_extensions @@ -3222,8 +3025,8 @@ packages: license_family: MIT purls: - pkg:pypi/h11?source=hash-mapping - size: 51846 - timestamp: 1733327599467 + size: 37697 + timestamp: 1745526482242 - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.2.0-pyhd8ed1ab_0.conda sha256: 0aa1cdc67a9fe75ea95b5644b734a756200d6ec9d0dff66530aec3d1c1e9df75 md5: b4754fb1bdcb70c8fd54f918301582c6 @@ -3299,9 +3102,9 @@ packages: - pkg:pypi/hyperframe?source=hash-mapping size: 17397 timestamp: 1737618427549 -- conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.7-pyha770c72_0.conda - sha256: 5d38590c340a7967ce61521592d67a53915c04207808330cc8027b8fa3d82b21 - md5: 13ad8ceaadfd3776229a6d2bc91cafa4 +- conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.15-pyha770c72_0.conda + sha256: 38b97ec0b35070ac915a6732b920076d7bad376f9746375045ce31313c758fed + md5: 42127e8b4b57e92f097c74a396ae6511 depends: - attrs >=22.2.0 - click >=7.0 @@ -3310,29 +3113,14 @@ packages: - setuptools - sortedcontainers >=2.1.0,<3.0.0 license: MPL-2.0 + license_family: MOZILLA purls: - pkg:pypi/hypothesis?source=hash-mapping - size: 353436 - timestamp: 1744980919660 -- conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.9-pyha770c72_0.conda - sha256: fb0a3df301b5e0c4b9a67adaa935f79838a58b6880ce5aee879c31ed01bae9f9 - md5: 8ed39e46daa6d5691717816ea85f1bb8 - depends: - - attrs >=22.2.0 - - click >=7.0 - - exceptiongroup >=1.0.0 - - python >=3.9 - - setuptools - - sortedcontainers >=2.1.0,<3.0.0 - license: MPL-2.0 - license_family: MOZILLA - purls: - - pkg:pypi/hypothesis?source=hash-mapping - size: 356955 - timestamp: 1745589598940 -- conda: https://conda.anaconda.org/conda-forge/noarch/icecream-2.1.4-pyhd8ed1ab_0.conda - sha256: 0a724bd8cce7200d0d880e4a5ddab8605fea19d799c18f035a55e16939013898 - md5: 6bca4364a57090f77e9c3920e2cc4d1e + size: 357607 + timestamp: 1746683820692 +- conda: https://conda.anaconda.org/conda-forge/noarch/icecream-2.1.4-pyhd8ed1ab_0.conda + sha256: 0a724bd8cce7200d0d880e4a5ddab8605fea19d799c18f035a55e16939013898 + md5: 6bca4364a57090f77e9c3920e2cc4d1e depends: - asttokens >=2.0.1 - colorama >=0.3.9 @@ -3345,21 +3133,21 @@ packages: - pkg:pypi/icecream?source=hash-mapping size: 18697 timestamp: 1736498252208 -- conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.10-pyhd8ed1ab_0.conda - sha256: 02f47df6c6982b796aecb086b434627207e87c0a90a50226f11f2cc99c089770 - md5: 8d5b9b702810fb3054d52ba146023bc3 +- conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + sha256: 71e750d509f5fa3421087ba88ef9a7b9be11c53174af3aa4d06aff4c18b38e8e + md5: 8b189310083baabfb622af68fd9d3ae3 depends: - - python >=3.9 - - ukkonen + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 license: MIT license_family: MIT - purls: - - pkg:pypi/identify?source=hash-mapping - size: 79057 - timestamp: 1745098917031 -- conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.9-pyhd8ed1ab_0.conda - sha256: b74a2ffa7be9278d7b8770b6870c360747149c683865e63476b0e1db23038429 - md5: 542f45bf054c6b9cf8d00a3b1976f945 + purls: [] + size: 12129203 + timestamp: 1720853576813 +- conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.10-pyhd8ed1ab_0.conda + sha256: 02f47df6c6982b796aecb086b434627207e87c0a90a50226f11f2cc99c089770 + md5: 8d5b9b702810fb3054d52ba146023bc3 depends: - python >=3.9 - ukkonen @@ -3452,20 +3240,21 @@ packages: - pkg:pypi/ipykernel?source=hash-mapping size: 119084 timestamp: 1719845605084 -- conda: https://conda.anaconda.org/conda-forge/noarch/ipython-8.35.0-pyh907856f_0.conda - sha256: 24a9f9ae8b5b15c11e1b71e44c9d4f483265c6c938ff3a88452864f57b81d104 - md5: 1c70446f398dab3c413f56adb8a5d212 +- conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.2.0-pyhfb0248b_0.conda + sha256: 539d003c379c22a71df1eb76cd4167a3e2d59f45e6dbc3416c45619f4c1381fb + md5: 7330ee1244209cfebfb23d828dd9aae5 depends: - __unix - pexpect >4.3 - decorator - exceptiongroup + - ipython_pygments_lexers - jedi >=0.16 - matplotlib-inline - pickleshare - prompt-toolkit >=3.0.41,<3.1.0 - pygments >=2.4.0 - - python >=3.10 + - python >=3.11 - stack_data - traitlets >=5.13.0 - typing_extensions >=4.6 @@ -3474,15 +3263,27 @@ packages: license_family: BSD purls: - pkg:pypi/ipython?source=hash-mapping - size: 637649 - timestamp: 1744034854170 -- conda: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.6-pyhd8ed1ab_0.conda - sha256: 3ba4a24fbf4465f5389844cfcd141ab800500f674fa56edc0530975de8e779bf - md5: 71f5d1458db8d9c864abb562588ff893 + size: 620691 + timestamp: 1745672166398 +- conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + sha256: 894682a42a7d659ae12878dbcb274516a7031bbea9104e92f8e88c1f2765a104 + md5: bd80ba060603cc228d9d81c257093119 + depends: + - pygments + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/ipython-pygments-lexers?source=hash-mapping + size: 13993 + timestamp: 1737123723464 +- conda: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.7-pyhd8ed1ab_0.conda + sha256: fd496e7d48403246f534c5eec09fc1e63ac7beb1fa06541d6ba71f56b30cf29b + md5: 7c9449eac5975ef2d7753da262a72707 depends: - comm >=0.1.3 - ipython >=6.1.0 - - jupyterlab_widgets >=3.0.14,<3.1.0 + - jupyterlab_widgets >=3.0.15,<3.1.0 - python >=3.9 - traitlets >=4.3.1 - widgetsnbextension >=4.0.14,<4.1.0 @@ -3490,8 +3291,8 @@ packages: license_family: BSD purls: - pkg:pypi/ipywidgets?source=compressed-mapping - size: 114372 - timestamp: 1744294685908 + size: 114557 + timestamp: 1746454722402 - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda sha256: 92c4d217e2dc68983f724aa983cca5464dcb929c566627b26a2511159667dba8 md5: a4f4c5dc9b80bc50e0d3dc4e6e8f1bd9 @@ -3515,18 +3316,6 @@ packages: - pkg:pypi/jinja2?source=compressed-mapping size: 112714 timestamp: 1741263433881 -- conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.4.2-pyhd8ed1ab_1.conda - sha256: 51cc2dc491668af0c4d9299b0ab750f16ccf413ec5e2391b924108c1fbacae9b - md5: bf8243ee348f3a10a14ed0cae323e0c1 - depends: - - python >=3.9 - - setuptools - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/joblib?source=hash-mapping - size: 220252 - timestamp: 1733736157394 - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.0-pyhd8ed1ab_0.conda sha256: 982e5012c90adae2c8ba3451efb30b06168b20912e83245514f5c02000b4402d md5: 3d7257f0a61c9aa4ffa3e324a887416b @@ -3534,6 +3323,7 @@ packages: - python >=3.9 - setuptools license: BSD-3-Clause + license_family: BSD purls: - pkg:pypi/joblib?source=compressed-mapping size: 225060 @@ -3563,6 +3353,7 @@ packages: - referencing >=0.31.0 - python license: MIT + license_family: MIT purls: - pkg:pypi/jsonschema-specifications?source=hash-mapping size: 19168 @@ -3612,9 +3403,9 @@ packages: - pkg:pypi/jupyterlab-pygments?source=hash-mapping size: 18711 timestamp: 1733328194037 -- conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.14-pyhd8ed1ab_0.conda - sha256: c60faaf813b545e3fb2e3567e310695373cb692cd484bcf29b30dcd3d9c93ba4 - md5: 5f17eb78a0ae9db2430c94a2cba222c8 +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.15-pyhd8ed1ab_0.conda + sha256: 6214d345861b106076e7cb38b59761b24cd340c09e3f787e4e4992036ca3cd7e + md5: ad100d215fad890ab0ee10418f36876f depends: - python >=3.9 constrains: @@ -3622,9 +3413,9 @@ packages: license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/jupyterlab-widgets?source=compressed-mapping - size: 187102 - timestamp: 1744291153222 + - pkg:pypi/jupyterlab-widgets?source=hash-mapping + size: 189133 + timestamp: 1746450926999 - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 sha256: 150c05a6e538610ca7c43beb3a40d65c90537497a4f6a5f4d15ec0451b6f5ebb md5: 30186d27e2c9fa62b45fb1476b7200e3 @@ -3676,25 +3467,6 @@ packages: purls: [] size: 1325007 timestamp: 1742369558286 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h75ea233_4.conda - sha256: d49b2a3617b689763d1377a5d1fbfc3c914ee0afa26b3c1858e1c4329329c6df - md5: b80309616f188ac77c4740acba40f796 - depends: - - __glibc >=2.17,<3.0.a0 - - bzip2 >=1.0.8,<2.0a0 - - libgcc >=13 - - liblzma >=5.8.1,<6.0a0 - - libxml2 >=2.13.7,<2.14.0a0 - - libzlib >=1.3.1,<2.0a0 - - lz4-c >=1.10.0,<1.11.0a0 - - lzo >=2.10,<3.0a0 - - openssl >=3.5.0,<4.0a0 - - zstd >=1.5.7,<1.6.0a0 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 878021 - timestamp: 1734020918345 - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h75ea233_4.conda sha256: d49b2a3617b689763d1377a5d1fbfc3c914ee0afa26b3c1858e1c4329329c6df md5: b80309616f188ac77c4740acba40f796 @@ -3714,93 +3486,13 @@ packages: purls: [] size: 866358 timestamp: 1745335292389 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-19.0.1-h27f8bab_8_cpu.conda - build_number: 8 - sha256: 20de06f0fa883263a86bdcb04332a25b2c1c57321dda42e92a815a481adf7fab - md5: adabf9b45433d7465041140051dfdaa1 - depends: - - __glibc >=2.17,<3.0.a0 - - aws-crt-cpp >=0.32.4,<0.32.5.0a0 - - aws-sdk-cpp >=1.11.510,<1.11.511.0a0 - - azure-core-cpp >=1.14.0,<1.14.1.0a0 - - azure-identity-cpp >=1.10.0,<1.10.1.0a0 - - azure-storage-blobs-cpp >=12.13.0,<12.13.1.0a0 - - azure-storage-files-datalake-cpp >=12.12.0,<12.12.1.0a0 - - bzip2 >=1.0.8,<2.0a0 - - glog >=0.7.1,<0.8.0a0 - - libabseil * cxx17* - - libabseil >=20250127.1,<20250128.0a0 - - libbrotlidec >=1.1.0,<1.2.0a0 - - libbrotlienc >=1.1.0,<1.2.0a0 - - libgcc >=13 - - libgoogle-cloud >=2.36.0,<2.37.0a0 - - libgoogle-cloud-storage >=2.36.0,<2.37.0a0 - - libopentelemetry-cpp >=1.20.0,<1.21.0a0 - - libprotobuf >=5.29.3,<5.29.4.0a0 - - libre2-11 >=2024.7.2 - - libstdcxx >=13 - - libutf8proc >=2.10.0,<2.11.0a0 - - libzlib >=1.3.1,<2.0a0 - - lz4-c >=1.10.0,<1.11.0a0 - - orc >=2.1.1,<2.1.2.0a0 - - re2 - - snappy >=1.2.1,<1.3.0a0 - - zstd >=1.5.7,<1.6.0a0 - constrains: - - parquet-cpp <0.0a0 - - arrow-cpp <0.0a0 - - apache-arrow-proc =*=cpu - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 8990207 - timestamp: 1744939168760 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-20.0.0-h27f8bab_0_cpu.conda - sha256: 792c96844fe6a956a3e394ec66b5cf131a476acfa36127d89e5574afdc3fd585 - md5: 6dacb4d072204ce0fd13835759418872 - depends: - - __glibc >=2.17,<3.0.a0 - - aws-crt-cpp >=0.32.4,<0.32.5.0a0 - - aws-sdk-cpp >=1.11.510,<1.11.511.0a0 - - azure-core-cpp >=1.14.0,<1.14.1.0a0 - - azure-identity-cpp >=1.10.0,<1.10.1.0a0 - - azure-storage-blobs-cpp >=12.13.0,<12.13.1.0a0 - - azure-storage-files-datalake-cpp >=12.12.0,<12.12.1.0a0 - - bzip2 >=1.0.8,<2.0a0 - - glog >=0.7.1,<0.8.0a0 - - libabseil * cxx17* - - libabseil >=20250127.1,<20250128.0a0 - - libbrotlidec >=1.1.0,<1.2.0a0 - - libbrotlienc >=1.1.0,<1.2.0a0 - - libgcc >=13 - - libgoogle-cloud >=2.36.0,<2.37.0a0 - - libgoogle-cloud-storage >=2.36.0,<2.37.0a0 - - libopentelemetry-cpp >=1.20.0,<1.21.0a0 - - libprotobuf >=5.29.3,<5.29.4.0a0 - - libre2-11 >=2024.7.2 - - libstdcxx >=13 - - libutf8proc >=2.10.0,<2.11.0a0 - - libzlib >=1.3.1,<2.0a0 - - lz4-c >=1.10.0,<1.11.0a0 - - orc >=2.1.1,<2.1.2.0a0 - - re2 - - snappy >=1.2.1,<1.3.0a0 - - zstd >=1.5.7,<1.6.0a0 - constrains: - - parquet-cpp <0.0a0 - - arrow-cpp <0.0a0 - - apache-arrow-proc =*=cpu - license: Apache-2.0 - purls: [] - size: 9186076 - timestamp: 1745978106549 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-20.0.0-hf00d7f4_1_cpu.conda - build_number: 1 - sha256: be201777b89357d12f576f35ac9c568a540eafaf9fa0f21e592eb98bfb96ec37 - md5: 22a0af27611e707513bc604b6b77e100 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-20.0.0-hebdba27_2_cpu.conda + build_number: 2 + sha256: f9ca7671eaebc5d9dcb368b26ee3d90184479c18e43bf7a8700bee42b138eec2 + md5: fefb8cc188c182d820ff7fe8d17528fc depends: - __glibc >=2.17,<3.0.a0 - - aws-crt-cpp >=0.32.4,<0.32.5.0a0 + - aws-crt-cpp >=0.32.5,<0.32.6.0a0 - aws-sdk-cpp >=1.11.510,<1.11.511.0a0 - azure-core-cpp >=1.14.0,<1.14.1.0a0 - azure-identity-cpp >=1.10.0,<1.10.1.0a0 @@ -3827,162 +3519,63 @@ packages: - snappy >=1.2.1,<1.3.0a0 - zstd >=1.5.7,<1.6.0a0 constrains: - - arrow-cpp <0.0a0 - apache-arrow-proc =*=cpu + - arrow-cpp <0.0a0 - parquet-cpp <0.0a0 license: Apache-2.0 - purls: [] - size: 9205568 - timestamp: 1746631621951 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-19.0.1-hcb10f89_8_cpu.conda - build_number: 8 - sha256: 255f418a275728c08efeffbf98c6a547406175a70a1ce6fc873292016e44cec4 - md5: e96553170bbc67aa151a7194f450e698 - depends: - - __glibc >=2.17,<3.0.a0 - - libarrow 19.0.1 h27f8bab_8_cpu - - libgcc >=13 - - libstdcxx >=13 - license: Apache-2.0 license_family: APACHE purls: [] - size: 643527 - timestamp: 1744939215876 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-20.0.0-hcb10f89_0_cpu.conda - sha256: 59b63b4bdea1efbbd5a741a569a5aec12d5d6f2fc05dc0a3012722cb0a9b1c94 - md5: 025bf09c4f59e6f5d9a6a4b82dd5894f - depends: - - __glibc >=2.17,<3.0.a0 - - libarrow 20.0.0 h27f8bab_0_cpu - - libgcc >=13 - - libstdcxx >=13 - license: Apache-2.0 - purls: [] - size: 641618 - timestamp: 1745978166293 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-20.0.0-hcb10f89_1_cpu.conda - build_number: 1 - sha256: 2c54c2d0a3a09d459cd14fb7dd13e6004ea3c018205b10fa427e8376f813c563 - md5: 312459eebd0500f1b864824df05b79d6 - depends: - - __glibc >=2.17,<3.0.a0 - - libarrow 20.0.0 hf00d7f4_1_cpu - - libgcc >=13 - - libstdcxx >=13 - license: Apache-2.0 - purls: [] - size: 641239 - timestamp: 1746631689388 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-19.0.1-hcb10f89_8_cpu.conda - build_number: 8 - sha256: d1162e03c292e23c5893385ab012c73e13e49f57ece4fdeb3c6297f550bc0c44 - md5: 3bb1fd3f721c4542ed26ba9bfc036619 + size: 9189643 + timestamp: 1746644995784 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-20.0.0-hcb10f89_2_cpu.conda + build_number: 2 + sha256: 53a2f24376a72ab67cb006465bfab51ab29758b1381d488f164fb6ed5d05f5c3 + md5: 34e6f380f6c3342659710654bf691a0e depends: - __glibc >=2.17,<3.0.a0 - - libarrow 19.0.1 h27f8bab_8_cpu - - libarrow-acero 19.0.1 hcb10f89_8_cpu + - libarrow 20.0.0 hebdba27_2_cpu - libgcc >=13 - - libparquet 19.0.1 h081d1f1_8_cpu - libstdcxx >=13 license: Apache-2.0 license_family: APACHE purls: [] - size: 614187 - timestamp: 1744939340591 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-20.0.0-hcb10f89_0_cpu.conda - sha256: b785c56560145ac3123d3fbf2db11d3e0e465ae5f2f2ad3276fb82a3d5a770b1 - md5: ebdbd9d4522b4106246866054f7520bf - depends: - - __glibc >=2.17,<3.0.a0 - - libarrow 20.0.0 h27f8bab_0_cpu - - libarrow-acero 20.0.0 hcb10f89_0_cpu - - libgcc >=13 - - libparquet 20.0.0 h081d1f1_0_cpu - - libstdcxx >=13 - license: Apache-2.0 - purls: [] - size: 607462 - timestamp: 1745978318647 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-20.0.0-hcb10f89_1_cpu.conda - build_number: 1 - sha256: f62062e1375674a5d4d8f7089e8da0a946613b98752679e2f6d12e7bee82c03e - md5: 1718d536f23a6006d7eb7cedf08b0fc6 + size: 641005 + timestamp: 1746645063470 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-20.0.0-hcb10f89_2_cpu.conda + build_number: 2 + sha256: da45e76afaf04dc26e99f2ab507eb944294f05531ae64a418de8f122d9425f1f + md5: c25856947d8545ae864effb0a6b5819a depends: - __glibc >=2.17,<3.0.a0 - - libarrow 20.0.0 hf00d7f4_1_cpu - - libarrow-acero 20.0.0 hcb10f89_1_cpu + - libarrow 20.0.0 hebdba27_2_cpu + - libarrow-acero 20.0.0 hcb10f89_2_cpu - libgcc >=13 - - libparquet 20.0.0 h081d1f1_1_cpu - - libstdcxx >=13 - license: Apache-2.0 - purls: [] - size: 608531 - timestamp: 1746631886431 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-19.0.1-h1bed206_8_cpu.conda - build_number: 8 - sha256: 4385e78e7bb9e397ce04eddcdbc0e43ef826b7b3cfdb456645d3dd47357699d9 - md5: 7832ea7b3c0e1269ef8990d774c9b6b1 - depends: - - __glibc >=2.17,<3.0.a0 - - libabseil * cxx17* - - libabseil >=20250127.1,<20250128.0a0 - - libarrow 19.0.1 h27f8bab_8_cpu - - libarrow-acero 19.0.1 hcb10f89_8_cpu - - libarrow-dataset 19.0.1 hcb10f89_8_cpu - - libgcc >=13 - - libprotobuf >=5.29.3,<5.29.4.0a0 + - libparquet 20.0.0 h081d1f1_2_cpu - libstdcxx >=13 license: Apache-2.0 license_family: APACHE purls: [] - size: 527935 - timestamp: 1744939395746 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-20.0.0-h1bed206_0_cpu.conda - sha256: 57ba1176fbbf920b84919c960c66aef7b63213616e0b56e41fb5288114db7ff3 - md5: 1763dd016d6eee48e2bb29382f8d1562 - depends: - - __glibc >=2.17,<3.0.a0 - - libabseil * cxx17* - - libabseil >=20250127.1,<20250128.0a0 - - libarrow 20.0.0 h27f8bab_0_cpu - - libarrow-acero 20.0.0 hcb10f89_0_cpu - - libarrow-dataset 20.0.0 hcb10f89_0_cpu - - libgcc >=13 - - libprotobuf >=5.29.3,<5.29.4.0a0 - - libstdcxx >=13 - license: Apache-2.0 - purls: [] - size: 523094 - timestamp: 1745978388635 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-20.0.0-h1bed206_1_cpu.conda - build_number: 1 - sha256: 655356cfb9f7dc8795ea26d421d8da55f750ec22a4ea5b86cc95d8f73c9ad38c - md5: a6c3693160864beadef9f00ddd3709bb + size: 608832 + timestamp: 1746645250800 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-20.0.0-h1bed206_2_cpu.conda + build_number: 2 + sha256: 686c5a0ab71362e8543c702d476ad17bb0a9f96fabb81119fc9695ba9ecbf6d7 + md5: e477ae619b2e13c967ef090989cd68fe depends: - __glibc >=2.17,<3.0.a0 - libabseil * cxx17* - libabseil >=20250127.1,<20250128.0a0 - - libarrow 20.0.0 hf00d7f4_1_cpu - - libarrow-acero 20.0.0 hcb10f89_1_cpu - - libarrow-dataset 20.0.0 hcb10f89_1_cpu + - libarrow 20.0.0 hebdba27_2_cpu + - libarrow-acero 20.0.0 hcb10f89_2_cpu + - libarrow-dataset 20.0.0 hcb10f89_2_cpu - libgcc >=13 - libprotobuf >=5.29.3,<5.29.4.0a0 - libstdcxx >=13 license: Apache-2.0 + license_family: APACHE purls: [] - size: 522892 - timestamp: 1746631971341 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.23.1-h8e693c7_0.conda - sha256: 13b863584fccbb9089de73a2442e540703ce4873e4719c9d98c98e4a8e12f9d1 - md5: 988f4937281a66ca19d1adb3b5e3f859 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - license: LGPL-2.1-or-later - purls: [] - size: 43179 - timestamp: 1739038705987 + size: 522957 + timestamp: 1746645334913 - conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.24.1-h8e693c7_0.conda sha256: e30733a729eb6efd9cb316db0202897c882d46f6c20a0e647b4de8ec921b7218 md5: 57566a81dd1e5aa3d98ac7582e8bfe03 @@ -4194,41 +3787,30 @@ packages: purls: [] size: 57433 timestamp: 1743434498161 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h767d61c_2.conda - sha256: 3a572d031cb86deb541d15c1875aaa097baefc0c580b54dc61f5edab99215792 - md5: ef504d1acbd74b7cc6849ef8af47dd03 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.1.0-h767d61c_2.conda + sha256: 0024f9ab34c09629621aefd8603ef77bf9d708129b0dd79029e502c39ffc2195 + md5: ea8ac52380885ed41c1baa8f1d6d2b93 depends: - __glibc >=2.17,<3.0.a0 - _openmp_mutex >=4.5 constrains: - - libgomp 14.2.0 h767d61c_2 - - libgcc-ng ==14.2.0=*_2 + - libgcc-ng ==15.1.0=*_2 + - libgomp 15.1.0 h767d61c_2 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 847885 - timestamp: 1740240653082 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_2.conda - sha256: fb7558c328b38b2f9d2e412c48da7890e7721ba018d733ebdfea57280df01904 - md5: a2222a6ada71fb478682efe483ce0f92 + size: 829108 + timestamp: 1746642191935 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_2.conda + sha256: 0ab5421a89f090f3aa33841036bb3af4ed85e1f91315b528a9d75fab9aad51ae + md5: ddca86c7040dd0e73b2b69bd7833d225 depends: - - libgcc 14.2.0 h767d61c_2 + - libgcc 15.1.0 h767d61c_2 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 53758 - timestamp: 1740240660904 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-0.23.1-h5888daf_0.conda - sha256: 190097140d9c16637aa516757d8087f17e8c22cc844c87288da64404b81ef43c - md5: a09ce5decdef385bcce78c32809fa794 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - license: GPL-3.0-or-later - license_family: GPL - purls: [] - size: 166867 - timestamp: 1739038720211 + size: 34586 + timestamp: 1746642200749 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-0.24.1-h5888daf_0.conda sha256: 104f2341546e295d1136ab3010e81391bd3fd5be0f095db59266e8eba2082d37 md5: 2ee6d71b72f75d50581f2f68e965efdb @@ -4236,44 +3818,45 @@ packages: - __glibc >=2.17,<3.0.a0 - libgcc >=13 license: GPL-3.0-or-later + license_family: GPL purls: [] size: 171165 timestamp: 1746228870846 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-14.2.0-h69a702a_2.conda - sha256: e05263e8960da03c341650f2a3ffa4ccae4e111cb198e8933a2908125459e5a6 - md5: fb54c4ea68b460c278d26eea89cfbcc3 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.1.0-h69a702a_2.conda + sha256: 914daa4f632b786827ea71b5e07cd00d25fc6e67789db2f830dc481eec660342 + md5: f92e6e0a3c0c0c85561ef61aa59d555d depends: - - libgfortran5 14.2.0 hf1ad2bd_2 + - libgfortran5 15.1.0 hcea5267_2 constrains: - - libgfortran-ng ==14.2.0=*_2 + - libgfortran-ng ==15.1.0=*_2 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 53733 - timestamp: 1740240690977 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.2.0-hf1ad2bd_2.conda - sha256: c17b7cf3073a1f4e1f34d50872934fa326346e104d3c445abc1e62481ad6085c - md5: 556a4fdfac7287d349b8f09aba899693 + size: 34541 + timestamp: 1746642233221 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.1.0-hcea5267_2.conda + sha256: be23750f3ca1a5cb3ada858c4f633effe777487d1ea35fddca04c0965c073350 + md5: 01de444988ed960031dbe84cf4f9b1fc depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=14.2.0 + - libgcc >=15.1.0 constrains: - - libgfortran 14.2.0 + - libgfortran 15.1.0 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 1461978 - timestamp: 1740240671964 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h767d61c_2.conda - sha256: 1a3130e0b9267e781b89399580f3163632d59fe5b0142900d63052ab1a53490e - md5: 06d02030237f4d5b3d9a7e7d348fe3c6 + size: 1569986 + timestamp: 1746642212331 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.1.0-h767d61c_2.conda + sha256: 05fff3dc7e80579bc28de13b511baec281c4343d703c406aefd54389959154fb + md5: fbe7d535ff9d3a168c148e07358cd5b1 depends: - __glibc >=2.17,<3.0.a0 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 459862 - timestamp: 1740240588123 + size: 452635 + timestamp: 1746642113092 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.36.0-hc4361e1_1.conda sha256: 3a56c653231d6233de5853dc01f07afad6a332799a39c3772c0948d2e68547e4 md5: ae36e6296a8dd8e8a9a8375965bf6398 @@ -4334,28 +3917,6 @@ packages: purls: [] size: 7920187 timestamp: 1745229332239 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.71.0-he753a82_0.conda - sha256: bd8686a8aa0f840e7a7e63b3be57200d36c136cf1c6280b44a98b89ffac06186 - md5: 65e3fc5e73aa153bb069c1baec51fc12 - depends: - - __glibc >=2.17,<3.0.a0 - - c-ares >=1.34.5,<2.0a0 - - libabseil * cxx17* - - libabseil >=20250127.1,<20250128.0a0 - - libgcc >=13 - - libprotobuf >=5.29.3,<5.29.4.0a0 - - libre2-11 >=2024.7.2 - - libstdcxx >=13 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.5.0,<4.0a0 - - re2 - constrains: - - grpc-cpp =1.71.0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 7920187 - timestamp: 1745229332239 - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.11.2-default_h0d58e46_1001.conda sha256: d14c016482e1409ae1c50109a9ff933460a50940d2682e745ab1c172b5282a69 md5: 804ca9e91bcaea0824a341d55b1684f2 @@ -4425,16 +3986,19 @@ packages: purls: [] size: 16760 timestamp: 1740087736615 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_0.conda - sha256: f4f21dfc54b08d462f707b771ecce3fa9bc702a2a05b55654f64154f48b141ef - md5: 0e87378639676987af32fee53ba32258 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_1.conda + sha256: eeff241bddc8f1b87567dd6507c9f441f7f472c27f0860a07628260c000ef27c + md5: a76fd702c93cd2dfd89eff30a5fd45a8 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 + constrains: + - xz 5.8.1.* + - xz ==5.8.1=*_1 license: 0BSD purls: [] - size: 112709 - timestamp: 1743771086123 + size: 112845 + timestamp: 1746531470399 - conda: https://conda.anaconda.org/conda-forge/linux-64/libmicrohttpd-1.0.1-hbc5bc17_1.conda sha256: 0aa6287ec8698090d09def3416c38e5975fd2b76cd24ff5dac97edcdd6e1fbd4 md5: c384e4dcd3c345b54bfb79d9ff712349 @@ -4517,13 +4081,13 @@ packages: purls: [] size: 347071 timestamp: 1743991580676 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-19.0.1-h081d1f1_8_cpu.conda - build_number: 8 - sha256: 105f1f5ff7f07b0f1c3984ac985b2b8076cfd8b0c28d2ac595193f09c68f1196 - md5: 874cbb160bf4b8f3155b1165f4186585 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-20.0.0-h081d1f1_2_cpu.conda + build_number: 2 + sha256: 41af142791f845d8b912c2721445c839654f675af0f22624487c0507551064b5 + md5: 164383514a3f29c1e4838d9a4a08040d depends: - __glibc >=2.17,<3.0.a0 - - libarrow 19.0.1 h27f8bab_8_cpu + - libarrow 20.0.0 hebdba27_2_cpu - libgcc >=13 - libstdcxx >=13 - libthrift >=0.21.0,<0.21.1.0a0 @@ -4531,52 +4095,8 @@ packages: license: Apache-2.0 license_family: APACHE purls: [] - size: 1252840 - timestamp: 1744939311536 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-20.0.0-h081d1f1_0_cpu.conda - sha256: 2cf3ed360b38da98275e668ed5d66d97b1b81d24e7a871c3d5f36639366b7d9c - md5: 4ad62607dd9f9902e0bd3d91c5bbce58 - depends: - - __glibc >=2.17,<3.0.a0 - - libarrow 20.0.0 h27f8bab_0_cpu - - libgcc >=13 - - libstdcxx >=13 - - libthrift >=0.21.0,<0.21.1.0a0 - - openssl >=3.5.0,<4.0a0 - license: Apache-2.0 - purls: [] - size: 1241755 - timestamp: 1745978282520 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-20.0.0-h081d1f1_1_cpu.conda - build_number: 1 - sha256: ee4bc30c6d53805ad9da9aff4bc8028e53e8cdaaafe68197b0cb885557da4c48 - md5: 3b9e40a2113f31804ad9339e8ac3ffaa - depends: - - __glibc >=2.17,<3.0.a0 - - libarrow 20.0.0 hf00d7f4_1_cpu - - libgcc >=13 - - libstdcxx >=13 - - libthrift >=0.21.0,<0.21.1.0a0 - - openssl >=3.5.0,<4.0a0 - license: Apache-2.0 - purls: [] - size: 1241803 - timestamp: 1746631842790 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h501fc15_0.conda - sha256: 9965b1ada1f997202ad8c5a960e69057280b7b926c718df9b07c62924d9c1d73 - md5: 452518a9744fbac05fb45531979bdf29 - depends: - - __glibc >=2.17,<3.0.a0 - - libabseil * cxx17* - - libabseil >=20250127.1,<20250128.0a0 - - libgcc >=13 - - libstdcxx >=13 - - libzlib >=1.3.1,<2.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 3352450 - timestamp: 1741126291267 + size: 1242014 + timestamp: 1746645208297 - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h501fc15_1.conda sha256: 691af28446345674c6b3fb864d0e1a1574b6cc2f788e0f036d73a6b05dcf81cf md5: edb86556cf4a0c133e7932a1597ff236 @@ -4617,17 +4137,17 @@ packages: purls: [] size: 205978 timestamp: 1716828628198 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.1-hee588c1_2.conda - sha256: a086289bf75c33adc1daed3f1422024504ffb5c3c8b3285c49f025c29708ed16 - md5: 962d6ac93c30b1dfc54c9cccafd1003e +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.2-hee588c1_0.conda + sha256: 525d4a0e24843f90b3ff1ed733f0a2e408aa6dd18b9d4f15465595e078e104a2 + md5: 93048463501053a00739215ea3f36324 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - libzlib >=1.3.1,<2.0a0 license: Unlicense purls: [] - size: 918664 - timestamp: 1742083674731 + size: 916313 + timestamp: 1746637007836 - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda sha256: fa39bfd69228a13e553bd24601332b7cfeb30ca11a3ca50bb028108fe90a7661 md5: eecce068c7e4eddeb169591baac20ac4 @@ -4641,40 +4161,27 @@ packages: purls: [] size: 304790 timestamp: 1745608545575 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda - sha256: 0407ac9fda2bb67e11e357066eff144c845801d00b5f664efbc48813af1e7bb9 - md5: be2de152d8073ef1c01b7728475f2fe7 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.1.0-h8f9b012_2.conda + sha256: 6ae3d153e78f6069d503d9309f2cac6de5b93d067fc6433160a4c05226a5dad4 + md5: 1cb1c67961f6dd257eae9e9691b341aa depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.4.0,<4.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 304278 - timestamp: 1732349402869 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-h8f9b012_2.conda - sha256: 8f5bd92e4a24e1d35ba015c5252e8f818898478cb3bc50bd8b12ab54707dc4da - md5: a78c856b6dc6bf4ea8daeb9beaaa3fb0 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc 14.2.0 h767d61c_2 + - libgcc 15.1.0 h767d61c_2 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 3884556 - timestamp: 1740240685253 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_2.conda - sha256: e86f38b007cf97cc2c67cd519f2de12a313c4ee3f5ef11652ad08932a5e34189 - md5: c75da67f045c2627f59e6fcb5f4e3a9b + size: 3902355 + timestamp: 1746642227493 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.1.0-h4852527_2.conda + sha256: 11bea86e11de7d6bce87589197a383344df3fa0a3552dab7e931785ff1159a5b + md5: 9d2072af184b5caa29492bf2344597bb depends: - - libstdcxx 14.2.0 h8f9b012_2 + - libstdcxx 15.1.0 h8f9b012_2 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 53830 - timestamp: 1740240722530 + size: 34647 + timestamp: 1746642266826 - conda: https://conda.anaconda.org/conda-forge/linux-64/libtasn1-4.20.0-hb9d3cd8_0.conda sha256: 5fd3b8a4a9719e3d1c08826c3dfe42eecc816a2aaf5c3849a85f11ff3c4b1b19 md5: 942cd32b349ec84fb3879955fa68f994 @@ -4701,34 +4208,6 @@ packages: purls: [] size: 425773 timestamp: 1727205853307 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.6.0-cpu_mkl_hf6ddc5a_104.conda - sha256: bbef3e9a9c974f0a3bc9965ef4ee23c43368fb1a8205c724ae18669450088dbc - md5: 828146bb6100e9a4217e8351b18c8e83 - depends: - - __glibc >=2.17,<3.0.a0 - - _openmp_mutex * *_llvm - - _openmp_mutex >=4.5 - - libabseil * cxx17* - - libabseil >=20250127.1,<20250128.0a0 - - libblas * *mkl - - libcblas >=3.9.0,<4.0a0 - - libgcc >=13 - - libprotobuf >=5.29.3,<5.29.4.0a0 - - libstdcxx >=13 - - libuv >=1.50.0,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - llvm-openmp >=20.1.2 - - mkl >=2024.2.2,<2025.0a0 - - sleef >=3.8,<4.0a0 - constrains: - - pytorch-cpu 2.6.0 - - pytorch-gpu <0.0a0 - - pytorch 2.6.0 cpu_mkl_*_104 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 54451470 - timestamp: 1744238833553 - conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.7.0-cpu_mkl_hf6ddc5a_100.conda sha256: 7b6178464b02d65c4af92086c71b79e5c2b7fc1500c1547334a4755e6e92d8a9 md5: 6bdda0b10852c6d03b030bab7ec251f0 @@ -4818,22 +4297,21 @@ packages: purls: [] size: 100393 timestamp: 1702724383534 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.7-h81593ed_1.conda - sha256: c4f59563e017eba378ea843be5ebde4b0546c72bbe4c1e43b2b384379e827635 - md5: 0619e8fc4c8025a908ea3a3422d3b775 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.8-h4bc477f_0.conda + sha256: b0b3a96791fa8bb4ec030295e8c8bf2d3278f33c0f9ad540e73b5e538e6268e7 + md5: 14dbe05b929e329dbaa6f2d0aa19466d depends: - __glibc >=2.17,<3.0.a0 + - icu >=75.1,<76.0a0 - libgcc >=13 - libiconv >=1.18,<2.0a0 - liblzma >=5.8.1,<6.0a0 - libzlib >=1.3.1,<2.0a0 - constrains: - - icu <0.0a0 license: MIT license_family: MIT purls: [] - size: 691042 - timestamp: 1743794600936 + size: 690864 + timestamp: 1746634244154 - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 md5: edb0dca6bc32e4f4789199455a1dbeb8 @@ -4874,18 +4352,6 @@ packages: - pkg:pypi/linkify-it-py?source=hash-mapping size: 24154 timestamp: 1733781296133 -- conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-20.1.3-h024ca30_0.conda - sha256: 4327a463f43b0d95ca0e5f92094383ef53fd2a91d649debfc531b941fe44fd48 - md5: c721339ea8746513e42b1233b4bbdfb0 - depends: - - __glibc >=2.17,<3.0.a0 - constrains: - - openmp 20.1.3|20.1.3.* - license: Apache-2.0 WITH LLVM-exception - license_family: APACHE - purls: [] - size: 3185408 - timestamp: 1744934126968 - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-20.1.4-h024ca30_0.conda sha256: 5b39cdde3457e41b133d6f1fe53095c7fd3951bbdab46580098ccbf5ee9c99f7 md5: 4fc395cda27912a7d904b86b5dbf3a4d @@ -4894,6 +4360,7 @@ packages: constrains: - openmp 20.1.4|20.1.4.* license: Apache-2.0 WITH LLVM-exception + license_family: APACHE purls: [] size: 3322195 timestamp: 1746134424442 @@ -4945,42 +4412,6 @@ packages: - pkg:pypi/llvmlite?source=hash-mapping size: 29996918 timestamp: 1742815908291 -- conda: https://conda.anaconda.org/conda-forge/linux-64/loguru-0.7.2-py310hff52083_2.conda - sha256: d10ef6447bc4de4841e35047c53689246d25722db5c0915ea9bbf8984c8dc3b2 - md5: 4e8b2a2851668c8ad4d5360845281be9 - depends: - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - license: MIT - license_family: MIT - purls: - - pkg:pypi/loguru?source=hash-mapping - size: 98504 - timestamp: 1725349839060 -- conda: https://conda.anaconda.org/conda-forge/linux-64/loguru-0.7.2-py311h38be061_2.conda - sha256: 3c1ea0a9c37fac760c94f167899b4c15ffc967cbeb83f6ed61d49c9974fab46c - md5: 733b481d20ff260a34f2b0003ff4fbb3 - depends: - - python >=3.11,<3.12.0a0 - - python_abi 3.11.* *_cp311 - license: MIT - license_family: MIT - purls: - - pkg:pypi/loguru?source=hash-mapping - size: 126239 - timestamp: 1725349863378 -- conda: https://conda.anaconda.org/conda-forge/linux-64/loguru-0.7.2-py312h7900ff3_2.conda - sha256: e5477e3fa7b4ef070e9ecae619cfc5845e14e3cdac8fbb2d158a03d51f967bef - md5: fddd3092f921be8e01b18f2a0266d98f - depends: - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - license: MIT - license_family: MIT - purls: - - pkg:pypi/loguru?source=hash-mapping - size: 123047 - timestamp: 1725349857430 - conda: https://conda.anaconda.org/conda-forge/noarch/loguru-0.7.3-pyh707e725_0.conda sha256: e4a07f357a4cf195a2345dabd98deab80f4d53574abe712a9cc7f22d3f2cc2c3 md5: 49647ac1de4d1e4b49124aedf3934e02 @@ -5169,9 +4600,9 @@ packages: - pkg:pypi/mdurl?source=hash-mapping size: 14465 timestamp: 1733255681319 -- conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.1-py310hfc232cf_0.conda - sha256: 0ce075823ef141a156bcdcfd84986c8080e311998e505a6cade924a92033ee14 - md5: ec8326eebfce6c407b1cb58b740d52fc +- conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.2-py310hfc232cf_0.conda + sha256: 7147ad074843e31f5e0f8f20f898d5b8038b054ca27cec02f82249eba84d25dd + md5: b7815a024475cf6f76d0c93fef6b9c4a depends: - __glibc >=2.17,<3.0.a0 - elfutils >=0.192,<0.193.0a0 @@ -5187,11 +4618,11 @@ packages: license: Apache-2.0 AND BSD-3-Clause purls: - pkg:pypi/memray?source=hash-mapping - size: 713336 - timestamp: 1744409983954 -- conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.1-py311hc51bbc3_0.conda - sha256: 2c8d1900266b659c213fabaf668ebfe081e3513ceef47842fcfa580f058e61af - md5: 9393f7cc2cbddd935f32abaf5986f103 + size: 686727 + timestamp: 1746769489931 +- conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.2-py311hc51bbc3_0.conda + sha256: bf601468b9270e9aedcfd1fd77180482f0042d3a31d92d76e46674b4ee5b57d2 + md5: c4a1ce34922b721d84b28bfe4f635442 depends: - __glibc >=2.17,<3.0.a0 - elfutils >=0.192,<0.193.0a0 @@ -5207,11 +4638,11 @@ packages: license: Apache-2.0 AND BSD-3-Clause purls: - pkg:pypi/memray?source=hash-mapping - size: 732897 - timestamp: 1744410092540 -- conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.1-py312hba68c3b_0.conda - sha256: 0a6766b459fe9e43947b35ace85e7e177d900cc33a334e432b295f566b6b2612 - md5: b94c1848d7dfe4c1b622d7b38b0bced7 + size: 707196 + timestamp: 1746769487323 +- conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.2-py312hba68c3b_0.conda + sha256: b4175e2870e5cf8eebbfc6996fa59c6ede15b12da05b758b27d37d0df168e66c + md5: ce056d2f162391d58dc486ca240242fc depends: - __glibc >=2.17,<3.0.a0 - elfutils >=0.192,<0.193.0a0 @@ -5227,8 +4658,8 @@ packages: license: Apache-2.0 AND BSD-3-Clause purls: - pkg:pypi/memray?source=hash-mapping - size: 717972 - timestamp: 1744410040790 + size: 682736 + timestamp: 1746769578439 - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.1.3-pyh29332c3_0.conda sha256: a67484d7dd11e815a81786580f18b6e4aa2392f292f29183631a6eccc8dc37b3 md5: 7ec6576e328bc128f4982cd646eeba85 @@ -5255,17 +4686,6 @@ packages: purls: [] size: 124718448 timestamp: 1730231808335 -- conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.7.0-pyhd8ed1ab_0.conda - sha256: d0c2253dcb1da6c235797b57d29de688dabc2e48cc49645b1cff2b52b7907428 - md5: 7c65a443d58beb0518c35b26c70e201d - depends: - - python >=3.9 - license: MIT - license_family: MIT - purls: - - pkg:pypi/more-itertools?source=hash-mapping - size: 58739 - timestamp: 1736883940984 - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.7.0-pyhd8ed1ab_0.conda sha256: d0c2253dcb1da6c235797b57d29de688dabc2e48cc49645b1cff2b52b7907428 md5: 7c65a443d58beb0518c35b26c70e201d @@ -5313,17 +4733,6 @@ packages: - pkg:pypi/mpmath?source=hash-mapping size: 439705 timestamp: 1733302781386 -- conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda - sha256: 1895f47b7d68581a6facde5cb13ab8c2764c2e53a76bd746f8f98910dc4e08fe - md5: 29097e7ea634a45cc5386b95cac6568f - depends: - - python >=3.9 - license: MIT - license_family: MIT - purls: - - pkg:pypi/mypy-extensions?source=hash-mapping - size: 10854 - timestamp: 1733230986902 - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda sha256: 6ed158e4e5dd8f6a10ad9e525631e35cee8557718f83de7a4e3966b1f772c4b1 md5: e9c622e0d00fa24a6292279af3ab6d06 @@ -5662,44 +5071,6 @@ packages: - tox~=4.0 ; extra == 'dev' - versioningit~=2.0 ; extra == 'dev' requires_python: '>=3.8' -- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.5-py310hefbff90_0.conda - sha256: f0c9f295a58dabdc1ff9ceadd31ab7a6e8d3c903c37f749bfd058afcb0d534ed - md5: 5526bc875ec897f0d335e38da832b6ee - depends: - - __glibc >=2.17,<3.0.a0 - - libblas >=3.9.0,<4.0a0 - - libcblas >=3.9.0,<4.0a0 - - libgcc >=13 - - liblapack >=3.9.0,<4.0a0 - - libstdcxx >=13 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - constrains: - - numpy-base <0a0 - license: BSD-3-Clause - purls: - - pkg:pypi/numpy?source=hash-mapping - size: 7963864 - timestamp: 1745119540801 -- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.5-py312h72c5963_0.conda - sha256: af293ba6f715983f71543ed0111e6bb77423d409c1d13062474601257c2eebca - md5: 505bcfc142b97010c162863c38d90016 - depends: - - __glibc >=2.17,<3.0.a0 - - libblas >=3.9.0,<4.0a0 - - libcblas >=3.9.0,<4.0a0 - - libgcc >=13 - - liblapack >=3.9.0,<4.0a0 - - libstdcxx >=13 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - constrains: - - numpy-base <0a0 - license: BSD-3-Clause - purls: - - pkg:pypi/numpy?source=compressed-mapping - size: 8424727 - timestamp: 1742255434709 - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.5-py310hefbff90_0.conda sha256: f0c9f295a58dabdc1ff9ceadd31ab7a6e8d3c903c37f749bfd058afcb0d534ed md5: 5526bc875ec897f0d335e38da832b6ee @@ -5760,18 +5131,6 @@ packages: - pkg:pypi/numpy?source=hash-mapping size: 8543883 timestamp: 1745119461819 -- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.0-h7b32b05_0.conda - sha256: 38285d280f84f1755b7c54baf17eccf2e3e696287954ce0adca16546b85ee62c - md5: bb539841f2a3fde210f387d00ed4bb9d - depends: - - __glibc >=2.17,<3.0.a0 - - ca-certificates - - libgcc >=13 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 3121673 - timestamp: 1744132167438 - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.0-h7b32b05_1.conda sha256: b4491077c494dbf0b5eaa6d87738c22f2154e9277e5293175ec187634bd808a0 md5: de356753cfdbffcde5bb1e86e3aa6cd0 @@ -5829,27 +5188,9 @@ packages: license: Apache-2.0 license_family: Apache purls: - - pkg:pypi/optree?source=hash-mapping - size: 413963 - timestamp: 1744034409842 -- conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.1.1-h17f744e_1.conda - sha256: f78b0e440baa1bf8352f3a33b678f0f2a14465fd1d7bf771aa2f8b1846006f2e - md5: cfe9bc267c22b6d53438eff187649d43 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libprotobuf >=5.29.3,<5.29.4.0a0 - - libstdcxx >=13 - - libzlib >=1.3.1,<2.0a0 - - lz4-c >=1.10.0,<1.11.0a0 - - snappy >=1.2.1,<1.3.0a0 - - tzdata - - zstd >=1.5.7,<1.6.0a0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 1241124 - timestamp: 1741889606201 + - pkg:pypi/optree?source=hash-mapping + size: 413963 + timestamp: 1744034409842 - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.1.2-h17f744e_0.conda sha256: f6ff644e27f42f2beb877773ba3adc1228dbb43530dbe9426dd672f3b847c7c5 md5: ef7f9897a244b2023a066c22a1089ce4 @@ -5880,17 +5221,6 @@ packages: purls: [] size: 4702497 timestamp: 1654868759643 -- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda - sha256: 289861ed0c13a15d7bbb408796af4de72c2fe67e2bcb0de98f4c3fce259d7991 - md5: 58335b26c38bf4a20f399384c33cbcf9 - depends: - - python >=3.8 - - python - license: Apache-2.0 - purls: - - pkg:pypi/packaging?source=hash-mapping - size: 60164 - timestamp: 1733203368787 - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda sha256: 289861ed0c13a15d7bbb408796af4de72c2fe67e2bcb0de98f4c3fce259d7991 md5: 58335b26c38bf4a20f399384c33cbcf9 @@ -6117,17 +5447,6 @@ packages: - pkg:pypi/parso?source=hash-mapping size: 75295 timestamp: 1733271352153 -- conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.17.2-h58526e2_0.conda - sha256: eb355ac225be2f698e19dba4dcab7cb0748225677a9799e9cc8e4cadc3cb738f - md5: ba76a6a448819560b5f8b08a9c74f415 - depends: - - libgcc-ng >=7.5.0 - - libstdcxx-ng >=7.5.0 - license: GPL-3.0-or-later - license_family: GPL - purls: [] - size: 94048 - timestamp: 1673473024463 - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.18.0-h3f2d84a_2.conda sha256: 2f1caf273c7816fcff6e8438138c29d08264f8371dc0e23f86e993ccc7e978dc md5: 5a6bde274af5252392b446ead19047d0 @@ -6234,9 +5553,9 @@ packages: - pkg:pypi/pkgutil-resolve-name?source=hash-mapping size: 10693 timestamp: 1733344619659 -- conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.7-pyh29332c3_0.conda - sha256: ae7d3e58224d53d6b59e1f5ac5809803bb1972f0ac4fb10cd9b8c87d4122d3e0 - md5: e57da6fe54bb3a5556cf36d199ff07d8 +- conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.8-pyhe01879c_0.conda + sha256: 0f48999a28019c329cd3f6fd2f01f09fc32cc832f7d6bbe38087ddac858feaa3 + md5: 424844562f5d337077b445ec6b1398a7 depends: - python >=3.9 - python @@ -6244,8 +5563,8 @@ packages: license_family: MIT purls: - pkg:pypi/platformdirs?source=compressed-mapping - size: 23291 - timestamp: 1742485085457 + size: 23531 + timestamp: 1746710438805 - conda: https://conda.anaconda.org/bioconda/linux-64/plink2-2.0.0a.6.9-h9948957_0.tar.bz2 sha256: 8f9b2415a5035b5019ef83d2db6f6af2b9739796186a3e558a7baf69c14b0b6b md5: b9e94cb7fa3bb4353c68e4c553690245 @@ -6476,38 +5795,6 @@ packages: purls: [] size: 1691209 timestamp: 1731026762275 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-19.0.1-py310hff52083_0.conda - sha256: 0e9fcf42e2a2563eb071d8b6a6809fa4067cceec5dd3989787a7b354bf3e1a62 - md5: 96aab335d44df02cd3aaba0c7dd1a645 - depends: - - libarrow-acero 19.0.1.* - - libarrow-dataset 19.0.1.* - - libarrow-substrait 19.0.1.* - - libparquet 19.0.1.* - - pyarrow-core 19.0.1 *_0_* - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 25359 - timestamp: 1739792670797 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-19.0.1-py312h7900ff3_0.conda - sha256: 82a0b6ef00473c134ff32138a6fe1f6edc600f362f2007d33d6c6723e220a83d - md5: 972f2a7f04b117accc08a11469c2cb6e - depends: - - libarrow-acero 19.0.1.* - - libarrow-dataset 19.0.1.* - - libarrow-substrait 19.0.1.* - - libparquet 19.0.1.* - - pyarrow-core 19.0.1 *_0_* - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 25300 - timestamp: 1739792645286 - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-20.0.0-py310hff52083_0.conda sha256: 8b2496e8c8c775af90ec91226266297bf655d31451a3dabe38568626c211c27a md5: e66347b55094a2cba9551ec4524fd136 @@ -6520,6 +5807,7 @@ packages: - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 license: Apache-2.0 + license_family: APACHE purls: [] size: 25830 timestamp: 1746001231225 @@ -6535,6 +5823,7 @@ packages: - python >=3.11,<3.12.0a0 - python_abi 3.11.* *_cp311 license: Apache-2.0 + license_family: APACHE purls: [] size: 25804 timestamp: 1746000756402 @@ -6554,46 +5843,6 @@ packages: purls: [] size: 25757 timestamp: 1746001175919 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-19.0.1-py310hac404ae_0_cpu.conda - sha256: b5c63e67ebc1ae151e728759f96fc01b818f6b7de0ee62526448bdd9d85caa47 - md5: 08bfbf49d206e2fbcccd7b92d2526a2a - depends: - - __glibc >=2.17,<3.0.a0 - - libarrow 19.0.1.* *cpu - - libgcc >=13 - - libstdcxx >=13 - - libzlib >=1.3.1,<2.0a0 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - constrains: - - numpy >=1.21,<3 - - apache-arrow-proc =*=cpu - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/pyarrow?source=hash-mapping - size: 4672057 - timestamp: 1739792491899 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-19.0.1-py312h01725c0_0_cpu.conda - sha256: b2d397ee72a8e33aa1b2bcaa525b3bfc1dad333a631e668e54bcdcf275b3d69b - md5: 227543d1eef90da786f0c63bd0787839 - depends: - - __glibc >=2.17,<3.0.a0 - - libarrow 19.0.1.* *cpu - - libgcc >=13 - - libstdcxx >=13 - - libzlib >=1.3.1,<2.0a0 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - constrains: - - numpy >=1.21,<3 - - apache-arrow-proc =*=cpu - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/pyarrow?source=hash-mapping - size: 5203933 - timestamp: 1739792285799 - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-20.0.0-py310hac404ae_0_cpu.conda sha256: c96fc4d91fbb1b133e35bdeb3ce96874e0a7a385331b3b7a2c298da9b98180bf md5: 01d158af8c0d9c2abc09a29ac39284a5 @@ -6609,6 +5858,7 @@ packages: - apache-arrow-proc * cpu - numpy >=1.21,<3 license: Apache-2.0 + license_family: APACHE purls: - pkg:pypi/pyarrow?source=hash-mapping size: 4644381 @@ -6628,6 +5878,7 @@ packages: - apache-arrow-proc * cpu - numpy >=1.21,<3 license: Apache-2.0 + license_family: APACHE purls: - pkg:pypi/pyarrow?source=hash-mapping size: 5234860 @@ -6742,12 +5993,12 @@ packages: purls: [] size: 110100 timestamp: 1733195786147 -- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.3-pyh3cfb1c2_0.conda - sha256: 89183785b09ebe9f9e65710057d7c41e9d21d4a9ad05e068850e18669655d5a8 - md5: 3c6f7f8ae9b9c177ad91ccc187912756 +- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.4-pyh3cfb1c2_0.conda + sha256: a522473505ac6a9c10bb304d7338459a406ba22a6d3bb1a355c1b5283553a372 + md5: 8ad3ad8db5ce2ba470c9facc37af00a9 depends: - annotated-types >=0.6.0 - - pydantic-core 2.33.1 + - pydantic-core 2.33.2 - python >=3.9 - typing-extensions >=4.6.1 - typing-inspection >=0.4.0 @@ -6756,11 +6007,11 @@ packages: license_family: MIT purls: - pkg:pypi/pydantic?source=compressed-mapping - size: 306616 - timestamp: 1744192311966 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.1-py310hc1293b2_0.conda - sha256: 76992a2b50b98a43b66be401998b0b71f4bbb3cc0db456309263a604dddff086 - md5: 24460b8a58d6d491be4088ffb5343f4b + size: 306304 + timestamp: 1746632069456 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.2-py310hbcd0ec0_0.conda + sha256: 8da9aed7f21d775a7c91db6c9f95a0e00cae2d132709d5dc608c2e6828f9344b + md5: 6b210a72e9e1b1cb6d30b266b84ca993 depends: - python - typing-extensions >=4.6.0,!=4.7.0 @@ -6773,11 +6024,11 @@ packages: license_family: MIT purls: - pkg:pypi/pydantic-core?source=hash-mapping - size: 1902786 - timestamp: 1743607633470 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.1-py311h687327b_0.conda - sha256: f293f7f2d0fe11c8334b3671944b310c13c1552dbe25ea93043d09bede814cd5 - md5: 778b623dbbec0be25624b5ebd405a0a8 + size: 1892885 + timestamp: 1746625312783 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.2-py311hdae7d1d_0.conda + sha256: b48e5abb6debae4f559b08cdbaf0736c7806adc00c106ced2c98a622b7081d8f + md5: 484d0d62d4b069d5372680309fc5f00c depends: - python - typing-extensions >=4.6.0,!=4.7.0 @@ -6790,11 +6041,11 @@ packages: license_family: MIT purls: - pkg:pypi/pydantic-core?source=hash-mapping - size: 1909591 - timestamp: 1743607639873 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.1-py312h3b7be25_0.conda - sha256: 281dc40103c324309bf62cf9ed861f38e949b8b1da786f25e5ad199a86a67a6d - md5: 4767e28fcbf646ffc18ef4021534c415 + size: 1898139 + timestamp: 1746625319478 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.2-py312h680f630_0.conda + sha256: 4d14d7634c8f351ff1e63d733f6bb15cba9a0ec77e468b0de9102014a4ddc103 + md5: cfbd96e5a0182dfb4110fc42dda63e57 depends: - python - typing-extensions >=4.6.0,!=4.7.0 @@ -6807,8 +6058,8 @@ packages: license_family: MIT purls: - pkg:pypi/pydantic-core?source=hash-mapping - size: 1900701 - timestamp: 1743607634677 + size: 1890081 + timestamp: 1746625309715 - conda: https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.15.4-pyhd8ed1ab_0.conda sha256: 5ec877142ded763061e114e787a4e201c2fb3f0b1db2f04ace610a1187bb34ae md5: c7c50dd5192caa58a05e6a4248a27acb @@ -7102,28 +6353,6 @@ packages: purls: [] size: 6974 timestamp: 1745258864549 -- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-7_cp312.conda - build_number: 7 - sha256: a1bbced35e0df66cc713105344263570e835625c28d1bdee8f748f482b2d7793 - md5: 0dfcdc155cf23812a0c9deada86fb723 - constrains: - - python 3.12.* *_cpython - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 6872 - timestamp: 1743483197238 -- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.10-7_cp310.conda - build_number: 7 - sha256: 1316c66889313d9caebcfa5d5e9e6af25f8ba09396fc1bc196a08a3febbbabb8 - md5: 44e871cba2b162368476a84b8d040b6c - constrains: - - python 3.10.* *_cpython - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 6974 - timestamp: 1745258864549 - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.11-7_cp311.conda build_number: 7 sha256: 705d06b15c497b585d235e7e87f6c893ffe5fbfdb3326e376e56c842879e0a09 @@ -7146,88 +6375,6 @@ packages: purls: [] size: 6971 timestamp: 1745258861359 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.6.0-cpu_mkl_py310_h8ec2884_104.conda - sha256: e5fa4d701e50de1e7db15b19225d04cab0b865e57866e28e2904a328577e508a - md5: df91ebc9c16c4332750f739f4b8b6d37 - depends: - - __glibc >=2.17,<3.0.a0 - - _openmp_mutex * *_llvm - - _openmp_mutex >=4.5 - - filelock - - fsspec - - jinja2 - - libabseil * cxx17* - - libabseil >=20250127.1,<20250128.0a0 - - libblas * *mkl - - libcblas >=3.9.0,<4.0a0 - - libgcc >=13 - - libprotobuf >=5.29.3,<5.29.4.0a0 - - libstdcxx >=13 - - libtorch 2.6.0 cpu_mkl_hf6ddc5a_104 - - libuv >=1.50.0,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - llvm-openmp >=20.1.2 - - mkl >=2024.2.2,<2025.0a0 - - networkx - - numpy >=1.19,<3 - - optree >=0.13.0 - - pybind11 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - - setuptools <76 - - sleef >=3.8,<4.0a0 - - sympy >=1.13.1,!=1.13.2 - - typing_extensions >=4.10.0 - constrains: - - pytorch-cpu 2.6.0 - - pytorch-gpu <0.0a0 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/torch?source=hash-mapping - size: 24590093 - timestamp: 1744241362723 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.6.0-cpu_mkl_py312_h6a7998d_104.conda - sha256: 9cfa6f8af544d0ed03e53dabe8ff13806ceee5541ee9c2fb0783c9452554483b - md5: 597f34f673a0d42cb766ab563cf27fbe - depends: - - __glibc >=2.17,<3.0.a0 - - _openmp_mutex * *_llvm - - _openmp_mutex >=4.5 - - filelock - - fsspec - - jinja2 - - libabseil * cxx17* - - libabseil >=20250127.1,<20250128.0a0 - - libblas * *mkl - - libcblas >=3.9.0,<4.0a0 - - libgcc >=13 - - libprotobuf >=5.29.3,<5.29.4.0a0 - - libstdcxx >=13 - - libtorch 2.6.0 cpu_mkl_hf6ddc5a_104 - - libuv >=1.50.0,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - llvm-openmp >=20.1.2 - - mkl >=2024.2.2,<2025.0a0 - - networkx - - numpy >=1.19,<3 - - optree >=0.13.0 - - pybind11 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - - setuptools <76 - - sleef >=3.8,<4.0a0 - - sympy >=1.13.1,!=1.13.2 - - typing_extensions >=4.10.0 - constrains: - - pytorch-cpu 2.6.0 - - pytorch-gpu <0.0a0 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/torch?source=hash-mapping - size: 28163759 - timestamp: 1744240549514 - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.7.0-cpu_mkl_py310_h8ec2884_100.conda sha256: a91d20ad4a3246ce8e8b90c3498b145b85c30226e3e37e505012d725541b9872 md5: 80db30658f13a31389c00b26bb494555 @@ -7351,18 +6498,6 @@ packages: - pkg:pypi/torch?source=hash-mapping size: 28982129 timestamp: 1746260259104 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-cpu-2.6.0-cpu_mkl_hc60beec_104.conda - sha256: dc1f4091b9698c4642a48381c2055c92c6c13b78fd0146fe584d2f1e73437fc7 - md5: ccdc8b6254649dd4ed448b94fe80070e - depends: - - pytorch 2.6.0 cpu_mkl*104 - track_features: - - pytorch-cpu - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 50739 - timestamp: 1744243048904 - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-cpu-2.7.0-cpu_mkl_hc60beec_100.conda sha256: f972760cda01fff159c56925036b8e6e2c39a8a8414b973ab5303912b3ff3f3a md5: 20b3051f55ad823a27818dfa46a41c8f @@ -7375,10 +6510,10 @@ packages: purls: [] size: 47101 timestamp: 1746261172719 -- pypi: https://files.pythonhosted.org/packages/82/ff/5701f79317a1a03e5ee8a1bf48e7273a8445162a2774e51fc06411a67c89/pytorch_lightning-2.5.1-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/de/a9/e14821cfaf08e8d78185cca0477c9d3a62bafe1b4b530100f7b66bb1f7bb/pytorch_lightning-2.5.1.post0-py3-none-any.whl name: pytorch-lightning - version: 2.5.1 - sha256: 0bfbbd3ad80281d3062f5d8029a759093bd969ff8162e7c1fe2918552b269f9e + version: 2.5.1.post0 + sha256: 873fb21392c8b79908218f5ca8f65bd835439216e52550c36ff55d849e99c93e requires_dist: - torch>=2.1.0 - tqdm>=4.57.0 @@ -7634,6 +6769,16 @@ packages: - docutils - rich>=12.0.0 requires_python: '>=3.6' +- conda: https://conda.anaconda.org/conda-forge/noarch/roman-numerals-py-3.1.0-pyhd8ed1ab_0.conda + sha256: 0116a9ca9bf3487e18979b58b2f280116dba55cb53475af7a6d835f7aa133db8 + md5: 5f0f24f8032c2c1bb33f59b75974f5fc + depends: + - python >=3.9 + license: 0BSD OR CC0-1.0 + purls: + - pkg:pypi/roman-numerals-py?source=hash-mapping + size: 13348 + timestamp: 1740240332327 - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.24.0-py312h3b7be25_0.conda sha256: 10dad6a9d40e7c1856cb1f5f941ea06500610e13ee6ec4961fba59fccbaa0dc9 md5: 5f5c19cbbd3526fad9c8ca0cca3e7346 @@ -7650,40 +6795,6 @@ packages: - pkg:pypi/rpds-py?source=hash-mapping size: 394023 timestamp: 1743037659894 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.6-py310h01b0e6a_0.conda - sha256: 1c2f7a2aa27bd5dd2b6d83d87d26d2d9ba28505202540accd23c20beafb786b0 - md5: 7d7e9696e7e236aa48ab0990b70dbbc6 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - constrains: - - __glibc >=2.17 - license: MIT - license_family: MIT - purls: - - pkg:pypi/ruff?source=hash-mapping - size: 9151205 - timestamp: 1744952718116 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.6-py312h286b59f_0.conda - sha256: 786bb2692013c3fd669c9f19850126efbd6f008b7ea855599b132a86a4b6a75e - md5: 48cd80e835e8f980f08e603aee31537a - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - constrains: - - __glibc >=2.17 - license: MIT - license_family: MIT - purls: - - pkg:pypi/ruff?source=hash-mapping - size: 9153124 - timestamp: 1744952807296 - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.8-py310h01b0e6a_0.conda sha256: 0551e3dcb322633f93fc7a56f992834927b91166a63b0eed55c84f1ddc8eaa84 md5: 25d19410ced9a448aa24b60e516317cc @@ -7735,21 +6846,9 @@ packages: - pkg:pypi/ruff?source=compressed-mapping size: 9176542 timestamp: 1746123683298 -- conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.16-hba75a32_1.conda - sha256: ff4d22984d354cc0c966e85a0db47e45df2d55614bec0dda2119bdd85fb2be72 - md5: 71ba0cc1e20a573588ea8a4540b56f5b - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - openssl >=3.4.1,<4.0a0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 352907 - timestamp: 1743805258946 -- conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.17-hba75a32_0.conda - sha256: 6d6109b59f360ffa6a87cc21528b6baff754dcbf517025330c17e80bcdc025d6 - md5: dbb899164b5451c34969e67a35ca17a9 +- conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.18-h763c568_1.conda + sha256: 6d0399775ef7841914e99aed5b7330ce3d9d29a4219d40b1b94fd9a50d902a73 + md5: 0bf75253494a85260575e23c3b29db90 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -7757,8 +6856,8 @@ packages: license: Apache-2.0 license_family: Apache purls: [] - size: 348633 - timestamp: 1744972730362 + size: 353577 + timestamp: 1746350509891 - conda: https://conda.anaconda.org/bioconda/linux-64/samtools-1.21-h96c455f_1.tar.bz2 sha256: 2a22cd528c5f8448398a6ca77154bed39081cee521f95ac704af4df64114304f md5: 0ff9d5d48561198378ad3cb34ce830bf @@ -7797,17 +6896,17 @@ packages: - pkg:pypi/setuptools?source=hash-mapping size: 777736 timestamp: 1740654030775 -- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-79.0.0-pyhff2d567_0.conda - sha256: b0415e169a4b39ebe4fbbbb224a45607dcceb77162761dfd8bb94533a6ff9f97 - md5: 36c8697843eb7573fe3dde0e36193a06 +- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.1.0-pyhff2d567_0.conda + sha256: 777d34ed359cedd5a5004c930077c101bb3b70e5fbb04d29da5058d75b0ba487 + md5: f6f72d0837c79eaec77661be43e8a691 depends: - python >=3.9 license: MIT license_family: MIT purls: - pkg:pypi/setuptools?source=compressed-mapping - size: 787746 - timestamp: 1745258095343 + size: 778484 + timestamp: 1746085063737 - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_1.conda sha256: 0557c090913aa63cdbe821dbdfa038a321b488e22bc80196c4b3b1aace4914ef md5: 7c3c2a0f3ebdea2bbc35538d162b43bf @@ -7929,20 +7028,20 @@ packages: - pkg:pypi/sortedcontainers?source=hash-mapping size: 28657 timestamp: 1738440459037 -- conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda - sha256: 54ae221033db8fbcd4998ccb07f3c3828b4d77e73b0c72b18c1d6a507059059c - md5: 3f144b2c34f8cb5a9abd9ed23a39c561 +- conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.7-pyhd8ed1ab_0.conda + sha256: 7518506cce9a736042132f307b3f4abce63bf076f5fb07c1f4e506c0b214295a + md5: fb32097c717486aa34b38a9db57eb49e depends: - - python >=3.8 + - python >=3.9 license: MIT license_family: MIT purls: - pkg:pypi/soupsieve?source=hash-mapping - size: 36754 - timestamp: 1693929424267 -- conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-8.1.3-pyhd8ed1ab_1.conda - sha256: 3228eb332ce159f031d4b7d2e08117df973b0ba3ddcb8f5dbb7f429f71d27ea1 - md5: 1a3281a0dc355c02b5506d87db2d78ac + size: 37773 + timestamp: 1746563720271 +- conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-8.2.3-pyhd8ed1ab_0.conda + sha256: 995f58c662db0197d681fa345522fd9e7ac5f05330d3dff095ab2f102e260ab0 + md5: f7af826063ed569bb13f7207d6f949b0 depends: - alabaster >=0.7.14 - babel >=2.13 @@ -7952,8 +7051,9 @@ packages: - jinja2 >=3.1 - packaging >=23.0 - pygments >=2.17 - - python >=3.10 + - python >=3.11 - requests >=2.30.0 + - roman-numerals-py >=1.0.0 - snowballstemmer >=2.2 - sphinxcontrib-applehelp >=1.0.7 - sphinxcontrib-devhelp >=1.0.6 @@ -7961,13 +7061,12 @@ packages: - sphinxcontrib-jsmath >=1.0.1 - sphinxcontrib-qthelp >=1.0.6 - sphinxcontrib-serializinghtml >=1.1.9 - - tomli >=2.0 license: BSD-2-Clause license_family: BSD purls: - pkg:pypi/sphinx?source=hash-mapping - size: 1387076 - timestamp: 1733754175386 + size: 1424416 + timestamp: 1740956642838 - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-autobuild-2024.10.3-pyhd8ed1ab_1.conda sha256: 8efa48241f074da54552409d25359a1abfdc08e94e12ecbe6f90d9d3eba9ac21 md5: cd457248c6185c0e3ba2137500fcbc0c @@ -7985,18 +7084,18 @@ packages: - pkg:pypi/sphinx-autobuild?source=hash-mapping size: 17305 timestamp: 1736585842606 -- conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-autodoc-typehints-3.0.1-pyhd8ed1ab_0.conda - sha256: 0f93bb75a41918433abc8d8d80ef99d7fd8658d5ba34da3c5d8f707cb6bb3f46 - md5: 6ad405d62c8de3792608a27b7e085e15 +- conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-autodoc-typehints-3.2.0-pyhd8ed1ab_0.conda + sha256: e9923b7d282ac8840ebe9e2665685a337698f4a93e6eb3c81dc18fe223c1bb57 + md5: 6162f3f1cf914d08b80db65ed2d51871 depends: - - python >=3.10 - - sphinx >=8.1.3 + - python >=3.11 + - sphinx >=8.2 license: MIT license_family: MIT purls: - pkg:pypi/sphinx-autodoc-typehints?source=hash-mapping - size: 24055 - timestamp: 1737099757820 + size: 24745 + timestamp: 1745624912567 - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-book-theme-1.1.4-pyh29332c3_0.conda sha256: 78581f1ba538186fc4129191a8db4ee7798382b6b4a1a0c55dedb437da1a9fd8 md5: f3d3f4e7e2c9198e88cd524633665081 @@ -8107,24 +7206,9 @@ packages: license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/starlette?source=compressed-mapping + - pkg:pypi/starlette?source=hash-mapping size: 62335 timestamp: 1744661396275 -- conda: https://conda.anaconda.org/conda-forge/noarch/sympy-1.13.3-pyh2585a3b_105.conda - sha256: 929d939c5a8bcdc10a17501890918da68cf14a5883b36fddf77b8f0fbf040be2 - md5: 254cd5083ffa04d96e3173397a3d30f4 - depends: - - __unix - - cpython - - gmpy2 >=2.0.8 - - mpmath >=0.19 - - python >=3.9 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/sympy?source=hash-mapping - size: 4523617 - timestamp: 1736248315124 - conda: https://conda.anaconda.org/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda sha256: 09d3b6ac51d437bc996ad006d9f749ca5c645c1900a854a6c8f193cbd13f03a8 md5: 8c09fac3785696e1c477156192d64b91 @@ -8188,26 +7272,6 @@ packages: - pkg:pypi/termcolor?source=hash-mapping size: 12665 timestamp: 1733754731291 -- conda: https://conda.anaconda.org/conda-forge/noarch/textual-3.1.1-pyhd8ed1ab_0.conda - sha256: f926dce75f0f3e304514d89bb4b339aafc88c2cd3af30e881bc9b5f2d664f2b4 - md5: 20f13c491232f6c7750ec81b90ac430f - depends: - - linkify-it-py >=1,<3 - - markdown-it-py >=2.1.0 - - mdit-py-plugins - - platformdirs >=3.6.0,<5 - - python >=3.9,<4.0.0 - - rich >=13.3.3 - - typing-extensions >=4.4.0,<5.0.0 - - typing_extensions >=4.4.0,<5.0.0 - constrains: - - tree_sitter_languages =1.10.2 - - tree_sitter >=0.23.0 - license: MIT - purls: - - pkg:pypi/textual?source=hash-mapping - size: 472881 - timestamp: 1744485553172 - conda: https://conda.anaconda.org/conda-forge/noarch/textual-3.2.0-pyhd8ed1ab_0.conda sha256: c90cba7c481b6d01ba862961963c47c2b4551922f4bdb986d459364ceaa0bd5d md5: e830460050a25c31dc2adde98d74f2c1 @@ -8224,6 +7288,7 @@ packages: - tree_sitter >=0.23.0 - tree_sitter_languages =1.10.2 license: MIT + license_family: MIT purls: - pkg:pypi/textual?source=hash-mapping size: 473930 @@ -8484,19 +7549,6 @@ packages: - pkg:pypi/typeguard?source=hash-mapping size: 35184 timestamp: 1739732461765 -- conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.15.2-pyhff008b6_0.conda - sha256: fa6eeb42e3bddff74126dd61b01b21a3f4f4791368e93bc5a5775563542b2d4e - md5: 1152565b06e3dc27794c3c11f1050005 - depends: - - typer-slim-standard ==0.15.2 h801b22e_0 - - python >=3.9 - - python - license: MIT - license_family: MIT - purls: - - pkg:pypi/typer?source=hash-mapping - size: 76158 - timestamp: 1740697495168 - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.15.3-pyhf21524f_0.conda sha256: 8cd849ceb5e2f50481b1f30f083ee134fac706a56d7879c61248f0aadad4ea5b md5: b4bed8eb8dd4fe076f436e5506d31673 @@ -8510,24 +7562,6 @@ packages: - pkg:pypi/typer?source=compressed-mapping size: 77044 timestamp: 1745886712803 -- conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.15.2-pyh29332c3_0.conda - sha256: c094713560bfacab0539c863010a5223171d9980cbd419cc799e474ae15aca08 - md5: 7c8d9609e2cfe08dd7672e10fe7e7de9 - depends: - - python >=3.9 - - click >=8.0.0 - - typing_extensions >=3.7.4.3 - - python - constrains: - - typer 0.15.2.* - - rich >=10.11.0 - - shellingham >=1.3.0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/typer-slim?source=hash-mapping - size: 45866 - timestamp: 1740697495167 - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.15.3-pyh29332c3_0.conda sha256: 1768d1d9914d4237b0a1ae8bcb30dace44ac80b9ab1516a2d429d0b27ad70ab9 md5: 20c0f2ae932004d7118c172eeb035cea @@ -8546,18 +7580,6 @@ packages: - pkg:pypi/typer-slim?source=compressed-mapping size: 46152 timestamp: 1745886712803 -- conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.2-h801b22e_0.conda - sha256: 79b6b34e90e50e041908939d53053f69285714b0082a0370fba6ab3b38315c8d - md5: ea164fc4e03f61f7ff3c1166001969af - depends: - - typer-slim ==0.15.2 pyh29332c3_0 - - rich - - shellingham - license: MIT - license_family: MIT - purls: [] - size: 5409 - timestamp: 1740697495168 - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.3-h1a15894_0.conda sha256: 72f77e8e61b28058562f2782cf32ff84f14f6c11c6cea7a3fe2839d34654ea45 md5: 120216d3a2e51dfbb87bbba173ebf210 @@ -8698,22 +7720,22 @@ packages: - pkg:pypi/urllib3?source=hash-mapping size: 100791 timestamp: 1744323705540 -- conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.7.2-h2f11bb8_1.conda - sha256: b24d8fb5a1f279d78857ba7ec52515aec6263c42904106fa03efb4032cad8bc9 - md5: b295355ea9f314e28819af3bdc8b3f37 +- conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.7.3-h2f11bb8_0.conda + sha256: 89765e550eed3328f1aadd2945aa66d5df66c06d71e0938f7c1012c57ff4c266 + md5: 11e7b5335fecf52323d8120677644b34 depends: - - __glibc >=2.17,<3.0.a0 - libstdcxx >=13 - libgcc >=13 + - __glibc >=2.17,<3.0.a0 constrains: - __glibc >=2.17 license: Apache-2.0 OR MIT purls: [] - size: 13646786 - timestamp: 1746049812291 -- conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.34.1-pyh31011fe_0.conda - sha256: 12fff3fc66d0214db3b68388f9b543c0f32a74ab69bbc48f926287b76f84b4ba - md5: b16572c04a572377c4010aae0b16b1b7 + size: 13869200 + timestamp: 1746660576712 +- conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.34.2-pyh31011fe_0.conda + sha256: d6c504920400354a89e597c5d355288e77481d638cca0489fea3530167895f15 + md5: 7e9f164470d693a5d2537c6b2ce1d9ea depends: - __unix - click >=7.0 @@ -8726,20 +7748,19 @@ packages: - pkg:pypi/uvicorn?source=hash-mapping size: 48985 timestamp: 1745173533667 -- conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.30.0-pyhd8ed1ab_0.conda - sha256: 1dbb24b144f7b8400b30cca760cdee1b7de61716cd7f06d7ea82b741645823ce - md5: c0e0b4a09aa5a698a1bdd4ebfe28be38 +- conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.31.2-pyhd8ed1ab_0.conda + sha256: 763dc774200b2eebdf5437b112834c5455a1dd1c9b605340696950277ff36729 + md5: c0600c1b374efa7a1ff444befee108ca depends: - distlib >=0.3.7,<1 - filelock >=3.12.2,<4 - platformdirs >=3.9.1,<5 - python >=3.9 license: MIT - license_family: MIT purls: - pkg:pypi/virtualenv?source=hash-mapping - size: 3635535 - timestamp: 1743474070226 + size: 4133755 + timestamp: 1746781585998 - conda: https://conda.anaconda.org/conda-forge/linux-64/watchfiles-1.0.5-py312h12e396e_0.conda sha256: b97b961190e2f0d4bc4e26d6a58cce847aa353a292f1fec194e9ecca25793101 md5: 731f9ed51e7198ec91c4b9d7899e881c @@ -8851,21 +7872,6 @@ packages: purls: [] size: 92286 timestamp: 1727963153079 -- conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py310ha75aee5_1.conda - sha256: 96f96336f76443f5efb05f8a7232cc62f8fff969c27d03aa4aae181745f6f961 - md5: 0316e8d0e00c00631a6de89207db5b09 - depends: - - __glibc >=2.17,<3.0.a0 - - cffi >=1.11 - - libgcc >=13 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/zstandard?source=hash-mapping - size: 720871 - timestamp: 1741853413225 - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py310ha75aee5_2.conda sha256: f9b76c2f8a0f96e656843553272e547170182f5b8aba1a6bcba28f7611d87c23 md5: f9254b5b0193982416b91edcb4b2676f @@ -8896,21 +7902,6 @@ packages: - pkg:pypi/zstandard?source=hash-mapping size: 731883 timestamp: 1745869796301 -- conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312h66e93f0_1.conda - sha256: b4fd6bd1cb87a183a8bbe85b4e87a1e7c51473309d0d82cd88d38fb021bcf41e - md5: d28b82fcc8d1b462b595af4b15a6cdcf - depends: - - __glibc >=2.17,<3.0.a0 - - cffi >=1.11 - - libgcc >=13 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/zstandard?source=hash-mapping - size: 731658 - timestamp: 1741853415477 - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312h66e93f0_2.conda sha256: ff62d2e1ed98a3ec18de7e5cf26c0634fd338cb87304cf03ad8cbafe6fe674ba md5: 630db208bc7bbb96725ce9832c7423bb From 14e90b49cb22423d087afc205df6f1724662666e Mon Sep 17 00:00:00 2001 From: d-laub Date: Fri, 9 May 2025 10:44:44 -0700 Subject: [PATCH 32/53] test: remove return indices option --- tests/dataset/test_dataset.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/dataset/test_dataset.py b/tests/dataset/test_dataset.py index d4de0c80..ff927afc 100644 --- a/tests/dataset/test_dataset.py +++ b/tests/dataset/test_dataset.py @@ -31,7 +31,7 @@ def seqs_annot(): @fixture(scope="session") @parametrize_with_cases("ds", prefix="ds_", cases=".") @parametrize_with_cases("seq_type", prefix="seqs_", cases=".") -def dataset(ds: gvl.Dataset, seq_type, return_indices: bool): +def dataset(ds: gvl.Dataset, seq_type): return ds.with_seqs(seq_type) From 86947f6ad7624f50ac93da3ae26a0b50f08b3f47 Mon Sep 17 00:00:00 2001 From: d-laub Date: Fri, 9 May 2025 10:46:05 -0700 Subject: [PATCH 33/53] test: more precise types --- tests/dataset/test_dataset.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/dataset/test_dataset.py b/tests/dataset/test_dataset.py index ff927afc..65229096 100644 --- a/tests/dataset/test_dataset.py +++ b/tests/dataset/test_dataset.py @@ -1,4 +1,5 @@ from pathlib import Path +from typing import Literal import genvarloader as gvl import numpy as np @@ -31,7 +32,7 @@ def seqs_annot(): @fixture(scope="session") @parametrize_with_cases("ds", prefix="ds_", cases=".") @parametrize_with_cases("seq_type", prefix="seqs_", cases=".") -def dataset(ds: gvl.Dataset, seq_type): +def dataset(ds: gvl.Dataset, seq_type: Literal["reference", "haplotypes", "annotated"]): return ds.with_seqs(seq_type) From 6aee07782f4f427fbf4f92c5a5e26590292c70c4 Mon Sep 17 00:00:00 2001 From: d-laub Date: Fri, 9 May 2025 11:00:40 -0700 Subject: [PATCH 34/53] fix: map contig names appropriately for bounds checking on ds regions + ref --- python/genvarloader/_dataset/_impl.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/python/genvarloader/_dataset/_impl.py b/python/genvarloader/_dataset/_impl.py index 8a3b2451..c5d3ef0e 100644 --- a/python/genvarloader/_dataset/_impl.py +++ b/python/genvarloader/_dataset/_impl.py @@ -24,6 +24,7 @@ from attrs import define, evolve, field from awkward.contents import ListOffsetArray from awkward.index import Index64 +from genoray._utils import ContigNormalizer from loguru import logger from more_itertools import collapse from numpy.typing import NDArray @@ -283,14 +284,20 @@ def open( spliced_bed = None if seqs is not None: + cnorm = ContigNormalizer(seqs.reference.contigs) contig_lengths = dict( zip(seqs.reference.contigs, np.diff(seqs.reference.offsets)) ) + ds_contigs = bed["chrom"].unique().to_list() + normed_contigs = cnorm.norm(ds_contigs) + if any(c is None for c in normed_contigs): + raise ValueError( + "Some regions in the dataset can not be mapped to a contig in the reference genome." + ) + normed_contigs = cast(list[str], normed_contigs) + replacer = {c: contig_lengths[norm_c] for c, norm_c in zip(ds_contigs, normed_contigs)} out_of_bounds = bed.select( - ( - pl.col("chromStart") - >= pl.col("chrom").replace_strict(contig_lengths) - ).any() + (pl.col("chromStart") >= pl.col("chrom").replace_strict(replacer)).any() ).item() if out_of_bounds: logger.warning( From 90b0172ef15ac8db565bb49207a1b475e3eabb06 Mon Sep 17 00:00:00 2001 From: d-laub Date: Sat, 10 May 2025 12:52:47 -0700 Subject: [PATCH 35/53] style: ruff formatting --- python/genvarloader/_dataset/_impl.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/python/genvarloader/_dataset/_impl.py b/python/genvarloader/_dataset/_impl.py index c5d3ef0e..eafe9557 100644 --- a/python/genvarloader/_dataset/_impl.py +++ b/python/genvarloader/_dataset/_impl.py @@ -295,7 +295,10 @@ def open( "Some regions in the dataset can not be mapped to a contig in the reference genome." ) normed_contigs = cast(list[str], normed_contigs) - replacer = {c: contig_lengths[norm_c] for c, norm_c in zip(ds_contigs, normed_contigs)} + replacer = { + c: contig_lengths[norm_c] + for c, norm_c in zip(ds_contigs, normed_contigs) + } out_of_bounds = bed.select( (pl.col("chromStart") >= pl.col("chrom").replace_strict(replacer)).any() ).item() From bbfbfd5ae5e4d77091e6eb615da59e1b49fb32b5 Mon Sep 17 00:00:00 2001 From: d-laub Date: Sat, 10 May 2025 12:53:23 -0700 Subject: [PATCH 36/53] ci: update lockfile --- pixi.lock | 948 ++++++++++-------------------------------------------- 1 file changed, 169 insertions(+), 779 deletions(-) diff --git a/pixi.lock b/pixi.lock index 227545bd..c196ebcc 100644 --- a/pixi.lock +++ b/pixi.lock @@ -17,18 +17,18 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/awkward-2.8.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/awkward-cpp-45-py312ha6dbfeb_100.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-hf4d4f31_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h66f1c83_6.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.0-hada3f3f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.2-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.1-hc2d532b_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-h9312af0_8.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.0-hc373b34_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.1-hc373b34_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.19.0-h756d8c7_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.0-h2d6f568_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.17-h3b40de3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.0-h034c9a0_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.17-h73c4702_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.3-hc2d532b_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.7-hc2d532b_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.5-h7c1a40b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.5-h5e5e39d_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-h7cc6b5f_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda @@ -47,7 +47,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.6.3-py312h7900ff3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.7.0-py312h7900ff3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.0-py312h178313f_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/cyvcf2-0.31.1-py312h68a07e8_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/decli-0.6.2-pyhd8ed1ab_1.conda @@ -144,7 +144,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/makefun-1.15.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py312h178313f_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.3-py312h6ab59e4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.4-py312h6ab59e4_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.2-py312hba68c3b_0.conda @@ -203,7 +203,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.0.0-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.8-py312h286b59f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.9-py312h286b59f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.18-h763c568_1.conda - conda: https://conda.anaconda.org/bioconda/linux-64/samtools-1.21-h96c455f_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.1.0-pyhff2d567_0.conda @@ -254,619 +254,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/fd/bc/cc4e3dbc5e7992398dcb7a8eda0cbcf4fb792a0cdb93f857b478bf3cf884/rich_rst-1.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f5/a1/6de4f7bf0a7704a200de5d0fbaf4d333fd5ca56b9a3e6f3a3ad05e99ba98/seqpro-0.3.2-cp39-abi3-manylinux_2_28_x86_64.whl dev: - channels: - - url: https://conda.anaconda.org/conda-forge/ - - url: https://conda.anaconda.org/bioconda/ - indexes: - - https://pypi.org/simple - packages: - linux-64: - - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-3_kmp_llvm.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/_x86_64-microarch-level-1-2_x86_64.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.5.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/awkward-2.8.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/awkward-cpp-45-py310h0900883_100.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h094d708_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.8.9-hada3f3f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.2-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.1-hc2d532b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-h8170a11_5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.9.5-hca9d837_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.18.0-h7b13e6b_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.12.3-h773eac8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.15-h46af1f8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.3-hc2d532b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.5-hc2d532b_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.4-h7d42c6f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-h5b777a2_5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.13.0-h3cf044e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-common-cpp-12.8.0-h736e048_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-files-datalake-cpp-12.12.0-ha633028_1.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/bcftools-1.21-h3a4d415_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py310hf71b8c6_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2025.1.31-hbcca054_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.1.31-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py310h8deb56e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/commitizen-4.6.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.0-py310h89163eb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.10.17-py310hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/cyvcf2-0.31.1-py310h0195497_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/decli-0.6.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/decopatch-1.4.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/einops-0.8.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/elfutils-0.192-h7f4e02f_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.18.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.3.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hbabe93e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gmpy2-2.1.5-py310he8512ff_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.8.9-h5746830_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gsl-2.7-he838d99_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/htslib-1.21-h566b1c6_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.3-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/icecream-2.1.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.9-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.6.1-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.4.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250127.1-cxx17_hbbce691_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h4585015_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-19.0.1-h27f8bab_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-19.0.1-hcb10f89_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-19.0.1-hcb10f89_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-19.0.1-h1bed206_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.23.1-h8e693c7_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-31_hfdb39a5_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-31_h372d94f_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.13.0-h332b0f4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.22-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.0-h5888daf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h767d61c_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-0.23.1-h5888daf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.36.0-hc4361e1_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.36.0-h0121fbd_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.71.0-he753a82_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.11.2-default_h0d58e46_1001.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h4ce23a2_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libidn2-2.3.8-ha4ef2c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-31_hc41d3b0_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libmicrohttpd-1.0.1-hbc5bc17_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.20.0-hd1b1c89_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.20.0-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-19.0.1-h081d1f1_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h501fc15_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2024.07.02-hba17884_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.1-hee588c1_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-h8f9b012_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libtasn1-4.20.0-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.21.0-h0e7cc3e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.6.0-cpu_mkl_hf6ddc5a_104.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libunistring-0.9.10-h7f98852_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.6.2-h9c3ff4c_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.10.0-h4c51ac1_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.50.0-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.7-h81593ed_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.0.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-20.1.3-h024ca30_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.44.0-py310h1a6248f_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/loguru-0.7.2-py310hff52083_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-hd590300_1001.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/makefun-1.15.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py310h89163eb_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.3-py310hdb7682f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.1-py310hfc232cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2024.2.2-ha957f24_16.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.6.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/mpc-1.3.1-h24ddda3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.1-h90cbb55_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/ncls-0.0.68-py310h1fe012e_5.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.9.1-h7ab15ed_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.4.2-pyh267e887_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/nlohmann_json-3.12.0-h3f2d84a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numba-0.61.2-py310h699fe88_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.4-py310hefbff90_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.0-h7b32b05_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/optree-0.15.0-py310h3788b33_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.1.1-h17f744e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/p11-kit-0.24.1-hc5aa10d_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py310h5eaa309_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-0.23.1-hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-base-0.23.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.17.2-h58526e2_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.7-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/plink2-2.0.0a.6.9-h9948957_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/polars-1.26.0-py310hc556931_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pooch-1.8.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.2.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/prometheus-cpp-1.3.0-ha5d0236_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.36-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.36-hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/py-cpuinfo-9.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/py-spy-0.4.0-h4c5a871_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-19.0.1-py310hff52083_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-19.0.1-py310hac404ae_0_cpu.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/pybigwig-0.3.24-py310h95e9690_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-2.13.6-pyh1ec8472_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-2.13.6-pyh415d2e4_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.3-pyh3cfb1c2_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.1-py310hc1293b2_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/bioconda/noarch/pyranges-0.1.4-pyhdfd78af_0.tar.bz2 - - conda: https://conda.anaconda.org/bioconda/linux-64/pysam-0.23.0-py310h64e62c9_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-benchmark-5.1.0-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cases-3.8.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-6.1.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.10.17-hd6af730_0_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.10-6_cp310.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.6.0-cpu_mkl_py310_h8ec2884_104.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-cpu-2.6.0-cpu_mkl_hc60beec_104.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py310h89163eb_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/questionary-2.1.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/re2-2024.07.02-h9925aae_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.0.0-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.6-py310h01b0e6a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.16-hba75a32_1.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/samtools-1.21-h96c455f_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.8.2-pyhff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/sleef-3.8-h1b44611_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.1-h8bd8927_1.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/sorted_nearest-0.0.39-py310h1fe012e_5.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sympy-1.13.3-pyh2585a3b_105.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.13.0-hceb3a55_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/termcolor-2.5.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/textual-3.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.4.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.15.2-pyhff008b6_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.15.2-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.2-h801b22e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.13.2-h0e9735f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.13.2-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_inspect-0.9.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-1.0.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py310h3788b33_5.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.7.2-h2f11bb8_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.30.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py310ha75aee5_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda - - pypi: https://files.pythonhosted.org/packages/2d/ea/d6230cc9772edca0fd8c91638dc1c2e2def09b9a22cfabe6532906e96aea/basenji2_pytorch-0.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/28/53/21f7b97e82772caa61541348427f42435120b32961c92d16f9c8ce9757d6/cslug-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c8/14/299f99ce0fde4985cc5ba6f2258c624a5b9bbc547c3d243d99919ca53761/cyclopts-3.14.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d5/7c/e9fcff7623954d86bdc17782036cbf715ecab1bec4847c008557affe1ca8/docstring_parser-0.16-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f3/ef/2a6068f6ef0e39c4fc1d0e1ce5e02f105e1b51920655a7a43595668db7ca/genoray-0.10.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ac/8e/0eccb528701273640dd4f13678a0c1352176166aecd1ee7f4fa29355132b/hirola-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/1a/c1/31b3184cba7b257a4a3b5ca5b88b9204ccb7aa02fe3c992280899293ed54/lightning_utilities-0.14.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a9/a6/aa38bddc9f8d90e5ce14023f06ccbf642ab5d507da1ffafb031c0f332dc6/numerary-0.4.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/55/20/93ef95a37e1aa3c3dd2ca1cd1cba8c8849823311d034921c0ec38949ffad/Pgenlib-0.92.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/5b/bc/246f452431c592a2a424050e8bb9ccf494fb47613fd97c912f4d573a5e3b/phantom_types-3.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/82/ff/5701f79317a1a03e5ee8a1bf48e7273a8445162a2774e51fc06411a67c89/pytorch_lightning-2.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fd/bc/cc4e3dbc5e7992398dcb7a8eda0cbcf4fb792a0cdb93f857b478bf3cf884/rich_rst-1.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f5/a1/6de4f7bf0a7704a200de5d0fbaf4d333fd5ca56b9a3e6f3a3ad05e99ba98/seqpro-0.3.2-cp39-abi3-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/72/25/973bd6128381951b23cdcd8a9870c6dcfc5606cb864df8eabd82e529f9c1/torchinfo-1.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e0/ee/4d0a7213a6f412afb3483031009a3b970dd7bed3be24de95ab04fba1c05a/torchmetrics-1.7.1-py3-none-any.whl - docs: - channels: - - url: https://conda.anaconda.org/conda-forge/ - - url: https://conda.anaconda.org/bioconda/ - indexes: - - https://pypi.org/simple - packages: - linux-64: - - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-3_kmp_llvm.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/_x86_64-microarch-level-1-2_x86_64.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.9.0-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.5.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/awkward-2.8.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/awkward-cpp-45-py312ha6dbfeb_100.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h094d708_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.8.9-hada3f3f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.2-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.1-hc2d532b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-h8170a11_5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.9.5-hca9d837_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.18.0-h7b13e6b_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.12.3-h773eac8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.15-h46af1f8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.3-hc2d532b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.5-hc2d532b_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.4-h7d42c6f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-h5b777a2_5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.13.0-h3cf044e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-common-cpp-12.8.0-h736e048_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-files-datalake-cpp-12.12.0-ha633028_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/bcftools-1.21-h3a4d415_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.13.4-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.2.0-pyh29332c3_4.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.2.0-h82add2a_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py312h2ec8cdc_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2025.1.31-hbcca054_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.1.31-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/commitizen-4.6.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.0-py312h178313f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.10-py312hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/cyvcf2-0.31.1-py312h68a07e8_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.14-py312h2ec8cdc_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/decli-0.6.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/decopatch-1.4.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/einops-0.8.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/elfutils-0.192-h7f4e02f_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.18.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.3.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hbabe93e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gmpy2-2.2.1-py312h7201bc8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.8.9-h5746830_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gsl-2.7-he838d99_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/htslib-1.21-h566b1c6_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.3-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/icecream-2.1.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.9-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.6.1-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.5-pyh3099207_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-8.35.0-pyh907856f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.4.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.23.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2024.10.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.7.2-pyh31011fe_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.14-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250127.1-cxx17_hbbce691_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h4585015_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-20.0.0-hf00d7f4_1_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-20.0.0-hcb10f89_1_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-20.0.0-hcb10f89_1_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-20.0.0-h1bed206_1_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.23.1-h8e693c7_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-31_hfdb39a5_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-31_h372d94f_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.13.0-h332b0f4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.22-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.0-h5888daf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h767d61c_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-0.23.1-h5888daf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.36.0-hc4361e1_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.36.0-h0121fbd_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.71.0-he753a82_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.11.2-default_h0d58e46_1001.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h4ce23a2_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libidn2-2.3.8-ha4ef2c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-31_hc41d3b0_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libmicrohttpd-1.0.1-hbc5bc17_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.20.0-hd1b1c89_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.20.0-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-20.0.0-h081d1f1_1_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h501fc15_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2024.07.02-hba17884_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.1-hee588c1_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-h8f9b012_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libtasn1-4.20.0-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.21.0-h0e7cc3e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.6.0-cpu_mkl_hf6ddc5a_104.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libunistring-0.9.10-h7f98852_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.6.2-h9c3ff4c_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.10.0-h4c51ac1_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.50.0-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.7-h81593ed_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.0.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-20.1.3-h024ca30_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.44.0-py312h374181b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/loguru-0.7.3-pyh707e725_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-hd590300_1001.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/makefun-1.15.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py312h178313f_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.3-py312h6ab59e4_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.1-py312hba68c3b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.1.3-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2024.2.2-ha957f24_16.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.6.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/mpc-1.3.1-h24ddda3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.1-h90cbb55_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/myst-parser-4.0.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.16.6-hb482800_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.6-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.16.6-hed9df3c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbsphinx-0.9.7-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/ncls-0.0.68-py312h0fa9677_5.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.9.1-h7ab15ed_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.4.2-pyh267e887_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/nlohmann_json-3.12.0-h3f2d84a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numba-0.61.2-py312h2e6246c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.5-py312h72c5963_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.0-h7b32b05_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/optree-0.15.0-py312h68727a3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.1.2-h17f744e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/p11-kit-0.24.1-hc5aa10d_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py312hf9745cd_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-0.23.1-hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-base-0.23.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pandoc-3.6.4-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.17.2-h58526e2_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-pyhd8ed1ab_1004.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.7-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/plink2-2.0.0a.6.9-h9948957_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/polars-1.26.0-py312hda0fa55_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pooch-1.8.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.2.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/prometheus-cpp-1.3.0-ha5d0236_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.51-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.51-hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.0.0-py312h66e93f0_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/py-cpuinfo-9.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/py-spy-0.4.0-h4c5a871_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-20.0.0-py312h7900ff3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-20.0.0-py312h01725c0_0_cpu.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/pybigwig-0.3.24-py312h0e9d276_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-2.13.6-pyh1ec8472_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-2.13.6-pyh415d2e4_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.3-pyh3cfb1c2_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.1-py312h3b7be25_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.15.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/bioconda/noarch/pyranges-0.1.4-pyhdfd78af_0.tar.bz2 - - conda: https://conda.anaconda.org/bioconda/linux-64/pysam-0.23.0-py312h47d5410_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-benchmark-5.1.0-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cases-3.8.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-6.1.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.10-h9e4cc4f_0_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-7_cp312.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.6.0-cpu_mkl_py312_h6a7998d_104.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-cpu-2.6.0-cpu_mkl_hc60beec_104.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py312h178313f_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-26.4.0-py312hbf22597_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/questionary-2.0.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/re2-2024.07.02-h9925aae_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.36.2-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.0.0-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.24.0-py312h3b7be25_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.8-py312h286b59f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.16-hba75a32_1.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/samtools-1.21-h96c455f_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.8.2-pyhff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/sleef-3.8-h1b44611_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.1-h8bd8927_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/bioconda/linux-64/sorted_nearest-0.0.39-py312h0fa9677_5.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-8.1.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-autobuild-2024.10.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-autodoc-typehints-3.0.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-book-theme-1.1.4-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/starlette-0.46.2-pyh81abbef_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sympy-1.13.3-pyh2585a3b_105.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.13.0-hceb3a55_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/termcolor-2.5.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/textual-3.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.4.2-py312h66e93f0_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.4.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.15.2-pyhff008b6_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.15.2-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.2-h801b22e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.13.2-h0e9735f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.13.2-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_inspect-0.9.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-1.0.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py312h68727a3_5.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.7.2-h2f11bb8_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.34.1-pyh31011fe_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.30.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/watchfiles-1.0.5-py312h12e396e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/websockets-15.0.1-py312h66e93f0_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.14-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h3b0a872_7.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312h66e93f0_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda - - pypi: https://files.pythonhosted.org/packages/2d/ea/d6230cc9772edca0fd8c91638dc1c2e2def09b9a22cfabe6532906e96aea/basenji2_pytorch-0.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/28/53/21f7b97e82772caa61541348427f42435120b32961c92d16f9c8ce9757d6/cslug-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c8/14/299f99ce0fde4985cc5ba6f2258c624a5b9bbc547c3d243d99919ca53761/cyclopts-3.14.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d5/7c/e9fcff7623954d86bdc17782036cbf715ecab1bec4847c008557affe1ca8/docstring_parser-0.16-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f3/ef/2a6068f6ef0e39c4fc1d0e1ce5e02f105e1b51920655a7a43595668db7ca/genoray-0.10.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ac/8e/0eccb528701273640dd4f13678a0c1352176166aecd1ee7f4fa29355132b/hirola-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/1a/c1/31b3184cba7b257a4a3b5ca5b88b9204ccb7aa02fe3c992280899293ed54/lightning_utilities-0.14.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a9/a6/aa38bddc9f8d90e5ce14023f06ccbf642ab5d507da1ffafb031c0f332dc6/numerary-0.4.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/18/ec/5434c4a6012ef2ff12d0e71b6c341532686ee82d63e5101717abc24eb3f5/pgenlib-0.92.0.tar.gz - - pypi: https://files.pythonhosted.org/packages/5b/bc/246f452431c592a2a424050e8bb9ccf494fb47613fd97c912f4d573a5e3b/phantom_types-3.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/82/ff/5701f79317a1a03e5ee8a1bf48e7273a8445162a2774e51fc06411a67c89/pytorch_lightning-2.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fd/bc/cc4e3dbc5e7992398dcb7a8eda0cbcf4fb792a0cdb93f857b478bf3cf884/rich_rst-1.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f5/a1/6de4f7bf0a7704a200de5d0fbaf4d333fd5ca56b9a3e6f3a3ad05e99ba98/seqpro-0.3.2-cp39-abi3-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/72/25/973bd6128381951b23cdcd8a9870c6dcfc5606cb864df8eabd82e529f9c1/torchinfo-1.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e0/ee/4d0a7213a6f412afb3483031009a3b970dd7bed3be24de95ab04fba1c05a/torchmetrics-1.7.1-py3-none-any.whl - py310: channels: - url: https://conda.anaconda.org/conda-forge/ - url: https://conda.anaconda.org/bioconda/ @@ -882,18 +269,18 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/awkward-2.8.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/awkward-cpp-45-py310h0900883_100.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-hf4d4f31_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h66f1c83_6.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.0-hada3f3f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.2-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.1-hc2d532b_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-h9312af0_8.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.0-hc373b34_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.1-hc373b34_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.19.0-h756d8c7_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.0-h2d6f568_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.17-h3b40de3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.0-h034c9a0_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.17-h73c4702_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.3-hc2d532b_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.7-hc2d532b_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.5-h7c1a40b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.5-h5e5e39d_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-h7cc6b5f_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda @@ -912,7 +299,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.6.3-py310hff52083_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.7.0-py310hff52083_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.0-py310h89163eb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.10.17-py310hd8ed1ab_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/cyvcf2-0.31.1-py310h0195497_1.tar.bz2 @@ -1011,7 +398,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/makefun-1.15.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py310h89163eb_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.3-py310hdb7682f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.4-py310hdb7682f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.2-py310hfc232cf_0.conda @@ -1080,7 +467,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.0.0-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.8-py310h01b0e6a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.9-py310h01b0e6a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.18-h763c568_1.conda - conda: https://conda.anaconda.org/bioconda/linux-64/samtools-1.21-h96c455f_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.8.2-pyhff2d567_0.conda @@ -1126,7 +513,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/51/ec/fce39003eeb778eed2b62675a02bd207388baa135e9d23997b9df074c838/cyclopts-3.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d5/7c/e9fcff7623954d86bdc17782036cbf715ecab1bec4847c008557affe1ca8/docstring_parser-0.16-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/50/29/3090ef07838bfcbec6bf88ae1fbab1f13e35f6e20dccbff4500e82d4c21e/genoray-0.10.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f3/ef/2a6068f6ef0e39c4fc1d0e1ce5e02f105e1b51920655a7a43595668db7ca/genoray-0.10.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/8e/0eccb528701273640dd4f13678a0c1352176166aecd1ee7f4fa29355132b/hirola-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/1a/c1/31b3184cba7b257a4a3b5ca5b88b9204ccb7aa02fe3c992280899293ed54/lightning_utilities-0.14.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/a6/aa38bddc9f8d90e5ce14023f06ccbf642ab5d507da1ffafb031c0f332dc6/numerary-0.4.4-py3-none-any.whl @@ -1156,18 +543,18 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/awkward-2.8.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/awkward-cpp-45-py312ha6dbfeb_100.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-hf4d4f31_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h66f1c83_6.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.0-hada3f3f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.2-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.1-hc2d532b_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-h9312af0_8.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.0-hc373b34_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.1-hc373b34_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.19.0-h756d8c7_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.0-h2d6f568_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.17-h3b40de3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.0-h034c9a0_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.17-h73c4702_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.3-hc2d532b_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.7-hc2d532b_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.5-h7c1a40b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.5-h5e5e39d_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-h7cc6b5f_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda @@ -1191,7 +578,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.6.3-py312h7900ff3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.7.0-py312h7900ff3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.0-py312h178313f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.10-py312hd8ed1ab_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/cyvcf2-0.31.1-py312h68a07e8_1.tar.bz2 @@ -1310,7 +697,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py312h178313f_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.3-py312h6ab59e4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.4-py312h6ab59e4_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.2-py312hba68c3b_0.conda @@ -1403,7 +790,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.0.0-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/roman-numerals-py-3.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.24.0-py312h3b7be25_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.8-py312h286b59f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.9-py312h286b59f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.18-h763c568_1.conda - conda: https://conda.anaconda.org/bioconda/linux-64/samtools-1.21-h96c455f_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.8.2-pyhff2d567_0.conda @@ -1472,7 +859,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/28/53/21f7b97e82772caa61541348427f42435120b32961c92d16f9c8ce9757d6/cslug-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/51/ec/fce39003eeb778eed2b62675a02bd207388baa135e9d23997b9df074c838/cyclopts-3.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d5/7c/e9fcff7623954d86bdc17782036cbf715ecab1bec4847c008557affe1ca8/docstring_parser-0.16-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/50/29/3090ef07838bfcbec6bf88ae1fbab1f13e35f6e20dccbff4500e82d4c21e/genoray-0.10.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f3/ef/2a6068f6ef0e39c4fc1d0e1ce5e02f105e1b51920655a7a43595668db7ca/genoray-0.10.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/8e/0eccb528701273640dd4f13678a0c1352176166aecd1ee7f4fa29355132b/hirola-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/1a/c1/31b3184cba7b257a4a3b5ca5b88b9204ccb7aa02fe3c992280899293ed54/lightning_utilities-0.14.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/a6/aa38bddc9f8d90e5ce14023f06ccbf642ab5d507da1ffafb031c0f332dc6/numerary-0.4.4-py3-none-any.whl @@ -1499,18 +886,18 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/awkward-2.8.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/awkward-cpp-45-py310h0900883_100.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-hf4d4f31_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h66f1c83_6.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.0-hada3f3f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.2-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.1-hc2d532b_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-h9312af0_8.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.0-hc373b34_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.1-hc373b34_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.19.0-h756d8c7_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.0-h2d6f568_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.17-h3b40de3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.0-h034c9a0_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.17-h73c4702_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.3-hc2d532b_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.7-hc2d532b_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.5-h7c1a40b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.5-h5e5e39d_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-h7cc6b5f_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda @@ -1529,7 +916,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.6.3-py310hff52083_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.7.0-py310hff52083_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.0-py310h89163eb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.10.17-py310hd8ed1ab_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/cyvcf2-0.31.1-py310h0195497_1.tar.bz2 @@ -1628,7 +1015,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/makefun-1.15.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py310h89163eb_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.3-py310hdb7682f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.4-py310hdb7682f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.2-py310hfc232cf_0.conda @@ -1697,7 +1084,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.0.0-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.8-py310h01b0e6a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.9-py310h01b0e6a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.18-h763c568_1.conda - conda: https://conda.anaconda.org/bioconda/linux-64/samtools-1.21-h96c455f_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.8.2-pyhff2d567_0.conda @@ -1765,18 +1152,18 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/awkward-2.8.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/awkward-cpp-45-py311hc248303_100.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-hf4d4f31_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h66f1c83_6.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.0-hada3f3f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.2-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.1-hc2d532b_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-h9312af0_8.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.0-hc373b34_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.1-hc373b34_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.19.0-h756d8c7_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.0-h2d6f568_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.17-h3b40de3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.0-h034c9a0_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.17-h73c4702_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.3-hc2d532b_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.7-hc2d532b_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.5-h7c1a40b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.5-h5e5e39d_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-h7cc6b5f_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda @@ -1795,7 +1182,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.6.3-py311h38be061_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.7.0-py311h38be061_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.0-py311h2dc5d0c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.11.12-py311hd8ed1ab_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/cyvcf2-0.31.1-py311h94e71d4_1.tar.bz2 @@ -1894,7 +1281,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/makefun-1.15.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py311h2dc5d0c_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.3-py311h9b3a049_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.4-py311h9b3a049_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.2-py311hc51bbc3_0.conda @@ -1963,7 +1350,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.0.0-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.8-py311h39e1cd3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.9-py311h39e1cd3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.18-h763c568_1.conda - conda: https://conda.anaconda.org/bioconda/linux-64/samtools-1.21-h96c455f_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.8.2-pyhff2d567_0.conda @@ -2031,18 +1418,18 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/awkward-2.8.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/awkward-cpp-45-py312ha6dbfeb_100.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-hf4d4f31_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h66f1c83_6.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.0-hada3f3f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.2-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.1-hc2d532b_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-h9312af0_8.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.0-hc373b34_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.1-hc373b34_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.19.0-h756d8c7_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.0-h2d6f568_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.17-h3b40de3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.0-h034c9a0_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.17-h73c4702_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.3-hc2d532b_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.7-hc2d532b_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.5-h7c1a40b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.5-h5e5e39d_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-h7cc6b5f_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda @@ -2061,7 +1448,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.6.3-py312h7900ff3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.7.0-py312h7900ff3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.0-py312h178313f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.10-py312hd8ed1ab_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/cyvcf2-0.31.1-py312h68a07e8_1.tar.bz2 @@ -2160,7 +1547,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/makefun-1.15.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py312h178313f_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.3-py312h6ab59e4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.4-py312h6ab59e4_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.2-py312hba68c3b_0.conda @@ -2229,7 +1616,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.0.0-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.8-py312h286b59f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.9-py312h286b59f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.18-h763c568_1.conda - conda: https://conda.anaconda.org/bioconda/linux-64/samtools-1.21-h96c455f_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.8.2-pyhff2d567_0.conda @@ -2482,22 +1869,22 @@ packages: - pkg:pypi/awkward-cpp?source=hash-mapping size: 531289 timestamp: 1742473663256 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-hf4d4f31_5.conda - sha256: 9276ac78b14723f4e5135990be8dca0c2b36d4b8c82b4d17b061aa9eea9e3798 - md5: 775cfc5c8ee47a2f12ca741fbc932b19 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h66f1c83_6.conda + sha256: f335dde275108780370575005af6a808df15b39fb19e84a2fb5719a13e6b271a + md5: 08e6c1487ed4a40ee2771c760020bdf4 depends: - __glibc >=2.17,<3.0.a0 - aws-c-cal >=0.9.0,<0.9.1.0a0 - aws-c-common >=0.12.2,<0.12.3.0a0 - - aws-c-http >=0.10.0,<0.10.1.0a0 + - aws-c-http >=0.10.1,<0.10.2.0a0 - aws-c-io >=0.19.0,<0.19.1.0a0 - aws-c-sdkutils >=0.2.3,<0.2.4.0a0 - libgcc >=13 license: Apache-2.0 license_family: Apache purls: [] - size: 111221 - timestamp: 1746382015411 + size: 110834 + timestamp: 1746787593783 - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.0-hada3f3f_0.conda sha256: e635934e54c2145afa06bd69f5d92d14cb2e27a59625f7236493dd9b11717e9b md5: 05a965f6def53dbcb5217945eb0b3689 @@ -2550,21 +1937,21 @@ packages: purls: [] size: 57177 timestamp: 1746376081324 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.0-hc373b34_1.conda - sha256: af3cf932e5500eb5744669cbe447d3922202001e296a077c5b20c7586fbf690f - md5: 27e6ee47162c1d2ba91d24e64b37509a +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.1-hc373b34_0.conda + sha256: 84606e0e0683d78a1923fae23193d79cc0edb304232f3cd1fabf009cd5836338 + md5: ce674c8395070748d89f0f907a6caa59 depends: - libgcc >=13 - __glibc >=2.17,<3.0.a0 + - aws-c-io >=0.19.0,<0.19.1.0a0 - aws-c-common >=0.12.2,<0.12.3.0a0 - - aws-c-compression >=0.3.1,<0.3.2.0a0 - aws-c-cal >=0.9.0,<0.9.1.0a0 - - aws-c-io >=0.19.0,<0.19.1.0a0 + - aws-c-compression >=0.3.1,<0.3.2.0a0 license: Apache-2.0 license_family: APACHE purls: [] - size: 222979 - timestamp: 1746377724627 + size: 223016 + timestamp: 1746738491192 - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.19.0-h756d8c7_1.conda sha256: 1e852cbe527dcfe654573e47287ddc3462de160c9a2f89bfd99da66368a05fe5 md5: 35ffc73105ad0bdb8e5c2555f4a3c5d6 @@ -2579,38 +1966,38 @@ packages: purls: [] size: 179062 timestamp: 1746361007292 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.0-h2d6f568_1.conda - sha256: 360046d75223a159fb05bd948f3352c14e84f5b1cf175138d642c95123f87272 - md5: e9788e2b6c3cfe0dc95cff9a2229c8e6 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.0-h034c9a0_2.conda + sha256: 779b6e778f503cbb4139717b78325f50ef6975cbbb98e3e4323801e88d066dd2 + md5: c5fe6225b205100049d90afbfc000dd1 depends: - libgcc >=13 - __glibc >=2.17,<3.0.a0 - - aws-c-common >=0.12.2,<0.12.3.0a0 - aws-c-io >=0.19.0,<0.19.1.0a0 - - aws-c-http >=0.10.0,<0.10.1.0a0 + - aws-c-common >=0.12.2,<0.12.3.0a0 + - aws-c-http >=0.10.1,<0.10.2.0a0 license: Apache-2.0 license_family: APACHE purls: [] - size: 215709 - timestamp: 1746388395049 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.17-h3b40de3_0.conda - sha256: 22e9db67bce3c96118c004569021c586a4f2c0b0870093444c706f1a535896c8 - md5: 5b0ad650d330d5476c8459568a79d745 + size: 215729 + timestamp: 1746797150431 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.17-h73c4702_1.conda + sha256: 2199a5843e0843ca941993b33140c7499d03dd84b4b4aef381b1a71c406f21bb + md5: 7283d4d0d39d97dcb5ef06412375478f depends: - - libgcc >=13 - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - aws-c-http >=0.10.1,<0.10.2.0a0 - aws-c-cal >=0.9.0,<0.9.1.0a0 - - aws-c-common >=0.12.2,<0.12.3.0a0 - - aws-c-auth >=0.9.0,<0.9.1.0a0 - aws-c-io >=0.19.0,<0.19.1.0a0 - - aws-checksums >=0.2.7,<0.2.8.0a0 + - aws-c-common >=0.12.2,<0.12.3.0a0 - openssl >=3.5.0,<4.0a0 - - aws-c-http >=0.10.0,<0.10.1.0a0 + - aws-checksums >=0.2.7,<0.2.8.0a0 + - aws-c-auth >=0.9.0,<0.9.1.0a0 license: Apache-2.0 license_family: APACHE purls: [] - size: 129758 - timestamp: 1746598214057 + size: 129744 + timestamp: 1746808806386 - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.3-hc2d532b_4.conda sha256: 09d276413249df36ecc533d9aff97945cc3a2d4ae818bf50d3968fde7e68bc61 md5: 15a1f6fb713b4cd3fee74588b996a846 @@ -2635,28 +2022,28 @@ packages: purls: [] size: 76585 timestamp: 1744426573605 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.5-h7c1a40b_1.conda - sha256: 6bac1b7c2a7709add6746ba92db6b78912563d5036552ca816abd21ff160b37e - md5: a020de862bc48eb194b5aff9b165ea13 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.5-h5e5e39d_2.conda + sha256: 6399257677fab7e513d131f1dfae130a305a8c250e5c9290b1c32831c146b435 + md5: 70ae8529a42baa6fdac9e037b6ccc0c3 depends: - - __glibc >=2.17,<3.0.a0 - libgcc >=13 - libstdcxx >=13 - libgcc >=13 - - aws-c-event-stream >=0.5.4,<0.5.5.0a0 + - __glibc >=2.17,<3.0.a0 + - aws-c-sdkutils >=0.2.3,<0.2.4.0a0 - aws-c-cal >=0.9.0,<0.9.1.0a0 + - aws-c-mqtt >=0.13.0,<0.13.1.0a0 + - aws-c-event-stream >=0.5.4,<0.5.5.0a0 + - aws-c-s3 >=0.7.17,<0.7.18.0a0 - aws-c-auth >=0.9.0,<0.9.1.0a0 - aws-c-common >=0.12.2,<0.12.3.0a0 - aws-c-io >=0.19.0,<0.19.1.0a0 - - aws-c-s3 >=0.7.17,<0.7.18.0a0 - - aws-c-mqtt >=0.13.0,<0.13.1.0a0 - - aws-c-sdkutils >=0.2.3,<0.2.4.0a0 - - aws-c-http >=0.10.0,<0.10.1.0a0 + - aws-c-http >=0.10.1,<0.10.2.0a0 license: Apache-2.0 license_family: APACHE purls: [] - size: 394557 - timestamp: 1746670451498 + size: 394540 + timestamp: 1746836544536 - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-h7cc6b5f_7.conda sha256: cb67f2ed9ea04902bd8fcee528281233668b92d2190e61d8eaebc92330c6fe0f md5: 35c4d2ece6b4b098501e595f04250bee @@ -3102,73 +2489,75 @@ packages: - pkg:pypi/comm?source=hash-mapping size: 12103 timestamp: 1733503053903 -- conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.6.3-py310hff52083_2.conda - sha256: 44e034efc80c86d48b90bc435e0e59c4087f9cc2542e784c674df43ebcc95ac1 - md5: 177e08c9cff21949aef3453b27703484 - depends: - - argcomplete >=1.12.1,<3.7 - - charset-normalizer >=2.1.0,<4 - - colorama >=0.4.1,<1.0 - - decli >=0.6.0,<1.0 +- conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.7.0-py310hff52083_0.conda + sha256: 1c9d74c99d12f57c77c6c7430b606e180c5877443c6fe84d45790c387fb541fa + md5: 51bdbd7cbb48e8b1b2d7a14476e96bda + depends: + - argcomplete <3.7,>=1.12.1 + - charset-normalizer <4,>=2.1.0 + - colorama <1.0,>=0.4.1 + - decli <1.0,>=0.6.0 - jinja2 >=2.10.3 - packaging >=19 - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 - pyyaml >=3.08 - - questionary >=2.0,<3.0 - - termcolor >=1.1,<3 - - tomlkit >=0.5.3,<1.0.0 - - typing_extensions >=4.0.1,<5.0.0 + - questionary <3.0,>=2.0 + - termcolor <3,>=1.1 + - tomlkit <1.0.0,>=0.5.3 + - typing_extensions <5.0.0,>=4.0.1 license: MIT license_family: MIT purls: - pkg:pypi/commitizen?source=hash-mapping - size: 117233 - timestamp: 1746604407899 -- conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.6.3-py311h38be061_2.conda - sha256: 8fd31ffde523a4ebfc103cc1c4c7d8d5801bd534772be6bc1f46da21f3311b08 - md5: 80932314cda5bd4a30c838b47f45ddab - depends: - - argcomplete >=1.12.1,<3.7 - - charset-normalizer >=2.1.0,<4 - - colorama >=0.4.1,<1.0 - - decli >=0.6.0,<1.0 + size: 117528 + timestamp: 1746902589876 +- conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.7.0-py311h38be061_0.conda + sha256: 3386e642d7d71cc6cec22fa1a220ca5e320cdaae39e86a8286ff8704b34874fe + md5: 4d0e05876bef7e9068c0d7915c7b9c90 + depends: + - argcomplete <3.7,>=1.12.1 + - charset-normalizer <4,>=2.1.0 + - colorama <1.0,>=0.4.1 + - decli <1.0,>=0.6.0 - jinja2 >=2.10.3 - packaging >=19 - python >=3.11,<3.12.0a0 - python_abi 3.11.* *_cp311 - pyyaml >=3.08 - - questionary >=2.0,<3.0 - - termcolor >=1.1,<3 - - tomlkit >=0.5.3,<1.0.0 + - questionary <3.0,>=2.0 + - termcolor <3,>=1.1 + - tomlkit <1.0.0,>=0.5.3 + - typing_extensions <5.0.0,>=4.0.1 license: MIT license_family: MIT purls: - pkg:pypi/commitizen?source=hash-mapping - size: 148419 - timestamp: 1746604379109 -- conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.6.3-py312h7900ff3_2.conda - sha256: 479a03af121f7e7e89e399064ce3f1151e905364597505491cb5721498eaf578 - md5: 15f1eee6772d470b9f88a8355bba1912 - depends: - - argcomplete >=1.12.1,<3.7 - - charset-normalizer >=2.1.0,<4 - - colorama >=0.4.1,<1.0 - - decli >=0.6.0,<1.0 + size: 149184 + timestamp: 1746902594461 +- conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.7.0-py312h7900ff3_0.conda + sha256: 4cfe84bd8edc88430bc7944352635b4eb4590c603326898518008abdfd0ff1e8 + md5: 604baa8123817ddafc452931ce9c5dc9 + depends: + - argcomplete <3.7,>=1.12.1 + - charset-normalizer <4,>=2.1.0 + - colorama <1.0,>=0.4.1 + - decli <1.0,>=0.6.0 - jinja2 >=2.10.3 - packaging >=19 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 - pyyaml >=3.08 - - questionary >=2.0,<3.0 - - termcolor >=1.1,<3 - - tomlkit >=0.5.3,<1.0.0 + - questionary <3.0,>=2.0 + - termcolor <3,>=1.1 + - tomlkit <1.0.0,>=0.5.3 + - typing_extensions <5.0.0,>=4.0.1 license: MIT license_family: MIT purls: - pkg:pypi/commitizen?source=hash-mapping - size: 144191 - timestamp: 1746604340560 + size: 144102 + timestamp: 1746902621780 - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.0-py310h89163eb_0.conda sha256: ac410dbd3b1e28d40b88a27f801210b853ebd388f3cf20f85c0178e97f788013 md5: 9f7865c17117d16f804b687b498e35fa @@ -5142,13 +4531,13 @@ packages: - pkg:pypi/matplotlib-inline?source=hash-mapping size: 14467 timestamp: 1733417051523 -- conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.3-py310hdb7682f_0.conda - sha256: 2dd916fe9214508b2b7b62a7a9f528162c5f7261d7e48c04fcf9710ba1079283 - md5: a3ae64ceb7c44a56e94044380df2b697 +- conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.4-py310hdb7682f_0.conda + sha256: 37ba941c92470a497d547e2159c33d9d2b020362a66d96cbe40a6b103dacdcb1 + md5: c6817a8792e4bf46f7291596fd8c3d2c depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - - openssl >=3.4.1,<4.0a0 + - openssl >=3.5.0,<4.0a0 - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 - tomli >=1.1.0 @@ -5156,15 +4545,15 @@ packages: license_family: MIT purls: - pkg:pypi/maturin?source=hash-mapping - size: 6470053 - timestamp: 1741886505752 -- conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.3-py311h9b3a049_0.conda - sha256: 6ee1a387e983e5ca253e3346f9c3a19a2abb7e295fa1d66d45eb4be26a54f0c9 - md5: 59d67241bdc9e508d2abf3f33360b38b + size: 6470671 + timestamp: 1746840874217 +- conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.4-py311h9b3a049_0.conda + sha256: 367ced087159ec01bce7c8718e073f8f51c09a2953c2a7175cf4eac36dac1b19 + md5: 5d21cf08cecf4e6462c63f962af58608 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - - openssl >=3.4.1,<4.0a0 + - openssl >=3.5.0,<4.0a0 - python >=3.11,<3.12.0a0 - python_abi 3.11.* *_cp311 - tomli >=1.1.0 @@ -5172,15 +4561,15 @@ packages: license_family: MIT purls: - pkg:pypi/maturin?source=hash-mapping - size: 6472594 - timestamp: 1741886506327 -- conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.3-py312h6ab59e4_0.conda - sha256: 36d04c21f72cd8f597e18e5d70fc6d085b18776f6076572813c396fcb55a2e1b - md5: 99d42f508f2af717f27e63d607688f97 + size: 6471652 + timestamp: 1746840881784 +- conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.4-py312h6ab59e4_0.conda + sha256: ddcc5c2e323ddb58670fc7646f8f0017cf18114c5a32adef6b42bf30511e8b6a + md5: daa46b5bf4954d71fc10c9ad0eb1a3f1 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - - openssl >=3.4.1,<4.0a0 + - openssl >=3.5.0,<4.0a0 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 - tomli >=1.1.0 @@ -5188,8 +4577,8 @@ packages: license_family: MIT purls: - pkg:pypi/maturin?source=hash-mapping - size: 6472955 - timestamp: 1741886678732 + size: 6473267 + timestamp: 1746840888414 - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda sha256: c63ed79d9745109c0a70397713b0c07f06e7d3561abcb122cfc80a141ab3b449 md5: af2060041d4f3250a7eb6ab3ec0e549b @@ -7408,9 +6797,9 @@ packages: - pkg:pypi/rpds-py?source=hash-mapping size: 394023 timestamp: 1743037659894 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.8-py310h01b0e6a_0.conda - sha256: 0551e3dcb322633f93fc7a56f992834927b91166a63b0eed55c84f1ddc8eaa84 - md5: 25d19410ced9a448aa24b60e516317cc +- conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.9-py310h01b0e6a_0.conda + sha256: 283a8d16f5bdf73a6cf4e1cc3ba31b6a7a894e6de8b45bb56d5d36e587c912f7 + md5: ad76bbdc49b70ca208d67cf57e4ca7f6 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -7423,11 +6812,11 @@ packages: license_family: MIT purls: - pkg:pypi/ruff?source=hash-mapping - size: 9184184 - timestamp: 1746123679519 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.8-py311h39e1cd3_0.conda - sha256: 1c3845add9f9df0da20106f52bdafb0071dc1e7186f693d37e0c13873dd94681 - md5: 13fbcd34bbcbbab1b662e8d0fd388bb8 + size: 9221907 + timestamp: 1746841246672 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.9-py311h39e1cd3_0.conda + sha256: 786e018b592393d43e454ea75bb7c6565502145d374b805538b670660bd98ff4 + md5: c51d9f0126289712ae7e75bf0aac1159 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -7439,12 +6828,12 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/ruff?source=compressed-mapping - size: 9185504 - timestamp: 1746123691765 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.8-py312h286b59f_0.conda - sha256: 6e2b4fe388b8446d4b201fb27573c11cac1ca8f50d59e710191e49613916492d - md5: b7881c9a4e7c063c8aa4841de4850e1f + - pkg:pypi/ruff?source=hash-mapping + size: 9221632 + timestamp: 1746841271621 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.9-py312h286b59f_0.conda + sha256: 0f97ef8eb6a000274f7461a7cbdb5775ce85c928f72f6852ce4300359817e17e + md5: 505174a4841a9f048d1a24b3c4c8bdbc depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -7456,9 +6845,9 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/ruff?source=compressed-mapping - size: 9176542 - timestamp: 1746123683298 + - pkg:pypi/ruff?source=hash-mapping + size: 9205500 + timestamp: 1746841381828 - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.18-h763c568_1.conda sha256: 6d0399775ef7841914e99aed5b7330ce3d9d29a4219d40b1b94fd9a50d902a73 md5: 0bf75253494a85260575e23c3b29db90 @@ -8370,6 +7759,7 @@ packages: - platformdirs >=3.9.1,<5 - python >=3.9 license: MIT + license_family: MIT purls: - pkg:pypi/virtualenv?source=hash-mapping size: 4133755 From e92493621fb8fd2fdeaf4e190656c87f822fdc48 Mon Sep 17 00:00:00 2001 From: d-laub Date: Sat, 10 May 2025 13:30:07 -0700 Subject: [PATCH 37/53] ci: update publish workflow --- .github/workflows/merge.yaml | 35 ++++++++ .github/workflows/publish.yaml | 156 +++++++++++++++++++++++++++------ 2 files changed, 166 insertions(+), 25 deletions(-) create mode 100644 .github/workflows/merge.yaml diff --git a/.github/workflows/merge.yaml b/.github/workflows/merge.yaml new file mode 100644 index 00000000..580c7c77 --- /dev/null +++ b/.github/workflows/merge.yaml @@ -0,0 +1,35 @@ +name: Merge main -> stable + +on: + workflow_run: + workflows: ["Bump and release"] + branches: [main] + types: + - completed + workflow_dispatch: + +jobs: + merge: + if: > + github.event_name == 'workflow_dispatch' || + github.event.workflow_run.conclusion == 'success' + environment: pypi + permissions: + id-token: write + runs-on: ubuntu-latest + name: "Merge" + steps: + - name: Check out + uses: actions/checkout@v4 + with: + ref: stable + fetch-depth: 0 + token: "${{ secrets.COMMITIZEN }}" + - name: Config git + run: | + git config --global user.name "${GITHUB_ACTOR}" + git config --global user.email "${GITHUB_ACTOR}@users.noreply.github.com" + - name: Merge main -> stable + run: | + git rebase origin/main + git push origin stable \ No newline at end of file diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index c47add70..fee97577 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -1,4 +1,9 @@ -name: Publish +# This file is autogenerated by maturin v1.8.3 +# To update, run +# +# maturin generate-ci github --platform linux musllinux manylinux +# +name: CI on: workflow_run: @@ -8,35 +13,136 @@ on: - completed workflow_dispatch: +permissions: + contents: read + jobs: - publish: + linux: + if: > + github.event_name == 'workflow_dispatch' || + github.event.workflow_run.conclusion == 'success' + runs-on: ${{ matrix.platform.runner }} + strategy: + matrix: + platform: + - runner: ubuntu-22.04 + target: x86_64 + - runner: ubuntu-22.04 + target: x86 + - runner: ubuntu-22.04 + target: aarch64 + - runner: ubuntu-22.04 + target: armv7 + - runner: ubuntu-22.04 + target: s390x + - runner: ubuntu-22.04 + target: ppc64le + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: 3.x + - name: Build wheels + uses: PyO3/maturin-action@v1 + with: + target: ${{ matrix.platform.target }} + args: --release --out dist + sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} + manylinux: auto + - name: Build free-threaded wheels + uses: PyO3/maturin-action@v1 + with: + target: ${{ matrix.platform.target }} + args: --release --out dist -i python3.13t + sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} + manylinux: auto + - name: Upload wheels + uses: actions/upload-artifact@v4 + with: + name: wheels-linux-${{ matrix.platform.target }} + path: dist + + musllinux: + if: > + github.event_name == 'workflow_dispatch' || + github.event.workflow_run.conclusion == 'success' + runs-on: ${{ matrix.platform.runner }} + strategy: + matrix: + platform: + - runner: ubuntu-22.04 + target: x86_64 + - runner: ubuntu-22.04 + target: x86 + - runner: ubuntu-22.04 + target: aarch64 + - runner: ubuntu-22.04 + target: armv7 + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: 3.x + - name: Build wheels + uses: PyO3/maturin-action@v1 + with: + target: ${{ matrix.platform.target }} + args: --release --out dist + sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} + manylinux: musllinux_1_2 + - name: Build free-threaded wheels + uses: PyO3/maturin-action@v1 + with: + target: ${{ matrix.platform.target }} + args: --release --out dist -i python3.13t + sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} + manylinux: musllinux_1_2 + - name: Upload wheels + uses: actions/upload-artifact@v4 + with: + name: wheels-musllinux-${{ matrix.platform.target }} + path: dist + + sdist: if: > github.event_name == 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Build sdist + uses: PyO3/maturin-action@v1 + with: + command: sdist + args: --out dist + - name: Upload sdist + uses: actions/upload-artifact@v4 + with: + name: wheels-sdist + path: dist + + release: environment: pypi + name: Release + runs-on: ubuntu-latest + if: ${{ startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success'}} + needs: [linux, musllinux, sdist] permissions: + # Use to sign the release artifacts id-token: write - runs-on: ubuntu-latest - name: "Publish new release" + # Used to upload release artifacts + contents: write + # Used to generate artifact attestation + attestations: write steps: - - name: Check out - uses: actions/checkout@v4 - with: - ref: stable - fetch-depth: 0 - token: "${{ secrets.COMMITIZEN }}" - - name: Config git - run: | - git config --global user.name "${GITHUB_ACTOR}" - git config --global user.email "${GITHUB_ACTOR}@users.noreply.github.com" - - name: Merge main -> stable - run: | - git rebase origin/main - git push origin stable - - name: Setup pixi - uses: prefix-dev/setup-pixi@v0.8.8 - with: - pixi-version: v0.46.0 - cache: true - - name: Publish - run: pixi run -e py310 publish \ No newline at end of file + - uses: actions/download-artifact@v4 + - name: Generate artifact attestation + uses: actions/attest-build-provenance@v2 + with: + subject-path: 'wheels-*/*' + - name: Publish to PyPI + if: ${{ startsWith(github.ref, 'refs/tags/') }} + uses: PyO3/maturin-action@v1 + with: + command: upload + args: --non-interactive --skip-existing wheels-*/* From 47ca825b516144b53bf6d3dfa3e3f16600367867 Mon Sep 17 00:00:00 2001 From: d-laub Date: Sat, 10 May 2025 13:30:33 -0700 Subject: [PATCH 38/53] ci: update publish workflow --- .github/workflows/publish.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index fee97577..16946fb7 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -125,7 +125,10 @@ jobs: environment: pypi name: Release runs-on: ubuntu-latest - if: ${{ startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success'}} + if: > + startsWith(github.ref, 'refs/tags/') || + github.event_name == 'workflow_dispatch' || + github.event.workflow_run.conclusion == 'success' needs: [linux, musllinux, sdist] permissions: # Use to sign the release artifacts From b2a295c5751313e4acce120c4bd3d3a02c2b9f8a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 10 May 2025 20:31:52 +0000 Subject: [PATCH 39/53] =?UTF-8?q?bump:=20version=200.14.2=20=E2=86=92=200.?= =?UTF-8?q?14.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/changelog.md | 7 +++++++ pyproject.toml | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/source/changelog.md b/docs/source/changelog.md index 94604de5..72f6ec97 100644 --- a/docs/source/changelog.md +++ b/docs/source/changelog.md @@ -1,3 +1,10 @@ +## 0.14.3 (2025-05-10) + +### Fix + +- bump genoray to 0.10.3 +- bounds checking on ds regions vs. reference contig lengths + ## 0.14.2 (2025-05-08) ### Fix diff --git a/pyproject.toml b/pyproject.toml index 64c7bb1f..48745d0c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "genvarloader" -version = "0.14.2" +version = "0.14.3" description = "Pipeline for efficient genomic data processing." authors = [ { name = "David Laub", email = "dlaub@ucsd.edu" }, From 9923cdd6ef1f40d624450d4d77315b853f48273d Mon Sep 17 00:00:00 2001 From: d-laub Date: Sat, 10 May 2025 13:32:01 -0700 Subject: [PATCH 40/53] ci: update publish workflow name --- .github/workflows/publish.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index 16946fb7..5f6884f8 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -3,7 +3,7 @@ # # maturin generate-ci github --platform linux musllinux manylinux # -name: CI +name: Publish wheels on: workflow_run: From 0a566b54ad80ff601e7ae52cef1c3fe9a75b1611 Mon Sep 17 00:00:00 2001 From: d-laub Date: Sat, 10 May 2025 13:46:55 -0700 Subject: [PATCH 41/53] ci: update publish workflow --- .github/workflows/publish.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index 5f6884f8..ff2fb857 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -48,14 +48,14 @@ jobs: target: ${{ matrix.platform.target }} args: --release --out dist sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} - manylinux: auto + manylinux: ${{ matrix.platform.target == 'aarch64' && 'auto' || '2_28' }} - name: Build free-threaded wheels uses: PyO3/maturin-action@v1 with: target: ${{ matrix.platform.target }} args: --release --out dist -i python3.13t sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} - manylinux: auto + manylinux: ${{ matrix.platform.target == 'aarch64' && 'auto' || '2_28' }} - name: Upload wheels uses: actions/upload-artifact@v4 with: From b48094020a679d746600b9c171453e5a37445bdd Mon Sep 17 00:00:00 2001 From: d-laub Date: Sat, 10 May 2025 13:48:18 -0700 Subject: [PATCH 42/53] ci: update publish workflow --- .github/workflows/publish.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index ff2fb857..e1368074 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -48,14 +48,14 @@ jobs: target: ${{ matrix.platform.target }} args: --release --out dist sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} - manylinux: ${{ matrix.platform.target == 'aarch64' && 'auto' || '2_28' }} + manylinux: ${{ matrix.platform.target == 'aarch64' && '2_28' || 'auto' }} - name: Build free-threaded wheels uses: PyO3/maturin-action@v1 with: target: ${{ matrix.platform.target }} args: --release --out dist -i python3.13t sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} - manylinux: ${{ matrix.platform.target == 'aarch64' && 'auto' || '2_28' }} + manylinux: ${{ matrix.platform.target == 'aarch64' && '2_28' || 'auto' }} - name: Upload wheels uses: actions/upload-artifact@v4 with: From c2b1e3e0ac077ed1be35c9ce877a9bfd472b318c Mon Sep 17 00:00:00 2001 From: d-laub Date: Sat, 10 May 2025 14:15:42 -0700 Subject: [PATCH 43/53] ci: update workflows --- .github/workflows/merge.yaml | 1 - .github/workflows/publish.yaml | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/merge.yaml b/.github/workflows/merge.yaml index 580c7c77..b0a5d7a3 100644 --- a/.github/workflows/merge.yaml +++ b/.github/workflows/merge.yaml @@ -17,7 +17,6 @@ jobs: permissions: id-token: write runs-on: ubuntu-latest - name: "Merge" steps: - name: Check out uses: actions/checkout@v4 diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index e1368074..338b0f15 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -48,14 +48,14 @@ jobs: target: ${{ matrix.platform.target }} args: --release --out dist sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} - manylinux: ${{ matrix.platform.target == 'aarch64' && '2_28' || 'auto' }} + manylinux: ${{ matrix.platform.target == 'aarch64' && 'manylinux_2_28' || 'auto' }} - name: Build free-threaded wheels uses: PyO3/maturin-action@v1 with: target: ${{ matrix.platform.target }} args: --release --out dist -i python3.13t sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} - manylinux: ${{ matrix.platform.target == 'aarch64' && '2_28' || 'auto' }} + manylinux: ${{ matrix.platform.target == 'aarch64' && 'manylinux_2_28' || 'auto' }} - name: Upload wheels uses: actions/upload-artifact@v4 with: From d21485de2a91520b9db8464b67a823d46819b9ef Mon Sep 17 00:00:00 2001 From: d-laub Date: Sat, 10 May 2025 14:22:11 -0700 Subject: [PATCH 44/53] ci: update workflows --- .github/workflows/publish.yaml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index 338b0f15..59a3cbc0 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -47,14 +47,14 @@ jobs: with: target: ${{ matrix.platform.target }} args: --release --out dist - sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} + sccache: true manylinux: ${{ matrix.platform.target == 'aarch64' && 'manylinux_2_28' || 'auto' }} - name: Build free-threaded wheels uses: PyO3/maturin-action@v1 with: target: ${{ matrix.platform.target }} args: --release --out dist -i python3.13t - sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} + sccache: true manylinux: ${{ matrix.platform.target == 'aarch64' && 'manylinux_2_28' || 'auto' }} - name: Upload wheels uses: actions/upload-artifact@v4 @@ -88,14 +88,14 @@ jobs: with: target: ${{ matrix.platform.target }} args: --release --out dist - sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} + sccache: true manylinux: musllinux_1_2 - name: Build free-threaded wheels uses: PyO3/maturin-action@v1 with: target: ${{ matrix.platform.target }} args: --release --out dist -i python3.13t - sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} + sccache: true manylinux: musllinux_1_2 - name: Upload wheels uses: actions/upload-artifact@v4 @@ -126,7 +126,6 @@ jobs: name: Release runs-on: ubuntu-latest if: > - startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success' needs: [linux, musllinux, sdist] @@ -144,7 +143,6 @@ jobs: with: subject-path: 'wheels-*/*' - name: Publish to PyPI - if: ${{ startsWith(github.ref, 'refs/tags/') }} uses: PyO3/maturin-action@v1 with: command: upload From 14f6725014a1a5f8d93bf833c575589d1a7cb3a7 Mon Sep 17 00:00:00 2001 From: d-laub Date: Sun, 11 May 2025 12:06:31 -0700 Subject: [PATCH 45/53] docs: test if py3.11 fixes pgenlib installation --- .readthedocs.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index e59790d7..c53be0e9 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -3,7 +3,7 @@ version: "2" build: os: "ubuntu-22.04" tools: - python: "3.12" + python: "3.11" rust: "latest" python: From fe7a2c99138df6fd9aab7fbca8456b8408f3710f Mon Sep 17 00:00:00 2001 From: d-laub Date: Mon, 12 May 2025 13:26:31 -0700 Subject: [PATCH 46/53] fix: data corruption when rc_helper is parallelized --- python/genvarloader/_ragged.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/python/genvarloader/_ragged.py b/python/genvarloader/_ragged.py index 1df3fa22..503cdd7f 100644 --- a/python/genvarloader/_ragged.py +++ b/python/genvarloader/_ragged.py @@ -142,7 +142,8 @@ def pad_ragged( COMPLEMENTS = b"TGCA" -@nb.njit(parallel=True, nogil=True, cache=True) +#! for whatever reason, this causes data corruption with parallel=True?! +@nb.njit(nogil=True, cache=True) def _rc_helper( data: NDArray[np.uint8], offsets: NDArray[OFFSET_TYPE], mask: NDArray[np.bool_] ) -> NDArray[np.uint8]: @@ -160,8 +161,6 @@ def _rc_helper( for nuc, comp in zip(NUCLEOTIDES, COMPLEMENTS): _out[_data == nuc] = comp _out[:] = _out[::-1] - else: - _out[:] = _data return out From 14a83a3fe2461ab1dc762f75469ef7808ebde0b2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 12 May 2025 20:29:03 +0000 Subject: [PATCH 47/53] =?UTF-8?q?bump:=20version=200.14.3=20=E2=86=92=200.?= =?UTF-8?q?14.4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/changelog.md | 6 ++++++ pyproject.toml | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/source/changelog.md b/docs/source/changelog.md index 72f6ec97..d23715fe 100644 --- a/docs/source/changelog.md +++ b/docs/source/changelog.md @@ -1,3 +1,9 @@ +## 0.14.4 (2025-05-12) + +### Fix + +- data corruption when rc_helper is parallelized + ## 0.14.3 (2025-05-10) ### Fix diff --git a/pyproject.toml b/pyproject.toml index 48745d0c..9916e7af 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "genvarloader" -version = "0.14.3" +version = "0.14.4" description = "Pipeline for efficient genomic data processing." authors = [ { name = "David Laub", email = "dlaub@ucsd.edu" }, From 68c0c562d1100fda0a2e57d302ff91b9461cf9a8 Mon Sep 17 00:00:00 2001 From: d-laub Date: Mon, 12 May 2025 13:42:55 -0700 Subject: [PATCH 48/53] test: add tests for reverse complemented data --- tests/data/generate_ground_truth.py | 15 ++++++++++++--- tests/dataset/test_ds_haps.py | 6 +++++- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/tests/data/generate_ground_truth.py b/tests/data/generate_ground_truth.py index 58faf985..a6685f59 100644 --- a/tests/data/generate_ground_truth.py +++ b/tests/data/generate_ground_truth.py @@ -3,6 +3,7 @@ from textwrap import dedent from typing import Annotated, List +import numpy as np import typer WDIR = Path(__file__).resolve().parent @@ -238,15 +239,23 @@ def main( "end": [1010696 + SEQ_LEN], } ) + rng = np.random.default_rng(0) bed = bed.vstack(rows).with_row_index() + strand = pl.Series("strand", rng.choice(["+", "-"], size=bed.height, replace=True)) + bed = bed.hstack([strand]) logger.info("Generating BED file.") if (WDIR / f"{name}.bed").exists(): (WDIR / f"{name}.bed").unlink() ( - bed.select("chrom", "start", "end").write_csv( - WDIR / f"{name}.bed", include_header=False, separator="\t" - ) + bed.select( + "chrom", + "start", + "end", + pl.lit(".").alias("name"), + pl.lit(".").alias("score"), + "strand", + ).write_csv(WDIR / f"{name}.bed", include_header=False, separator="\t") ) logger.info("Generating consensus sequences.") diff --git a/tests/dataset/test_ds_haps.py b/tests/dataset/test_ds_haps.py index b723f345..15e0562b 100644 --- a/tests/dataset/test_ds_haps.py +++ b/tests/dataset/test_ds_haps.py @@ -33,11 +33,15 @@ def dataset_svar(): @parametrize_with_cases("dataset", cases=".", prefix="dataset_") def test_ds_haps(dataset: gvl.RaggedDataset[gvl.Ragged[np.bytes_], None]): for region, sample in product(range(dataset.n_regions), dataset.samples): - c, s, e = dataset.regions.select("chrom", "chromStart", "chromEnd").row(region) + c, s, e, rc = dataset.regions.select( + "chrom", "chromStart", "chromEnd", "strand" + ).row(region) # ragged (p) haps = dataset[region, sample] for h in range(2): actual = haps[h] + if rc == "-": + actual = sp.DNA.reverse_complement(actual, -1) fpath = f"source_{sample}_nr{region}_h{h}.fa" with pysam.FastaFile(str(cons_dir / fpath)) as f: desired = sp.cast_seqs(f.fetch(f.references[0]).upper()) From 85a5b3cb47624411aa51f37648fdb87bf06eef4b Mon Sep 17 00:00:00 2001 From: d-laub Date: Thu, 22 May 2025 10:50:42 -0700 Subject: [PATCH 49/53] fix: virtual indexing for splice indexer --- pyproject.toml | 1 + python/genvarloader/_dataset/_impl.py | 21 ++-- python/genvarloader/_dataset/_indexing.py | 137 ++++++++++------------ python/genvarloader/_ragged.py | 14 ++- 4 files changed, 84 insertions(+), 89 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 09348ae9..55859f5d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -57,6 +57,7 @@ reportAny = false reportPrivateUsage = false reportMissingTypeStubs = false reportImplicitOverride = false +reportUnusedCallResult = false [tool.maturin] python-source = "python" diff --git a/python/genvarloader/_dataset/_impl.py b/python/genvarloader/_dataset/_impl.py index 5825b739..9a1d85e5 100644 --- a/python/genvarloader/_dataset/_impl.py +++ b/python/genvarloader/_dataset/_impl.py @@ -35,6 +35,8 @@ RaggedIntervals, RaggedSeqs, is_rag_dtype, + reverse, + reverse_complement, to_padded, ) from .._torch import TORCH_AVAILABLE, TorchDataset, get_dataloader @@ -587,7 +589,6 @@ class AnnotatedHaps: "Dataset has no genotypes to reconstruct haplotypes from." ) - case None, _, _, (Tracks() as t) | RefTracks(tracks=t) | HapsTracks( tracks=t ): @@ -1452,7 +1453,7 @@ def _getitem_spliced( inner_ds = self.with_len("ragged") ds_idx, squeeze, out_reshape, offsets = splice_idxer.parse_idx(idx) r_idx, _ = np.unravel_index(ds_idx, self._idxer.full_shape) - regions = self._jittered_regions[r_idx] + regions = self._full_regions[r_idx] recon = inner_ds._recon( idx=ds_idx, @@ -1461,6 +1462,7 @@ def _getitem_spliced( output_length="ragged", jitter=self.jitter, rng=self._rng, + deterministic=self.deterministic, ) if not isinstance(recon, tuple): @@ -1469,9 +1471,7 @@ def _getitem_spliced( recon = cast( tuple[Ragged[np.bytes_ | np.float32] | RaggedAnnotatedHaps, ...], recon ) - - if isinstance(recon, tuple): - recon = tuple(_cat_length(r, offsets) for r in recon) + recon = tuple(_cat_length(r, offsets) for r in recon) if self.rc_neg: # (b) @@ -1556,19 +1556,18 @@ def _rc( """ if isinstance(rag, Ragged): if is_rag_dtype(rag, np.bytes_): - rag = _reverse_complement(rag, to_rc) + rag = reverse_complement(rag, to_rc) elif is_rag_dtype(rag, np.float32): - _reverse(rag, to_rc) + reverse(rag, to_rc) elif isinstance(rag, RaggedAnnotatedHaps): - rag.haps = _reverse_complement(rag.haps, to_rc) - _reverse(rag.var_idxs, to_rc) - _reverse(rag.ref_coords, to_rc) + rag.haps = reverse_complement(rag.haps, to_rc) + reverse(rag.var_idxs, to_rc) + reverse(rag.ref_coords, to_rc) else: assert_never(rag) return rag - @overload def _pad(rag: Ragged[DTYPE]) -> NDArray[DTYPE]: ... @overload diff --git a/python/genvarloader/_dataset/_indexing.py b/python/genvarloader/_dataset/_indexing.py index 28af73d7..568cbb0f 100644 --- a/python/genvarloader/_dataset/_indexing.py +++ b/python/genvarloader/_dataset/_indexing.py @@ -1,18 +1,16 @@ from __future__ import annotations -from typing import List, Literal, Optional, Sequence, cast +from collections.abc import Sequence +from typing import Literal, cast import awkward as ak -import numba as nb import numpy as np from attrs import define, evolve -from einops import repeat from hirola import HashTable from more_itertools import collapse from numpy.typing import NDArray from typing_extensions import Self, assert_never -from .._ragged import Ragged from .._types import Idx, StrIdx from .._utils import _lengths_to_offsets, idx_like_to_array, is_dtype @@ -25,9 +23,9 @@ class DatasetIndexer: """Full map from input sample indices to on-disk sample indices.""" s2i_map: HashTable """Map from input sample names to on-disk sample indices.""" - region_subset_idxs: Optional[NDArray[np.integer]] = None + region_subset_idxs: NDArray[np.integer] | None = None """Which input regions are included in the subset.""" - sample_subset_idxs: Optional[NDArray[np.integer]] = None + sample_subset_idxs: NDArray[np.integer] | None = None """Which input samples are included in the subset.""" @classmethod @@ -35,7 +33,7 @@ def from_region_and_sample_idxs( cls, r_idxs: NDArray[np.integer], s_idxs: NDArray[np.integer], - samples: List[str], + samples: list[str], ): _samples = np.array(samples) s2i_map = HashTable( @@ -72,10 +70,10 @@ def n_samples(self) -> int: return len(self.sample_subset_idxs) @property - def samples(self) -> List[str]: + def samples(self) -> list[str]: if self.sample_subset_idxs is None: - return self.full_samples.tolist() # type: ignore - return self.full_samples[self.sample_subset_idxs].tolist() # type: ignore + return self.full_samples.tolist() + return self.full_samples[self.sample_subset_idxs].tolist() @property def shape(self) -> tuple[int, int]: @@ -90,8 +88,8 @@ def __len__(self): def subset_to( self, - regions: Optional[Idx] = None, - samples: Optional[Idx] = None, + regions: Idx | None = None, + samples: Idx | None = None, ) -> Self: """Subset the dataset to specific regions and/or samples.""" if regions is None and samples is None: @@ -149,12 +147,7 @@ def parse_idx( idx = np.ravel_multi_index( np.ix_(r_idx.ravel(), s_idx.ravel()), self.full_shape ) - if ( - isinstance(r_idx, np.ndarray) - and r_idx.ndim > 1 - or isinstance(s_idx, np.ndarray) - and s_idx.ndim > 1 - ): + if r_idx.ndim > 1 or s_idx.ndim > 1: out_reshape = (*r_idx.shape, *s_idx.shape) elif idx.ndim > 1: out_reshape = idx.shape @@ -193,9 +186,7 @@ class SpliceIndexer: full_splice_map: ak.Array """Non-subset map from splice indices to region indices.""" dsi: DatasetIndexer - i2d_map: ak.Array - """Shape: (rows, samples, ~regions). Map from spliced row/sample indices to on-disk dataset indices.""" - row_subset_idxs: Optional[NDArray[np.intp]] = None + row_subset_idxs: NDArray[np.intp] | None = None """Subset of row indices.""" @classmethod @@ -225,27 +216,9 @@ def _init( splice_map=splice_map, full_splice_map=splice_map, dsi=dsi, - i2d_map=cls.get_i2d_map(splice_map, dsi), row_subset_idxs=None, ) - @staticmethod - def get_i2d_map(splice_map: ak.Array, dsi: DatasetIndexer): - regs_per_row = ak.count(splice_map, -1).to_numpy() - row_offsets = _lengths_to_offsets(regs_per_row) - s_idxs = ( - dsi.full_sample_idxs - if dsi.sample_subset_idxs is None - else dsi.sample_subset_idxs - ) - i2d_map = _spliced_i2d_map_helper( - dsi.i2d_map.reshape(dsi.shape), splice_map, row_offsets, s_idxs - ) - i2d_map = Ragged.from_lengths( - i2d_map, repeat(regs_per_row, "r -> r s", s=dsi.n_samples) - ).to_awkward() - return i2d_map - @property def n_rows(self) -> int: return len(self.splice_map) @@ -267,8 +240,8 @@ def __len__(self): def subset_to( self, - rows: Optional[Idx] = None, - samples: Optional[Idx] = None, + rows: Idx | None = None, + samples: Idx | None = None, ) -> tuple[Self, DatasetIndexer]: """Subset to specific regions and/or samples.""" if rows is None and samples is None: @@ -282,7 +255,6 @@ def subset_to( splice_map = cast(ak.Array, self.splice_map[row_idxs]) # splice_map is to absolute indices so don't subset dsi regions sub_dsi = self.dsi.subset_to(samples=samples) - i2d_map = self.get_i2d_map(splice_map, sub_dsi) region_idxs = ak.flatten(splice_map, None).to_numpy() eff_dsi = self.dsi.subset_to(regions=region_idxs, samples=samples) @@ -290,7 +262,6 @@ def subset_to( self, splice_map=splice_map, dsi=sub_dsi, - i2d_map=i2d_map, row_subset_idxs=row_idxs, ), eff_dsi @@ -303,9 +274,7 @@ def to_full_dataset(self) -> Self: row_subset_idxs=None, ) - def parse_idx( - self, idx: StrIdx | tuple[StrIdx] | tuple[StrIdx, StrIdx] - ) -> tuple[NDArray[np.integer], bool, tuple[int, ...] | None, NDArray[np.integer]]: + def parse_idx(self, idx: StrIdx | tuple[StrIdx] | tuple[StrIdx, StrIdx]): """Parse the index into a format suitable for indexing. Parameters @@ -330,6 +299,9 @@ def parse_idx( s_idx Indices of the samples. """ + out_reshape = None + squeeze = False + if not isinstance(idx, tuple): rows = idx samples = slice(None) @@ -339,24 +311,56 @@ def parse_idx( else: rows, samples = idx - rows = s2i(rows, self.rows) - samples = s2i(samples, self.dsi.s2i_map) + rows = self.r2i(rows) + samples = self.s2i(samples) - ds_idx = cast(ak.Array, self.i2d_map[rows, samples]) - out_reshape = tuple(map(int, ds_idx.typestr.split(" * ")[:-2])) - squeeze = False - if len(out_reshape) == 1: - out_reshape = None - elif out_reshape == (): - out_reshape = None + if isinstance(rows, (int, np.integer)) and isinstance( + samples, (int, np.integer) + ): squeeze = True - lengths = ak.count(ds_idx, -1) + r_idx = idx_like_to_array(rows, self.n_rows) + s_idx = idx_like_to_array(samples, self.n_samples) + + idx_t = idx_type((r_idx, s_idx)) + if idx_t == "basic": + # * FYI this will never execute because idx type is guaranteed to be adv or combo by casting + # basic indices to arrays above + idx = np.ravel_multi_index(np.ix_(r_idx, s_idx), self.full_shape) + elif idx_t == "adv": + idx = np.ravel_multi_index((r_idx, s_idx), self.full_shape) + elif idx_t == "combo": + idx = np.ravel_multi_index( + np.ix_(r_idx.ravel(), s_idx.ravel()), self.full_shape + ) + if squeeze: + pass + elif r_idx.ndim > 1 or s_idx.ndim > 1: + out_reshape = (*r_idx.shape, *s_idx.shape) + elif idx.ndim > 1: + out_reshape = idx.shape + else: + assert_never(idx_t) + + if idx_t != "combo" and idx.ndim > 1: + out_reshape = idx.shape + idx = idx.ravel() + ( + r_idx, + s_idx, + ) = np.unravel_index(idx, self.full_shape) + + r_idx = self.splice_map[r_idx] + lengths = ak.count(r_idx, -1) if not isinstance(lengths, np.integer): lengths = lengths.to_numpy() lengths = cast(NDArray[np.int64], lengths) offsets = _lengths_to_offsets(lengths) - ds_idx = ak.flatten(ds_idx, None).to_numpy() + r_idx = ak.flatten(r_idx, -1).to_numpy() + s_idx = s_idx.repeat(lengths) + ds_idx = np.ravel_multi_index((r_idx, s_idx), self.dsi.full_shape) + + ds_idx = ds_idx.ravel() return ds_idx, squeeze, out_reshape, offsets @@ -409,22 +413,3 @@ def idx_type( def is_adv_idx(idx: Idx) -> bool: """Check if the index is a fancy index.""" return isinstance(idx, (Sequence, np.ndarray)) - - -@nb.njit(nogil=True, cache=True) -def _spliced_i2d_map_helper( - i2d_map: NDArray[np.integer], - sp_map: ak.Array, - row_offsets: NDArray[np.int64], - s_idxs: NDArray[np.integer], -): - n_samples = len(s_idxs) - # (rows samples ~regions) - out = np.empty(row_offsets[-1] * n_samples, dtype=np.int32) - for row, r_idxs in enumerate(sp_map): - for r, r_idx in enumerate(r_idxs): - for s_idx in s_idxs: - out[row_offsets[row] * n_samples + s_idx * (len(r_idxs)) + r] = i2d_map[ - r_idx, s_idx - ] - return out diff --git a/python/genvarloader/_ragged.py b/python/genvarloader/_ragged.py index 31d00bd5..8a021dfd 100644 --- a/python/genvarloader/_ragged.py +++ b/python/genvarloader/_ragged.py @@ -172,7 +172,12 @@ def _rc_helper( ) -> NDArray[np.uint8]: out = data.copy() for i in nb.prange(len(offsets) - 1): - start, end = offsets[i], offsets[i + 1] + if offsets.ndim == 1: + if i == len(offsets) - 1: + continue + start, end = offsets[i], offsets[i + 1] + else: + start, end = offsets[i] _data = data[start:end] _out = out[start:end] if mask[i]: @@ -200,7 +205,12 @@ def _reverse_helper( ): for i in nb.prange(len(offsets)): if mask[i]: - start, end = offsets[i], offsets[i + 1] + if offsets.ndim == 1: + if i == len(offsets) - 1: + continue + start, end = offsets[i], offsets[i + 1] + else: + start, end = offsets[i] data[start:end] = np.flip(data[start:end]) From 4f2ce160cb8f2ecbf54d72ef6546743f0118684c Mon Sep 17 00:00:00 2001 From: d-laub Date: Mon, 26 May 2025 12:50:53 -0700 Subject: [PATCH 50/53] fix: exons are already in reverse order for negative stranded genes --- pixi.lock | 3775 +++++++-------------- pixi.toml | 3 +- pyproject.toml | 1 + python/genvarloader/_dataset/_impl.py | 29 +- python/genvarloader/_dataset/_indexing.py | 7 +- 5 files changed, 1212 insertions(+), 2603 deletions(-) diff --git a/pixi.lock b/pixi.lock index 2a9d56c6..58c5eab0 100644 --- a/pixi.lock +++ b/pixi.lock @@ -15,21 +15,21 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.6.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/awkward-2.8.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/awkward-cpp-45-py312ha6dbfeb_100.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h66f1c83_6.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.0-hada3f3f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.2-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.1-hc2d532b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-h9312af0_8.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.1-hc373b34_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.19.0-h756d8c7_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.0-h034c9a0_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.17-h73c4702_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.3-hc2d532b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.7-hc2d532b_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.5-h5e5e39d_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-h7cc6b5f_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/awkward-2.8.3-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/awkward-cpp-46-py312ha6dbfeb_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h59ae206_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.0-h5e3027f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.1-hafb2847_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-h2dcaabb_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.1-hb50fa74_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.19.0-h7962f60_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.0-h35de22e_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.17-h50d7d24_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.3-hafb2847_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.7-hafb2847_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.5-h2811929_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-hffe9a0f_8.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.13.0-h3cf044e_1.conda @@ -47,45 +47,47 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.7.0-py312h7900ff3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.0-py312h178313f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.8.2-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.2-py312h178313f_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/cyvcf2-0.31.1-py312h68a07e8_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/decli-0.6.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/decopatch-1.4.10-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/einops-0.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/elfutils-0.192-h7f4e02f_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.18.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.3.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.5.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hbabe93e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.8.9-h5746830_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.8.9-h86084c0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gsl-2.7-he838d99_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/htslib-1.21-h566b1c6_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.15-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.28-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/icecream-2.1.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.12-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.6.1-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.7.0-h40b2b14_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250127.1-cxx17_hbbce691_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h75ea233_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-20.0.0-hebdba27_2_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-20.0.0-hcb10f89_2_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-20.0.0-hcb10f89_2_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-20.0.0-h1bed206_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-20.0.0-hebdba27_3_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-20.0.0-hcb10f89_3_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-20.0.0-hcb10f89_3_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-20.0.0-h1bed206_3_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.24.1-h8e693c7_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-31_h59b9bed_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda @@ -94,7 +96,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-31_he106b2a_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.13.0-h332b0f4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.22-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.24-h86f0d12_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda @@ -120,7 +122,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.29-pthreads_h94d23a6_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.20.0-hd1b1c89_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.20.0-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-20.0.0-h081d1f1_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-20.0.0-h081d1f1_3_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h501fc15_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2024.07.02-hba17884_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.2-hee588c1_0.conda @@ -141,10 +143,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/loguru-0.7.3-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-hd590300_1001.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/makefun-1.15.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/makefun-1.16.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py312h178313f_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.4-py312h6ab59e4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.6-py39h446a924_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.2-py312hba68c3b_0.conda @@ -153,24 +155,24 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyh29332c3_1.conda - conda: https://conda.anaconda.org/bioconda/linux-64/ncls-0.0.68-py312h0fa9677_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.9.1-h7ab15ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.10.1-h4a9d5aa_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/nlohmann_json-3.12.0-h3f2d84a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numba-0.61.2-py312h2e6246c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.5-py312h72c5963_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.6-py312h72c5963_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.0-h7b32b05_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.1.2-h17f744e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/p11-kit-0.24.1-hc5aa10d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py312hf9745cd_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-0.23.1-hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-base-0.23.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-0.24.0-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-base-0.24.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.18.0-h3f2d84a_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/pgenlib-0.91.0-py312h5e9d817_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.7-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/bioconda/linux-64/pgenlib-0.92.1-py312h5e9d817_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.8-pyhe01879c_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/plink2-2.0.0a.6.9-h9948957_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/polars-1.26.0-py312hda0fa55_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pooch-1.8.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.2.0-pyha770c72_0.conda @@ -204,10 +206,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.0.0-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.9-py312h286b59f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.11-py312h1d08497_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.18-h763c568_1.conda - conda: https://conda.anaconda.org/bioconda/linux-64/samtools-1.21-h96c455f_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.1.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.8.0-pyhff2d567_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.1-h8bd8927_1.conda @@ -223,18 +225,18 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.4.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.15.3-pyhf21524f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.15.3-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.3-h1a15894_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.15.4-pyh9571d03_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.15.4-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.4-haa4fddc_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.13.2-h0e9735f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.13.2-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_inspect-0.9.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-1.0.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py312h68727a3_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.7.3-h2f11bb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.7.8-h2f11bb8_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.31.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 @@ -242,9 +244,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312h66e93f0_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda - - pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/94/31/87045d1c66ee10a52486c9d2047bc69f00f2689f69401bb1e998afb4b205/beartype-0.21.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/53/21f7b97e82772caa61541348427f42435120b32961c92d16f9c8ce9757d6/cslug-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/51/ec/fce39003eeb778eed2b62675a02bd207388baa135e9d23997b9df074c838/cyclopts-3.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/da/a5/5286a2f354dc64a5afbbb6eef49c52b73b4d984fb919b47a06bdc653e086/cyclopts-3.16.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d5/7c/e9fcff7623954d86bdc17782036cbf715ecab1bec4847c008557affe1ca8/docstring_parser-0.16-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/a9/e9fb0424afb091da2212cb45711449167198091893b5b1b41a25875528b1/genoray-0.11.2-py3-none-any.whl @@ -268,24 +270,24 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-3_kmp_llvm.conda - conda: https://conda.anaconda.org/conda-forge/noarch/_x86_64-microarch-level-1-2_x86_64.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.5.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.6.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/awkward-2.8.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/awkward-cpp-45-py310h0900883_100.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h094d708_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.8.9-hada3f3f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.2-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.1-hc2d532b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-h8170a11_5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.9.5-hca9d837_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.18.0-h7b13e6b_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.12.3-h773eac8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.15-h46af1f8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.3-hc2d532b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.5-hc2d532b_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.4-h7d42c6f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-h5b777a2_5.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/awkward-2.8.3-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/awkward-cpp-46-py310h0900883_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h59ae206_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.0-h5e3027f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.1-hafb2847_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-h2dcaabb_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.1-hb50fa74_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.19.0-h7962f60_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.0-h35de22e_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.17-h50d7d24_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.3-hafb2847_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.7-hafb2847_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.5-h2811929_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-hffe9a0f_8.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.13.0-h3cf044e_1.conda @@ -295,16 +297,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py310hf71b8c6_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2025.1.31-hbcca054_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.1.31-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.4.26-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.4.26-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py310h8deb56e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/commitizen-4.6.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.0-py310h89163eb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.8.2-py310hff52083_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.2-py310h89163eb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.10.17-py310hd8ed1ab_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/cyvcf2-0.31.1-py310h0195497_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/decli-0.6.2-pyhd8ed1ab_1.conda @@ -312,39 +314,41 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/einops-0.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/elfutils-0.192-h7f4e02f_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.18.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.3.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.5.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hbabe93e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gmpy2-2.1.5-py310he8512ff_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.8.9-h5746830_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gmpy2-2.2.1-py310he8512ff_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.8.9-h86084c0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gsl-2.7-he838d99_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/htslib-1.21-h566b1c6_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.28-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/icecream-2.1.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.12-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.6.1-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.7.0-h40b2b14_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.4.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250127.1-cxx17_hbbce691_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h4585015_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-19.0.1-h27f8bab_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-19.0.1-hcb10f89_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-19.0.1-hcb10f89_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-19.0.1-h1bed206_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.23.1-h8e693c7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h75ea233_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-20.0.0-hebdba27_3_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-20.0.0-hcb10f89_3_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-20.0.0-hcb10f89_3_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-20.0.0-h1bed206_3_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.24.1-h8e693c7_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-31_hfdb39a5_mkl.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda @@ -352,88 +356,88 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-31_h372d94f_mkl.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.13.0-h332b0f4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.22-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.24-h86f0d12_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.0-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h767d61c_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-0.23.1-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.1.0-h767d61c_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-0.24.1-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.36.0-hc4361e1_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.36.0-h0121fbd_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.71.0-he753a82_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.71.0-h8e591d7_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.11.2-default_h0d58e46_1001.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h4ce23a2_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libidn2-2.3.8-ha4ef2c3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-31_hc41d3b0_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmicrohttpd-1.0.1-hbc5bc17_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.20.0-hd1b1c89_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.20.0-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-19.0.1-h081d1f1_8_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h501fc15_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-20.0.0-h081d1f1_3_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h501fc15_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2024.07.02-hba17884_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.1-hee588c1_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-h8f9b012_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.2-hee588c1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.1.0-h8f9b012_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.1.0-h4852527_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libtasn1-4.20.0-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.21.0-h0e7cc3e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.6.0-cpu_mkl_hf6ddc5a_104.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.7.0-cpu_mkl_hf6ddc5a_100.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libunistring-0.9.10-h7f98852_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.6.2-h9c3ff4c_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.10.0-h4c51ac1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.50.0-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.7-h81593ed_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.8-h4bc477f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.0.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-20.1.3-h024ca30_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-20.1.5-h024ca30_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.44.0-py310h1a6248f_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/loguru-0.7.2-py310hff52083_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/loguru-0.7.3-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-hd590300_1001.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/makefun-1.15.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/makefun-1.16.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py310h89163eb_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.3-py310hdb7682f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.6-py39h446a924_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.1-py310hfc232cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.2-py310hfc232cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2024.2.2-ha957f24_16.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mpc-1.3.1-h24ddda3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.1-h90cbb55_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyh29332c3_1.conda - conda: https://conda.anaconda.org/bioconda/linux-64/ncls-0.0.68-py310h1fe012e_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.9.1-h7ab15ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.10.1-h4a9d5aa_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.4.2-pyh267e887_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/nlohmann_json-3.12.0-h3f2d84a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numba-0.61.2-py310h699fe88_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.4-py310hefbff90_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.0-h7b32b05_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.6-py310hefbff90_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.0-h7b32b05_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/optree-0.15.0-py310h3788b33_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.1.1-h17f744e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.1.2-h17f744e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/p11-kit-0.24.1-hc5aa10d_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py310h5eaa309_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-0.23.1-hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-base-0.23.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.17.2-h58526e2_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-0.24.0-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-base-0.24.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.18.0-h3f2d84a_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/pgenlib-0.91.0-py310h275bdba_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.7-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/bioconda/linux-64/pgenlib-0.92.1-py310h275bdba_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.8-pyhe01879c_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/plink2-2.0.0a.6.9-h9948957_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/polars-1.26.0-py310hc556931_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pooch-1.8.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.2.0-pyha770c72_0.conda @@ -442,14 +446,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.36-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/py-cpuinfo-9.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/py-spy-0.4.0-h4c5a871_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-19.0.1-py310hff52083_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-19.0.1-py310hac404ae_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-20.0.0-py310hff52083_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-20.0.0-py310hac404ae_0_cpu.conda - conda: https://conda.anaconda.org/bioconda/linux-64/pybigwig-0.3.24-py310h95e9690_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-2.13.6-pyh1ec8472_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-2.13.6-pyh415d2e4_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-2.13.6-pyhc790b64_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-2.13.6-pyh217bc35_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.3-pyh3cfb1c2_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.1-py310hc1293b2_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.4-pyh3cfb1c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.2-py310hbcd0ec0_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/bioconda/noarch/pyranges-0.1.4-pyhdfd78af_0.tar.bz2 - conda: https://conda.anaconda.org/bioconda/linux-64/pysam-0.23.0-py310h64e62c9_0.tar.bz2 @@ -461,9 +465,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.10.17-hd6af730_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.10-6_cp310.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.6.0-cpu_mkl_py310_h8ec2884_104.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-cpu-2.6.0-cpu_mkl_hc60beec_104.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.10-7_cp310.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.7.0-cpu_mkl_py310_h8ec2884_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-cpu-2.7.0-cpu_mkl_hc60beec_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py310h89163eb_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/questionary-2.1.0-pyhd8ed1ab_1.conda @@ -471,8 +475,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.0.0-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.6-py310h01b0e6a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.16-hba75a32_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.11-py310h31ffbac_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.18-h763c568_1.conda - conda: https://conda.anaconda.org/bioconda/linux-64/samtools-1.21-h96c455f_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.8.2-pyhff2d567_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_1.conda @@ -481,40 +485,40 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.1-h8bd8927_1.conda - conda: https://conda.anaconda.org/bioconda/linux-64/sorted_nearest-0.0.39-py310h1fe012e_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sympy-1.13.3-pyh2585a3b_105.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.13.0-hceb3a55_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/termcolor-2.5.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/textual-3.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/textual-3.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.4.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.15.2-pyhff008b6_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.15.2-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.2-h801b22e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.15.4-pyh9571d03_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.15.4-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.4-haa4fddc_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.13.2-h0e9735f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.13.2-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_inspect-0.9.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-1.0.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py310h3788b33_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.7.2-h2f11bb8_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.30.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.7.8-h2f11bb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.31.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py310ha75aee5_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py310ha75aee5_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda - pypi: https://files.pythonhosted.org/packages/2d/ea/d6230cc9772edca0fd8c91638dc1c2e2def09b9a22cfabe6532906e96aea/basenji2_pytorch-0.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/94/31/87045d1c66ee10a52486c9d2047bc69f00f2689f69401bb1e998afb4b205/beartype-0.21.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/53/21f7b97e82772caa61541348427f42435120b32961c92d16f9c8ce9757d6/cslug-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c8/14/299f99ce0fde4985cc5ba6f2258c624a5b9bbc547c3d243d99919ca53761/cyclopts-3.14.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/da/a5/5286a2f354dc64a5afbbb6eef49c52b73b4d984fb919b47a06bdc653e086/cyclopts-3.16.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d5/7c/e9fcff7623954d86bdc17782036cbf715ecab1bec4847c008557affe1ca8/docstring_parser-0.16-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/a9/e9fb0424afb091da2212cb45711449167198091893b5b1b41a25875528b1/genoray-0.11.2-py3-none-any.whl @@ -523,7 +527,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/a9/a6/aa38bddc9f8d90e5ce14023f06ccbf642ab5d507da1ffafb031c0f332dc6/numerary-0.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/bc/246f452431c592a2a424050e8bb9ccf494fb47613fd97c912f4d573a5e3b/phantom_types-3.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/45/38ae786fb646e5032a982029ad1c0964433e74b67e328d2c9d2fc6691639/pysam-0.23.0-cp310-cp310-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/82/ff/5701f79317a1a03e5ee8a1bf48e7273a8445162a2774e51fc06411a67c89/pytorch_lightning-2.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/de/a9/e14821cfaf08e8d78185cca0477c9d3a62bafe1b4b530100f7b66bb1f7bb/pytorch_lightning-2.5.1.post0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/fd/bc/cc4e3dbc5e7992398dcb7a8eda0cbcf4fb792a0cdb93f857b478bf3cf884/rich_rst-1.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cd/1f/10190182dd698c1d65cace2b85fd149206182f18adc48032103606e00789/seqpro-0.4.2-cp39-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c6/64/3d24181aaea3fb892d4a46f8171845782ee364d60e9494426daf31d12f47/tbb-2022.1.0-py2.py3-none-manylinux_2_28_x86_64.whl @@ -545,24 +549,24 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.9.0-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.5.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.6.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/awkward-2.8.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/awkward-cpp-45-py312ha6dbfeb_100.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h094d708_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.8.9-hada3f3f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.2-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.1-hc2d532b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-h8170a11_5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.9.5-hca9d837_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.18.0-h7b13e6b_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.12.3-h773eac8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.15-h46af1f8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.3-hc2d532b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.5-hc2d532b_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.4-h7d42c6f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-h5b777a2_5.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/awkward-2.8.3-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/awkward-cpp-46-py312ha6dbfeb_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h59ae206_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.0-h5e3027f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.1-hafb2847_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-h2dcaabb_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.1-hb50fa74_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.19.0-h7962f60_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.0-h35de22e_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.17-h50d7d24_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.3-hafb2847_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.7-hafb2847_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.5-h2811929_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-hffe9a0f_8.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.13.0-h3cf044e_1.conda @@ -573,21 +577,25 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.13.4-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.2.0-pyh29332c3_4.conda - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.2.0-h82add2a_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py312h2ec8cdc_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2025.1.31-hbcca054_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.1.31-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.4.26-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.4.26-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/commitizen-4.6.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.0-py312h178313f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.8.2-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.2-py312h68727a3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.2-py312h178313f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.10-py312hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/bioconda/linux-64/cyvcf2-0.31.1-py312h68a07e8_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.14-py312h2ec8cdc_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/decli-0.6.2-pyhd8ed1ab_1.conda @@ -598,52 +606,60 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/einops-0.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/elfutils-0.192-h7f4e02f_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fast-histogram-0.14-py312hc0a28a1_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.18.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.3.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.58.0-py312h178313f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.13.3-ha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.5.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hbabe93e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gmpy2-2.2.1-py312h7201bc8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.8.9-h5746830_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.8.9-h86084c0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gsl-2.7-he838d99_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/htslib-1.21-h566b1c6_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.28-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/icecream-2.1.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.12-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.6.1-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.7.0-h40b2b14_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.5-pyh3099207_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-8.35.0-pyh907856f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-8.17.2-pyh41d4057_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.4.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.23.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2024.10.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.4.1-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.7.2-pyh31011fe_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.8.0-pyh31011fe_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.14-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.15-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.8-py312h84d6215_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.17-h717163a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h0aef613_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250127.1-cxx17_hbbce691_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h4585015_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-20.0.0-hf00d7f4_1_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-20.0.0-hcb10f89_1_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-20.0.0-hcb10f89_1_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-20.0.0-h1bed206_1_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.23.1-h8e693c7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h75ea233_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-20.0.0-hebdba27_3_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-20.0.0-hcb10f89_3_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-20.0.0-hcb10f89_3_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-20.0.0-h1bed206_3_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.24.1-h8e693c7_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-31_hfdb39a5_mkl.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda @@ -651,68 +667,79 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-31_h372d94f_mkl.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.13.0-h332b0f4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.22-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.24-h86f0d12_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.0-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h767d61c_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-0.23.1-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.13.3-ha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.13.3-h48d6fc4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.1.0-h767d61c_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-0.24.1-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.1.0-h69a702a_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.1.0-hcea5267_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.36.0-hc4361e1_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.36.0-h0121fbd_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.71.0-he753a82_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.71.0-h8e591d7_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.11.2-default_h0d58e46_1001.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h4ce23a2_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libidn2-2.3.8-ha4ef2c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.0-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-31_hc41d3b0_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmicrohttpd-1.0.1-hbc5bc17_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.20.0-hd1b1c89_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.20.0-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-20.0.0-h081d1f1_1_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h501fc15_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-20.0.0-h081d1f1_3_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.47-h943b412_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h501fc15_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2024.07.02-hba17884_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.1-hee588c1_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-h8f9b012_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.2-hee588c1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.1.0-h8f9b012_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.1.0-h4852527_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libtasn1-4.20.0-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.21.0-h0e7cc3e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.6.0-cpu_mkl_hf6ddc5a_104.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-hf01ce69_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.7.0-cpu_mkl_hf6ddc5a_100.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libunistring-0.9.10-h7f98852_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.6.2-h9c3ff4c_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.10.0-h4c51ac1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.50.0-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.5.0-h851e524_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.7-h81593ed_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.8-h4bc477f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.0.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-20.1.3-h024ca30_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-20.1.5-h024ca30_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.44.0-py312h374181b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/loguru-0.7.3-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-hd590300_1001.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/makefun-1.15.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/makefun-1.16.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py312h178313f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.3-py312hd3ec401_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.3-py312h6ab59e4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.6-py39h446a924_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.1-py312hba68c3b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.2-py312hba68c3b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.1.3-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2024.2.2-ha957f24_16.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mpc-1.3.1-h24ddda3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.1-h90cbb55_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/myst-parser-4.0.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.2-pyhd8ed1ab_0.conda @@ -724,39 +751,43 @@ environments: - conda: https://conda.anaconda.org/bioconda/linux-64/ncls-0.0.68-py312h0fa9677_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.9.1-h7ab15ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.10.1-h4a9d5aa_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.4.2-pyh267e887_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/nlohmann_json-3.12.0-h3f2d84a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numba-0.61.2-py312h2e6246c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.5-py312h72c5963_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.0-h7b32b05_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.6-py312h72c5963_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.3-h5fbd93e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.0-h7b32b05_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/optree-0.15.0-py312h68727a3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.1.2-h17f744e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/p11-kit-0.24.1-hc5aa10d_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py312hf9745cd_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-0.23.1-hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-base-0.23.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pandoc-3.6.4-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-0.24.0-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-base-0.24.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pandoc-3.7.0.1-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.17.2-h58526e2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.18.0-h3f2d84a_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/patsy-1.0.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/pgenlib-0.91.0-py312h5e9d817_1.tar.bz2 + - conda: https://conda.anaconda.org/bioconda/linux-64/pgenlib-0.92.1-py312h5e9d817_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-pyhd8ed1ab_1004.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-11.2.1-py312h80c1187_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.7-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.8-pyhe01879c_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/plink2-2.0.0a.6.9-h9948957_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/polars-1.26.0-py312hda0fa55_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pooch-1.8.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.2.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/prometheus-cpp-1.3.0-ha5d0236_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.51-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.51-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.36-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.36-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.0.0-py312h66e93f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/py-cpuinfo-9.0.0-pyhd8ed1ab_1.conda @@ -764,13 +795,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-20.0.0-py312h7900ff3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-20.0.0-py312h01725c0_0_cpu.conda - conda: https://conda.anaconda.org/bioconda/linux-64/pybigwig-0.3.24-py312h0e9d276_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-2.13.6-pyh1ec8472_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-2.13.6-pyh415d2e4_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-2.13.6-pyhc790b64_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-2.13.6-pyh217bc35_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.3-pyh3cfb1c2_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.1-py312h3b7be25_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.4-pyh3cfb1c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.2-py312h680f630_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.15.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/bioconda/noarch/pyranges-0.1.4-pyhdfd78af_0.tar.bz2 - conda: https://conda.anaconda.org/bioconda/linux-64/pysam-0.23.0-py312h47d5410_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda @@ -783,34 +815,39 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-7_cp312.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.6.0-cpu_mkl_py312_h6a7998d_104.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-cpu-2.6.0-cpu_mkl_hc60beec_104.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.7.0-cpu_mkl_py312_h6a7998d_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-cpu-2.7.0-cpu_mkl_hc60beec_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py312h178313f_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-26.4.0-py312hbf22597_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/questionary-2.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/questionary-2.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/re2-2024.07.02-h9925aae_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.36.2-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.0.0-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.24.0-py312h3b7be25_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.8-py312h286b59f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.16-hba75a32_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/roman-numerals-py-3.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.25.1-py312h680f630_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.11-py312h1d08497_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.18-h763c568_1.conda - conda: https://conda.anaconda.org/bioconda/linux-64/samtools-1.21-h96c455f_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.15.2-py312ha707e6e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/seaborn-0.13.2-hd8ed1ab_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/seaborn-base-0.13.2-pyhd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.8.2-pyhff2d567_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/sleef-3.8-h1b44611_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.1-h8bd8927_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-3.0.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/sorted_nearest-0.0.39-py312h0fa9677_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-8.1.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-8.2.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-autobuild-2024.10.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-autodoc-typehints-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-autodoc-typehints-3.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-book-theme-1.1.4-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_1.conda @@ -820,39 +857,43 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/starlette-0.46.2-pyh81abbef_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sympy-1.13.3-pyh2585a3b_105.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/statsmodels-0.14.4-py312hc0a28a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.13.0-hceb3a55_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/termcolor-2.5.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/textual-3.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/textual-3.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.4.2-py312h66e93f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.1-py312h66e93f0_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.4.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.15.2-pyhff008b6_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.15.2-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.2-h801b22e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.15.4-pyh9571d03_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.15.4-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.4-haa4fddc_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.13.2-h0e9735f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.13.2-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_inspect-0.9.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-1.0.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py312h68727a3_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-16.0.0-py312h66e93f0_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.7.2-h2f11bb8_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.34.1-pyh31011fe_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.30.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.7.8-h2f11bb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.34.2-pyh31011fe_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.31.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/watchfiles-1.0.5-py312h12e396e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/websockets-15.0.1-py312h66e93f0_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.14-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h3b0a872_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda @@ -860,9 +901,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312h66e93f0_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda - pypi: https://files.pythonhosted.org/packages/2d/ea/d6230cc9772edca0fd8c91638dc1c2e2def09b9a22cfabe6532906e96aea/basenji2_pytorch-0.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/94/31/87045d1c66ee10a52486c9d2047bc69f00f2689f69401bb1e998afb4b205/beartype-0.21.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/53/21f7b97e82772caa61541348427f42435120b32961c92d16f9c8ce9757d6/cslug-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c8/14/299f99ce0fde4985cc5ba6f2258c624a5b9bbc547c3d243d99919ca53761/cyclopts-3.14.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/da/a5/5286a2f354dc64a5afbbb6eef49c52b73b4d984fb919b47a06bdc653e086/cyclopts-3.16.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d5/7c/e9fcff7623954d86bdc17782036cbf715ecab1bec4847c008557affe1ca8/docstring_parser-0.16-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/a9/e9fb0424afb091da2212cb45711449167198091893b5b1b41a25875528b1/genoray-0.11.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/8e/0eccb528701273640dd4f13678a0c1352176166aecd1ee7f4fa29355132b/hirola-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl @@ -870,7 +911,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/a9/a6/aa38bddc9f8d90e5ce14023f06ccbf642ab5d507da1ffafb031c0f332dc6/numerary-0.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/bc/246f452431c592a2a424050e8bb9ccf494fb47613fd97c912f4d573a5e3b/phantom_types-3.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/06/5c9ed34ec048e51e115cd1b3cf9d9c258e3c75b3105b42db11c0282536a3/pysam-0.23.0-cp312-cp312-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/82/ff/5701f79317a1a03e5ee8a1bf48e7273a8445162a2774e51fc06411a67c89/pytorch_lightning-2.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/de/a9/e14821cfaf08e8d78185cca0477c9d3a62bafe1b4b530100f7b66bb1f7bb/pytorch_lightning-2.5.1.post0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/fd/bc/cc4e3dbc5e7992398dcb7a8eda0cbcf4fb792a0cdb93f857b478bf3cf884/rich_rst-1.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cd/1f/10190182dd698c1d65cace2b85fd149206182f18adc48032103606e00789/seqpro-0.4.2-cp39-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c6/64/3d24181aaea3fb892d4a46f8171845782ee364d60e9494426daf31d12f47/tbb-2022.1.0-py2.py3-none-manylinux_2_28_x86_64.whl @@ -925,8 +966,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.7.1-py310hff52083_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.0-py310h89163eb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.8.2-py310hff52083_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.2-py310h89163eb_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/cyvcf2-0.31.1-py310h0195497_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/decli-0.6.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/decopatch-1.4.10-pyhd8ed1ab_1.conda @@ -936,26 +977,27 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.18.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.3.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.5.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hbabe93e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.8.9-h5746830_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.8.9-h86084c0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gsl-2.7-he838d99_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/htslib-1.21-h566b1c6_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.18-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.28-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/icecream-2.1.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.12-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.6.1-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.6.1-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.7.0-h40b2b14_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_4.conda @@ -973,7 +1015,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-31_he106b2a_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.13.0-h332b0f4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.22-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.24-h86f0d12_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda @@ -1023,7 +1065,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/makefun-1.16.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py310h89163eb_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.6-py310hdb7682f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.6-py39h446a924_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.2-py310hfc232cf_0.conda @@ -1032,11 +1074,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyh29332c3_1.conda - conda: https://conda.anaconda.org/bioconda/linux-64/ncls-0.0.68-py310h1fe012e_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.9.1-h7ab15ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.10.1-h4a9d5aa_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/nlohmann_json-3.12.0-h3f2d84a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numba-0.61.2-py310h699fe88_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.5-py310hefbff90_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.6-py310hefbff90_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.0-h7b32b05_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.1.2-h17f744e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/p11-kit-0.24.1-hc5aa10d_0.tar.bz2 @@ -1046,7 +1088,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-base-0.24.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.18.0-h3f2d84a_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/pgenlib-0.91.0-py310h275bdba_1.tar.bz2 + - conda: https://conda.anaconda.org/bioconda/linux-64/pgenlib-0.92.1-py310h275bdba_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.8-pyhe01879c_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/plink2-2.0.0a.6.9-h9948957_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda @@ -1083,10 +1125,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.0.0-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.10-py310h31ffbac_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.11-py310h31ffbac_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.18-h763c568_1.conda - conda: https://conda.anaconda.org/bioconda/linux-64/samtools-1.21-h96c455f_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.1.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.8.0-pyhff2d567_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.1-h8bd8927_1.conda @@ -1106,14 +1148,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.15.4-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.4-haa4fddc_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.13.2-h0e9735f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.13.2-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_inspect-0.9.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-1.0.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py310h3788b33_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.7.4-h2f11bb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.7.8-h2f11bb8_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.31.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 @@ -1121,9 +1163,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py310ha75aee5_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda - - pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/94/31/87045d1c66ee10a52486c9d2047bc69f00f2689f69401bb1e998afb4b205/beartype-0.21.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/53/21f7b97e82772caa61541348427f42435120b32961c92d16f9c8ce9757d6/cslug-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/07/97/526594453e2cdd66076292cb50424907411867532710743057f94afddb4d/cyclopts-3.16.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/da/a5/5286a2f354dc64a5afbbb6eef49c52b73b4d984fb919b47a06bdc653e086/cyclopts-3.16.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d5/7c/e9fcff7623954d86bdc17782036cbf715ecab1bec4847c008557affe1ca8/docstring_parser-0.16-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/a9/e9fb0424afb091da2212cb45711449167198091893b5b1b41a25875528b1/genoray-0.11.2-py3-none-any.whl @@ -1150,21 +1192,21 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.6.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/awkward-2.8.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/awkward-cpp-45-py310h0900883_100.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h66f1c83_6.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.0-hada3f3f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.2-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.1-hc2d532b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-h9312af0_8.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.1-hc373b34_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.19.0-h756d8c7_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.0-h034c9a0_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.17-h73c4702_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.3-hc2d532b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.7-hc2d532b_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.5-h5e5e39d_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-h7cc6b5f_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/awkward-2.8.3-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/awkward-cpp-46-py310h0900883_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h59ae206_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.0-h5e3027f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.1-hafb2847_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-h2dcaabb_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.1-hb50fa74_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.19.0-h7962f60_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.0-h35de22e_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.17-h50d7d24_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.3-hafb2847_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.7-hafb2847_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.5-h2811929_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-hffe9a0f_8.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.13.0-h3cf044e_1.conda @@ -1182,8 +1224,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.7.0-py310hff52083_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.0-py310h89163eb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.8.2-py310hff52083_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.2-py310h89163eb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.10.17-py310hd8ed1ab_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/cyvcf2-0.31.1-py310h0195497_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/decli-0.6.2-pyhd8ed1ab_1.conda @@ -1191,39 +1233,40 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/einops-0.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/elfutils-0.192-h7f4e02f_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.18.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.3.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.5.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hbabe93e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gmpy2-2.2.1-py310he8512ff_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.8.9-h5746830_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.8.9-h86084c0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gsl-2.7-he838d99_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/htslib-1.21-h566b1c6_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.15-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.28-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/icecream-2.1.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.12-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.6.1-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.7.0-h40b2b14_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250127.1-cxx17_hbbce691_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h75ea233_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-20.0.0-hebdba27_2_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-20.0.0-hcb10f89_2_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-20.0.0-hcb10f89_2_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-20.0.0-h1bed206_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-20.0.0-hebdba27_3_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-20.0.0-hcb10f89_3_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-20.0.0-hcb10f89_3_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-20.0.0-h1bed206_3_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.24.1-h8e693c7_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-31_hfdb39a5_mkl.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda @@ -1232,7 +1275,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-31_h372d94f_mkl.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.13.0-h332b0f4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.22-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.24-h86f0d12_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda @@ -1254,7 +1297,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.20.0-hd1b1c89_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.20.0-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-20.0.0-h081d1f1_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-20.0.0-h081d1f1_3_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h501fc15_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2024.07.02-hba17884_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.2-hee588c1_0.conda @@ -1273,15 +1316,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.8-h4bc477f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.0.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-20.1.4-h024ca30_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-20.1.5-h024ca30_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.44.0-py310h1a6248f_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/loguru-0.7.3-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-hd590300_1001.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/makefun-1.15.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/makefun-1.16.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py310h89163eb_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.4-py310hdb7682f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.6-py39h446a924_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.2-py310hfc232cf_0.conda @@ -1294,26 +1337,26 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyh29332c3_1.conda - conda: https://conda.anaconda.org/bioconda/linux-64/ncls-0.0.68-py310h1fe012e_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.9.1-h7ab15ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.10.1-h4a9d5aa_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.4.2-pyh267e887_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/nlohmann_json-3.12.0-h3f2d84a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numba-0.61.2-py310h699fe88_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.5-py310hefbff90_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.6-py310hefbff90_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.0-h7b32b05_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/optree-0.15.0-py310h3788b33_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.1.2-h17f744e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/p11-kit-0.24.1-hc5aa10d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py310h5eaa309_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-0.23.1-hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-base-0.23.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-0.24.0-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-base-0.24.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.18.0-h3f2d84a_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/pgenlib-0.91.0-py310h275bdba_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.7-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/bioconda/linux-64/pgenlib-0.92.1-py310h275bdba_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.8-pyhe01879c_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/plink2-2.0.0a.6.9-h9948957_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/polars-1.26.0-py310hc556931_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pooch-1.8.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.2.0-pyha770c72_0.conda @@ -1325,8 +1368,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-20.0.0-py310hff52083_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-20.0.0-py310hac404ae_0_cpu.conda - conda: https://conda.anaconda.org/bioconda/linux-64/pybigwig-0.3.24-py310h95e9690_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-2.13.6-pyh1ec8472_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-2.13.6-pyh415d2e4_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-2.13.6-pyhc790b64_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-2.13.6-pyh217bc35_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.4-pyh3cfb1c2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.2-py310hbcd0ec0_0.conda @@ -1351,7 +1394,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.0.0-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.9-py310h01b0e6a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.11-py310h31ffbac_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.18-h763c568_1.conda - conda: https://conda.anaconda.org/bioconda/linux-64/samtools-1.21-h96c455f_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.8.2-pyhff2d567_0.conda @@ -1372,18 +1415,18 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.4.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.15.3-pyhf21524f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.15.3-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.3-h1a15894_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.15.4-pyh9571d03_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.15.4-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.4-haa4fddc_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.13.2-h0e9735f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.13.2-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_inspect-0.9.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-1.0.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py310h3788b33_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.7.3-h2f11bb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.7.8-h2f11bb8_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.31.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 @@ -1391,24 +1434,22 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py310ha75aee5_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda - - pypi: https://files.pythonhosted.org/packages/2d/ea/d6230cc9772edca0fd8c91638dc1c2e2def09b9a22cfabe6532906e96aea/basenji2_pytorch-0.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/94/31/87045d1c66ee10a52486c9d2047bc69f00f2689f69401bb1e998afb4b205/beartype-0.21.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/53/21f7b97e82772caa61541348427f42435120b32961c92d16f9c8ce9757d6/cslug-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/51/ec/fce39003eeb778eed2b62675a02bd207388baa135e9d23997b9df074c838/cyclopts-3.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/da/a5/5286a2f354dc64a5afbbb6eef49c52b73b4d984fb919b47a06bdc653e086/cyclopts-3.16.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d5/7c/e9fcff7623954d86bdc17782036cbf715ecab1bec4847c008557affe1ca8/docstring_parser-0.16-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f3/ef/2a6068f6ef0e39c4fc1d0e1ce5e02f105e1b51920655a7a43595668db7ca/genoray-0.10.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/a9/e9fb0424afb091da2212cb45711449167198091893b5b1b41a25875528b1/genoray-0.11.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/8e/0eccb528701273640dd4f13678a0c1352176166aecd1ee7f4fa29355132b/hirola-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/1a/c1/31b3184cba7b257a4a3b5ca5b88b9204ccb7aa02fe3c992280899293ed54/lightning_utilities-0.14.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/a6/aa38bddc9f8d90e5ce14023f06ccbf642ab5d507da1ffafb031c0f332dc6/numerary-0.4.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/55/20/93ef95a37e1aa3c3dd2ca1cd1cba8c8849823311d034921c0ec38949ffad/Pgenlib-0.92.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/5b/bc/246f452431c592a2a424050e8bb9ccf494fb47613fd97c912f4d573a5e3b/phantom_types-3.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/de/a9/e14821cfaf08e8d78185cca0477c9d3a62bafe1b4b530100f7b66bb1f7bb/pytorch_lightning-2.5.1.post0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5a/45/38ae786fb646e5032a982029ad1c0964433e74b67e328d2c9d2fc6691639/pysam-0.23.0-cp310-cp310-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/fd/bc/cc4e3dbc5e7992398dcb7a8eda0cbcf4fb792a0cdb93f857b478bf3cf884/rich_rst-1.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f5/a1/6de4f7bf0a7704a200de5d0fbaf4d333fd5ca56b9a3e6f3a3ad05e99ba98/seqpro-0.3.2-cp39-abi3-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/72/25/973bd6128381951b23cdcd8a9870c6dcfc5606cb864df8eabd82e529f9c1/torchinfo-1.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e0/ee/4d0a7213a6f412afb3483031009a3b970dd7bed3be24de95ab04fba1c05a/torchmetrics-1.7.1-py3-none-any.whl - docs: + - pypi: https://files.pythonhosted.org/packages/cd/1f/10190182dd698c1d65cace2b85fd149206182f18adc48032103606e00789/seqpro-0.4.2-cp39-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c6/64/3d24181aaea3fb892d4a46f8171845782ee364d60e9494426daf31d12f47/tbb-2022.1.0-py2.py3-none-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/06/bb/09a6dc2f1110b409d6d2f96429969d7466bde9bf4ad8b2e682d851ef104b/tcmlib-1.3.0-py2.py3-none-manylinux_2_28_x86_64.whl + - pypi: ./ + py311: channels: - url: https://conda.anaconda.org/conda-forge/ - url: https://conda.anaconda.org/bioconda/ @@ -1418,699 +1459,85 @@ environments: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-3_kmp_llvm.conda - conda: https://conda.anaconda.org/conda-forge/noarch/_x86_64-microarch-level-1-2_x86_64.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.9.0-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.6.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/awkward-2.8.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/awkward-cpp-45-py312ha6dbfeb_100.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h66f1c83_6.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.0-hada3f3f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.2-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.1-hc2d532b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-h9312af0_8.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.1-hc373b34_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.19.0-h756d8c7_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.0-h034c9a0_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.17-h73c4702_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.3-hc2d532b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.7-hc2d532b_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.5-h5e5e39d_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-h7cc6b5f_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/awkward-2.8.3-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/awkward-cpp-46-py311hc248303_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h59ae206_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.0-h5e3027f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.1-hafb2847_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-h2dcaabb_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.1-hb50fa74_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.19.0-h7962f60_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.0-h35de22e_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.17-h50d7d24_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.3-hafb2847_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.7-hafb2847_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.5-h2811929_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-hffe9a0f_8.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.13.0-h3cf044e_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-common-cpp-12.8.0-h736e048_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-files-datalake-cpp-12.12.0-ha633028_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/bcftools-1.21-h3a4d415_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.13.4-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.2.0-pyh29332c3_4.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.2.0-h82add2a_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py312h2ec8cdc_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py311hfdbb021_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.4.26-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.4.26-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py311hf29c0ef_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.7.0-py312h7900ff3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.0-py312h178313f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.10-py312hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/cyvcf2-0.31.1-py312h68a07e8_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.14-py312h2ec8cdc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.8.2-py311h38be061_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.2-py311h2dc5d0c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.11.12-py311hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/bioconda/linux-64/cyvcf2-0.31.1-py311h94e71d4_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/decli-0.6.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/decopatch-1.4.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/einops-0.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/elfutils-0.192-h7f4e02f_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.18.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.3.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hbabe93e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gmpy2-2.2.1-py312h7201bc8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.8.9-h5746830_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gsl-2.7-he838d99_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/htslib-1.21-h566b1c6_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.15-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/icecream-2.1.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.10-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.6.1-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.5-pyh3099207_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.2.0-pyhfb0248b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.7-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.23.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.4.1-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.7.2-pyh31011fe_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.15-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250127.1-cxx17_hbbce691_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h75ea233_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-20.0.0-hebdba27_2_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-20.0.0-hcb10f89_2_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-20.0.0-hcb10f89_2_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-20.0.0-h1bed206_2_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.24.1-h8e693c7_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-31_hfdb39a5_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-31_h372d94f_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.13.0-h332b0f4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.22-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.0-h5888daf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.1.0-h767d61c_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-0.24.1-h5888daf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.36.0-hc4361e1_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.36.0-h0121fbd_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.71.0-h8e591d7_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.11.2-default_h0d58e46_1001.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h4ce23a2_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libidn2-2.3.8-ha4ef2c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-31_hc41d3b0_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libmicrohttpd-1.0.1-hbc5bc17_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.20.0-hd1b1c89_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.20.0-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-20.0.0-h081d1f1_2_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h501fc15_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2024.07.02-hba17884_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.2-hee588c1_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.1.0-h8f9b012_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.1.0-h4852527_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libtasn1-4.20.0-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.21.0-h0e7cc3e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.7.0-cpu_mkl_hf6ddc5a_100.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libunistring-0.9.10-h7f98852_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.6.2-h9c3ff4c_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.10.0-h4c51ac1_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.50.0-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.8-h4bc477f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.0.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-20.1.4-h024ca30_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.44.0-py312h374181b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/loguru-0.7.3-pyh707e725_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-hd590300_1001.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/makefun-1.15.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py312h178313f_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.4-py312h6ab59e4_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.2-py312hba68c3b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.1.3-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2024.2.2-ha957f24_16.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.7.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/mpc-1.3.1-h24ddda3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.1-h90cbb55_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/myst-parser-4.0.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.16.6-hb482800_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.6-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.16.6-hed9df3c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbsphinx-0.9.7-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/ncls-0.0.68-py312h0fa9677_5.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.9.1-h7ab15ed_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.4.2-pyh267e887_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/nlohmann_json-3.12.0-h3f2d84a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numba-0.61.2-py312h2e6246c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.5-py312h72c5963_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.0-h7b32b05_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/optree-0.15.0-py312h68727a3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.1.2-h17f744e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/p11-kit-0.24.1-hc5aa10d_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py312hf9745cd_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-0.23.1-hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-base-0.23.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pandoc-3.6.4-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.18.0-h3f2d84a_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-pyhd8ed1ab_1004.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.8-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/plink2-2.0.0a.6.9-h9948957_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/polars-1.26.0-py312hda0fa55_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pooch-1.8.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.2.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/prometheus-cpp-1.3.0-ha5d0236_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.51-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.51-hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.0.0-py312h66e93f0_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/py-cpuinfo-9.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/py-spy-0.4.0-h4c5a871_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-20.0.0-py312h7900ff3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-20.0.0-py312h01725c0_0_cpu.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/pybigwig-0.3.24-py312h0e9d276_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-2.13.6-pyh1ec8472_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-2.13.6-pyh415d2e4_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.4-pyh3cfb1c2_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.2-py312h680f630_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.15.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/bioconda/noarch/pyranges-0.1.4-pyhdfd78af_0.tar.bz2 - - conda: https://conda.anaconda.org/bioconda/linux-64/pysam-0.23.0-py312h47d5410_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-benchmark-5.1.0-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cases-3.8.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-6.1.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.10-h9e4cc4f_0_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-7_cp312.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.7.0-cpu_mkl_py312_h6a7998d_100.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-cpu-2.7.0-cpu_mkl_hc60beec_100.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py312h178313f_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-26.4.0-py312hbf22597_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/questionary-2.0.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/re2-2024.07.02-h9925aae_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.36.2-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.0.0-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/roman-numerals-py-3.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.24.0-py312h3b7be25_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.9-py312h286b59f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.18-h763c568_1.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/samtools-1.21-h96c455f_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.8.2-pyhff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/sleef-3.8-h1b44611_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.1-h8bd8927_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/bioconda/linux-64/sorted_nearest-0.0.39-py312h0fa9677_5.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.7-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-8.2.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-autobuild-2024.10.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-autodoc-typehints-3.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-book-theme-1.1.4-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/starlette-0.46.2-pyh81abbef_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.13.0-hceb3a55_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/termcolor-2.5.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/textual-3.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.4.2-py312h66e93f0_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.4.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.15.3-pyhf21524f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.15.3-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.3-h1a15894_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.13.2-h0e9735f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.13.2-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_inspect-0.9.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-1.0.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py312h68727a3_5.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.7.3-h2f11bb8_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.34.2-pyh31011fe_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.31.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/watchfiles-1.0.5-py312h12e396e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/websockets-15.0.1-py312h66e93f0_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.14-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h3b0a872_7.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312h66e93f0_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda - - pypi: https://files.pythonhosted.org/packages/2d/ea/d6230cc9772edca0fd8c91638dc1c2e2def09b9a22cfabe6532906e96aea/basenji2_pytorch-0.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/28/53/21f7b97e82772caa61541348427f42435120b32961c92d16f9c8ce9757d6/cslug-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/51/ec/fce39003eeb778eed2b62675a02bd207388baa135e9d23997b9df074c838/cyclopts-3.16.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d5/7c/e9fcff7623954d86bdc17782036cbf715ecab1bec4847c008557affe1ca8/docstring_parser-0.16-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f3/ef/2a6068f6ef0e39c4fc1d0e1ce5e02f105e1b51920655a7a43595668db7ca/genoray-0.10.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ac/8e/0eccb528701273640dd4f13678a0c1352176166aecd1ee7f4fa29355132b/hirola-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/1a/c1/31b3184cba7b257a4a3b5ca5b88b9204ccb7aa02fe3c992280899293ed54/lightning_utilities-0.14.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a9/a6/aa38bddc9f8d90e5ce14023f06ccbf642ab5d507da1ffafb031c0f332dc6/numerary-0.4.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/18/ec/5434c4a6012ef2ff12d0e71b6c341532686ee82d63e5101717abc24eb3f5/pgenlib-0.92.0.tar.gz - - pypi: https://files.pythonhosted.org/packages/5b/bc/246f452431c592a2a424050e8bb9ccf494fb47613fd97c912f4d573a5e3b/phantom_types-3.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/de/a9/e14821cfaf08e8d78185cca0477c9d3a62bafe1b4b530100f7b66bb1f7bb/pytorch_lightning-2.5.1.post0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fd/bc/cc4e3dbc5e7992398dcb7a8eda0cbcf4fb792a0cdb93f857b478bf3cf884/rich_rst-1.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f5/a1/6de4f7bf0a7704a200de5d0fbaf4d333fd5ca56b9a3e6f3a3ad05e99ba98/seqpro-0.3.2-cp39-abi3-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/72/25/973bd6128381951b23cdcd8a9870c6dcfc5606cb864df8eabd82e529f9c1/torchinfo-1.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e0/ee/4d0a7213a6f412afb3483031009a3b970dd7bed3be24de95ab04fba1c05a/torchmetrics-1.7.1-py3-none-any.whl - py310: - channels: - - url: https://conda.anaconda.org/conda-forge/ - - url: https://conda.anaconda.org/bioconda/ - indexes: - - https://pypi.org/simple - packages: - linux-64: - - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-3_kmp_llvm.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/_x86_64-microarch-level-1-2_x86_64.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.6.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/awkward-2.8.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/awkward-cpp-45-py310h0900883_100.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h66f1c83_6.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.0-hada3f3f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.2-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.1-hc2d532b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-h9312af0_8.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.1-hc373b34_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.19.0-h756d8c7_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.0-h034c9a0_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.17-h73c4702_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.3-hc2d532b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.7-hc2d532b_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.5-h5e5e39d_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-h7cc6b5f_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.13.0-h3cf044e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-common-cpp-12.8.0-h736e048_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-files-datalake-cpp-12.12.0-ha633028_1.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/bcftools-1.21-h3a4d415_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py310hf71b8c6_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.4.26-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.4.26-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py310h8deb56e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.7.0-py310hff52083_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.0-py310h89163eb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.10.17-py310hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/cyvcf2-0.31.1-py310h0195497_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/decli-0.6.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/decopatch-1.4.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/einops-0.8.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/elfutils-0.192-h7f4e02f_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.18.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.3.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hbabe93e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gmpy2-2.2.1-py310he8512ff_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.8.9-h5746830_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gsl-2.7-he838d99_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/htslib-1.21-h566b1c6_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.15-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/icecream-2.1.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.10-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.6.1-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250127.1-cxx17_hbbce691_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h75ea233_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-20.0.0-hebdba27_2_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-20.0.0-hcb10f89_2_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-20.0.0-hcb10f89_2_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-20.0.0-h1bed206_2_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.24.1-h8e693c7_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-31_hfdb39a5_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-31_h372d94f_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.13.0-h332b0f4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.22-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.0-h5888daf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.1.0-h767d61c_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-0.24.1-h5888daf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.36.0-hc4361e1_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.36.0-h0121fbd_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.71.0-h8e591d7_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.11.2-default_h0d58e46_1001.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h4ce23a2_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libidn2-2.3.8-ha4ef2c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-31_hc41d3b0_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libmicrohttpd-1.0.1-hbc5bc17_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.20.0-hd1b1c89_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.20.0-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-20.0.0-h081d1f1_2_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h501fc15_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2024.07.02-hba17884_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.2-hee588c1_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.1.0-h8f9b012_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.1.0-h4852527_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libtasn1-4.20.0-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.21.0-h0e7cc3e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.7.0-cpu_mkl_hf6ddc5a_100.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libunistring-0.9.10-h7f98852_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.6.2-h9c3ff4c_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.10.0-h4c51ac1_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.50.0-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.8-h4bc477f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.0.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-20.1.4-h024ca30_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.44.0-py310h1a6248f_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/loguru-0.7.3-pyh707e725_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-hd590300_1001.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/makefun-1.15.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py310h89163eb_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.4-py310hdb7682f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.2-py310hfc232cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2024.2.2-ha957f24_16.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.7.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/mpc-1.3.1-h24ddda3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.1-h90cbb55_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/ncls-0.0.68-py310h1fe012e_5.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.9.1-h7ab15ed_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.4.2-pyh267e887_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/nlohmann_json-3.12.0-h3f2d84a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numba-0.61.2-py310h699fe88_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.5-py310hefbff90_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.0-h7b32b05_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/optree-0.15.0-py310h3788b33_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.1.2-h17f744e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/p11-kit-0.24.1-hc5aa10d_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py310h5eaa309_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-0.23.1-hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-base-0.23.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.18.0-h3f2d84a_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.8-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/plink2-2.0.0a.6.9-h9948957_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/polars-1.26.0-py310hc556931_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pooch-1.8.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.2.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/prometheus-cpp-1.3.0-ha5d0236_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.36-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.36-hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/py-cpuinfo-9.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/py-spy-0.4.0-h4c5a871_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-20.0.0-py310hff52083_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-20.0.0-py310hac404ae_0_cpu.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/pybigwig-0.3.24-py310h95e9690_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-2.13.6-pyh1ec8472_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-2.13.6-pyh415d2e4_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.4-pyh3cfb1c2_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.2-py310hbcd0ec0_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/bioconda/noarch/pyranges-0.1.4-pyhdfd78af_0.tar.bz2 - - conda: https://conda.anaconda.org/bioconda/linux-64/pysam-0.23.0-py310h64e62c9_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-benchmark-5.1.0-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cases-3.8.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-6.1.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.10.17-hd6af730_0_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.10-7_cp310.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.7.0-cpu_mkl_py310_h8ec2884_100.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-cpu-2.7.0-cpu_mkl_hc60beec_100.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py310h89163eb_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/questionary-2.1.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/re2-2024.07.02-h9925aae_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.0.0-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.9-py310h01b0e6a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.18-h763c568_1.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/samtools-1.21-h96c455f_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.8.2-pyhff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/sleef-3.8-h1b44611_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.1-h8bd8927_1.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/sorted_nearest-0.0.39-py310h1fe012e_5.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.13.0-hceb3a55_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/termcolor-2.5.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/textual-3.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.4.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.15.3-pyhf21524f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.15.3-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.3-h1a15894_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.13.2-h0e9735f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.13.2-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_inspect-0.9.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-1.0.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py310h3788b33_5.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.7.3-h2f11bb8_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.31.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py310ha75aee5_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda - - pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/28/53/21f7b97e82772caa61541348427f42435120b32961c92d16f9c8ce9757d6/cslug-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/51/ec/fce39003eeb778eed2b62675a02bd207388baa135e9d23997b9df074c838/cyclopts-3.16.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d5/7c/e9fcff7623954d86bdc17782036cbf715ecab1bec4847c008557affe1ca8/docstring_parser-0.16-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b3/a9/e9fb0424afb091da2212cb45711449167198091893b5b1b41a25875528b1/genoray-0.11.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ac/8e/0eccb528701273640dd4f13678a0c1352176166aecd1ee7f4fa29355132b/hirola-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/a9/a6/aa38bddc9f8d90e5ce14023f06ccbf642ab5d507da1ffafb031c0f332dc6/numerary-0.4.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5b/bc/246f452431c592a2a424050e8bb9ccf494fb47613fd97c912f4d573a5e3b/phantom_types-3.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5a/45/38ae786fb646e5032a982029ad1c0964433e74b67e328d2c9d2fc6691639/pysam-0.23.0-cp310-cp310-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/fd/bc/cc4e3dbc5e7992398dcb7a8eda0cbcf4fb792a0cdb93f857b478bf3cf884/rich_rst-1.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cd/1f/10190182dd698c1d65cace2b85fd149206182f18adc48032103606e00789/seqpro-0.4.2-cp39-abi3-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c6/64/3d24181aaea3fb892d4a46f8171845782ee364d60e9494426daf31d12f47/tbb-2022.1.0-py2.py3-none-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/06/bb/09a6dc2f1110b409d6d2f96429969d7466bde9bf4ad8b2e682d851ef104b/tcmlib-1.3.0-py2.py3-none-manylinux_2_28_x86_64.whl - - pypi: ./ - py311: - channels: - - url: https://conda.anaconda.org/conda-forge/ - - url: https://conda.anaconda.org/bioconda/ - indexes: - - https://pypi.org/simple - packages: - linux-64: - - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-3_kmp_llvm.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/_x86_64-microarch-level-1-2_x86_64.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.6.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/awkward-2.8.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/awkward-cpp-45-py311hc248303_100.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h66f1c83_6.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.0-hada3f3f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.2-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.1-hc2d532b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-h9312af0_8.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.1-hc373b34_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.19.0-h756d8c7_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.0-h034c9a0_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.17-h73c4702_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.3-hc2d532b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.7-hc2d532b_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.5-h5e5e39d_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-h7cc6b5f_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.13.0-h3cf044e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-common-cpp-12.8.0-h736e048_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-files-datalake-cpp-12.12.0-ha633028_1.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/bcftools-1.21-h3a4d415_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py311hfdbb021_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.4.26-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.4.26-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py311hf29c0ef_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.7.0-py311h38be061_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.0-py311h2dc5d0c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.11.12-py311hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/cyvcf2-0.31.1-py311h94e71d4_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/decli-0.6.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/decopatch-1.4.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/einops-0.8.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/elfutils-0.192-h7f4e02f_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.18.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.3.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.5.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hbabe93e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gmpy2-2.2.1-py311h0f6cedb_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.8.9-h5746830_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.8.9-h86084c0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gsl-2.7-he838d99_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/htslib-1.21-h566b1c6_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.15-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.28-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/icecream-2.1.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.12-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.6.1-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.7.0-h40b2b14_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250127.1-cxx17_hbbce691_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h75ea233_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-20.0.0-hebdba27_2_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-20.0.0-hcb10f89_2_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-20.0.0-hcb10f89_2_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-20.0.0-h1bed206_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-20.0.0-hebdba27_3_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-20.0.0-hcb10f89_3_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-20.0.0-hcb10f89_3_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-20.0.0-h1bed206_3_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.24.1-h8e693c7_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-31_hfdb39a5_mkl.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda @@ -2119,7 +1546,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-31_h372d94f_mkl.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.13.0-h332b0f4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.22-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.24-h86f0d12_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda @@ -2141,7 +1568,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.20.0-hd1b1c89_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.20.0-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-20.0.0-h081d1f1_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-20.0.0-h081d1f1_3_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h501fc15_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2024.07.02-hba17884_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.2-hee588c1_0.conda @@ -2160,15 +1587,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.8-h4bc477f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.0.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-20.1.4-h024ca30_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-20.1.5-h024ca30_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.44.0-py311h9c9ff8c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/loguru-0.7.3-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-hd590300_1001.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/makefun-1.15.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/makefun-1.16.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py311h2dc5d0c_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.4-py311h9b3a049_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.6-py39h446a924_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.2-py311hc51bbc3_0.conda @@ -2181,26 +1608,26 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyh29332c3_1.conda - conda: https://conda.anaconda.org/bioconda/linux-64/ncls-0.0.68-py311haab0aaa_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.9.1-h7ab15ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.10.1-h4a9d5aa_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.4.2-pyh267e887_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/nlohmann_json-3.12.0-h3f2d84a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numba-0.61.2-py311h4e1c48f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.5-py311h5d046bc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.6-py311h5d046bc_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.0-h7b32b05_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/optree-0.15.0-py311hd18a35c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.1.2-h17f744e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/p11-kit-0.24.1-hc5aa10d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py311h7db5c69_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-0.23.1-hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-base-0.23.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-0.24.0-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-base-0.24.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.18.0-h3f2d84a_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/pgenlib-0.91.0-py311h2de2dd3_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.7-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/bioconda/linux-64/pgenlib-0.92.1-py311h2de2dd3_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.8-pyhe01879c_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/plink2-2.0.0a.6.9-h9948957_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/polars-1.26.0-py311h03f6b34_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pooch-1.8.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.2.0-pyha770c72_0.conda @@ -2212,8 +1639,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-20.0.0-py311h38be061_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-20.0.0-py311h4854187_0_cpu.conda - conda: https://conda.anaconda.org/bioconda/linux-64/pybigwig-0.3.24-py311hd8c7dd8_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-2.13.6-pyh1ec8472_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-2.13.6-pyh415d2e4_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-2.13.6-pyhc790b64_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-2.13.6-pyh217bc35_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.4-pyh3cfb1c2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.2-py311hdae7d1d_0.conda @@ -2238,7 +1665,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.0.0-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.9-py311h39e1cd3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.11-py311h82b16fd_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.18-h763c568_1.conda - conda: https://conda.anaconda.org/bioconda/linux-64/samtools-1.21-h96c455f_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.8.2-pyhff2d567_0.conda @@ -2259,18 +1686,18 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.4.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.15.3-pyhf21524f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.15.3-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.3-h1a15894_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.15.4-pyh9571d03_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.15.4-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.4-haa4fddc_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.13.2-h0e9735f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.13.2-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_inspect-0.9.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-1.0.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py311hd18a35c_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.7.3-h2f11bb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.7.8-h2f11bb8_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.31.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 @@ -2278,9 +1705,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py311h9ecbd09_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda - - pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/94/31/87045d1c66ee10a52486c9d2047bc69f00f2689f69401bb1e998afb4b205/beartype-0.21.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/53/21f7b97e82772caa61541348427f42435120b32961c92d16f9c8ce9757d6/cslug-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/51/ec/fce39003eeb778eed2b62675a02bd207388baa135e9d23997b9df074c838/cyclopts-3.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/da/a5/5286a2f354dc64a5afbbb6eef49c52b73b4d984fb919b47a06bdc653e086/cyclopts-3.16.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d5/7c/e9fcff7623954d86bdc17782036cbf715ecab1bec4847c008557affe1ca8/docstring_parser-0.16-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/a9/e9fb0424afb091da2212cb45711449167198091893b5b1b41a25875528b1/genoray-0.11.2-py3-none-any.whl @@ -2307,21 +1734,21 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.6.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/awkward-2.8.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/awkward-cpp-45-py312ha6dbfeb_100.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h66f1c83_6.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.0-hada3f3f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.2-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.1-hc2d532b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-h9312af0_8.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.1-hc373b34_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.19.0-h756d8c7_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.0-h034c9a0_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.17-h73c4702_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.3-hc2d532b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.7-hc2d532b_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.5-h5e5e39d_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-h7cc6b5f_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/awkward-2.8.3-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/awkward-cpp-46-py312ha6dbfeb_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h59ae206_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.0-h5e3027f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.1-hafb2847_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-h2dcaabb_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.1-hb50fa74_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.19.0-h7962f60_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.0-h35de22e_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.17-h50d7d24_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.3-hafb2847_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.7-hafb2847_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.5-h2811929_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-hffe9a0f_8.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.13.0-h3cf044e_1.conda @@ -2339,8 +1766,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.7.0-py312h7900ff3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.0-py312h178313f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.8.2-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.2-py312h178313f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.10-py312hd8ed1ab_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/cyvcf2-0.31.1-py312h68a07e8_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/decli-0.6.2-pyhd8ed1ab_1.conda @@ -2348,39 +1775,40 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/einops-0.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/elfutils-0.192-h7f4e02f_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.18.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.3.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.5.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hbabe93e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gmpy2-2.2.1-py312h7201bc8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.8.9-h5746830_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.8.9-h86084c0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gsl-2.7-he838d99_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/htslib-1.21-h566b1c6_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.15-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.28-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/icecream-2.1.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.12-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.6.1-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.7.0-h40b2b14_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250127.1-cxx17_hbbce691_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h75ea233_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-20.0.0-hebdba27_2_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-20.0.0-hcb10f89_2_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-20.0.0-hcb10f89_2_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-20.0.0-h1bed206_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-20.0.0-hebdba27_3_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-20.0.0-hcb10f89_3_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-20.0.0-hcb10f89_3_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-20.0.0-h1bed206_3_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.24.1-h8e693c7_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-31_hfdb39a5_mkl.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda @@ -2389,7 +1817,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-31_h372d94f_mkl.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.13.0-h332b0f4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.22-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.24-h86f0d12_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda @@ -2411,7 +1839,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.20.0-hd1b1c89_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.20.0-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-20.0.0-h081d1f1_2_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-20.0.0-h081d1f1_3_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h501fc15_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2024.07.02-hba17884_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.2-hee588c1_0.conda @@ -2430,15 +1858,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.8-h4bc477f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.0.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-20.1.4-h024ca30_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-20.1.5-h024ca30_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.44.0-py312h374181b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/loguru-0.7.3-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-hd590300_1001.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/makefun-1.15.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/makefun-1.16.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py312h178313f_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.4-py312h6ab59e4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.6-py39h446a924_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.2-py312hba68c3b_0.conda @@ -2451,26 +1879,26 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyh29332c3_1.conda - conda: https://conda.anaconda.org/bioconda/linux-64/ncls-0.0.68-py312h0fa9677_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.9.1-h7ab15ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.10.1-h4a9d5aa_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.4.2-pyh267e887_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/nlohmann_json-3.12.0-h3f2d84a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numba-0.61.2-py312h2e6246c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.5-py312h72c5963_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.6-py312h72c5963_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.0-h7b32b05_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/optree-0.15.0-py312h68727a3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.1.2-h17f744e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/p11-kit-0.24.1-hc5aa10d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py312hf9745cd_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-0.23.1-hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-base-0.23.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-0.24.0-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-base-0.24.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.18.0-h3f2d84a_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/pgenlib-0.91.0-py312h5e9d817_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.7-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/bioconda/linux-64/pgenlib-0.92.1-py312h5e9d817_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.8-pyhe01879c_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/plink2-2.0.0a.6.9-h9948957_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/polars-1.26.0-py312hda0fa55_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pooch-1.8.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.2.0-pyha770c72_0.conda @@ -2482,8 +1910,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-20.0.0-py312h7900ff3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-20.0.0-py312h01725c0_0_cpu.conda - conda: https://conda.anaconda.org/bioconda/linux-64/pybigwig-0.3.24-py312h0e9d276_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-2.13.6-pyh1ec8472_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-2.13.6-pyh415d2e4_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-2.13.6-pyhc790b64_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-2.13.6-pyh217bc35_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.4-pyh3cfb1c2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.2-py312h680f630_0.conda @@ -2508,7 +1936,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.0.0-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.9-py312h286b59f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.11-py312h1d08497_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.18-h763c568_1.conda - conda: https://conda.anaconda.org/bioconda/linux-64/samtools-1.21-h96c455f_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.8.2-pyhff2d567_0.conda @@ -2529,18 +1957,18 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.4.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.15.3-pyhf21524f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.15.3-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.3-h1a15894_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.15.4-pyh9571d03_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.15.4-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.4-haa4fddc_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.13.2-h0e9735f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.13.2-pyh29332c3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_inspect-0.9.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-1.0.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py312h68727a3_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.7.3-h2f11bb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.7.8-h2f11bb8_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.31.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 @@ -2548,9 +1976,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312h66e93f0_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda - - pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/94/31/87045d1c66ee10a52486c9d2047bc69f00f2689f69401bb1e998afb4b205/beartype-0.21.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/53/21f7b97e82772caa61541348427f42435120b32961c92d16f9c8ce9757d6/cslug-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/51/ec/fce39003eeb778eed2b62675a02bd207388baa135e9d23997b9df074c838/cyclopts-3.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/da/a5/5286a2f354dc64a5afbbb6eef49c52b73b4d984fb919b47a06bdc653e086/cyclopts-3.16.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d5/7c/e9fcff7623954d86bdc17782036cbf715ecab1bec4847c008557affe1ca8/docstring_parser-0.16-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/a9/e9fb0424afb091da2212cb45711449167198091893b5b1b41a25875528b1/genoray-0.11.2-py3-none-any.whl @@ -2696,39 +2124,6 @@ packages: - pkg:pypi/attrs?source=compressed-mapping size: 57181 timestamp: 1741918625732 -- conda: https://conda.anaconda.org/conda-forge/noarch/awkward-2.8.1-pyhd8ed1ab_0.conda - sha256: 74e4c7cd14be1aa6c387a7bf08a35de79d87f3e4b283c3acec9f878ad0a8c1ac - md5: 3c9e3f514e7a261f3daf3a06c3a2d73f - depends: - - awkward-cpp 45 - - fsspec >=2022.11.0 - - importlib-metadata >=4.13.0 - - numpy >=1.18.0 - - packaging - - python >=3.9 - - typing_extensions >=4.1.0 - license: BSD-3-Clause - purls: - - pkg:pypi/awkward?source=hash-mapping - size: 429538 - timestamp: 1742884694088 -- conda: https://conda.anaconda.org/conda-forge/noarch/awkward-2.8.2-pyhd8ed1ab_0.conda - sha256: 537a2109a6308c8fe02c01f47a410cc51d2c9c2b0d6f5c1150fef744b61f796b - md5: f9ef0e6540454d6ac320b8c7d8d34b20 - depends: - - awkward-cpp 45 - - fsspec >=2022.11.0 - - importlib-metadata >=4.13.0 - - numpy >=1.18.0 - - packaging - - python >=3.9 - - typing_extensions >=4.1.0 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/awkward?source=hash-mapping - size: 433940 - timestamp: 1746300742499 - conda: https://conda.anaconda.org/conda-forge/noarch/awkward-2.8.3-pyhe01879c_1.conda sha256: 579723fcc52ed8db4f051fd3ffc0e684ce2cf572850a0b36a914359524d7be14 md5: 3923c3b9f7372958adabea74542c47ae @@ -2747,9 +2142,9 @@ packages: - pkg:pypi/awkward?source=hash-mapping size: 455501 timestamp: 1747414060060 -- conda: https://conda.anaconda.org/conda-forge/linux-64/awkward-cpp-45-py310h0900883_100.conda - sha256: b288d7c78eba0cfd380360c253eb59e0dee5e4a98d1aa9daaf8c4bb9ae5f8b0e - md5: 1bf3e0220393d5941b2c1acdc9c95718 +- conda: https://conda.anaconda.org/conda-forge/linux-64/awkward-cpp-46-py310h0900883_100.conda + sha256: 2cb6e5a046f367be4f298f65f339a7acdac50201e1d8ce8c85cbb467629ac7ca + md5: c6099a5811c875748c66f57a61b07333 depends: - __glibc >=2.17,<3.0.a0 - _x86_64-microarch-level >=1 @@ -2762,11 +2157,11 @@ packages: license_family: BSD purls: - pkg:pypi/awkward-cpp?source=hash-mapping - size: 524461 - timestamp: 1742473643198 -- conda: https://conda.anaconda.org/conda-forge/linux-64/awkward-cpp-45-py311hc248303_100.conda - sha256: ca9b6e2924cdf3886316f8efd5e0b4d7ea329fc3d93cd9d20e8871c864e16561 - md5: 3fbbb044cda50fbb0a80922d8914c523 + size: 524047 + timestamp: 1747358472069 +- conda: https://conda.anaconda.org/conda-forge/linux-64/awkward-cpp-46-py311hc248303_100.conda + sha256: b828ee4e4292d78ad8f1ffd349389db316dd1ac01948f9b7d3fc8de4d187f73f + md5: d250097f785b0c54f45cd938050c24a2 depends: - __glibc >=2.17,<3.0.a0 - _x86_64-microarch-level >=1 @@ -2779,11 +2174,11 @@ packages: license_family: BSD purls: - pkg:pypi/awkward-cpp?source=hash-mapping - size: 531882 - timestamp: 1742473639025 -- conda: https://conda.anaconda.org/conda-forge/linux-64/awkward-cpp-45-py312ha6dbfeb_100.conda - sha256: 02d68b96dcc02dba33cae121b3af80e827d62a50c45b976e313244ff216a23b6 - md5: ebaa4383395340368dbfbdee358c65c2 + size: 531766 + timestamp: 1747358325755 +- conda: https://conda.anaconda.org/conda-forge/linux-64/awkward-cpp-46-py312ha6dbfeb_100.conda + sha256: 44b589ca2f0bac411b8591f44cb50a27e932b1d31c6ded34c59e3bcc36640207 + md5: 0fb7da9db9cf104f1786cbdb5d7bfc39 depends: - __glibc >=2.17,<3.0.a0 - _x86_64-microarch-level >=1 @@ -2793,67 +2188,18 @@ packages: - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/awkward-cpp?source=hash-mapping - size: 531289 - timestamp: 1742473663256 -- conda: https://conda.anaconda.org/conda-forge/linux-64/awkward-cpp-46-py310h0900883_100.conda - sha256: 2cb6e5a046f367be4f298f65f339a7acdac50201e1d8ce8c85cbb467629ac7ca - md5: c6099a5811c875748c66f57a61b07333 - depends: - - __glibc >=2.17,<3.0.a0 - - _x86_64-microarch-level >=1 - - libgcc >=13 - - libstdcxx >=13 - - numpy >=1.18.0 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/awkward-cpp?source=hash-mapping - size: 524047 - timestamp: 1747358472069 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h094d708_2.conda - sha256: 52ac77926deb7e9672ab60e330dfad31392ebe9f0f78cdf0bc597d7d7c12a2cb - md5: 9b1e62c9d7b158cf1a234ee49ef6232f - depends: - - __glibc >=2.17,<3.0.a0 - - aws-c-cal >=0.8.9,<0.8.10.0a0 - - aws-c-common >=0.12.2,<0.12.3.0a0 - - aws-c-http >=0.9.5,<0.9.6.0a0 - - aws-c-io >=0.18.0,<0.18.1.0a0 - - aws-c-sdkutils >=0.2.3,<0.2.4.0a0 - - libgcc >=13 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 111498 - timestamp: 1743819638135 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h59ae206_7.conda - sha256: 796f0fd63c4f05e5784dca0edc838ab6288bdb8c4c12ebd45bde93fdbd683495 - md5: ca157ee18f02c33646d975995631b39e - depends: - - __glibc >=2.17,<3.0.a0 - - aws-c-cal >=0.9.0,<0.9.1.0a0 - - aws-c-common >=0.12.3,<0.12.4.0a0 - - aws-c-http >=0.10.1,<0.10.2.0a0 - - aws-c-io >=0.19.0,<0.19.1.0a0 - - aws-c-sdkutils >=0.2.3,<0.2.4.0a0 - - libgcc >=13 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 111152 - timestamp: 1747190463145 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h9a6e2ae_4.conda - sha256: 7444691a43a19510f5b667599034c8fceaca389d52388c6d9d52a4d239594fcd - md5: a948110dbbde6491c62815643a96d589 + license_family: BSD + purls: + - pkg:pypi/awkward-cpp?source=hash-mapping + size: 531117 + timestamp: 1747358313895 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.9.0-h59ae206_7.conda + sha256: 796f0fd63c4f05e5784dca0edc838ab6288bdb8c4c12ebd45bde93fdbd683495 + md5: ca157ee18f02c33646d975995631b39e depends: - __glibc >=2.17,<3.0.a0 - aws-c-cal >=0.9.0,<0.9.1.0a0 - - aws-c-common >=0.12.2,<0.12.3.0a0 + - aws-c-common >=0.12.3,<0.12.4.0a0 - aws-c-http >=0.10.1,<0.10.2.0a0 - aws-c-io >=0.19.0,<0.19.1.0a0 - aws-c-sdkutils >=0.2.3,<0.2.4.0a0 @@ -2861,21 +2207,8 @@ packages: license: Apache-2.0 license_family: Apache purls: [] - size: 111153 - timestamp: 1746014853526 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.8.9-hada3f3f_0.conda - sha256: b24d9e5a59b11e635db4f02d7f94ab2712c9d09d2503236cfb781cc05bf98702 - md5: f1bc1f3925e2ff734d4a8a5bb3552b1d - depends: - - __glibc >=2.17,<3.0.a0 - - aws-c-common >=0.12.2,<0.12.3.0a0 - - libgcc >=13 - - openssl >=3.4.1,<4.0a0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 50997 - timestamp: 1743664886404 + size: 111152 + timestamp: 1747190463145 - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.0-h5e3027f_1.conda sha256: da8e6d0fa83a80e6f0f9c59ae0ac157915fb0b684020cc16c9915d4d7171fe20 md5: 220588a5c6c9341a39d9e399848e5554 @@ -2889,30 +2222,6 @@ packages: purls: [] size: 50521 timestamp: 1747127810932 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.0-hada3f3f_0.conda - sha256: e635934e54c2145afa06bd69f5d92d14cb2e27a59625f7236493dd9b11717e9b - md5: 05a965f6def53dbcb5217945eb0b3689 - depends: - - __glibc >=2.17,<3.0.a0 - - aws-c-common >=0.12.2,<0.12.3.0a0 - - libgcc >=13 - - openssl >=3.5.0,<4.0a0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 50986 - timestamp: 1744436950913 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.2-hb9d3cd8_0.conda - sha256: 155621a78e38a092f455a75b04d09bfce04b768e8af10895429e48e57a08b6c2 - md5: bd52f376d1d34d7823a7bf0773be86e8 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 236536 - timestamp: 1743046458804 - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.3-hb9d3cd8_0.conda sha256: 251883d45fbc3bc88a8290da073f54eb9d17e8b9edfa464d80cff1b948c571ec md5: 8448031a22c697fac3ed98d69e8a9160 @@ -2936,18 +2245,6 @@ packages: purls: [] size: 21817 timestamp: 1747144982788 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.1-hc2d532b_4.conda - sha256: cf6caf5207c95a36c8089c54307e192befa92b773a65e0369b72fabfdc408fee - md5: 4cc4dcd582b2f087d62c70b2d6daa59f - depends: - - libgcc >=13 - - __glibc >=2.17,<3.0.a0 - - aws-c-common >=0.12.2,<0.12.3.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 21753 - timestamp: 1743446917660 - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-h2dcaabb_9.conda sha256: 5df00b73c5b6fa27769a18f6d3172f45f2fbe2b1e440e320199702a2231306f4 md5: 2f2ffcdfeabac698297fce1259e51a2a @@ -2964,51 +2261,6 @@ packages: purls: [] size: 57205 timestamp: 1747185871709 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-h8170a11_5.conda - sha256: 4c718a19cf3411ab54b5ff6a7b6dfd10bb46689880e683ae97e1e0de3c7a13dc - md5: 68614c9a3b3fb09cb1b4e8c4ed9333fb - depends: - - __glibc >=2.17,<3.0.a0 - - libstdcxx >=13 - - libgcc >=13 - - aws-c-common >=0.12.2,<0.12.3.0a0 - - aws-checksums >=0.2.5,<0.2.6.0a0 - - aws-c-io >=0.18.0,<0.18.1.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 57147 - timestamp: 1743815063175 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.4-hc5e5e9e_7.conda - sha256: 7a5eafd18eb258184cf6fe2cc299cf7e384dd56e9a8392e4da76623af1ac6234 - md5: eb339cb6cd7c881b3f0e7910e99c261b - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - - libgcc >=13 - - aws-c-io >=0.19.0,<0.19.1.0a0 - - aws-checksums >=0.2.7,<0.2.8.0a0 - - aws-c-common >=0.12.2,<0.12.3.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 57177 - timestamp: 1746376081324 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.1-hc373b34_0.conda - sha256: 84606e0e0683d78a1923fae23193d79cc0edb304232f3cd1fabf009cd5836338 - md5: ce674c8395070748d89f0f907a6caa59 - depends: - - libgcc >=13 - - __glibc >=2.17,<3.0.a0 - - aws-c-io >=0.19.0,<0.19.1.0a0 - - aws-c-common >=0.12.2,<0.12.3.0a0 - - aws-c-cal >=0.9.0,<0.9.1.0a0 - - aws-c-compression >=0.3.1,<0.3.2.0a0 - license: Apache-2.0 - purls: [] - size: 222970 - timestamp: 1745976470685 - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.1-hb50fa74_1.conda sha256: d811159f8ec3f3578dbf27a4b3d2756cd4cbc70e42f5e6e71972b6b50ddc8161 md5: 2bb746bfe603e4949d99404b25c639ea @@ -3024,34 +2276,6 @@ packages: purls: [] size: 223036 timestamp: 1747186878815 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.9.5-hca9d837_2.conda - sha256: 9b5a7323dbe50245790dc9c7527ae9b2f8341eeb491ccead060e2a159bd113fd - md5: 2c3fdcb5a1bf40fd7b6b5598718e5929 - depends: - - __glibc >=2.17,<3.0.a0 - - aws-c-io >=0.18.0,<0.18.1.0a0 - - aws-c-cal >=0.8.9,<0.8.10.0a0 - - aws-c-common >=0.12.2,<0.12.3.0a0 - - aws-c-compression >=0.3.1,<0.3.2.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 223016 - timestamp: 1746738491192 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.19.0-h756d8c7_1.conda - sha256: 1e852cbe527dcfe654573e47287ddc3462de160c9a2f89bfd99da66368a05fe5 - md5: 35ffc73105ad0bdb8e5c2555f4a3c5d6 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - aws-c-common >=0.12.2,<0.12.3.0a0 - - s2n >=1.5.18,<1.5.19.0a0 - - aws-c-cal >=0.9.0,<0.9.1.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 180304 - timestamp: 1745155363667 - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.19.0-h7962f60_2.conda sha256: a2c6d887fb682d7128703a1b6069aaad02dcfc455f03fcb9d8269da6fa9cfed7 md5: 7a4be9867bab106d87febec673094a9e @@ -3066,33 +2290,6 @@ packages: purls: [] size: 179077 timestamp: 1747159979745 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.12.3-h773eac8_2.conda - sha256: b097a71a86cd49e1fd18b6a8f2bedd0b0ea88e75c3423b561e48ef2a494ba389 - md5: 53e040407719cf505b7753a6450e4d03 - depends: - - libgcc >=13 - - __glibc >=2.17,<3.0.a0 - - aws-c-io >=0.19.0,<0.19.1.0a0 - - aws-c-common >=0.12.2,<0.12.3.0a0 - - aws-c-http >=0.10.1,<0.10.2.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 215729 - timestamp: 1746797150431 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.17-h73c4702_1.conda - sha256: 2199a5843e0843ca941993b33140c7499d03dd84b4b4aef381b1a71c406f21bb - md5: 7283d4d0d39d97dcb5ef06412375478f - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - aws-c-common >=0.12.2,<0.12.3.0a0 - - aws-c-io >=0.18.1,<0.18.2.0a0 - - aws-c-http >=0.10.0,<0.10.1.0a0 - license: Apache-2.0 - purls: [] - size: 213876 - timestamp: 1746015332689 - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.13.0-h35de22e_3.conda sha256: 7275a7ca192306ff3b43cedc63bb854ce6279617f8d4799af4837ef05383c35c md5: df3ea458761b3fdf9e6eb7d8a38c121a @@ -3107,45 +2304,6 @@ packages: purls: [] size: 215707 timestamp: 1747215213079 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.15-h46af1f8_1.conda - sha256: 601dc338a99ebb146c89a0dcc4e6e3051427fe068aa05557bd35628cab2c6120 - md5: 4b91da7a394cb7c0a5bd9bb8dd8dcc76 - depends: - - libgcc >=13 - - __glibc >=2.17,<3.0.a0 - - aws-checksums >=0.2.5,<0.2.6.0a0 - - aws-c-http >=0.9.5,<0.9.6.0a0 - - aws-c-cal >=0.8.9,<0.8.10.0a0 - - openssl >=3.4.1,<4.0a0 - - aws-c-common >=0.12.2,<0.12.3.0a0 - - aws-c-io >=0.18.0,<0.18.1.0a0 - - aws-c-auth >=0.9.0,<0.9.1.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 129259 - timestamp: 1743824869782 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.16-h7dfd680_1.conda - sha256: 0cd6ba8718f9f9233f4bb1ac219251e3d1b2fc5324cc023f7e68965ef8b3e554 - md5: d8870015dbf8a8bb44832f4c330bf044 - depends: - - libgcc >=13 - - __glibc >=2.17,<3.0.a0 - - aws-c-common >=0.12.2,<0.12.3.0a0 - - aws-checksums >=0.2.7,<0.2.8.0a0 - - aws-c-http >=0.10.0,<0.10.1.0a0 - - aws-c-auth >=0.9.0,<0.9.1.0a0 - - aws-c-cal >=0.9.0,<0.9.1.0a0 - - aws-c-io >=0.19.0,<0.19.1.0a0 - - aws-c-common >=0.12.2,<0.12.3.0a0 - - openssl >=3.5.0,<4.0a0 - - aws-checksums >=0.2.7,<0.2.8.0a0 - - aws-c-auth >=0.9.0,<0.9.1.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 129704 - timestamp: 1746041983017 - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.17-h50d7d24_2.conda sha256: 9d952875d665b55a1a92d1b534a72eeffed6618d5e8131aca6be4a895705fa56 md5: 701bf42db0ec5de1e56b66ae0638d20b @@ -3176,30 +2334,6 @@ packages: purls: [] size: 58967 timestamp: 1747138537291 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.3-hc2d532b_4.conda - sha256: 09d276413249df36ecc533d9aff97945cc3a2d4ae818bf50d3968fde7e68bc61 - md5: 15a1f6fb713b4cd3fee74588b996a846 - depends: - - libgcc >=13 - - __glibc >=2.17,<3.0.a0 - - aws-c-common >=0.12.2,<0.12.3.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 58917 - timestamp: 1743448087115 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.5-hc2d532b_1.conda - sha256: 9b487deca8198e6c5e64102d06420cbf3eb654065ac472d8e97e86f55af34268 - md5: 47e378813c3451a9eb0948625a18418a - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - aws-c-common >=0.12.2,<0.12.3.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 76007 - timestamp: 1743447027086 - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.7-hafb2847_1.conda sha256: 03a5e4b3dcda35696133632273043d0b81e55129ff0f9e6d75483aa8eb96371b md5: 6d28d50637fac4f081a0903b4b33d56d @@ -3212,40 +2346,6 @@ packages: purls: [] size: 76627 timestamp: 1747141741534 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.7-hc2d532b_0.conda - sha256: 69141040515c0e52401d5e2e49afcd29b39dc0f6fecac41afda21f99086ac38f - md5: 398521f53e58db246658e7cff56d669f - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - aws-c-common >=0.12.2,<0.12.3.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 76585 - timestamp: 1744426573605 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.5-h5e5e39d_2.conda - sha256: 6399257677fab7e513d131f1dfae130a305a8c250e5c9290b1c32831c146b435 - md5: 70ae8529a42baa6fdac9e037b6ccc0c3 - depends: - - libgcc >=13 - - libstdcxx >=13 - - libgcc >=13 - - __glibc >=2.17,<3.0.a0 - - aws-c-sdkutils >=0.2.3,<0.2.4.0a0 - - aws-c-cal >=0.9.0,<0.9.1.0a0 - - aws-c-mqtt >=0.13.0,<0.13.1.0a0 - - aws-c-event-stream >=0.5.4,<0.5.5.0a0 - - aws-c-s3 >=0.7.17,<0.7.18.0a0 - - aws-c-auth >=0.9.0,<0.9.1.0a0 - - aws-c-common >=0.12.2,<0.12.3.0a0 - - aws-c-io >=0.19.0,<0.19.1.0a0 - - aws-c-http >=0.10.1,<0.10.2.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 390492 - timestamp: 1744838713428 - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.32.5-h2811929_3.conda sha256: 0da65b4e3afecf205323f8fdfd2fa5d2a26d295d393d3548360d2de68d266c49 md5: c38733af13b256b8893a6af0d2a1d346 @@ -3267,24 +2367,6 @@ packages: purls: [] size: 394536 timestamp: 1747232223388 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-h5b777a2_5.conda - sha256: e2e18bda4be87b778bc15949c3121cb1c4d2e702a8d8acb3a9f4cb6312397462 - md5: 860ec2d406d3956b1a8f8cc8ac18faa4 - depends: - - libgcc >=13 - - libstdcxx >=13 - - libgcc >=13 - - __glibc >=2.17,<3.0.a0 - - libzlib >=1.3.1,<2.0a0 - - aws-c-common >=0.12.2,<0.12.3.0a0 - - aws-c-event-stream >=0.5.4,<0.5.5.0a0 - - aws-crt-cpp >=0.32.5,<0.32.6.0a0 - - libcurl >=8.13.0,<9.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 3401396 - timestamp: 1745604795071 - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.510-hffe9a0f_8.conda sha256: 2f5d05c90ac9c3dd7acecb2c4215545d75a05e79d8a55be6570a5a301a8fba33 md5: 4cd13ac60fb622ab49dfe949f2cd3051 @@ -3414,10 +2496,10 @@ packages: purls: [] size: 1010744 timestamp: 1734279392306 -- pypi: https://files.pythonhosted.org/packages/78/05/536d025b3e17cf938f836665dde32e86f65ee76acd0ae14e22bda6aee274/beartype-0.20.2-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/94/31/87045d1c66ee10a52486c9d2047bc69f00f2689f69401bb1e998afb4b205/beartype-0.21.0-py3-none-any.whl name: beartype - version: 0.20.2 - sha256: 5171a91ecf01438a59884f0cde37d2d5da2c992198b53d6ba31db3940f47ff04 + version: 0.21.0 + sha256: b6a1bd56c72f31b0a496a36cc55df6e2f475db166ad07fa4acc7e74f4c7f34c0 requires_dist: - autoapi>=0.9.0 ; extra == 'dev' - click ; extra == 'dev' @@ -3439,6 +2521,7 @@ packages: - sphinx ; extra == 'dev' - sphinx>=4.2.0,<6.0.0 ; extra == 'dev' - sphinxext-opengraph>=0.7.5 ; extra == 'dev' + - sqlalchemy ; extra == 'dev' - tox>=3.20.1 ; extra == 'dev' - typing-extensions>=3.10.0.0 ; extra == 'dev' - xarray ; extra == 'dev' @@ -3462,6 +2545,7 @@ packages: - pytest>=4.0.0 ; extra == 'test' - rich-click ; extra == 'test' - sphinx ; extra == 'test' + - sqlalchemy ; extra == 'test' - tox>=3.20.1 ; extra == 'test' - typing-extensions>=3.10.0.0 ; extra == 'test' - xarray ; extra == 'test' @@ -3480,6 +2564,7 @@ packages: - pytest>=4.0.0 ; extra == 'test-tox' - rich-click ; extra == 'test-tox' - sphinx ; extra == 'test-tox' + - sqlalchemy ; extra == 'test-tox' - typing-extensions>=3.10.0.0 ; extra == 'test-tox' - xarray ; extra == 'test-tox' - coverage>=5.5 ; extra == 'test-tox-coverage' @@ -3521,6 +2606,33 @@ packages: purls: [] size: 4213 timestamp: 1737382993425 +- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hb9d3cd8_2.conda + sha256: fcb0b5b28ba7492093e54f3184435144e074dfceab27ac8e6a9457e736565b0b + md5: 98514fe74548d768907ce7a13f680e8f + depends: + - __glibc >=2.17,<3.0.a0 + - brotli-bin 1.1.0 hb9d3cd8_2 + - libbrotlidec 1.1.0 hb9d3cd8_2 + - libbrotlienc 1.1.0 hb9d3cd8_2 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 19264 + timestamp: 1725267697072 +- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hb9d3cd8_2.conda + sha256: 261364d7445513b9a4debc345650fad13c627029bfc800655a266bf1e375bc65 + md5: c63b5e52939e795ba8d26e35d767a843 + depends: + - __glibc >=2.17,<3.0.a0 + - libbrotlidec 1.1.0 hb9d3cd8_2 + - libbrotlienc 1.1.0 hb9d3cd8_2 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 18881 + timestamp: 1725267688731 - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py310hf71b8c6_2.conda sha256: 14f1e89d3888d560a553f40ac5ba83e4435a107552fa5b2b2029a7472554c1ef md5: bf502c169c71e3c6ac0d6175addfacc2 @@ -3603,16 +2715,6 @@ packages: purls: [] size: 152283 timestamp: 1745653616541 -- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.4.26-pyhd8ed1ab_0.conda - sha256: 52aa837642fd851b3f7ad3b1f66afc5366d133c1d452323f786b0378a391915c - md5: c33eeaaa33f45031be34cda513df39b6 - depends: - - python >=3.9 - license: ISC - purls: - - pkg:pypi/certifi?source=compressed-mapping - size: 162721 - timestamp: 1739515973129 - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.4.26-pyhd8ed1ab_0.conda sha256: 52aa837642fd851b3f7ad3b1f66afc5366d133c1d452323f786b0378a391915c md5: c33eeaaa33f45031be34cda513df39b6 @@ -3740,9 +2842,9 @@ packages: - pkg:pypi/comm?source=hash-mapping size: 12103 timestamp: 1733503053903 -- conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.7.1-py310hff52083_0.conda - sha256: f3a42832944712a8d26b2980204ed0abc849eeb10f338d87049c3dbb21c01d52 - md5: cadce8661472b3dbc4f2cd9cfdaaf12f +- conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.8.2-py310hff52083_0.conda + sha256: 9f40113d801581da3a7ddd84b8923273548b38ed2a9714367d1aafe2c48e9435 + md5: e73021f3e2e95f569c997da05758031a depends: - argcomplete <3.7,>=1.12.1 - charset-normalizer <4,>=2.1.0 @@ -3762,62 +2864,17 @@ packages: license_family: MIT purls: - pkg:pypi/commitizen?source=hash-mapping - size: 117746 - timestamp: 1747376488923 -- conda: https://conda.anaconda.org/conda-forge/noarch/commitizen-4.6.0-pyhd8ed1ab_0.conda - sha256: 2aaf1623bcd0160b4e6fcbd573453a2e07a72edf648f92bd7d298fc3a105fe4a - md5: 1dae27aba235cb09d85435ae5934e77b - depends: - - argcomplete <3.6,>=1.12.1 - - charset-normalizer <4,>=2.1.0 - - colorama <1.0,>=0.4.1 - - decli <1.0,>=0.6.0 - - importlib-metadata >=8.0.0,<9 - - jinja2 >=2.10.3 - - packaging >=19 - - python >=3.9 - - pyyaml >=3.08 - - questionary <3.0,>=2.0 - - termcolor <3,>=1.1 - - tomlkit <1.0.0,>=0.5.3 - - typing_extensions <5.0.0,>=4.0.1 - license: MIT - license_family: MIT - purls: - - pkg:pypi/commitizen?source=hash-mapping - size: 59257 - timestamp: 1744551347444 -- conda: https://conda.anaconda.org/conda-forge/noarch/commitizen-4.6.1-pyhd8ed1ab_0.conda - sha256: ed2e9140e432744f0c433823bd1acb803f128ededcee06a5899218cc51698554 - md5: 48decf6a4c5f6e308d32b842d63cc042 - depends: - - argcomplete <3.7,>=1.12.1 - - charset-normalizer <4,>=2.1.0 - - colorama <1.0,>=0.4.1 - - decli <1.0,>=0.6.0 - - jinja2 >=2.10.3 - - packaging >=19 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - - pyyaml >=3.08 - - questionary <3.0,>=2.0 - - termcolor <3,>=1.1 - - tomlkit <1.0.0,>=0.5.3 - - typing_extensions <5.0.0,>=4.0.1 - license: MIT - license_family: MIT - purls: - - pkg:pypi/commitizen?source=hash-mapping - size: 117528 - timestamp: 1746902589876 -- conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.7.0-py311h38be061_0.conda - sha256: 3386e642d7d71cc6cec22fa1a220ca5e320cdaae39e86a8286ff8704b34874fe - md5: 4d0e05876bef7e9068c0d7915c7b9c90 + size: 117775 + timestamp: 1747899591446 +- conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.8.2-py311h38be061_0.conda + sha256: ce10c56ea16c42b88a5ad0cd1ea7df2afa47a73d107d6eabc98b927419712a84 + md5: a536ef09e722869311ade3133d9ada69 depends: - argcomplete <3.7,>=1.12.1 - charset-normalizer <4,>=2.1.0 - colorama <1.0,>=0.4.1 - decli <1.0,>=0.6.0 + - importlib_metadata <9,>=8.0.0 - jinja2 >=2.10.3 - packaging >=19 - python >=3.11,<3.12.0a0 @@ -3831,16 +2888,17 @@ packages: license_family: MIT purls: - pkg:pypi/commitizen?source=hash-mapping - size: 149184 - timestamp: 1746902594461 -- conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.7.0-py312h7900ff3_0.conda - sha256: 4cfe84bd8edc88430bc7944352635b4eb4590c603326898518008abdfd0ff1e8 - md5: 604baa8123817ddafc452931ce9c5dc9 + size: 148905 + timestamp: 1747899598118 +- conda: https://conda.anaconda.org/conda-forge/linux-64/commitizen-4.8.2-py312h7900ff3_0.conda + sha256: 6b0e014b3fd665edac76c1dcff8dc31d734bfecae61f42ffa523da65230b7b82 + md5: 813a609fc601b0a0933ea6b0b2e6d649 depends: - argcomplete <3.7,>=1.12.1 - charset-normalizer <4,>=2.1.0 - colorama <1.0,>=0.4.1 - decli <1.0,>=0.6.0 + - importlib_metadata <9,>=8.0.0 - jinja2 >=2.10.3 - packaging >=19 - python >=3.12,<3.13.0a0 @@ -3854,11 +2912,27 @@ packages: license_family: MIT purls: - pkg:pypi/commitizen?source=hash-mapping - size: 144102 - timestamp: 1746902621780 -- conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.0-py310h89163eb_0.conda - sha256: ac410dbd3b1e28d40b88a27f801210b853ebd388f3cf20f85c0178e97f788013 - md5: 9f7865c17117d16f804b687b498e35fa + size: 144115 + timestamp: 1747899590778 +- conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.2-py312h68727a3_0.conda + sha256: 4c8f2aa34aa031229e6f8aa18f146bce7987e26eae9c6503053722a8695ebf0c + md5: e688276449452cdfe9f8f5d3e74c23f6 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - numpy >=1.23 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/contourpy?source=hash-mapping + size: 276533 + timestamp: 1744743235779 +- conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.2-py310h89163eb_0.conda + sha256: 1e89236cd1ea9bbfcefa62a7225486301f18711e59e44dd802825ec53630c777 + md5: 5ca8ab35287adc83b2d1996e5c2ac14c depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -3866,14 +2940,13 @@ packages: - python_abi 3.10.* *_cp310 - tomli license: Apache-2.0 - license_family: APACHE purls: - - pkg:pypi/coverage?source=compressed-mapping - size: 299991 - timestamp: 1743381339117 -- conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.0-py311h2dc5d0c_0.conda - sha256: 50018d9c2d805eab29be0ad2e65a4d6b9f620e5e6b196923b1f3b397efee9b10 - md5: 37bc439a94beeb29914baa5b4987ebd5 + - pkg:pypi/coverage?source=hash-mapping + size: 299964 + timestamp: 1748048883049 +- conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.2-py311h2dc5d0c_0.conda + sha256: 1da68668a274d87003cb1c3281269fa930e952cda1711426c4240517d98177c8 + md5: 21c1ef48cc2bf485e6d38c5611e91da2 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -3881,14 +2954,13 @@ packages: - python_abi 3.11.* *_cp311 - tomli license: Apache-2.0 - license_family: APACHE purls: - pkg:pypi/coverage?source=hash-mapping - size: 382957 - timestamp: 1743381419165 -- conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.0-py312h178313f_0.conda - sha256: 029278c43bd2a6ac36bfd93fde69a0cde6a4ee94c0af72d0d51236fbb1fc3720 - md5: d0fca021e354cc96455021852a1fad6d + size: 382340 + timestamp: 1748049052047 +- conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.8.2-py312h178313f_0.conda + sha256: 29d1b0ff196f8cb9c65d9ce4a355c3b1037698b5a0f4cc4590472ed38de182c3 + md5: 141e4480d38281c3988f3a9aa917b07d depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -3896,11 +2968,10 @@ packages: - python_abi 3.12.* *_cp312 - tomli license: Apache-2.0 - license_family: APACHE purls: - pkg:pypi/coverage?source=hash-mapping - size: 370860 - timestamp: 1743381417734 + size: 371986 + timestamp: 1748048993905 - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.10.17-py310hd8ed1ab_0.conda noarch: generic sha256: 6944d47f2bf3c443d5af855ee0c77156da1b90c6f0e79cedc3b934bcd2794d64 @@ -3939,25 +3010,21 @@ packages: version: 1.0.0 sha256: e151f506d8fbab7756db3ec29e439e0ab425a26423b9c6efe1daee6ddc37bca1 requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/51/ec/fce39003eeb778eed2b62675a02bd207388baa135e9d23997b9df074c838/cyclopts-3.16.0-py3-none-any.whl - name: cyclopts - version: 3.16.0 - sha256: ca0dcc5c5554db89071e0c8c7628e335e0be3ed0bbd64ba2bb62640c9043d0b2 - requires_dist: - - attrs>=23.1.0 - - docstring-parser>=0.15 ; python_full_version < '4.0' - - importlib-metadata>=4.4 ; python_full_version < '3.10' - - pyyaml>=6.0.1 ; extra == 'yaml' - - rich>=13.6.0 - - rich-rst>=1.3.1,<2.0.0 - - tomli>=2.0.0 ; python_full_version < '3.11' and extra == 'toml' - - trio>=0.10.0 ; extra == 'trio' - - typing-extensions>=4.8.0 ; python_full_version < '3.11' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/07/97/526594453e2cdd66076292cb50424907411867532710743057f94afddb4d/cyclopts-3.16.1-py3-none-any.whl +- conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_1.conda + sha256: 9827efa891e507a91a8a2acf64e210d2aff394e1cde432ad08e1f8c66b12293c + md5: 44600c4667a319d67dbe0681fc0bc833 + depends: + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/cycler?source=hash-mapping + size: 13399 + timestamp: 1733332563512 +- pypi: https://files.pythonhosted.org/packages/da/a5/5286a2f354dc64a5afbbb6eef49c52b73b4d984fb919b47a06bdc653e086/cyclopts-3.16.2-py3-none-any.whl name: cyclopts - version: 3.16.1 - sha256: ce8abc2393f36b16d9c5186f08f4a77ddd44d011faf6915e5097e0ba9db10e1b + version: 3.16.2 + sha256: 3d93cb66af31617343861bc51aa16e5a021ad7590dbd7a6f0634d5e3a1ef8e3b requires_dist: - attrs>=23.1.0 - docstring-parser>=0.15 ; python_full_version < '4.0' @@ -4151,16 +3218,6 @@ packages: purls: [] size: 1121608 timestamp: 1733937284793 -- conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - sha256: cbde2c64ec317118fc06b223c5fd87c8a680255e7348dd60e7b292d2e103e701 - md5: a16662747cdeb9abbac74d0057cc976e - depends: - - python >=3.9 - license: MIT and PSF-2.0 - purls: - - pkg:pypi/exceptiongroup?source=hash-mapping - size: 20486 - timestamp: 1733208916977 - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda sha256: ce61f4f99401a4bd455b89909153b40b9c823276aefcbb06f2044618696009ca md5: 72e42d28960d875c7654614f8b50939a @@ -4172,17 +3229,6 @@ packages: - pkg:pypi/exceptiongroup?source=compressed-mapping size: 21284 timestamp: 1746947398083 -- conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_1.conda - sha256: 28d25ea375ebab4bf7479228f8430db20986187b04999136ff5c722ebd32eb60 - md5: ef8b5fca76806159fc25b4f48d8737eb - depends: - - python >=3.9 - license: MIT - license_family: MIT - purls: - - pkg:pypi/executing?source=hash-mapping - size: 28348 - timestamp: 1733569440265 - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.0-pyhd8ed1ab_0.conda sha256: 7510dd93b9848c6257c43fdf9ad22adf62e7aa6da5f12a6a757aed83bcfedf05 md5: 81d30c08f9a3e556e8ca9e124b044d14 @@ -4191,9 +3237,24 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/executing?source=hash-mapping - size: 29652 - timestamp: 1745502200340 + - pkg:pypi/executing?source=hash-mapping + size: 29652 + timestamp: 1745502200340 +- conda: https://conda.anaconda.org/conda-forge/linux-64/fast-histogram-0.14-py312hc0a28a1_3.conda + sha256: 8203dc9814e61a72270359f9079dfde02286f125613f675befcbba72f1915851 + md5: e523477750f4c217212d08772a32407c + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - numpy >=1.19,<3 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/fast-histogram?source=hash-mapping + size: 37356 + timestamp: 1725532267614 - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.18.0-pyhd8ed1ab_0.conda sha256: de7b6d4c4f865609ae88db6fa03c8b7544c2452a1aa5451eb7700aad16824570 md5: 4547b39256e296bb758166893e909a7c @@ -4204,17 +3265,43 @@ packages: - pkg:pypi/filelock?source=hash-mapping size: 17887 timestamp: 1741969612334 -- conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.3.2-pyhd8ed1ab_0.conda - sha256: 2040d4640708bd6ab9ed6cb9901267441798c44974bc63c9b6c1cb4c1891d825 - md5: 9c40692c3d24c7aaf335f673ac09d308 +- conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.58.0-py312h178313f_0.conda + sha256: eab484e58457bcc69f3e848ff659fc63b917cee7d9f5e614653c0571c0b6354e + md5: 20ab6e460950203a022131b49c3dbda1 + depends: + - __glibc >=2.17,<3.0.a0 + - brotli + - libgcc >=13 + - munkres + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - unicodedata2 >=15.1.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/fonttools?source=hash-mapping + size: 2826099 + timestamp: 1746914129308 +- conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.13.3-ha770c72_1.conda + sha256: 7ef7d477c43c12a5b4cddcf048a83277414512d1116aba62ebadfa7056a7d84f + md5: 9ccd736d31e0c6e41f54e704e5312811 + depends: + - libfreetype 2.13.3 ha770c72_1 + - libfreetype6 2.13.3 h48d6fc4_1 + license: GPL-2.0-only OR FTL + purls: [] + size: 172450 + timestamp: 1745369996765 +- conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.5.1-pyhd8ed1ab_0.conda + sha256: cd6ae92ae5aa91a7e58cf39f1442d4821279f43f1c9499d15f45558d4793d1e0 + md5: 2d2c9ef879a7e64e2dc657b09272c2b6 depends: - python >=3.9 license: BSD-3-Clause - license_family: BSD purls: - - pkg:pypi/fsspec?source=compressed-mapping - size: 142117 - timestamp: 1743437355974 + - pkg:pypi/fsspec?source=hash-mapping + size: 145521 + timestamp: 1748101667956 - pypi: https://files.pythonhosted.org/packages/b3/a9/e9fb0424afb091da2212cb45711449167198091893b5b1b41a25875528b1/genoray-0.11.2-py3-none-any.whl name: genoray version: 0.11.2 @@ -4242,7 +3329,7 @@ packages: - pypi: ./ name: genvarloader version: 0.15.0 - sha256: b67fb9abc00f8eb601a4fda8cae9ca4e133db72101aef50f6d98c23d33dc044d + sha256: a4430e097f281e9b722cdbcb44d3f27b467a5c661f443572552631b3b0b5f642 requires_dist: - numba>=0.58.1 - loguru @@ -4352,22 +3439,22 @@ packages: - pkg:pypi/gmpy2?source=hash-mapping size: 213405 timestamp: 1745509508879 -- conda: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.8.9-h5746830_0.conda - sha256: 9d990e48e4897b27ee8ab1ed8172203396ec7c51b7a4b80f8022552b5f03745d - md5: 0e776b108cd87ee80618acc5ee64c07f +- conda: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.8.9-h86084c0_1.conda + sha256: 47c9b18d08d3c58032ebacde96fad1eeeb2af9fe1f0a78b730a51ce29a601418 + md5: f71a6a96b0e7537b536fc144472d7ba6 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - libidn2 >=2,<3.0a0 - libstdcxx >=13 - libtasn1 >=4.20.0,<5.0a0 - - nettle >=3.9.1,<3.10.0a0 + - nettle >=3.10.1,<3.11.0a0 - p11-kit >=0.24.1,<0.25.0a0 license: LGPL-2.1-or-later license_family: LGPL purls: [] - size: 2009541 - timestamp: 1739268756499 + size: 2048065 + timestamp: 1748036227947 - conda: https://conda.anaconda.org/conda-forge/linux-64/gsl-2.7-he838d99_0.tar.bz2 sha256: 132a918b676dd1f533d7c6f95e567abf7081a6ea3251c3280de35ef600e0da87 md5: fec079ba39c9cca093bf4c00001825de @@ -4435,7 +3522,7 @@ packages: depends: - bzip2 >=1.0.8,<2.0a0 - libcurl >=8.11.1,<9.0a0 - - libdeflate >=1.22,<1.24.0a0 + - libdeflate >=1.22,<1.25.0a0 - libgcc >=13 - liblzma >=5.6.3,<6.0a0 - libzlib >=1.3.1,<2.0a0 @@ -4467,39 +3554,9 @@ packages: - pkg:pypi/hyperframe?source=hash-mapping size: 17397 timestamp: 1737618427549 -- conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.18-pyha770c72_0.conda - sha256: 2a436bd6c329dd2e5451e05a0945ad48d84595471eabdd536ae22922d8cd7869 - md5: e36e354d2d375eef069e60aa0c323793 - depends: - - attrs >=22.2.0 - - click >=7.0 - - exceptiongroup >=1.0.0 - - python >=3.9 - - setuptools - - sortedcontainers >=2.1.0,<3.0.0 - license: MPL-2.0 - purls: - - pkg:pypi/hypothesis?source=hash-mapping - size: 357799 - timestamp: 1747462621786 -- conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.3-pyha770c72_0.conda - sha256: 7c4449b93afbc10ce810d6ed9faeb28dbda47f21299b8f70879b74d27a2130ca - md5: 5c66e43d4aee5bac7af495f806dbbef1 - depends: - - attrs >=22.2.0 - - click >=7.0 - - exceptiongroup >=1.0.0 - - python >=3.9 - - setuptools - - sortedcontainers >=2.1.0,<3.0.0 - license: MPL-2.0 - purls: - - pkg:pypi/hypothesis?source=hash-mapping - size: 353436 - timestamp: 1744980919660 -- conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.9-pyha770c72_0.conda - sha256: fb0a3df301b5e0c4b9a67adaa935f79838a58b6880ce5aee879c31ed01bae9f9 - md5: 8ed39e46daa6d5691717816ea85f1bb8 +- conda: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.131.28-pyha770c72_0.conda + sha256: dd89bb6d2b0f24a0fa51700cf15d59f5d96ed9e1f4dc1711917f7f1d093310b8 + md5: 8c8aeb2a349492227dc19948ed6783f6 depends: - attrs >=22.2.0 - click >=7.0 @@ -4508,11 +3565,10 @@ packages: - setuptools - sortedcontainers >=2.1.0,<3.0.0 license: MPL-2.0 - license_family: MOZILLA purls: - pkg:pypi/hypothesis?source=hash-mapping - size: 357607 - timestamp: 1746683820692 + size: 361483 + timestamp: 1748255440780 - conda: https://conda.anaconda.org/conda-forge/noarch/icecream-2.1.4-pyhd8ed1ab_0.conda sha256: 0a724bd8cce7200d0d880e4a5ddab8605fea19d799c18f035a55e16939013898 md5: 6bca4364a57090f77e9c3920e2cc4d1e @@ -4540,18 +3596,18 @@ packages: purls: [] size: 12129203 timestamp: 1720853576813 -- conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.10-pyhd8ed1ab_0.conda - sha256: 02f47df6c6982b796aecb086b434627207e87c0a90a50226f11f2cc99c089770 - md5: 8d5b9b702810fb3054d52ba146023bc3 +- conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.12-pyhd8ed1ab_0.conda + sha256: 4debbae49a183d61f0747a5f594fca2bf5121e8508a52116f50ccd0eb2f7bb55 + md5: 84463b10c1eb198541cd54125c7efe90 depends: - python >=3.9 - ukkonen license: MIT license_family: MIT purls: - - pkg:pypi/identify?source=hash-mapping - size: 79057 - timestamp: 1745098917031 + - pkg:pypi/identify?source=compressed-mapping + size: 78926 + timestamp: 1748049754416 - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda sha256: d7a472c9fd479e2e8dcb83fb8d433fce971ea369d704ece380e876f9c3494e87 md5: 39a4f67be3286c86d696df570b1201b7 @@ -4574,28 +3630,27 @@ packages: - pkg:pypi/imagesize?source=hash-mapping size: 10164 timestamp: 1656939625410 -- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.6.1-pyha770c72_0.conda - sha256: 598951ebdb23e25e4cec4bbff0ae369cec65ead80b50bc08b441d8e54de5cf03 - md5: f4b39bf00c69f56ac01e020ebfac066c +- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + sha256: c18ab120a0613ada4391b15981d86ff777b5690ca461ea7e9e49531e8f374745 + md5: 63ccfdc3a3ce25b027b8767eb722fca8 depends: - python >=3.9 - - zipp >=0.5 + - zipp >=3.20 + - python license: Apache-2.0 - license_family: APACHE purls: - - pkg:pypi/importlib-metadata?source=hash-mapping - size: 29141 - timestamp: 1737420302391 -- conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.6.1-hd8ed1ab_0.conda - sha256: 1e3eb9d65c4d7b87c7347553ef9eef6f994996f90a2299e19b35f5997d3a3e79 - md5: 7f46575a91b1307441abc235d01cab66 + - pkg:pypi/importlib-metadata?source=compressed-mapping + size: 34641 + timestamp: 1747934053147 +- conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.7.0-h40b2b14_1.conda + sha256: 46b11943767eece9df0dc9fba787996e4f22cc4c067f5e264969cfdfcb982c39 + md5: 8a77895fb29728b736a1a6c75906ea1a depends: - - importlib-metadata >=8.6.1,<8.6.2.0a0 + - importlib-metadata ==8.7.0 pyhe01879c_1 license: Apache-2.0 - license_family: APACHE purls: [] - size: 9502 - timestamp: 1737420303228 + size: 22143 + timestamp: 1747934053147 - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda sha256: acc1d991837c0afb67c75b77fdc72b4bf022aac71fedd8b9ea45918ac9b08a80 md5: c85c76dc67d75619a92f51dfbce06992 @@ -4645,43 +3700,29 @@ packages: - pkg:pypi/ipykernel?source=hash-mapping size: 119084 timestamp: 1719845605084 -- conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.2.0-pyhfb0248b_0.conda - sha256: 539d003c379c22a71df1eb76cd4167a3e2d59f45e6dbc3416c45619f4c1381fb - md5: 7330ee1244209cfebfb23d828dd9aae5 +- conda: https://conda.anaconda.org/conda-forge/noarch/ipython-8.17.2-pyh41d4057_0.conda + sha256: 31322d58f412787f5beeb01db4d16f10f8ae4e0cc2ec99fafef1e690374fe298 + md5: f39d0b60e268fe547f1367edbab457d4 depends: - - __unix - - pexpect >4.3 + - __linux - decorator - exceptiongroup - - ipython_pygments_lexers - jedi >=0.16 - matplotlib-inline + - pexpect >4.3 - pickleshare - - prompt-toolkit >=3.0.41,<3.1.0 + - prompt_toolkit >=3.0.30,<3.1.0,!=3.0.37 - pygments >=2.4.0 - - python >=3.11 + - python >=3.9 - stack_data - - traitlets >=5.13.0 - - typing_extensions >=4.6 - - python + - traitlets >=5 + - typing_extensions license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/ipython?source=hash-mapping - size: 620691 - timestamp: 1745672166398 -- conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda - sha256: 894682a42a7d659ae12878dbcb274516a7031bbea9104e92f8e88c1f2765a104 - md5: bd80ba060603cc228d9d81c257093119 - depends: - - pygments - - python >=3.9 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/ipython-pygments-lexers?source=hash-mapping - size: 13993 - timestamp: 1737123723464 + size: 589731 + timestamp: 1698846745397 - conda: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.7-pyhd8ed1ab_0.conda sha256: fd496e7d48403246f534c5eec09fc1e63ac7beb1fa06541d6ba71f56b30cf29b md5: 7c9449eac5975ef2d7753da262a72707 @@ -4721,18 +3762,17 @@ packages: - pkg:pypi/jinja2?source=compressed-mapping size: 112714 timestamp: 1741263433881 -- conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.0-pyhd8ed1ab_0.conda - sha256: 982e5012c90adae2c8ba3451efb30b06168b20912e83245514f5c02000b4402d - md5: 3d7257f0a61c9aa4ffa3e324a887416b +- conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.1-pyhd8ed1ab_0.conda + sha256: e5a4eca9a5d8adfaa3d51e24eefd1a6d560cb3b33a7e1eee13e410bec457b7ed + md5: fb1c14694de51a476ce8636d92b6f42c depends: - python >=3.9 - setuptools license: BSD-3-Clause - license_family: BSD purls: - pkg:pypi/joblib?source=compressed-mapping - size: 225060 - timestamp: 1746352780559 + size: 224437 + timestamp: 1748019237972 - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.23.0-pyhd8ed1ab_1.conda sha256: be992a99e589146f229c58fe5083e0b60551d774511c494f91fe011931bd7893 md5: a3cead9264b331b32fe8f0aabc967522 @@ -4780,9 +3820,9 @@ packages: - pkg:pypi/jupyter-client?source=hash-mapping size: 106342 timestamp: 1733441040958 -- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.7.2-pyh31011fe_1.conda - sha256: 732b1e8536bc22a5a174baa79842d79db2f4956d90293dd82dc1b3f6099bcccd - md5: 0a2980dada0dd7fd0998f0342308b1b1 +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.8.0-pyh31011fe_0.conda + sha256: 0a25f5e3b24243f3b8ac5295b9784e5cd4ec435c33702afe349d5dc9bd8d61a0 + md5: 83a1cebad0a0f877cea1424452b63dd1 depends: - __unix - platformdirs >=2.5 @@ -4791,9 +3831,9 @@ packages: license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/jupyter-core?source=hash-mapping - size: 57671 - timestamp: 1727163547058 + - pkg:pypi/jupyter-core?source=compressed-mapping + size: 59383 + timestamp: 1748260841604 - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda sha256: dc24b900742fdaf1e077d9a3458fd865711de80bca95fe3c6d46610c532c6ef0 md5: fd312693df06da3578383232528c468d @@ -4830,6 +3870,21 @@ packages: purls: [] size: 117831 timestamp: 1646151697040 +- conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.8-py312h84d6215_0.conda + sha256: 3ce99d721c1543f6f8f5155e53eef11be47b2f5942a8d1060de6854f9d51f246 + md5: 6713467dc95509683bfa3aca08524e8a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/kiwisolver?source=hash-mapping + size: 71649 + timestamp: 1736908364705 - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda sha256: 99df692f7a8a5c27cd14b5fb1374ee55e756631b9c3d659ed3ee60830249b238 md5: 3f43953b7d3fb3aaa1d0d0723d91e368 @@ -4845,6 +3900,19 @@ packages: purls: [] size: 1370023 timestamp: 1719463201255 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.17-h717163a_0.conda + sha256: d6a61830a354da022eae93fa896d0991385a875c6bba53c82263a289deda9db8 + md5: 000e85703f0fd9594c81710dd5066471 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.7.0,<4.8.0a0 + license: MIT + license_family: MIT + purls: [] + size: 248046 + timestamp: 1739160907615 - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_4.conda sha256: db73f38155d901a610b2320525b9dd3b31e4949215c870685fd92ea61b5ce472 md5: 01f8d123c96816249efd255a31ad7712 @@ -4857,6 +3925,18 @@ packages: purls: [] size: 671240 timestamp: 1740155456116 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h0aef613_1.conda + sha256: 412381a43d5ff9bbed82cd52a0bbca5b90623f62e41007c9c42d3870c60945ff + md5: 9344155d33912347b37f0ae6c410a835 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 264243 + timestamp: 1745264221534 - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250127.1-cxx17_hbbce691_0.conda sha256: 65d5ca837c3ee67b9d769125c21dc857194d7f6181bb0e7bd98ae58597b457d0 md5: 00290e549c5c8a32cc271020acc9ec6b @@ -4891,86 +3971,6 @@ packages: purls: [] size: 866358 timestamp: 1745335292389 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-20.0.0-hebdba27_2_cpu.conda - build_number: 2 - sha256: f9ca7671eaebc5d9dcb368b26ee3d90184479c18e43bf7a8700bee42b138eec2 - md5: fefb8cc188c182d820ff7fe8d17528fc - depends: - - __glibc >=2.17,<3.0.a0 - - aws-crt-cpp >=0.32.4,<0.32.5.0a0 - - aws-sdk-cpp >=1.11.510,<1.11.511.0a0 - - azure-core-cpp >=1.14.0,<1.14.1.0a0 - - azure-identity-cpp >=1.10.0,<1.10.1.0a0 - - azure-storage-blobs-cpp >=12.13.0,<12.13.1.0a0 - - azure-storage-files-datalake-cpp >=12.12.0,<12.12.1.0a0 - - bzip2 >=1.0.8,<2.0a0 - - glog >=0.7.1,<0.8.0a0 - - libabseil * cxx17* - - libabseil >=20250127.1,<20250128.0a0 - - libbrotlidec >=1.1.0,<1.2.0a0 - - libbrotlienc >=1.1.0,<1.2.0a0 - - libgcc >=13 - - libgoogle-cloud >=2.36.0,<2.37.0a0 - - libgoogle-cloud-storage >=2.36.0,<2.37.0a0 - - libopentelemetry-cpp >=1.20.0,<1.21.0a0 - - libprotobuf >=5.29.3,<5.29.4.0a0 - - libre2-11 >=2024.7.2 - - libstdcxx >=13 - - libutf8proc >=2.10.0,<2.11.0a0 - - libzlib >=1.3.1,<2.0a0 - - lz4-c >=1.10.0,<1.11.0a0 - - orc >=2.1.1,<2.1.2.0a0 - - re2 - - snappy >=1.2.1,<1.3.0a0 - - zstd >=1.5.7,<1.6.0a0 - constrains: - - parquet-cpp <0.0a0 - - arrow-cpp <0.0a0 - - apache-arrow-proc =*=cpu - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 8990207 - timestamp: 1744939168760 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-20.0.0-h27f8bab_0_cpu.conda - sha256: 792c96844fe6a956a3e394ec66b5cf131a476acfa36127d89e5574afdc3fd585 - md5: 6dacb4d072204ce0fd13835759418872 - depends: - - __glibc >=2.17,<3.0.a0 - - aws-crt-cpp >=0.32.4,<0.32.5.0a0 - - aws-sdk-cpp >=1.11.510,<1.11.511.0a0 - - azure-core-cpp >=1.14.0,<1.14.1.0a0 - - azure-identity-cpp >=1.10.0,<1.10.1.0a0 - - azure-storage-blobs-cpp >=12.13.0,<12.13.1.0a0 - - azure-storage-files-datalake-cpp >=12.12.0,<12.12.1.0a0 - - bzip2 >=1.0.8,<2.0a0 - - glog >=0.7.1,<0.8.0a0 - - libabseil * cxx17* - - libabseil >=20250127.1,<20250128.0a0 - - libbrotlidec >=1.1.0,<1.2.0a0 - - libbrotlienc >=1.1.0,<1.2.0a0 - - libgcc >=13 - - libgoogle-cloud >=2.36.0,<2.37.0a0 - - libgoogle-cloud-storage >=2.36.0,<2.37.0a0 - - libopentelemetry-cpp >=1.20.0,<1.21.0a0 - - libprotobuf >=5.29.3,<5.29.4.0a0 - - libre2-11 >=2024.7.2 - - libstdcxx >=13 - - libutf8proc >=2.10.0,<2.11.0a0 - - libzlib >=1.3.1,<2.0a0 - - lz4-c >=1.10.0,<1.11.0a0 - - orc >=2.1.1,<2.1.2.0a0 - - re2 - - snappy >=1.2.1,<1.3.0a0 - - zstd >=1.5.7,<1.6.0a0 - constrains: - - parquet-cpp <0.0a0 - - arrow-cpp <0.0a0 - - apache-arrow-proc =*=cpu - license: Apache-2.0 - purls: [] - size: 9186076 - timestamp: 1745978106549 - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-20.0.0-hebdba27_3_cpu.conda build_number: 3 sha256: dff51b5c2164ad21b7dbf796f7c79c2abba84a88d6932ce7bd09418a672a5e83 @@ -5012,88 +4012,6 @@ packages: purls: [] size: 9189847 timestamp: 1746920464544 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-20.0.0-hf00d7f4_1_cpu.conda - build_number: 1 - sha256: be201777b89357d12f576f35ac9c568a540eafaf9fa0f21e592eb98bfb96ec37 - md5: 22a0af27611e707513bc604b6b77e100 - depends: - - __glibc >=2.17,<3.0.a0 - - aws-crt-cpp >=0.32.4,<0.32.5.0a0 - - aws-sdk-cpp >=1.11.510,<1.11.511.0a0 - - azure-core-cpp >=1.14.0,<1.14.1.0a0 - - azure-identity-cpp >=1.10.0,<1.10.1.0a0 - - azure-storage-blobs-cpp >=12.13.0,<12.13.1.0a0 - - azure-storage-files-datalake-cpp >=12.12.0,<12.12.1.0a0 - - bzip2 >=1.0.8,<2.0a0 - - glog >=0.7.1,<0.8.0a0 - - libabseil * cxx17* - - libabseil >=20250127.1,<20250128.0a0 - - libbrotlidec >=1.1.0,<1.2.0a0 - - libbrotlienc >=1.1.0,<1.2.0a0 - - libgcc >=13 - - libgoogle-cloud >=2.36.0,<2.37.0a0 - - libgoogle-cloud-storage >=2.36.0,<2.37.0a0 - - libopentelemetry-cpp >=1.20.0,<1.21.0a0 - - libprotobuf >=5.29.3,<5.29.4.0a0 - - libre2-11 >=2024.7.2 - - libstdcxx >=13 - - libutf8proc >=2.10.0,<2.11.0a0 - - libzlib >=1.3.1,<2.0a0 - - lz4-c >=1.10.0,<1.11.0a0 - - orc >=2.1.2,<2.1.3.0a0 - - re2 - - snappy >=1.2.1,<1.3.0a0 - - zstd >=1.5.7,<1.6.0a0 - constrains: - - apache-arrow-proc =*=cpu - - arrow-cpp <0.0a0 - - parquet-cpp <0.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 9189643 - timestamp: 1746644995784 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-20.0.0-hcb10f89_2_cpu.conda - build_number: 2 - sha256: 53a2f24376a72ab67cb006465bfab51ab29758b1381d488f164fb6ed5d05f5c3 - md5: 34e6f380f6c3342659710654bf691a0e - depends: - - __glibc >=2.17,<3.0.a0 - - libarrow 20.0.0 hebdba27_2_cpu - - libgcc >=13 - - libstdcxx >=13 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 641005 - timestamp: 1746645063470 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-20.0.0-hcb10f89_2_cpu.conda - build_number: 2 - sha256: da45e76afaf04dc26e99f2ab507eb944294f05531ae64a418de8f122d9425f1f - md5: c25856947d8545ae864effb0a6b5819a - depends: - - __glibc >=2.17,<3.0.a0 - - libarrow 20.0.0 hebdba27_2_cpu - - libarrow-acero 20.0.0 hcb10f89_2_cpu - - libgcc >=13 - - libstdcxx >=13 - license: Apache-2.0 - purls: [] - size: 641618 - timestamp: 1745978166293 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-20.0.0-hcb10f89_1_cpu.conda - build_number: 1 - sha256: 2c54c2d0a3a09d459cd14fb7dd13e6004ea3c018205b10fa427e8376f813c563 - md5: 312459eebd0500f1b864824df05b79d6 - depends: - - __glibc >=2.17,<3.0.a0 - - libarrow 20.0.0 hf00d7f4_1_cpu - - libgcc >=13 - - libstdcxx >=13 - license: Apache-2.0 - purls: [] - size: 641239 - timestamp: 1746631689388 - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-20.0.0-hcb10f89_3_cpu.conda build_number: 3 sha256: 28f186a7806085e13cb8ee939931dc2020b59413b762f68b872cc6620f777f69 @@ -5108,51 +4026,6 @@ packages: purls: [] size: 642069 timestamp: 1746920544904 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-19.0.1-hcb10f89_8_cpu.conda - build_number: 8 - sha256: d1162e03c292e23c5893385ab012c73e13e49f57ece4fdeb3c6297f550bc0c44 - md5: 3bb1fd3f721c4542ed26ba9bfc036619 - depends: - - __glibc >=2.17,<3.0.a0 - - libarrow 19.0.1 h27f8bab_8_cpu - - libarrow-acero 19.0.1 hcb10f89_8_cpu - - libgcc >=13 - - libparquet 19.0.1 h081d1f1_8_cpu - - libstdcxx >=13 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 614187 - timestamp: 1744939340591 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-20.0.0-hcb10f89_0_cpu.conda - sha256: b785c56560145ac3123d3fbf2db11d3e0e465ae5f2f2ad3276fb82a3d5a770b1 - md5: ebdbd9d4522b4106246866054f7520bf - depends: - - __glibc >=2.17,<3.0.a0 - - libarrow 20.0.0 h27f8bab_0_cpu - - libarrow-acero 20.0.0 hcb10f89_0_cpu - - libgcc >=13 - - libparquet 20.0.0 h081d1f1_0_cpu - - libstdcxx >=13 - license: Apache-2.0 - purls: [] - size: 607462 - timestamp: 1745978318647 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-20.0.0-hcb10f89_1_cpu.conda - build_number: 1 - sha256: f62062e1375674a5d4d8f7089e8da0a946613b98752679e2f6d12e7bee82c03e - md5: 1718d536f23a6006d7eb7cedf08b0fc6 - depends: - - __glibc >=2.17,<3.0.a0 - - libarrow 20.0.0 hf00d7f4_1_cpu - - libarrow-acero 20.0.0 hcb10f89_1_cpu - - libgcc >=13 - - libparquet 20.0.0 h081d1f1_1_cpu - - libstdcxx >=13 - license: Apache-2.0 - purls: [] - size: 608531 - timestamp: 1746631886431 - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-20.0.0-hcb10f89_3_cpu.conda build_number: 3 sha256: ae0cc1eade563a14eaf59a921021cec5c526f6c1af93b81d3136caf41075c6ef @@ -5169,60 +4042,6 @@ packages: purls: [] size: 607683 timestamp: 1746920679379 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-19.0.1-h1bed206_8_cpu.conda - build_number: 8 - sha256: 4385e78e7bb9e397ce04eddcdbc0e43ef826b7b3cfdb456645d3dd47357699d9 - md5: 7832ea7b3c0e1269ef8990d774c9b6b1 - depends: - - __glibc >=2.17,<3.0.a0 - - libabseil * cxx17* - - libabseil >=20250127.1,<20250128.0a0 - - libarrow 20.0.0 hebdba27_2_cpu - - libarrow-acero 20.0.0 hcb10f89_2_cpu - - libarrow-dataset 20.0.0 hcb10f89_2_cpu - - libgcc >=13 - - libprotobuf >=5.29.3,<5.29.4.0a0 - - libstdcxx >=13 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 527935 - timestamp: 1744939395746 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-20.0.0-h1bed206_0_cpu.conda - sha256: 57ba1176fbbf920b84919c960c66aef7b63213616e0b56e41fb5288114db7ff3 - md5: 1763dd016d6eee48e2bb29382f8d1562 - depends: - - __glibc >=2.17,<3.0.a0 - - libabseil * cxx17* - - libabseil >=20250127.1,<20250128.0a0 - - libarrow 20.0.0 h27f8bab_0_cpu - - libarrow-acero 20.0.0 hcb10f89_0_cpu - - libarrow-dataset 20.0.0 hcb10f89_0_cpu - - libgcc >=13 - - libprotobuf >=5.29.3,<5.29.4.0a0 - - libstdcxx >=13 - license: Apache-2.0 - purls: [] - size: 523094 - timestamp: 1745978388635 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-20.0.0-h1bed206_1_cpu.conda - build_number: 1 - sha256: 655356cfb9f7dc8795ea26d421d8da55f750ec22a4ea5b86cc95d8f73c9ad38c - md5: a6c3693160864beadef9f00ddd3709bb - depends: - - __glibc >=2.17,<3.0.a0 - - libabseil * cxx17* - - libabseil >=20250127.1,<20250128.0a0 - - libarrow 20.0.0 hf00d7f4_1_cpu - - libarrow-acero 20.0.0 hcb10f89_1_cpu - - libarrow-dataset 20.0.0 hcb10f89_1_cpu - - libgcc >=13 - - libprotobuf >=5.29.3,<5.29.4.0a0 - - libstdcxx >=13 - license: Apache-2.0 - purls: [] - size: 522892 - timestamp: 1746631971341 - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-20.0.0-h1bed206_3_cpu.conda build_number: 3 sha256: 828806da67cb821c74d43920cc15782d5c8b08318807799b30d9cbcf9fe94733 @@ -5240,19 +4059,8 @@ packages: license: Apache-2.0 license_family: APACHE purls: [] - size: 525332 - timestamp: 1746920767029 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.23.1-h8e693c7_0.conda - sha256: 13b863584fccbb9089de73a2442e540703ce4873e4719c9d98c98e4a8e12f9d1 - md5: 988f4937281a66ca19d1adb3b5e3f859 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - license: LGPL-2.1-or-later - purls: [] - size: 43179 - timestamp: 1739038705987 + size: 525332 + timestamp: 1746920767029 - conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.24.1-h8e693c7_0.conda sha256: e30733a729eb6efd9cb316db0202897c882d46f6c20a0e647b4de8ec921b7218 md5: 57566a81dd1e5aa3d98ac7582e8bfe03 @@ -5395,17 +4203,17 @@ packages: purls: [] size: 438088 timestamp: 1743601695669 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.22-hb9d3cd8_0.conda - sha256: 780f0530a3adfc1497ba49d626931c6afc978c540e1abfde6ccd57128ded6ad6 - md5: b422943d5d772b7cc858b36ad2a92db5 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.24-h86f0d12_0.conda + sha256: 8420748ea1cc5f18ecc5068b4f24c7a023cc9b20971c99c824ba10641fb95ddf + md5: 64f0c503da58ec25ebd359e4d990afa8 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 license: MIT license_family: MIT purls: [] - size: 72242 - timestamp: 1728177071251 + size: 72573 + timestamp: 1747040452262 - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda sha256: d789471216e7aba3c184cd054ed61ce3f6dac6f87a50ec69291b9297f8c18724 md5: c277e0a4d549b03ac1e9d6cbbe3d017b @@ -5464,20 +4272,29 @@ packages: purls: [] size: 57433 timestamp: 1743434498161 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.1.0-h767d61c_2.conda - sha256: 0024f9ab34c09629621aefd8603ef77bf9d708129b0dd79029e502c39ffc2195 - md5: ea8ac52380885ed41c1baa8f1d6d2b93 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.13.3-ha770c72_1.conda + sha256: 7be9b3dac469fe3c6146ff24398b685804dfc7a1de37607b84abd076f57cc115 + md5: 51f5be229d83ecd401fb369ab96ae669 + depends: + - libfreetype6 >=2.13.3 + license: GPL-2.0-only OR FTL + purls: [] + size: 7693 + timestamp: 1745369988361 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.13.3-h48d6fc4_1.conda + sha256: 7759bd5c31efe5fbc36a7a1f8ca5244c2eabdbeb8fc1bee4b99cf989f35c7d81 + md5: 3c255be50a506c50765a93a6644f32fe depends: - __glibc >=2.17,<3.0.a0 - - _openmp_mutex >=4.5 + - libgcc >=13 + - libpng >=1.6.47,<1.7.0a0 + - libzlib >=1.3.1,<2.0a0 constrains: - - libgcc-ng ==15.1.0=*_2 - - libgomp 15.1.0 h767d61c_2 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL + - freetype >=2.13.3 + license: GPL-2.0-only OR FTL purls: [] - size: 847885 - timestamp: 1740240653082 + size: 380134 + timestamp: 1745369987697 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.1.0-h767d61c_2.conda sha256: 0024f9ab34c09629621aefd8603ef77bf9d708129b0dd79029e502c39ffc2195 md5: ea8ac52380885ed41c1baa8f1d6d2b93 @@ -5492,16 +4309,6 @@ packages: purls: [] size: 829108 timestamp: 1746642191935 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_2.conda - sha256: fb7558c328b38b2f9d2e412c48da7890e7721ba018d733ebdfea57280df01904 - md5: a2222a6ada71fb478682efe483ce0f92 - depends: - - libgcc 15.1.0 h767d61c_2 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 53758 - timestamp: 1740240660904 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_2.conda sha256: 0ab5421a89f090f3aa33841036bb3af4ed85e1f91315b528a9d75fab9aad51ae md5: ddca86c7040dd0e73b2b69bd7833d225 @@ -5512,17 +4319,6 @@ packages: purls: [] size: 34586 timestamp: 1746642200749 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-0.23.1-h5888daf_0.conda - sha256: 190097140d9c16637aa516757d8087f17e8c22cc844c87288da64404b81ef43c - md5: a09ce5decdef385bcce78c32809fa794 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - license: GPL-3.0-or-later - license_family: GPL - purls: [] - size: 166867 - timestamp: 1739038720211 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-0.24.1-h5888daf_0.conda sha256: 104f2341546e295d1136ab3010e81391bd3fd5be0f095db59266e8eba2082d37 md5: 2ee6d71b72f75d50581f2f68e965efdb @@ -5534,18 +4330,6 @@ packages: purls: [] size: 171165 timestamp: 1746228870846 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.1.0-h69a702a_2.conda - sha256: 914daa4f632b786827ea71b5e07cd00d25fc6e67789db2f830dc481eec660342 - md5: f92e6e0a3c0c0c85561ef61aa59d555d - depends: - - libgfortran5 15.1.0 hcea5267_2 - constrains: - - libgfortran-ng ==15.1.0=*_2 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 53733 - timestamp: 1740240690977 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.1.0-h69a702a_2.conda sha256: 914daa4f632b786827ea71b5e07cd00d25fc6e67789db2f830dc481eec660342 md5: f92e6e0a3c0c0c85561ef61aa59d555d @@ -5558,19 +4342,6 @@ packages: purls: [] size: 34541 timestamp: 1746642233221 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.2.0-hf1ad2bd_2.conda - sha256: c17b7cf3073a1f4e1f34d50872934fa326346e104d3c445abc1e62481ad6085c - md5: 556a4fdfac7287d349b8f09aba899693 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=15.1.0 - constrains: - - libgfortran 15.1.0 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 1461978 - timestamp: 1740240671964 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.1.0-hcea5267_2.conda sha256: be23750f3ca1a5cb3ada858c4f633effe777487d1ea35fddca04c0965c073350 md5: 01de444988ed960031dbe84cf4f9b1fc @@ -5584,16 +4355,6 @@ packages: purls: [] size: 1569986 timestamp: 1746642212331 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h767d61c_2.conda - sha256: 1a3130e0b9267e781b89399580f3163632d59fe5b0142900d63052ab1a53490e - md5: 06d02030237f4d5b3d9a7e7d348fe3c6 - depends: - - __glibc >=2.17,<3.0.a0 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 459862 - timestamp: 1740240588123 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.1.0-h767d61c_2.conda sha256: 05fff3dc7e80579bc28de13b511baec281c4343d703c406aefd54389959154fb md5: fbe7d535ff9d3a168c148e07358cd5b1 @@ -5701,6 +4462,18 @@ packages: purls: [] size: 137731 timestamp: 1741525622652 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.0-hb9d3cd8_0.conda + sha256: 98b399287e27768bf79d48faba8a99a2289748c65cd342ca21033fab1860d4a4 + md5: 9fa334557db9f63da6c9285fd2a48638 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 628947 + timestamp: 1745268527144 - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-31_h7ac8fdf_openblas.conda build_number: 31 sha256: f583661921456e798aba10972a8abbd9d33571c655c1f66eff450edc9cbefcf3 @@ -5733,19 +4506,6 @@ packages: purls: [] size: 16760 timestamp: 1740087736615 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_1.conda - sha256: eeff241bddc8f1b87567dd6507c9f441f7f472c27f0860a07628260c000ef27c - md5: a76fd702c93cd2dfd89eff30a5fd45a8 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - constrains: - - xz 5.8.1.* - - xz ==5.8.1=*_1 - license: 0BSD - purls: [] - size: 112709 - timestamp: 1743771086123 - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_1.conda sha256: eeff241bddc8f1b87567dd6507c9f441f7f472c27f0860a07628260c000ef27c md5: a76fd702c93cd2dfd89eff30a5fd45a8 @@ -5841,51 +4601,6 @@ packages: purls: [] size: 347071 timestamp: 1743991580676 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-20.0.0-h081d1f1_2_cpu.conda - build_number: 2 - sha256: 41af142791f845d8b912c2721445c839654f675af0f22624487c0507551064b5 - md5: 164383514a3f29c1e4838d9a4a08040d - depends: - - __glibc >=2.17,<3.0.a0 - - libarrow 20.0.0 hebdba27_2_cpu - - libgcc >=13 - - libstdcxx >=13 - - libthrift >=0.21.0,<0.21.1.0a0 - - openssl >=3.5.0,<4.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 1252840 - timestamp: 1744939311536 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-20.0.0-h081d1f1_0_cpu.conda - sha256: 2cf3ed360b38da98275e668ed5d66d97b1b81d24e7a871c3d5f36639366b7d9c - md5: 4ad62607dd9f9902e0bd3d91c5bbce58 - depends: - - __glibc >=2.17,<3.0.a0 - - libarrow 20.0.0 h27f8bab_0_cpu - - libgcc >=13 - - libstdcxx >=13 - - libthrift >=0.21.0,<0.21.1.0a0 - - openssl >=3.5.0,<4.0a0 - license: Apache-2.0 - purls: [] - size: 1241755 - timestamp: 1745978282520 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-20.0.0-h081d1f1_1_cpu.conda - build_number: 1 - sha256: ee4bc30c6d53805ad9da9aff4bc8028e53e8cdaaafe68197b0cb885557da4c48 - md5: 3b9e40a2113f31804ad9339e8ac3ffaa - depends: - - __glibc >=2.17,<3.0.a0 - - libarrow 20.0.0 hf00d7f4_1_cpu - - libgcc >=13 - - libstdcxx >=13 - - libthrift >=0.21.0,<0.21.1.0a0 - - openssl >=3.5.0,<4.0a0 - license: Apache-2.0 - purls: [] - size: 1241803 - timestamp: 1746631842790 - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-20.0.0-h081d1f1_3_cpu.conda build_number: 3 sha256: 113148922c560f8d2dd2a1684782dc4f93f44637dacd97fce1ad5e5af9dd10e9 @@ -5902,21 +4617,17 @@ packages: purls: [] size: 1243008 timestamp: 1746920646524 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h501fc15_0.conda - sha256: 9965b1ada1f997202ad8c5a960e69057280b7b926c718df9b07c62924d9c1d73 - md5: 452518a9744fbac05fb45531979bdf29 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.47-h943b412_0.conda + sha256: 23367d71da58c9a61c8cbd963fcffb92768d4ae5ffbef9a47cdf1f54f98c5c36 + md5: 55199e2ae2c3651f6f9b2a447b47bdc9 depends: - __glibc >=2.17,<3.0.a0 - - libabseil * cxx17* - - libabseil >=20250127.0,<20250128.0a0 - libgcc >=13 - - libstdcxx >=13 - libzlib >=1.3.1,<2.0a0 - license: BSD-3-Clause - license_family: BSD + license: zlib-acknowledgement purls: [] - size: 3352450 - timestamp: 1741126291267 + size: 288701 + timestamp: 1739952993639 - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h501fc15_1.conda sha256: 691af28446345674c6b3fb864d0e1a1574b6cc2f788e0f036d73a6b05dcf81cf md5: edb86556cf4a0c133e7932a1597ff236 @@ -5957,17 +4668,6 @@ packages: purls: [] size: 205978 timestamp: 1716828628198 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.2-hee588c1_0.conda - sha256: 525d4a0e24843f90b3ff1ed733f0a2e408aa6dd18b9d4f15465595e078e104a2 - md5: 93048463501053a00739215ea3f36324 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libzlib >=1.3.1,<2.0a0 - license: Unlicense - purls: [] - size: 918664 - timestamp: 1742083674731 - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.2-hee588c1_0.conda sha256: 525d4a0e24843f90b3ff1ed733f0a2e408aa6dd18b9d4f15465595e078e104a2 md5: 93048463501053a00739215ea3f36324 @@ -5992,17 +4692,6 @@ packages: purls: [] size: 304790 timestamp: 1745608545575 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.1.0-h8f9b012_2.conda - sha256: 6ae3d153e78f6069d503d9309f2cac6de5b93d067fc6433160a4c05226a5dad4 - md5: 1cb1c67961f6dd257eae9e9691b341aa - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc 15.1.0 h767d61c_2 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 3884556 - timestamp: 1740240685253 - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.1.0-h8f9b012_2.conda sha256: 6ae3d153e78f6069d503d9309f2cac6de5b93d067fc6433160a4c05226a5dad4 md5: 1cb1c67961f6dd257eae9e9691b341aa @@ -6014,16 +4703,6 @@ packages: purls: [] size: 3902355 timestamp: 1746642227493 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_2.conda - sha256: e86f38b007cf97cc2c67cd519f2de12a313c4ee3f5ef11652ad08932a5e34189 - md5: c75da67f045c2627f59e6fcb5f4e3a9b - depends: - - libstdcxx 15.1.0 h8f9b012_2 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 53830 - timestamp: 1740240722530 - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.1.0-h4852527_2.conda sha256: 11bea86e11de7d6bce87589197a383344df3fa0a3552dab7e931785ff1159a5b md5: 9d2072af184b5caa29492bf2344597bb @@ -6060,6 +4739,24 @@ packages: purls: [] size: 425773 timestamp: 1727205853307 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-hf01ce69_5.conda + sha256: 7fa6ddac72e0d803bb08e55090a8f2e71769f1eb7adbd5711bdd7789561601b1 + md5: e79a094918988bb1807462cd42c83962 + depends: + - __glibc >=2.17,<3.0.a0 + - lerc >=4.0.0,<5.0a0 + - libdeflate >=1.24,<1.25.0a0 + - libgcc >=13 + - libjpeg-turbo >=3.1.0,<4.0a0 + - liblzma >=5.8.1,<6.0a0 + - libstdcxx >=13 + - libwebp-base >=1.5.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: HPND + purls: [] + size: 429575 + timestamp: 1747067001268 - conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.7.0-cpu_mkl_hf6ddc5a_100.conda sha256: 7b6178464b02d65c4af92086c71b79e5c2b7fc1500c1547334a4755e6e92d8a9 md5: 6bdda0b10852c6d03b030bab7ec251f0 @@ -6140,6 +4837,33 @@ packages: purls: [] size: 891272 timestamp: 1737016632446 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.5.0-h851e524_0.conda + sha256: c45283fd3e90df5f0bd3dbcd31f59cdd2b001d424cf30a07223655413b158eaf + md5: 63f790534398730f59e1b899c3644d4a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - libwebp 1.5.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 429973 + timestamp: 1734777489810 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + sha256: 666c0c431b23c6cec6e492840b176dde533d48b7e6fb8883f5071223433776aa + md5: 92ed62436b625154323d40d5f2f11dd7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + purls: [] + size: 395888 + timestamp: 1727278577118 - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c md5: 5aa797f8787fe7a17d1b0821485b5adc @@ -6149,21 +4873,6 @@ packages: purls: [] size: 100393 timestamp: 1702724383534 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.8-h4bc477f_0.conda - sha256: b0b3a96791fa8bb4ec030295e8c8bf2d3278f33c0f9ad540e73b5e538e6268e7 - md5: 14dbe05b929e329dbaa6f2d0aa19466d - depends: - - __glibc >=2.17,<3.0.a0 - - icu >=75.1,<76.0a0 - - libgcc >=13 - - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.1,<6.0a0 - - libzlib >=1.3.1,<2.0a0 - license: MIT - license_family: MIT - purls: [] - size: 691042 - timestamp: 1743794600936 - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.8-h4bc477f_0.conda sha256: b0b3a96791fa8bb4ec030295e8c8bf2d3278f33c0f9ad540e73b5e538e6268e7 md5: 14dbe05b929e329dbaa6f2d0aa19466d @@ -6219,18 +4928,18 @@ packages: - pkg:pypi/linkify-it-py?source=hash-mapping size: 24154 timestamp: 1733781296133 -- conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-20.1.4-h024ca30_0.conda - sha256: 5b39cdde3457e41b133d6f1fe53095c7fd3951bbdab46580098ccbf5ee9c99f7 - md5: 4fc395cda27912a7d904b86b5dbf3a4d +- conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-20.1.5-h024ca30_0.conda + sha256: 646907391a8d744508049ef7bd76653d59480b061a3a76ce047064f2923b6f84 + md5: 86f58be65a51d62ccc06cacfd83ff987 depends: - __glibc >=2.17,<3.0.a0 constrains: - - openmp 20.1.4|20.1.4.* + - openmp 20.1.5|20.1.5.* license: Apache-2.0 WITH LLVM-exception license_family: APACHE purls: [] - size: 3322195 - timestamp: 1746134424442 + size: 3193511 + timestamp: 1747367181459 - conda: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.44.0-py310h1a6248f_1.conda sha256: 47fd93916c73f4f6c3f3c26de517614984537299f8f3c8a4b58933cb28bf4af2 md5: 7ea40d06d6a4a970a449728a806e3308 @@ -6242,6 +4951,7 @@ packages: - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 license: BSD-2-Clause + license_family: BSD purls: - pkg:pypi/llvmlite?source=hash-mapping size: 29942580 @@ -6273,6 +4983,7 @@ packages: - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 license: BSD-2-Clause + license_family: BSD purls: - pkg:pypi/llvmlite?source=hash-mapping size: 29996918 @@ -6311,17 +5022,6 @@ packages: purls: [] size: 171416 timestamp: 1713515738503 -- conda: https://conda.anaconda.org/conda-forge/noarch/makefun-1.15.6-pyhd8ed1ab_1.conda - sha256: d22cb45042dfa6c1e5f16abbb2a63d1abf13edaf6e371e49b60ac14228ad31f7 - md5: 646cb441f0f2e84da65a651858e18b46 - depends: - - python >=3.9 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/makefun?source=hash-mapping - size: 26784 - timestamp: 1742578652235 - conda: https://conda.anaconda.org/conda-forge/noarch/makefun-1.16.0-pyhd8ed1ab_0.conda sha256: 0e03e67393eb596430f27bccaf75f5c317cfd0d245e2740a29c61978a82dc9b1 md5: 220b98de4da252648b825e21ba351d5d @@ -6393,6 +5093,36 @@ packages: - pkg:pypi/markupsafe?source=hash-mapping size: 24604 timestamp: 1733219911494 +- conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.3-py312hd3ec401_0.conda + sha256: 3b5be100ddfcd5697140dbb8d4126e3afd0147d4033defd6c6eeac78fe089bd2 + md5: 2d69618b52d70970c81cc598e4b51118 + depends: + - __glibc >=2.17,<3.0.a0 + - contourpy >=1.0.1 + - cycler >=0.10 + - fonttools >=4.22.0 + - freetype + - kiwisolver >=1.3.1 + - libfreetype >=2.13.3 + - libfreetype6 >=2.13.3 + - libgcc >=13 + - libstdcxx >=13 + - numpy >=1.19,<3 + - numpy >=1.23 + - packaging >=20.0 + - pillow >=8 + - pyparsing >=2.3.1 + - python >=3.12,<3.13.0a0 + - python-dateutil >=2.7 + - python_abi 3.12.* *_cp312 + - qhull >=2020.2,<2020.3.0a0 + - tk >=8.6.13,<8.7.0a0 + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/matplotlib?source=hash-mapping + size: 8188885 + timestamp: 1746820680864 - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_1.conda sha256: 69b7dc7131703d3d60da9b0faa6dd8acbf6f6c396224cf6aef3e855b8c0c41c6 md5: af6ab708897df59bd6e7283ceab1b56b @@ -6405,70 +5135,22 @@ packages: - pkg:pypi/matplotlib-inline?source=hash-mapping size: 14467 timestamp: 1733417051523 -- conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.4-py310hdb7682f_0.conda - sha256: 37ba941c92470a497d547e2159c33d9d2b020362a66d96cbe40a6b103dacdcb1 - md5: c6817a8792e4bf46f7291596fd8c3d2c - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - openssl >=3.5.0,<4.0a0 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - - tomli >=1.1.0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/maturin?source=hash-mapping - size: 6470671 - timestamp: 1746840874217 -- conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.4-py311h9b3a049_0.conda - sha256: 367ced087159ec01bce7c8718e073f8f51c09a2953c2a7175cf4eac36dac1b19 - md5: 5d21cf08cecf4e6462c63f962af58608 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - openssl >=3.5.0,<4.0a0 - - python >=3.11,<3.12.0a0 - - python_abi 3.11.* *_cp311 - - tomli >=1.1.0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/maturin?source=hash-mapping - size: 6471652 - timestamp: 1746840881784 -- conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.4-py312h6ab59e4_0.conda - sha256: ddcc5c2e323ddb58670fc7646f8f0017cf18114c5a32adef6b42bf30511e8b6a - md5: daa46b5bf4954d71fc10c9ad0eb1a3f1 +- conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.6-py39h446a924_1.conda + noarch: python + sha256: 951d03994ba438f6a45c7a81f5441c4215314caf42aad02a0ff14851d9977a28 + md5: 0caaf02db5870f138f58a81ca3b81fc1 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - openssl >=3.5.0,<4.0a0 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 + - python - tomli >=1.1.0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/maturin?source=hash-mapping - size: 6472955 - timestamp: 1741886678732 -- conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.8.6-py310hdb7682f_0.conda - sha256: 806cb629935372e69295bd0902018c55af197df16e934f214211bd21a0b8b1f9 - md5: 278e944776613d1644015d624b76af58 - depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - openssl >=3.5.0,<4.0a0 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - - tomli >=1.1.0 license: MIT license_family: MIT purls: - pkg:pypi/maturin?source=hash-mapping - size: 6467984 - timestamp: 1747195695674 + size: 8084055 + timestamp: 1747665543479 - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda sha256: c63ed79d9745109c0a70397713b0c07f06e7d3561abcb122cfc80a141ab3b449 md5: af2060041d4f3250a7eb6ab3ec0e549b @@ -6550,28 +5232,8 @@ packages: license: Apache-2.0 AND BSD-3-Clause purls: - pkg:pypi/memray?source=hash-mapping - size: 717972 - timestamp: 1744410040790 -- conda: https://conda.anaconda.org/conda-forge/linux-64/memray-1.17.2-py310hfc232cf_0.conda - sha256: 7147ad074843e31f5e0f8f20f898d5b8038b054ca27cec02f82249eba84d25dd - md5: b7815a024475cf6f76d0c93fef6b9c4a - depends: - - __glibc >=2.17,<3.0.a0 - - elfutils >=0.192,<0.193.0a0 - - jinja2 - - libgcc >=13 - - libstdcxx >=13 - - libunwind >=1.6.2,<1.7.0a0 - - lz4-c >=1.10.0,<1.11.0a0 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - - rich >=11.2.0 - - textual >=0.34.0 - license: Apache-2.0 AND BSD-3-Clause - purls: - - pkg:pypi/memray?source=hash-mapping - size: 686727 - timestamp: 1746769489931 + size: 682736 + timestamp: 1746769578439 - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.1.3-pyh29332c3_0.conda sha256: a67484d7dd11e815a81786580f18b6e4aa2392f292f29183631a6eccc8dc37b3 md5: 7ec6576e328bc128f4982cd646eeba85 @@ -6645,6 +5307,17 @@ packages: - pkg:pypi/mpmath?source=hash-mapping size: 439705 timestamp: 1733302781386 +- conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 + sha256: f86fb22b58e93d04b6f25e0d811b56797689d598788b59dcb47f59045b568306 + md5: 2ba8498c1018c1e9c61eb99b973dfe19 + depends: + - python + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/munkres?source=hash-mapping + size: 12452 + timestamp: 1600387789153 - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda sha256: 6ed158e4e5dd8f6a10ad9e525631e35cee8557718f83de7a4e3966b1f772c4b1 md5: e9c622e0d00fa24a6292279af3ab6d06 @@ -6847,16 +5520,17 @@ packages: - pkg:pypi/nest-asyncio?source=hash-mapping size: 11543 timestamp: 1733325673691 -- conda: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.9.1-h7ab15ed_0.conda - sha256: 1ef1b7efa69c7fb4e2a36a88316f307c115713698d1c12e19f55ae57c0482995 - md5: 2bf1915cc107738811368afcb0993a59 +- conda: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.10.1-h4a9d5aa_0.conda + sha256: 00b5a5e394d58cff5b08e0082699e773dd41995130bc14747740a16d9cacdd2c + md5: 618bf3007df69a0ca9306ed8d6b48b48 depends: - - libgcc-ng >=12 - license: GPL 2 and LGPL3 - license_family: GPL + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - gmp >=6.3.0,<7.0a0 + license: GPL-2.0-or-later OR LGPL-3.0-or-later purls: [] - size: 1011638 - timestamp: 1686309814836 + size: 1047686 + timestamp: 1748012178395 - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.4.2-pyh267e887_2.conda sha256: 39625cd0c9747fa5c46a9a90683b8997d8b9649881b3dc88336b13b7bdd60117 md5: fd40bf7f7f4bc4b647dc8512053d9873 @@ -6983,9 +5657,9 @@ packages: - tox~=4.0 ; extra == 'dev' - versioningit~=2.0 ; extra == 'dev' requires_python: '>=3.8' -- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.5-py310hefbff90_0.conda - sha256: f0c9f295a58dabdc1ff9ceadd31ab7a6e8d3c903c37f749bfd058afcb0d534ed - md5: 5526bc875ec897f0d335e38da832b6ee +- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.6-py310hefbff90_0.conda + sha256: 0ba94a61f91d67413e60fa8daa85627a8f299b5054b0eff8f93d26da83ec755e + md5: b0cea2c364bf65cd19e023040eeab05d depends: - __glibc >=2.17,<3.0.a0 - libblas >=3.9.0,<4.0a0 @@ -7001,11 +5675,11 @@ packages: license_family: BSD purls: - pkg:pypi/numpy?source=hash-mapping - size: 7963864 - timestamp: 1745119540801 -- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.5-py311h5d046bc_0.conda - sha256: 66988aa1a624f7fab4f8c5ccb1b848ee52d9d36dd8eb8b3d0149657316ee53f9 - md5: df82417acd53257028de5425047ebc22 + size: 7893263 + timestamp: 1747545075833 +- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.6-py311h5d046bc_0.conda + sha256: f28273a72d25f4d7d62a9ba031d5271082afc498121bd0f6783d72b4103dbbc7 + md5: babce4d9841ebfcee64249d98eb4e0d4 depends: - __glibc >=2.17,<3.0.a0 - libblas >=3.9.0,<4.0a0 @@ -7021,11 +5695,11 @@ packages: license_family: BSD purls: - pkg:pypi/numpy?source=hash-mapping - size: 9054544 - timestamp: 1745119332553 -- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.5-py312h72c5963_0.conda - sha256: af293ba6f715983f71543ed0111e6bb77423d409c1d13062474601257c2eebca - md5: 505bcfc142b97010c162863c38d90016 + size: 9068997 + timestamp: 1747545091884 +- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.6-py312h72c5963_0.conda + sha256: c3b3ff686c86ed3ec7a2cc38053fd6234260b64286c2bd573e436156f39d14a7 + md5: 17fac9db62daa5c810091c2882b28f45 depends: - __glibc >=2.17,<3.0.a0 - libblas >=3.9.0,<4.0a0 @@ -7041,8 +5715,23 @@ packages: license_family: BSD purls: - pkg:pypi/numpy?source=hash-mapping - size: 8543883 - timestamp: 1745119461819 + size: 8490501 + timestamp: 1747545073507 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.3-h5fbd93e_0.conda + sha256: 5bee706ea5ba453ed7fd9da7da8380dd88b865c8d30b5aaec14d2b6dd32dbc39 + md5: 9e5816bc95d285c115a3ebc2f8563564 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libpng >=1.6.44,<1.7.0a0 + - libstdcxx >=13 + - libtiff >=4.7.0,<4.8.0a0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 342988 + timestamp: 1733816638720 - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.0-h7b32b05_1.conda sha256: b4491077c494dbf0b5eaa6d87738c22f2154e9277e5293175ec187634bd808a0 md5: de356753cfdbffcde5bb1e86e3aa6cd0 @@ -7298,20 +5987,9 @@ packages: license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/pandas?source=hash-mapping - size: 15392153 - timestamp: 1744430987175 -- conda: https://conda.anaconda.org/conda-forge/noarch/pandera-0.23.1-hd8ed1ab_0.conda - noarch: python - sha256: 996ad3fca1d396a3183d083cbd5d30a00cba1d31929d09924aaca1b73d7eef07 - md5: 90281a24b3ede1030f497d25f28deff3 - depends: - - pandera-base >=0.23.1,<0.23.2.0a0 - license: MIT - license_family: MIT - purls: [] - size: 6988 - timestamp: 1741441142386 + - pkg:pypi/pandas?source=hash-mapping + size: 15392153 + timestamp: 1744430987175 - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-0.24.0-hd8ed1ab_0.conda sha256: cdd4c6adb4bb08531f18c489946cd0e290dbad4ec44cf4bf5afebb0231c7bfd4 md5: eb0641b84b2a059eab4ed77dcea42f16 @@ -7322,23 +6000,6 @@ packages: purls: [] size: 7414 timestamp: 1747514074017 -- conda: https://conda.anaconda.org/conda-forge/noarch/pandera-base-0.23.1-pyhd8ed1ab_0.conda - sha256: 346522cbc5a88000c818626028881b89beb509b5f1872093e452352c9b9e5c7f - md5: cc301a114c9d6d6fea6fc32d49aa250d - depends: - - numpy >=1.24.4 - - packaging >=20.0 - - pandas >=2.1.1 - - pydantic - - python >=3.9 - - typeguard - - typing_inspect >=0.6.0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/pandera?source=hash-mapping - size: 153748 - timestamp: 1741441141466 - conda: https://conda.anaconda.org/conda-forge/noarch/pandera-base-0.24.0-pyhd8ed1ab_0.conda sha256: 78a254cf8c319eaff2ed423842799ecd7d99b8870274f8a39e4c8d1ae13250a5 md5: a8f2f0820ee1b5ca04b657d4cb7770a5 @@ -7356,14 +6017,14 @@ packages: - pkg:pypi/pandera?source=hash-mapping size: 155311 timestamp: 1747514072843 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pandoc-3.6.4-ha770c72_0.conda - sha256: 16cbcab8a6d9a0cef47b9d3ebeced8a1a75ee54d379649e6260a333d1b2f743c - md5: 53f2cd4128fa7053bb029bbeafbe3f2e +- conda: https://conda.anaconda.org/conda-forge/linux-64/pandoc-3.7.0.1-ha770c72_0.conda + sha256: c22060f68acc1565e567f4e2a1671737320a0005749158718646d59d0324197e + md5: fc8eb2a998f2883fe9842c556c0b175c license: GPL-2.0-or-later license_family: GPL purls: [] - size: 21328263 - timestamp: 1742226876809 + size: 21695365 + timestamp: 1747576475157 - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 sha256: 2bb9ba9857f4774b85900c2562f7e711d08dd48e2add9bee4e1612fbee27e16f md5: 457c2c8c08e54905d6954e79cb5b5db9 @@ -7399,6 +6060,18 @@ packages: purls: [] size: 136130 timestamp: 1745559387060 +- conda: https://conda.anaconda.org/conda-forge/noarch/patsy-1.0.1-pyhd8ed1ab_1.conda + sha256: ab52916f056b435757d46d4ce0a93fd73af47df9c11fd72b74cc4b7e1caca563 + md5: ee23fabfd0a8c6b8d6f3729b47b2859d + depends: + - numpy >=1.4.0 + - python >=3.9 + license: BSD-2-Clause AND PSF-2.0 + license_family: BSD + purls: + - pkg:pypi/patsy?source=hash-mapping + size: 186594 + timestamp: 1733792482894 - conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda build_number: 7 sha256: 9ec32b6936b0e37bcb0ed34f22ec3116e75b3c0964f9f50ecea5f58734ed6ce9 @@ -7421,9 +6094,9 @@ packages: - pkg:pypi/pexpect?source=compressed-mapping size: 53561 timestamp: 1733302019362 -- conda: https://conda.anaconda.org/bioconda/linux-64/pgenlib-0.91.0-py310h275bdba_1.tar.bz2 - sha256: 6012aee6f2c9d2f7dd78b27f4246b1c74bde6158744faf82823d36622c564ac7 - md5: 84456e3dddde471fdc0356b946709cce +- conda: https://conda.anaconda.org/bioconda/linux-64/pgenlib-0.92.1-py310h275bdba_0.tar.bz2 + sha256: bf8a8acd26baab7836f609897eac03c2d323725e4a57901b5528054a49b9c271 + md5: 5372d77106ad2d84f078168c41b7922b depends: - libgcc >=13 - libstdcxx >=13 @@ -7436,11 +6109,11 @@ packages: license_family: LGPL purls: - pkg:pypi/pgenlib?source=hash-mapping - size: 481085 - timestamp: 1733935120454 -- conda: https://conda.anaconda.org/bioconda/linux-64/pgenlib-0.91.0-py311h2de2dd3_1.tar.bz2 - sha256: 8bea567c1e5e6f9ca8e76c8dff1aed172e448f7fef56af2458269fd3170898c2 - md5: eb352fc539a9c7ebc6804d3d27ffeaf7 + size: 484950 + timestamp: 1747969454621 +- conda: https://conda.anaconda.org/bioconda/linux-64/pgenlib-0.92.1-py311h2de2dd3_0.tar.bz2 + sha256: d26a83bba4853915a715a158cdbd038ceabb3483763d10454ee0e7bc5416ac0b + md5: a7c18d2db6fa9cfc097f91a2cc1e7f92 depends: - libgcc >=13 - libstdcxx >=13 @@ -7453,11 +6126,11 @@ packages: license_family: LGPL purls: - pkg:pypi/pgenlib?source=hash-mapping - size: 481052 - timestamp: 1733935205655 -- conda: https://conda.anaconda.org/bioconda/linux-64/pgenlib-0.91.0-py312h5e9d817_1.tar.bz2 - sha256: be92b7dd397ca19a3edffc3a821d09c7f68c4e824af0fe1f3be758c9f56e5e5b - md5: bf9e22703f84c9fbf5b6196cd7da44ad + size: 491919 + timestamp: 1747969367394 +- conda: https://conda.anaconda.org/bioconda/linux-64/pgenlib-0.92.1-py312h5e9d817_0.tar.bz2 + sha256: 7fa746b0031bc0bbc9eca32aaf644f5850c8a364dff14c7b37fbb861ff110819 + md5: 7fca5422483c54de5380d4b607deec16 depends: - libgcc >=13 - libstdcxx >=13 @@ -7470,8 +6143,8 @@ packages: license_family: LGPL purls: - pkg:pypi/pgenlib?source=hash-mapping - size: 490315 - timestamp: 1733935294763 + size: 507663 + timestamp: 1747969175533 - pypi: https://files.pythonhosted.org/packages/5b/bc/246f452431c592a2a424050e8bb9ccf494fb47613fd97c912f4d573a5e3b/phantom_types-3.0.2-py3-none-any.whl name: phantom-types version: 3.0.2 @@ -7512,6 +6185,29 @@ packages: - pkg:pypi/pickleshare?source=hash-mapping size: 11748 timestamp: 1733327448200 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-11.2.1-py312h80c1187_0.conda + sha256: 15f32ec89f3a7104fcb190546a2bc0fc279372d9073e5ec08a8d61a1c79af4c0 + md5: ca438bf57e4f2423d261987fe423a0dd + depends: + - __glibc >=2.17,<3.0.a0 + - lcms2 >=2.17,<3.0a0 + - libfreetype >=2.13.3 + - libfreetype6 >=2.13.3 + - libgcc >=13 + - libjpeg-turbo >=3.1.0,<4.0a0 + - libtiff >=4.7.0,<4.8.0a0 + - libwebp-base >=1.5.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openjpeg >=2.5.3,<3.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - tk >=8.6.13,<8.7.0a0 + license: HPND + purls: + - pkg:pypi/pillow?source=compressed-mapping + size: 42506161 + timestamp: 1746646366556 - conda: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_2.conda sha256: adb2dde5b4f7da70ae81309cce6188ed3286ff280355cf1931b45d91164d2ad8 md5: 5a5870a74432aa332f7d32180633ad05 @@ -7522,18 +6218,6 @@ packages: - pkg:pypi/pkgutil-resolve-name?source=hash-mapping size: 10693 timestamp: 1733344619659 -- conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.8-pyhe01879c_0.conda - sha256: 0f48999a28019c329cd3f6fd2f01f09fc32cc832f7d6bbe38087ddac858feaa3 - md5: 424844562f5d337077b445ec6b1398a7 - depends: - - python >=3.9 - - python - license: MIT - license_family: MIT - purls: - - pkg:pypi/platformdirs?source=compressed-mapping - size: 23291 - timestamp: 1742485085457 - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.8-pyhe01879c_0.conda sha256: 0f48999a28019c329cd3f6fd2f01f09fc32cc832f7d6bbe38087ddac858feaa3 md5: 424844562f5d337077b445ec6b1398a7 @@ -7556,17 +6240,6 @@ packages: purls: [] size: 7612061 timestamp: 1744207773346 -- conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - sha256: 122433fc5318816b8c69283aaf267c73d87aa2d09ce39f64c9805c9a3b264819 - md5: e9dcbce5f45f9ee500e728ae58b605b6 - depends: - - python >=3.9 - license: MIT - license_family: MIT - purls: - - pkg:pypi/pluggy?source=hash-mapping - size: 23595 - timestamp: 1733222855563 - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda sha256: a8eb555eef5063bbb7ba06a379fa7ea714f57d9741fe0efdb9442dbbc2cccbcc md5: 7da7ccd349dbf6487a7778579d2bb971 @@ -7692,20 +6365,6 @@ packages: - pkg:pypi/prompt-toolkit?source=hash-mapping size: 271530 timestamp: 1670414885944 -- conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.51-pyha770c72_0.conda - sha256: ebc1bb62ac612af6d40667da266ff723662394c0ca78935340a5b5c14831227b - md5: d17ae9db4dc594267181bd199bf9a551 - depends: - - python >=3.9 - - wcwidth - constrains: - - prompt_toolkit 3.0.51 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/prompt-toolkit?source=compressed-mapping - size: 271841 - timestamp: 1744724188108 - conda: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.36-hd8ed1ab_0.conda sha256: 8685763bf7b3299be8b1e6fccad1282217733c8fcf1d682397323e2e08a00a68 md5: 482c15eb65dde2f899c4d68eaa938b1d @@ -7716,17 +6375,6 @@ packages: purls: [] size: 6372 timestamp: 1670414891579 -- conda: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.51-hd8ed1ab_0.conda - sha256: 936189f0373836c1c77cd2d6e71ba1e583e2d3920bf6d015e96ee2d729b5e543 - md5: 1e61ab85dd7c60e5e73d853ea035dc29 - depends: - - prompt-toolkit >=3.0.51,<3.0.52.0a0 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/prompt-toolkit?source=compressed-mapping - size: 7182 - timestamp: 1744724189376 - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.0.0-py312h66e93f0_0.conda sha256: 158047d7a80e588c846437566d0df64cec5b0284c7184ceb4f3c540271406888 md5: 8e30db4239508a538e4a3b3cdf5b9616 @@ -7741,6 +6389,17 @@ packages: - pkg:pypi/psutil?source=hash-mapping size: 466219 timestamp: 1740663246825 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + sha256: 9c88f8c64590e9567c6c80823f0328e58d3b1efb0e1c539c0315ceca764e0973 + md5: b3c17d95b5a10c6e64a21fa17573e70e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 8252 + timestamp: 1726802366959 - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda sha256: a7713dfe30faf17508ec359e0bc7e0983f5d94682492469bd462cdaae9c64d83 md5: 7d9daffbb8d8e0af0f769dbbcd173a54 @@ -7946,34 +6605,34 @@ packages: - pkg:pypi/pybigwig?source=hash-mapping size: 80021 timestamp: 1738010907848 -- conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-2.13.6-pyh1ec8472_2.conda - sha256: 27f888492af3d5ab19553f263b0015bf3766a334668b5b3a79c7dc0416e603c1 - md5: 8088a5e7b2888c780738c3130f2a969d +- conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-2.13.6-pyhc790b64_3.conda + sha256: d429f6f255fbe49f09b9ae1377aa8cbc4d9285b8b220c17ae2ad9c4894c91317 + md5: 1594696beebf1ecb6d29a1136f859a74 depends: - - pybind11-global 2.13.6 *_2 - - python + - pybind11-global 2.13.6 *_3 + - python >=3.9 constrains: - pybind11-abi ==4 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/pybind11?source=hash-mapping - size: 186375 - timestamp: 1730237816231 -- conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-2.13.6-pyh415d2e4_2.conda - sha256: 9ff0d61d86878f81779bdb7e47656a75feaab539893462cff29b8ec353026d81 - md5: 120541563e520d12d8e39abd7de9092c + size: 186821 + timestamp: 1747935138653 +- conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-2.13.6-pyh217bc35_3.conda + sha256: c044cfcbe6ef0062d0960e9f9f0de5f8818cec84ed901219ff9994b9a9e57237 + md5: 730a5284e26d6bdb73332dafb26aec82 depends: - __unix - - python + - python >=3.9 constrains: - pybind11-abi ==4 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/pybind11-global?source=hash-mapping - size: 179139 - timestamp: 1730237481227 + size: 180116 + timestamp: 1747934418811 - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda sha256: 79db7928d13fab2d892592223d7570f5061c192f27b9febd1a418427b719acc6 md5: 12c566707c80111f9799308d9e265aef @@ -7985,22 +6644,6 @@ packages: purls: [] size: 110100 timestamp: 1733195786147 -- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.4-pyh3cfb1c2_0.conda - sha256: a522473505ac6a9c10bb304d7338459a406ba22a6d3bb1a355c1b5283553a372 - md5: 8ad3ad8db5ce2ba470c9facc37af00a9 - depends: - - annotated-types >=0.6.0 - - pydantic-core 2.33.2 - - python >=3.9 - - typing-extensions >=4.6.1 - - typing-inspection >=0.4.0 - - typing_extensions >=4.12.2 - license: MIT - license_family: MIT - purls: - - pkg:pypi/pydantic?source=compressed-mapping - size: 306616 - timestamp: 1744192311966 - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.4-pyh3cfb1c2_0.conda sha256: a522473505ac6a9c10bb304d7338459a406ba22a6d3bb1a355c1b5283553a372 md5: 8ad3ad8db5ce2ba470c9facc37af00a9 @@ -8017,9 +6660,9 @@ packages: - pkg:pypi/pydantic?source=compressed-mapping size: 306304 timestamp: 1746632069456 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.1-py310hc1293b2_0.conda - sha256: 76992a2b50b98a43b66be401998b0b71f4bbb3cc0db456309263a604dddff086 - md5: 24460b8a58d6d491be4088ffb5343f4b +- conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.2-py310hbcd0ec0_0.conda + sha256: 8da9aed7f21d775a7c91db6c9f95a0e00cae2d132709d5dc608c2e6828f9344b + md5: 6b210a72e9e1b1cb6d30b266b84ca993 depends: - python - typing-extensions >=4.6.0,!=4.7.0 @@ -8066,25 +6709,8 @@ packages: license_family: MIT purls: - pkg:pypi/pydantic-core?source=hash-mapping - size: 1900701 - timestamp: 1743607634677 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.2-py310hbcd0ec0_0.conda - sha256: 8da9aed7f21d775a7c91db6c9f95a0e00cae2d132709d5dc608c2e6828f9344b - md5: 6b210a72e9e1b1cb6d30b266b84ca993 - depends: - - python - - typing-extensions >=4.6.0,!=4.7.0 - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - python_abi 3.10.* *_cp310 - constrains: - - __glibc >=2.17 - license: MIT - license_family: MIT - purls: - - pkg:pypi/pydantic-core?source=hash-mapping - size: 1892885 - timestamp: 1746625312783 + size: 1890081 + timestamp: 1746625309715 - conda: https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.15.4-pyhd8ed1ab_0.conda sha256: 5ec877142ded763061e114e787a4e201c2fb3f0b1db2f04ace610a1187bb34ae md5: c7c50dd5192caa58a05e6a4248a27acb @@ -8115,6 +6741,17 @@ packages: - pkg:pypi/pygments?source=hash-mapping size: 888600 timestamp: 1736243563082 +- conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.3-pyhd8ed1ab_1.conda + sha256: b92afb79b52fcf395fd220b29e0dd3297610f2059afac45298d44e00fcbf23b6 + md5: 513d3c262ee49b54a8fec85c5bc99764 + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyparsing?source=hash-mapping + size: 95988 + timestamp: 1743089832359 - conda: https://conda.anaconda.org/bioconda/noarch/pyranges-0.1.4-pyhdfd78af_0.tar.bz2 sha256: 754aaf7640b8bb88cd0094d11dfb46ba35e6165d3f5aef45610364e1b1a721bc md5: e852313fd0726adb6d01349a4448ffed @@ -8153,7 +6790,7 @@ packages: depends: - bzip2 >=1.0.8,<2.0a0 - libcurl >=8.11.1,<9.0a0 - - libdeflate >=1.22,<1.23.0a0 + - libdeflate >=1.22,<1.25.0a0 - libgcc >=13 - liblzma >=5.6.4,<6.0a0 - libzlib >=1.3.1,<2.0a0 @@ -8169,7 +6806,7 @@ packages: depends: - bzip2 >=1.0.8,<2.0a0 - libcurl >=8.11.1,<9.0a0 - - libdeflate >=1.22,<1.23.0a0 + - libdeflate >=1.22,<1.25.0a0 - libgcc >=13 - liblzma >=5.6.4,<6.0a0 - libzlib >=1.3.1,<2.0a0 @@ -8185,7 +6822,7 @@ packages: depends: - bzip2 >=1.0.8,<2.0a0 - libcurl >=8.11.1,<9.0a0 - - libdeflate >=1.22,<1.23.0a0 + - libdeflate >=1.22,<1.25.0a0 - libgcc >=13 - liblzma >=5.6.4,<6.0a0 - libzlib >=1.3.1,<2.0a0 @@ -8709,18 +7346,17 @@ packages: - pkg:pypi/pyzmq?source=hash-mapping size: 379554 timestamp: 1743831426292 -- conda: https://conda.anaconda.org/conda-forge/noarch/questionary-2.0.1-pyhd8ed1ab_0.conda - sha256: a7bc6b8a42ae7498065c878707500cc30fa30edfcd0083fb77bdc78bc73c4b31 - md5: e3974ff4f867a43e860da35684bbbb5c +- conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda + sha256: 776363493bad83308ba30bcb88c2552632581b143e8ee25b1982c8c743e73abc + md5: 353823361b1d27eb3960efb076dfcaf6 depends: - - prompt_toolkit >=2.0,<4.0 - - python >=3.6 - license: MIT - license_family: MIT - purls: - - pkg:pypi/questionary?source=hash-mapping - size: 29038 - timestamp: 1694185321202 + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: LicenseRef-Qhull + purls: [] + size: 552937 + timestamp: 1720813982144 - conda: https://conda.anaconda.org/conda-forge/noarch/questionary-2.1.0-pyhd8ed1ab_1.conda sha256: 7f348452dd30da9e915ecbe248681c62b321f77552cb66235b667a999bf61ceb md5: 5cb508138c0534f6ecd123f29ae51bab @@ -8819,13 +7455,13 @@ packages: - pkg:pypi/roman-numerals-py?source=hash-mapping size: 13348 timestamp: 1740240332327 -- conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.24.0-py312h3b7be25_0.conda - sha256: 10dad6a9d40e7c1856cb1f5f941ea06500610e13ee6ec4961fba59fccbaa0dc9 - md5: 5f5c19cbbd3526fad9c8ca0cca3e7346 +- conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.25.1-py312h680f630_0.conda + sha256: a5b168b991c23ab6d74679a6f5ad1ed87b98ba6c383b5fe41f5f6b335b10d545 + md5: ea8f79edf890d1f9b2f1bd6fbb11be1e depends: - python - - libgcc >=13 - __glibc >=2.17,<3.0.a0 + - libgcc >=13 - python_abi 3.12.* *_cp312 constrains: - __glibc >=2.17 @@ -8833,28 +7469,11 @@ packages: license_family: MIT purls: - pkg:pypi/rpds-py?source=hash-mapping - size: 394023 - timestamp: 1743037659894 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.10-py310h31ffbac_1.conda - sha256: a32c9a322d267f37a44f9a24d257426ec612bafa45a1e9280b130cb213d69e23 - md5: 4468e953df21731a19f5c8ba94bc0225 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - constrains: - - __glibc >=2.17 - license: MIT - license_family: MIT - purls: - - pkg:pypi/ruff?source=hash-mapping - size: 8224192 - timestamp: 1747401348073 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.6-py310h01b0e6a_0.conda - sha256: 1c2f7a2aa27bd5dd2b6d83d87d26d2d9ba28505202540accd23c20beafb786b0 - md5: 7d7e9696e7e236aa48ab0990b70dbbc6 + size: 391950 + timestamp: 1747837859184 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.11-py310h31ffbac_0.conda + sha256: 96bba56ce6b0f2d5828a6f138f9a0454f6665ebfe805e6dc8cf3150c81ca4f89 + md5: e182bf0b467cb2d81ac4261d987dc2c1 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -8867,11 +7486,11 @@ packages: license_family: MIT purls: - pkg:pypi/ruff?source=hash-mapping - size: 9221907 - timestamp: 1746841246672 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.9-py311h39e1cd3_0.conda - sha256: 786e018b592393d43e454ea75bb7c6565502145d374b805538b670660bd98ff4 - md5: c51d9f0126289712ae7e75bf0aac1159 + size: 8188889 + timestamp: 1747963035050 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.11-py311h82b16fd_0.conda + sha256: c4b10f40229ecf888f394f2f0a757aabe0c39302278e57f83f152da101a4612e + md5: 0aa48cdeeadb2813ef660c8e385f6909 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -8884,11 +7503,11 @@ packages: license_family: MIT purls: - pkg:pypi/ruff?source=hash-mapping - size: 9221632 - timestamp: 1746841271621 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.9-py312h286b59f_0.conda - sha256: 0f97ef8eb6a000274f7461a7cbdb5775ce85c928f72f6852ce4300359817e17e - md5: 505174a4841a9f048d1a24b3c4c8bdbc + size: 8198625 + timestamp: 1747963207864 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.11.11-py312h1d08497_0.conda + sha256: 5b4685fa712572c0395e210e11473454b6eb44e4cb95124997cc4bab917ba5de + md5: d34a0c4fb1e1ebd0c1df74a0535038b8 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -8901,20 +7520,8 @@ packages: license_family: MIT purls: - pkg:pypi/ruff?source=hash-mapping - size: 9205500 - timestamp: 1746841381828 -- conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.18-h763c568_1.conda - sha256: 6d0399775ef7841914e99aed5b7330ce3d9d29a4219d40b1b94fd9a50d902a73 - md5: 0bf75253494a85260575e23c3b29db90 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - openssl >=3.5.0,<4.0a0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 348633 - timestamp: 1744972730362 + size: 8198085 + timestamp: 1747963257056 - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.18-h763c568_1.conda sha256: 6d0399775ef7841914e99aed5b7330ce3d9d29a4219d40b1b94fd9a50d902a73 md5: 0bf75253494a85260575e23c3b29db90 @@ -8938,6 +7545,58 @@ packages: license: MIT size: 487188 timestamp: 1734249911773 +- conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.15.2-py312ha707e6e_0.conda + sha256: b9faaa024b77a3678a988c5a490f02c4029c0d5903998b585100e05bc7d4ff36 + md5: 00b999c5f9d01fb633db819d79186bd4 + depends: + - __glibc >=2.17,<3.0.a0 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libgcc >=13 + - libgfortran + - libgfortran5 >=13.3.0 + - liblapack >=3.9.0,<4.0a0 + - libstdcxx >=13 + - numpy <2.5 + - numpy >=1.19,<3 + - numpy >=1.23.5 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/scipy?source=hash-mapping + size: 17064784 + timestamp: 1739791925628 +- conda: https://conda.anaconda.org/conda-forge/noarch/seaborn-0.13.2-hd8ed1ab_3.conda + noarch: python + sha256: ea29a69b14dd6be5cdeeaa551bf50d78cafeaf0351e271e358f9b820fcab4cb0 + md5: 62afb877ca2c2b4b6f9ecb37320085b6 + depends: + - seaborn-base 0.13.2 pyhd8ed1ab_3 + - statsmodels >=0.12 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6876 + timestamp: 1733730113224 +- conda: https://conda.anaconda.org/conda-forge/noarch/seaborn-base-0.13.2-pyhd8ed1ab_3.conda + sha256: f209c9c18187570b85ec06283c72d64b8738f825b1b82178f194f4866877f8aa + md5: fd96da444e81f9e6fcaac38590f3dd42 + depends: + - matplotlib-base >=3.4,!=3.6.1 + - numpy >=1.20,!=1.24.0 + - pandas >=1.2 + - python >=3.9 + - scipy >=1.7 + constrains: + - seaborn =0.13.2=*_3 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/seaborn?source=hash-mapping + size: 227843 + timestamp: 1733730112409 - pypi: https://files.pythonhosted.org/packages/cd/1f/10190182dd698c1d65cace2b85fd149206182f18adc48032103606e00789/seqpro-0.4.2-cp39-abi3-manylinux_2_28_x86_64.whl name: seqpro version: 0.4.2 @@ -8965,28 +7624,17 @@ packages: - pkg:pypi/setuptools?source=hash-mapping size: 777736 timestamp: 1740654030775 -- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.1.0-pyhff2d567_0.conda - sha256: 777d34ed359cedd5a5004c930077c101bb3b70e5fbb04d29da5058d75b0ba487 - md5: f6f72d0837c79eaec77661be43e8a691 +- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.8.0-pyhff2d567_0.conda + sha256: 56ce31d15786e1df2f1105076f3650cd7c1892e0afeeb9aa92a08d2551af2e34 + md5: ea075e94dc0106c7212128b6a25bbc4c depends: - python >=3.9 license: MIT license_family: MIT purls: - - pkg:pypi/setuptools?source=compressed-mapping - size: 786557 - timestamp: 1743775941985 -- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.1.0-pyhff2d567_0.conda - sha256: 777d34ed359cedd5a5004c930077c101bb3b70e5fbb04d29da5058d75b0ba487 - md5: f6f72d0837c79eaec77661be43e8a691 - depends: - - python >=3.9 - license: MIT - license_family: MIT - purls: - - pkg:pypi/setuptools?source=compressed-mapping - size: 778484 - timestamp: 1746085063737 + - pkg:pypi/setuptools?source=hash-mapping + size: 748621 + timestamp: 1747807014292 - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_1.conda sha256: 0557c090913aa63cdbe821dbdfa038a321b488e22bc80196c4b3b1aace4914ef md5: 7c3c2a0f3ebdea2bbc35538d162b43bf @@ -9044,17 +7692,17 @@ packages: - pkg:pypi/sniffio?source=hash-mapping size: 15019 timestamp: 1733244175724 -- conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 - sha256: a0fd916633252d99efb6223b1050202841fa8d2d53dacca564b0ed77249d3228 - md5: 4d22a9315e78c6827f806065957d566e +- conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-3.0.1-pyhd8ed1ab_0.conda + sha256: 17007a4cfbc564dc3e7310dcbe4932c6ecb21593d4fec3c68610720f19e73fb2 + md5: 755cf22df8693aa0d1aec1c123fa5863 depends: - - python >=2 + - python >=3.9 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/snowballstemmer?source=hash-mapping - size: 58824 - timestamp: 1637143137377 + size: 73009 + timestamp: 1747749529809 - conda: https://conda.anaconda.org/bioconda/linux-64/sorted_nearest-0.0.39-py310h1fe012e_5.tar.bz2 sha256: 746e034306512278f598d9bc05eccb92c0d986544d9fc2599fa4698ef1b432a3 md5: 7fb9884081f734e0c020ee677b90a35e @@ -9289,6 +7937,26 @@ packages: - pkg:pypi/starlette?source=hash-mapping size: 62335 timestamp: 1744661396275 +- conda: https://conda.anaconda.org/conda-forge/linux-64/statsmodels-0.14.4-py312hc0a28a1_0.conda + sha256: 6cc65ba902b32207e8a697b0e0408a28d6cc166be04f1882c40739a86a253d22 + md5: 97dc960f3d9911964d73c2cf240baea5 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - numpy <3,>=1.22.3 + - numpy >=1.19,<3 + - packaging >=21.3 + - pandas !=2.1.0,>=1.4 + - patsy >=0.5.6 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - scipy !=1.9.2,>=1.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/statsmodels?source=hash-mapping + size: 12103203 + timestamp: 1727987129263 - conda: https://conda.anaconda.org/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda sha256: 09d3b6ac51d437bc996ad006d9f749ca5c645c1900a854a6c8f193cbd13f03a8 md5: 8c09fac3785696e1c477156192d64b91 @@ -9587,9 +8255,9 @@ packages: - torch-complex<0.5.0 ; extra == 'dev' - scipy>1.0.0 ; extra == 'dev' requires_python: '>=3.9' -- conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.4.2-py312h66e93f0_0.conda - sha256: 062a3a3a37fa8615ce57929ba7e982c76f5a5810bcebd435950f6d6c4147c310 - md5: e417822cb989e80a0d2b1b576fdd1657 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.1-py312h66e93f0_0.conda + sha256: c96be4c8bca2431d7ad7379bad94ed6d4d25cd725ae345540a531d9e26e148c9 + md5: c532a6ee766bed75c4fa0c39e959d132 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -9599,8 +8267,8 @@ packages: license_family: Apache purls: - pkg:pypi/tornado?source=hash-mapping - size: 840414 - timestamp: 1732616043734 + size: 850902 + timestamp: 1748003427956 - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda sha256: 11e2c85468ae9902d24a27137b6b39b4a78099806e551d390e394a8c34b48e40 md5: 9efbfdc37242619130ea42b1cc4ed861 @@ -9639,19 +8307,6 @@ packages: - pkg:pypi/typeguard?source=hash-mapping size: 35184 timestamp: 1739732461765 -- conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.15.3-pyhf21524f_0.conda - sha256: 8cd849ceb5e2f50481b1f30f083ee134fac706a56d7879c61248f0aadad4ea5b - md5: b4bed8eb8dd4fe076f436e5506d31673 - depends: - - typer-slim-standard ==0.15.3 h1a15894_0 - - python >=3.9 - - python - license: MIT - license_family: MIT - purls: - - pkg:pypi/typer?source=compressed-mapping - size: 77044 - timestamp: 1745886712803 - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.15.4-pyh9571d03_0.conda sha256: b70f0d7892d81e1e2fd0c581c6d85e6e3c3683752e1fb2cef8f75a994c0a379b md5: 962bae3826ede4349263e6e027280724 @@ -9665,42 +8320,6 @@ packages: - pkg:pypi/typer?source=hash-mapping size: 77100 timestamp: 1747243737598 -- conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.15.2-pyh29332c3_0.conda - sha256: c094713560bfacab0539c863010a5223171d9980cbd419cc799e474ae15aca08 - md5: 7c8d9609e2cfe08dd7672e10fe7e7de9 - depends: - - python >=3.9 - - click >=8.0.0 - - typing_extensions >=3.7.4.3 - - python - constrains: - - typer 0.15.2.* - - rich >=10.11.0 - - shellingham >=1.3.0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/typer-slim?source=hash-mapping - size: 45866 - timestamp: 1740697495167 -- conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.15.3-pyh29332c3_0.conda - sha256: 1768d1d9914d4237b0a1ae8bcb30dace44ac80b9ab1516a2d429d0b27ad70ab9 - md5: 20c0f2ae932004d7118c172eeb035cea - depends: - - python >=3.9 - - click >=8.0.0 - - typing_extensions >=3.7.4.3 - - python - constrains: - - typer 0.15.3.* - - rich >=10.11.0 - - shellingham >=1.3.0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/typer-slim?source=compressed-mapping - size: 46152 - timestamp: 1745886712803 - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.15.4-pyhe01879c_0.conda sha256: ccd7fe2719899bc766a9a7215f307ef48dc67c227e2006a6a9b5a2c882fadba0 md5: 845a20742ceeec7c193a2ed448b3c3b2 @@ -9719,30 +8338,6 @@ packages: - pkg:pypi/typer-slim?source=hash-mapping size: 46236 timestamp: 1747243737598 -- conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.2-h801b22e_0.conda - sha256: 79b6b34e90e50e041908939d53053f69285714b0082a0370fba6ab3b38315c8d - md5: ea164fc4e03f61f7ff3c1166001969af - depends: - - typer-slim ==0.15.2 pyh29332c3_0 - - rich - - shellingham - license: MIT - license_family: MIT - purls: [] - size: 5409 - timestamp: 1740697495168 -- conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.3-h1a15894_0.conda - sha256: 72f77e8e61b28058562f2782cf32ff84f14f6c11c6cea7a3fe2839d34654ea45 - md5: 120216d3a2e51dfbb87bbba173ebf210 - depends: - - typer-slim ==0.15.3 pyh29332c3_0 - - rich - - shellingham - license: MIT - license_family: MIT - purls: [] - size: 5411 - timestamp: 1745886712803 - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.4-haa4fddc_0.conda sha256: 1d1c779d381667e367345469a5fdb97cc3c175453cb1dcd5ed7cd5e7810c5d38 md5: 235d77753dc869548f22292b872bb0ab @@ -9765,18 +8360,18 @@ packages: purls: [] size: 89900 timestamp: 1744302253997 -- conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.0-pyhd8ed1ab_0.conda - sha256: 172f971d70e1dbb978f6061d3f72be463d0f629155338603450d8ffe87cbf89d - md5: c5c76894b6b7bacc888ba25753bc8677 +- conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.1-pyhd8ed1ab_0.conda + sha256: 4259a7502aea516c762ca8f3b8291b0d4114e094bdb3baae3171ccc0900e722f + md5: e0c3cd765dc15751ee2f0b03cd015712 depends: - python >=3.9 - typing_extensions >=4.12.0 license: MIT license_family: MIT purls: - - pkg:pypi/typing-inspection?source=hash-mapping - size: 18070 - timestamp: 1741438157162 + - pkg:pypi/typing-inspection?source=compressed-mapping + size: 18809 + timestamp: 1747870776989 - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.13.2-pyh29332c3_0.conda sha256: a8aaf351e6461de0d5d47e4911257e25eec2fa409d71f3b643bb2f748bde1c08 md5: 83fc6ae00127671e301c9f44254c31b8 @@ -9868,6 +8463,20 @@ packages: - pkg:pypi/ukkonen?source=hash-mapping size: 13904 timestamp: 1725784191021 +- conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-16.0.0-py312h66e93f0_0.conda + sha256: 638916105a836973593547ba5cf4891d1f2cb82d1cf14354fcef93fd5b941cdc + md5: 617f5d608ff8c28ad546e5d9671cbb95 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/unicodedata2?source=compressed-mapping + size: 404401 + timestamp: 1736692621599 - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.4.0-pyhd8ed1ab_0.conda sha256: a25403b76f7f03ca1a906e1ef0f88521edded991b9897e7fed56a3e334b3db8c md5: c1e349028e0052c4eea844e94f773065 @@ -9883,36 +8492,22 @@ packages: - pkg:pypi/urllib3?source=hash-mapping size: 100791 timestamp: 1744323705540 -- conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.7.3-h2f11bb8_0.conda - sha256: 89765e550eed3328f1aadd2945aa66d5df66c06d71e0938f7c1012c57ff4c266 - md5: 11e7b5335fecf52323d8120677644b34 - depends: - - libstdcxx >=13 - - libgcc >=13 - - __glibc >=2.17,<3.0.a0 - constrains: - - __glibc >=2.17 - license: Apache-2.0 OR MIT - purls: [] - size: 13646786 - timestamp: 1746049812291 -- conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.7.4-h2f11bb8_0.conda - sha256: 2d1f1db85276f370fddf1181c7fd57d7830b8e2aa246883f3b151b044a514e74 - md5: 76487142e327c1c077f71a6ea252c0d6 +- conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.7.8-h2f11bb8_0.conda + sha256: a7573de35b4a1261995d79ca63f4c91868d6a5200dfef0c981f69c33a82633c0 + md5: aff01745ebc7e711904866ee2e762a42 depends: - libstdcxx >=13 - libgcc >=13 - __glibc >=2.17,<3.0.a0 - - libgcc >=13 constrains: - __glibc >=2.17 license: Apache-2.0 OR MIT purls: [] - size: 13813160 - timestamp: 1747348722503 -- conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.34.1-pyh31011fe_0.conda - sha256: 12fff3fc66d0214db3b68388f9b543c0f32a74ab69bbc48f926287b76f84b4ba - md5: b16572c04a572377c4010aae0b16b1b7 + size: 13969658 + timestamp: 1748068585255 +- conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.34.2-pyh31011fe_0.conda + sha256: d6c504920400354a89e597c5d355288e77481d638cca0489fea3530167895f15 + md5: 7e9f164470d693a5d2537c6b2ce1d9ea depends: - __unix - click >=7.0 @@ -9925,20 +8520,6 @@ packages: - pkg:pypi/uvicorn?source=hash-mapping size: 48985 timestamp: 1745173533667 -- conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.31.2-pyhd8ed1ab_0.conda - sha256: 763dc774200b2eebdf5437b112834c5455a1dd1c9b605340696950277ff36729 - md5: c0600c1b374efa7a1ff444befee108ca - depends: - - distlib >=0.3.7,<1 - - filelock >=3.12.2,<4 - - platformdirs >=3.9.1,<5 - - python >=3.9 - license: MIT - license_family: MIT - purls: - - pkg:pypi/virtualenv?source=hash-mapping - size: 3635535 - timestamp: 1743474070226 - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.31.2-pyhd8ed1ab_0.conda sha256: 763dc774200b2eebdf5437b112834c5455a1dd1c9b605340696950277ff36729 md5: c0600c1b374efa7a1ff444befee108ca @@ -10017,6 +8598,28 @@ packages: - pkg:pypi/widgetsnbextension?source=compressed-mapping size: 889285 timestamp: 1744291155057 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb9d3cd8_0.conda + sha256: ed10c9283974d311855ae08a16dfd7e56241fac632aec3b92e3cfe73cff31038 + md5: f6ebe2cb3f82ba6c057dde5d9debe4f7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 14780 + timestamp: 1734229004433 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda + sha256: 6b250f3e59db07c2514057944a3ea2044d6a8cdde8a47b6497c254520fade1ee + md5: 8035c64cb77ed555e3f150b7b3972480 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 19901 + timestamp: 1727794976192 - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 sha256: a4e34c710eeb26945bdbdaba82d3d74f60a78f54a874ec10d373811a5d217535 md5: 4cb3ad778ec2d5a7acbdf254eb1c42ae diff --git a/pixi.toml b/pixi.toml index 7d330c7e..a4d38bba 100644 --- a/pixi.toml +++ b/pixi.toml @@ -58,6 +58,8 @@ ipywidgets = "*" sphinx-book-theme = "*" sphinx-autobuild = "*" sphinx-autodoc-typehints = "*" +seaborn = "*" +fast-histogram = "*" [feature.pytorch-cpu.dependencies] pytorch-cpu = ">=2,<3" @@ -98,7 +100,6 @@ test = { cmd = "pytest tests && cargo test --release", depends-on = ["gen"] } [feature.docs.tasks] install-e = "uv pip install -e /cellar/users/dlaub/projects/ML4GLand/SeqPro -e /cellar/users/dlaub/projects/genoray -e ." -install = "uv pip install -e ." i-kernel = "ipython kernel install --user --name 'gvl-docs' --display-name 'GVL Docs'" i-kernel-gpu = "ipython kernel install --user --name 'gvl-docs-gpu' --display-name 'GVL Docs GPU'" doc = "cd docs && make clean && make html" diff --git a/pyproject.toml b/pyproject.toml index d0d7d92c..c7c2d93e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -66,6 +66,7 @@ reportUninitializedInstanceVariable = false [tool.maturin] python-source = "python" features = ["pyo3/extension-module"] +# compatibility = "manylinux_2_28" [tool.pytest.ini_options] filterwarnings = [ diff --git a/python/genvarloader/_dataset/_impl.py b/python/genvarloader/_dataset/_impl.py index a1efaea9..bda812ee 100644 --- a/python/genvarloader/_dataset/_impl.py +++ b/python/genvarloader/_dataset/_impl.py @@ -772,8 +772,8 @@ def regions(self) -> pl.DataFrame: @property def n_regions(self) -> int: - """The number of regions in the dataset.""" - return self._idxer.n_regions + """The number of (spliced) regions in the dataset.""" + return self.shape[0] @property def spliced_regions(self) -> pl.DataFrame | None: @@ -1378,9 +1378,13 @@ def __getitem__( def _getitem_unspliced( self, idx: Idx | tuple[Idx] | tuple[Idx, Idx | str | Sequence[str]] - ) -> tuple[tuple[ - Ragged[np.bytes_ | np.float32] | RaggedAnnotatedHaps | RaggedVariants, ... - ], bool, tuple[int, ...] | None]: + ) -> tuple[ + tuple[ + Ragged[np.bytes_ | np.float32] | RaggedAnnotatedHaps | RaggedVariants, ... + ], + bool, + tuple[int, ...] | None, + ]: # (b) ds_idx, squeeze, out_reshape = self._idxer.parse_idx(idx) r_idx, _ = np.unravel_index(ds_idx, self.full_shape) @@ -1434,9 +1438,11 @@ def _getitem_spliced( self, idx: StrIdx | tuple[StrIdx] | tuple[StrIdx, StrIdx], splice_idxer: SpliceIndexer, - ) -> tuple[tuple[ - Ragged[np.bytes_ | np.float32] | RaggedAnnotatedHaps, ... - ], bool, tuple[int, ...] | None]: + ) -> tuple[ + tuple[Ragged[np.bytes_ | np.float32] | RaggedAnnotatedHaps, ...], + bool, + tuple[int, ...] | None, + ]: if isinstance(self.output_length, int): raise RuntimeError( "In general, splicing cannot be done with fixed length data because even if the length of each region's data" @@ -1485,15 +1491,14 @@ def _getitem_spliced( recon = cast( tuple[Ragged[np.bytes_ | np.float32] | RaggedAnnotatedHaps, ...], recon ) - recon = tuple(_cat_length(r, offsets) for r in recon) if self.rc_neg: # (b) - to_rc: NDArray[np.bool_] = np.logical_and.reduceat( - self._full_regions[r_idx, 3] == -1, offsets[:-1], axis=0 - ) + to_rc: NDArray[np.bool_] = regions[:, 3] == -1 recon = tuple(_rc(r, to_rc) for r in recon) + recon = tuple(_cat_length(r, offsets) for r in recon) + return recon, squeeze, out_reshape diff --git a/python/genvarloader/_dataset/_indexing.py b/python/genvarloader/_dataset/_indexing.py index 568cbb0f..7e9252f1 100644 --- a/python/genvarloader/_dataset/_indexing.py +++ b/python/genvarloader/_dataset/_indexing.py @@ -12,7 +12,7 @@ from typing_extensions import Self, assert_never from .._types import Idx, StrIdx -from .._utils import _lengths_to_offsets, idx_like_to_array, is_dtype +from .._utils import idx_like_to_array, is_dtype, lengths_to_offsets @define @@ -355,12 +355,11 @@ def parse_idx(self, idx: StrIdx | tuple[StrIdx] | tuple[StrIdx, StrIdx]): if not isinstance(lengths, np.integer): lengths = lengths.to_numpy() lengths = cast(NDArray[np.int64], lengths) - offsets = _lengths_to_offsets(lengths) + offsets = lengths_to_offsets(lengths) r_idx = ak.flatten(r_idx, -1).to_numpy() s_idx = s_idx.repeat(lengths) - ds_idx = np.ravel_multi_index((r_idx, s_idx), self.dsi.full_shape) - ds_idx = ds_idx.ravel() + ds_idx, *_ = self.dsi.parse_idx((r_idx, s_idx)) return ds_idx, squeeze, out_reshape, offsets From f01ab0c564f569588182c59bc19110aa287256f5 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 27 May 2025 17:12:00 +0000 Subject: [PATCH 51/53] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- docs/source/splicing.ipynb | 4 ++-- python/genvarloader/_dataset/_genotypes.py | 2 ++ python/genvarloader/_dataset/_write.py | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/source/splicing.ipynb b/docs/source/splicing.ipynb index 6178c885..cbe6a921 100644 --- a/docs/source/splicing.ipynb +++ b/docs/source/splicing.ipynb @@ -211,7 +211,7 @@ "metadata": {}, "outputs": [], "source": [ - "ds = gvl.Dataset.open(ds_path, reference, splice_info=('gene', 'exon_num'))" + "ds = gvl.Dataset.open(ds_path, reference, splice_info=(\"gene\", \"exon_num\"))" ] }, { @@ -240,7 +240,7 @@ } ], "source": [ - "ds._getitem_spliced([1])[0].view('S1')" + "ds._getitem_spliced([1])[0].view(\"S1\")" ] } ], diff --git a/python/genvarloader/_dataset/_genotypes.py b/python/genvarloader/_dataset/_genotypes.py index 2cbaee93..7d01be8c 100644 --- a/python/genvarloader/_dataset/_genotypes.py +++ b/python/genvarloader/_dataset/_genotypes.py @@ -408,6 +408,7 @@ def reconstruct_haplotype_from_sparse( if annot_ref_pos is not None: annot_ref_pos[out_end_idx:] = np.iinfo(np.int32).max + @nb.njit(parallel=True, nogil=True, cache=True) def choose_exonic_variants( starts: NDArray[np.int32], @@ -480,6 +481,7 @@ def choose_exonic_variants( return keep, keep_offsets + @nb.njit(nogil=True, cache=True) def _choose_exonic_variants( query_start: int, diff --git a/python/genvarloader/_dataset/_write.py b/python/genvarloader/_dataset/_write.py index c2031e2f..62277ea4 100644 --- a/python/genvarloader/_dataset/_write.py +++ b/python/genvarloader/_dataset/_write.py @@ -241,7 +241,7 @@ def _write_from_vcf(path: Path, bed: pl.DataFrame, vcf: VCF, max_mem: int): pl.DataFrame( { - "POS": vcf._index.df['POS'] - 1, + "POS": vcf._index.df["POS"] - 1, "ALT": vcf._index.df["ALT"].list.first(), "ILEN": vcf._index.df.select( pl.col("ALT").list.first().str.len_bytes().cast(pl.Int32) From ad8e486b940acc89581ea7384561bcb3549b5473 Mon Sep 17 00:00:00 2001 From: d-laub Date: Tue, 27 May 2025 10:20:04 -0700 Subject: [PATCH 52/53] fix: make sure exonic filter gets applied. style: adhere to pre-commit --- docs/source/splicing.ipynb | 1 - python/genvarloader/_dataset/_genotypes.py | 32 ++++----- python/genvarloader/_dataset/_reconstruct.py | 70 ++++++++++---------- 3 files changed, 52 insertions(+), 51 deletions(-) diff --git a/docs/source/splicing.ipynb b/docs/source/splicing.ipynb index cbe6a921..81a293d8 100644 --- a/docs/source/splicing.ipynb +++ b/docs/source/splicing.ipynb @@ -10,7 +10,6 @@ "import polars as pl\n", "import pooch\n", "from pathlib import Path\n", - "import numpy as np\n", "from tempfile import TemporaryDirectory" ] }, diff --git a/python/genvarloader/_dataset/_genotypes.py b/python/genvarloader/_dataset/_genotypes.py index 7d01be8c..a96bb203 100644 --- a/python/genvarloader/_dataset/_genotypes.py +++ b/python/genvarloader/_dataset/_genotypes.py @@ -117,9 +117,9 @@ def reconstruct_haplotypes_from_sparse( ref_offsets: NDArray[np.integer], pad_char: int, keep: NDArray[np.bool_] | None = None, - keep_offsets: NDArray[np.int64] | None = None, - annot_v_idxs: NDArray[np.int32] | None = None, - annot_ref_pos: NDArray[np.int32] | None = None, + keep_offsets: NDArray[np.integer] | None = None, + annot_v_idxs: NDArray[np.integer] | None = None, + annot_ref_pos: NDArray[np.integer] | None = None, ): """Reconstruct haplotypes from reference sequence and variants. @@ -411,14 +411,14 @@ def reconstruct_haplotype_from_sparse( @nb.njit(parallel=True, nogil=True, cache=True) def choose_exonic_variants( - starts: NDArray[np.int32], - ends: NDArray[np.int32], - geno_offset_idxs: NDArray[np.intp], - geno_v_idxs: NDArray[np.int32], - geno_offsets: NDArray[np.int64], - positions: NDArray[np.int32], - sizes: NDArray[np.int32], -) -> tuple[NDArray[np.bool_], NDArray[np.int64]]: + starts: NDArray[np.integer], + ends: NDArray[np.integer], + geno_offset_idxs: NDArray[np.integer], + geno_v_idxs: NDArray[np.integer], + geno_offsets: NDArray[np.integer], + v_starts: NDArray[np.integer], + ilens: NDArray[np.integer], +) -> tuple[NDArray[np.bool_], NDArray[np.integer]]: """Mark variants to keep for each haplotype. Parameters @@ -474,8 +474,8 @@ def choose_exonic_variants( query_start=ref_start, query_end=ref_end, variant_idxs=qh_genos, - positions=positions, - sizes=sizes, + positions=v_starts, + sizes=ilens, keep=qh_keep, ) @@ -486,9 +486,9 @@ def choose_exonic_variants( def _choose_exonic_variants( query_start: int, query_end: int, - variant_idxs: NDArray[np.int32], # (v) - positions: NDArray[np.int32], # (total variants) - sizes: NDArray[np.int32], # (total variants) + variant_idxs: NDArray[np.integer], # (v) + positions: NDArray[np.integer], # (total variants) + sizes: NDArray[np.integer], # (total variants) keep: NDArray[np.bool_], # (v) ): """Create a mask for variants that are fully contained within the query interval, which is diff --git a/python/genvarloader/_dataset/_reconstruct.py b/python/genvarloader/_dataset/_reconstruct.py index 88dd99a8..b3a75281 100644 --- a/python/genvarloader/_dataset/_reconstruct.py +++ b/python/genvarloader/_dataset/_reconstruct.py @@ -210,10 +210,10 @@ def from_path( def _haplotype_ilens( self, idx: NDArray[np.integer], - regions: NDArray[np.int32], + regions: NDArray[np.integer], deterministic: bool, keep: NDArray[np.bool_] | None = None, - keep_offsets: NDArray[np.int64] | None = None, + keep_offsets: NDArray[np.integer] | None = None, ) -> NDArray[np.int32]: """`idx` must be 1D.""" # (b p) @@ -226,8 +226,8 @@ def _haplotype_ilens( geno_offset_idxs=geno_offset_idxs, geno_v_idxs=self.genotypes.data, geno_offsets=self.genotypes.offsets, - positions=self.variants.v_starts, - sizes=self.variants.ilens, + v_starts=self.variants.v_starts, + ilens=self.variants.ilens, ) else: keep, keep_offsets = None, None @@ -272,7 +272,7 @@ def __call__( def get_haps_and_shifts( self, idx: NDArray[np.integer], - regions: NDArray[np.int32], + regions: NDArray[np.integer], output_length: Literal["ragged", "variable"] | int, rng: np.random.Generator, deterministic: bool, @@ -299,15 +299,17 @@ def get_haps_and_shifts( geno_offset_idxs=geno_offset_idx, geno_v_idxs=self.genotypes.data, geno_offsets=self.genotypes.offsets, - positions=self.variants.v_starts, - sizes=self.variants.ilens, + v_starts=self.variants.v_starts, + ilens=self.variants.ilens, ) else: keep = None keep_offsets = None # (b p) - diffs = self._haplotype_ilens(idx, regions, deterministic) + diffs = self._haplotype_ilens( + idx, regions, deterministic, keep=keep, keep_offsets=keep_offsets + ) hap_lengths = lengths[:, None] + diffs if deterministic or isinstance(output_length, str): @@ -345,8 +347,8 @@ def get_haps_and_shifts( regions=regions, out_offsets=out_offsets, shifts=shifts, - keep=None, - keep_offsets=None, + keep=keep, + keep_offsets=keep_offsets, annotate=False, ) elif issubclass(self.kind, RaggedAnnotatedHaps): @@ -355,8 +357,8 @@ def get_haps_and_shifts( regions=regions, out_offsets=out_offsets, shifts=shifts, - keep=None, - keep_offsets=None, + keep=keep, + keep_offsets=keep_offsets, annotate=True, ) out = RaggedAnnotatedHaps(haps, maybe_annot_v_idx, maybe_annot_pos) @@ -365,8 +367,8 @@ def get_haps_and_shifts( idx=idx, regions=regions, shifts=shifts, - keep=None, - keep_offsets=None, + keep=keep, + keep_offsets=keep_offsets, ) else: assert_never(self.kind) @@ -377,8 +379,8 @@ def get_haps_and_shifts( shifts, diffs, hap_lengths, - None, - None, + keep, + keep_offsets, ) @staticmethod @@ -395,10 +397,10 @@ def get_geno_offset_idx( def _get_variants( self, idx: NDArray[np.integer], - regions: NDArray[np.int32], - shifts: NDArray[np.int32], + regions: NDArray[np.integer], + shifts: NDArray[np.integer], keep: NDArray[np.bool_] | None, - keep_offsets: NDArray[np.int64] | None, + keep_offsets: NDArray[np.integer] | None, ) -> RaggedVariants: # TODO: maybe filter variants for region, shifts, and keep? r, s = np.unravel_index(idx, self.genotypes.shape[:2]) @@ -443,34 +445,34 @@ def _get_variants( @overload def _get_haplotypes( self, - geno_offset_idx: NDArray[np.intp], - regions: NDArray[np.int32], - out_offsets: NDArray[np.int64], - shifts: NDArray[np.int32], + geno_offset_idx: NDArray[np.integer], + regions: NDArray[np.integer], + out_offsets: NDArray[np.integer], + shifts: NDArray[np.integer], keep: NDArray[np.bool_] | None, - keep_offsets: NDArray[np.int64] | None, + keep_offsets: NDArray[np.integer] | None, annotate: Literal[False], ) -> Ragged[np.bytes_]: ... @overload def _get_haplotypes( self, - geno_offset_idx: NDArray[np.intp], - regions: NDArray[np.int32], - out_offsets: NDArray[np.int64], - shifts: NDArray[np.int32], + geno_offset_idx: NDArray[np.integer], + regions: NDArray[np.integer], + out_offsets: NDArray[np.integer], + shifts: NDArray[np.integer], keep: NDArray[np.bool_] | None, - keep_offsets: NDArray[np.int64] | None, + keep_offsets: NDArray[np.integer] | None, annotate: Literal[True], ) -> tuple[Ragged[np.bytes_], Ragged[np.int32], Ragged[np.int32]]: ... def _get_haplotypes( self, - geno_offset_idx: NDArray[np.intp], - regions: NDArray[np.int32], - out_offsets: NDArray[np.int64], - shifts: NDArray[np.int32], + geno_offset_idx: NDArray[np.integer], + regions: NDArray[np.integer], + out_offsets: NDArray[np.integer], + shifts: NDArray[np.integer], keep: NDArray[np.bool_] | None, - keep_offsets: NDArray[np.int64] | None, + keep_offsets: NDArray[np.integer] | None, annotate: bool, ) -> ( Ragged[np.bytes_] From 84505e4daf656c1cdeb7d422f95891161d70848d Mon Sep 17 00:00:00 2001 From: d-laub Date: Tue, 27 May 2025 11:24:38 -0700 Subject: [PATCH 53/53] chore: sync lockfile --- pixi.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pixi.lock b/pixi.lock index 58c5eab0..af217d13 100644 --- a/pixi.lock +++ b/pixi.lock @@ -3329,7 +3329,7 @@ packages: - pypi: ./ name: genvarloader version: 0.15.0 - sha256: a4430e097f281e9b722cdbcb44d3f27b467a5c661f443572552631b3b0b5f642 + sha256: 826701e115d97074cc912fbe63d2b0c73d03395396a17953b0eec06bea127c86 requires_dist: - numba>=0.58.1 - loguru