From 289176afbc530597d70b211a35cd5be35638755a Mon Sep 17 00:00:00 2001 From: d-laub Date: Wed, 16 Sep 2026 05:42:05 -0700 Subject: [PATCH 1/3] perf(svar2): consume genoray's sparse range stream in the writer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `_write_from_svar2` built its region-CSR cache by materializing genoray's dense `(samples, ploidy, regions, 2)` chunk and then discarding it: at the All of Us chr22 grid only 0.45% of `(region, sample, ploid)` windows hold a variant, the dense intermediate is ~128 GB per contig, and the `np.nonzero` scan that recovered the useful cells was 71% of the per-chunk kernel. genoray 4.1.0 emits those cells directly (d-laub/genoray#206), so the scan and the intermediate both go away. `nonempty_entries` collapses into a CSR expansion plus four column assignments and is deleted. The on-disk cache is unchanged, byte for byte. genoray filters on the same predicate (`end > start` in either channel), emits the same absolute `slot * ploidy + ploid` cell ids in the same region-major order, and carries the same raw start with length 0 for a cell non-empty in only one channel. The nine `_core.run_conversion_pipeline` fixtures move to genoray's keyword-only, struct-grouped signature (d-laub/genoray#153), which the same version bump requires. `nonempty_entries`'s shape check went with it. It guarded a transpose that no longer exists — the chunk arrives region-major — so the axis order it defended is now unrepresentable rather than validated. Its int32 cell-id overflow guard is already enforced by `_SparseWriter`'s `span >= 2**31` check. Refs #405. Co-Authored-By: Claude Opus 5 (1M context) --- python/genvarloader/_dataset/_svar2_ranges.py | 70 +------------------ python/genvarloader/_dataset/_write.py | 48 ++++++++----- tests/conftest.py | 42 ++++++----- tests/dataset/conftest.py | 21 +++--- tests/dataset/test_svar2_readbound_diffs.py | 21 +++--- tests/dataset/test_svar2_readbound_haps.py | 21 +++--- .../dataset/test_svar2_readbound_variants.py | 21 +++--- tests/dataset/test_write_svar2.py | 65 ++++++++++------- tests/test_svar2_realign_tracks.py | 21 +++--- tests/unit/dataset/test_svar2_ranges.py | 34 --------- 10 files changed, 154 insertions(+), 210 deletions(-) diff --git a/python/genvarloader/_dataset/_svar2_ranges.py b/python/genvarloader/_dataset/_svar2_ranges.py index 0fbc6735..eb9ec785 100644 --- a/python/genvarloader/_dataset/_svar2_ranges.py +++ b/python/genvarloader/_dataset/_svar2_ranges.py @@ -38,7 +38,6 @@ "_DenseRanges", "_ranges_reader", "_SparseWriter", - "nonempty_entries", "merge_region_blocks", ] @@ -715,7 +714,8 @@ def append_contig( ) -> None: """Merge one contig's per-chunk blocks into region-major order and append. - Each block from :func:`nonempty_entries` is already region-major, and + Each block from genoray's sparse range stream is already region-major, + and chunk ``i``'s sample slots lie entirely below chunk ``i + 1``'s, so the merged order is fixed by region alone. That makes this a stable counting sort with ``O(rc)`` of auxiliary state, not a comparison sort. @@ -869,72 +869,6 @@ def close(self) -> int: return self.n_entries -def nonempty_entries( - snp: NDArray[np.int64], indel: NDArray[np.int64], slot0: int, ploidy: int -) -> tuple[NDArray[np.int32], NDArray[np.int32], NDArray[np.void]]: - """Extract non-empty cells from a ``(rc, ns, P, 2)`` pair of range blocks. - - Args: - snp: SNP ranges, ``(rc, ns, P, 2)`` -- normally a ``transpose(2, 0, 1, 3)`` - view of a hap-major genoray chunk. - indel: Indel ranges, same shape. - slot0: Dataset sample slot of this block's first column. - ploidy: ``P``. - - Returns: - ``(region, cell, entries)``, region-major: ``region`` is **contig-local** - and non-decreasing, ``cell`` is ``slot * ploidy + ploid`` and ascends - within each region. Split rather than combined into one key because - :meth:`_SparseWriter.append_contig` needs the region axis on its own to - count, and ``cell`` is what lands on disk -- combining them would only be - undone again. - - Raises: - ValueError: If ``snp`` and ``indel`` don't share a shape, or their - ploidy axis doesn't match ``ploidy``. A caller that transposes the - wrong axes (e.g. swapping the region and sample axes) still - produces a same-rank ``(a, b, c, 2)`` array, so this is checked - explicitly rather than left to fail downstream -- without it, a - mis-transposed cache still writes a self-consistent CSR table - with no invariant violated, just region/sample-scrambled entries. - """ - if snp.shape != indel.shape: - raise ValueError( - "svar2 range cache: snp and indel blocks must share a shape, got" - f" {snp.shape} and {indel.shape}" - ) - if snp.ndim != 4 or snp.shape[2] != ploidy: - raise ValueError( - f"svar2 range cache: expected (regions, samples, ploidy={ploidy}, 2)" - f" blocks, got shape {snp.shape}" - ) - ne = (snp[..., 1] > snp[..., 0]) | (indel[..., 1] > indel[..., 0]) - # np.nonzero walks the LOGICAL shape in C order, so (r, slot, ploid) comes - # out ascending even though `ne` is NOT C-contiguous: the `>` above inherits - # the transposed view's stride permutation, because numpy allocates ufunc - # output with NPY_KEEPORDER. Do not "fix" that with ascontiguousarray -- - # materializing (rc, ns, P) in C order is a strided scatter costing ~11x the - # comparison itself (97.7 ms vs 8.8 ms on a 15e6-cell chunk). - ri, sj, pj = np.nonzero(ne) - ent = np.empty(len(ri), ENTRY_DTYPE) - ent["snp_start"] = snp[ri, sj, pj, 0] - ent["snp_len"] = snp[ri, sj, pj, 1] - snp[ri, sj, pj, 0] - ent["indel_start"] = indel[ri, sj, pj, 0] - ent["indel_len"] = indel[ri, sj, pj, 1] - indel[ri, sj, pj, 0] - # Overflow guard local to this function: the sole production call site - # (`_write_from_svar2`) already guards `n_samples * ploidy < 2**31` by - # constructing `_SparseWriter` first, but `nonempty_entries` is a public - # module-level function callable independently of that guard. - max_cell = (int(slot0) + int(snp.shape[1]) - 1) * int(ploidy) + int(ploidy) - 1 - if max_cell > np.iinfo(np.int32).max: - raise ValueError( - "svar2 range cache: slot0 * ploidy overflows int32" - f" (max cell id {max_cell})" - ) - cell = (slot0 + sj).astype(np.int64) * ploidy + pj - return ri.astype(np.int32), cell.astype(np.int32), ent - - def merge_region_blocks( readers: "list[_RangeLookup]", r_maps: "list[NDArray[np.int64]]", diff --git a/python/genvarloader/_dataset/_write.py b/python/genvarloader/_dataset/_write.py index f7d9e5d9..4ace020a 100644 --- a/python/genvarloader/_dataset/_write.py +++ b/python/genvarloader/_dataset/_write.py @@ -44,7 +44,7 @@ from .._variants._utils import path_is_pgen, path_is_vcf from ._indexing import s2i from ._svar2_link import Svar2Link -from ._svar2_ranges import ENTRY_DTYPE, _SparseWriter, nonempty_entries +from ._svar2_ranges import ENTRY_DTYPE, _SparseWriter from ._svar_link import SvarLink from ._utils import bed_to_regions, regions_to_bed @@ -1267,7 +1267,7 @@ def _write_from_svar2( ends = df["chromEnd"].to_numpy() # extend_to_length is validated at function entry (False raises); the # read-bound kernel sizes haplotype output at read time. - stream = svar2._find_ranges_chunked( + stream = svar2._find_ranges_chunked_sparse( c, starts, ends, samples=sel, max_mem=max_mem ) dense_snp[lo:hi] = np.asarray(stream.dense_snp_range, np.int64).reshape( @@ -1290,7 +1290,7 @@ def _write_from_svar2( # append_contig's counting-sort merge assumes chunk i's sample # slots lie entirely below chunk i + 1's (see its docstring): the # merged order is fixed by region alone only because of that. - # genoray's `_find_ranges_chunked` happens to yield ascending + # genoray's `_find_ranges_chunked_sparse` happens to yield ascending # `sample_start` today, but that is a generator's behaviour in a # separate package, asserted nowhere on either side -- an # out-of-order chunk stream would corrupt the merge silently @@ -1308,26 +1308,36 @@ def _write_from_svar2( f" {prev_sample_start}." ) prev_sample_start = ch.sample_start - # Chunks are hap-major (samples, ploidy, regions, 2); transpose to - # region-major (regions, samples, ploidy, 2). transpose() is a - # view, and nonempty_entries relies on that -- see its comment on - # np.nonzero and NPY_KEEPORDER. - r, cell, ent = nonempty_entries( - ch.vk_snp_range.transpose(2, 0, 1, 3), - ch.vk_indel_range.transpose(2, 0, 1, 3), - slot0=ch.sample_start, - ploidy=P, - ) - # `nonempty_entries` filters on width, not on genoray's raw start == - # end insertion point (which is what a *dense* cell would carry at - # the same coordinate). An all-empty (region, sample, ploid) cell - # is therefore never written here, so a real dataset's + # The chunk already IS the non-empty set, region-major with + # ascending cell_id -- the shape append_contig wants. What used + # to stand here was a transpose plus an `np.nonzero` scan over a + # dense (samples, ploidy, regions, 2) block, 71% of this kernel + # and ~128 GB per All of Us chr22 contig (#405). genoray filters + # on the same predicate (`end > start` in either channel) and + # emits the same absolute `slot * ploidy + ploid`, so the bytes + # written here are unchanged. + # + # CSR in, region column out: append_contig counts on the region + # axis, so expand `region_ptr` rather than make genoray send a + # column it would have to build from the same offsets. + r = np.repeat(np.arange(rc, dtype=np.int32), np.diff(ch.region_ptr)) + ent = np.empty(len(ch.cell_id), ENTRY_DTYPE) + ent["snp_start"] = ch.snp_start + ent["snp_len"] = ch.snp_len + ent["indel_start"] = ch.indel_start + ent["indel_len"] = ch.indel_len + # genoray filters on width, not on its raw start == end insertion + # point (which is what a *dense* cell would carry at the same + # coordinate). An all-empty (region, sample, ploid) cell is + # therefore never written here, so a real dataset's # `_SparseRanges.lookup` always returns (0, 0) for it, never # genoray's insertion point -- unlike `_DenseRanges.lookup`, which # would surface (x, x). That is the one place the two layouts are - # not byte-identical (see `_SparseRanges`'s docstring). + # not byte-identical (see `_SparseRanges`'s docstring). A cell + # non-empty in only ONE channel still carries the other channel's + # raw start with length 0, exactly as the dense path produced it. acc_r.append(r) - acc_c.append(cell) + acc_c.append(ch.cell_id) acc_e.append(ent) np.maximum(keys, ch.max_end_keys, out=keys) pbar.update(rc * ch.n_samples / S) diff --git a/tests/conftest.py b/tests/conftest.py index 102b83b8..ac4d2b92 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -185,19 +185,22 @@ def svar2_slot_store(_svar2_slot_src, tmp_path_factory) -> Path: leaks into every later consumer of this fixture. """ from genoray import _core + from genoray._pipeline_args import FieldSpec, PlanSettings, RegionSpec bcf, ref = _svar2_slot_src store = tmp_path_factory.mktemp("svar2_slot_store") / "store.svar2" _core.run_conversion_pipeline( - str(bcf), - str(ref), - ["chr1"], - str(store), - ["S0", "S1"], - 25_000, - 2, - 1, - 8 * 1024 * 1024, + vcf_path=str(bcf), + reference_path=str(ref), + output_dir=str(store), + regions=RegionSpec(chroms=["chr1"], samples=["S0", "S1"]), + fields=FieldSpec(), + plan=PlanSettings( + chunk_size=25_000, + max_threads=1, + long_allele_capacity=8 * 1024 * 1024, + ), + ploidy=2, ) assert (store / "meta.json").exists(), "svar2 conversion did not finish" return store @@ -312,6 +315,7 @@ def _build_svar2(vcf_text: str, samples: list[str], d: Path, name: str) -> Path: Path to the finished ``.svar2`` store. """ from genoray import _core + from genoray._pipeline_args import FieldSpec, PlanSettings, RegionSpec ref = d / "ref.fa" ref.write_text(f">chr1\n{_SVAR2_REF}\n") @@ -325,15 +329,17 @@ def _build_svar2(vcf_text: str, samples: list[str], d: Path, name: str) -> Path: out = d / name _core.run_conversion_pipeline( - str(bcf), - str(ref), - ["chr1"], - str(out), - samples, - 25_000, - 2, - 1, - 8 * 1024 * 1024, + vcf_path=str(bcf), + reference_path=str(ref), + output_dir=str(out), + regions=RegionSpec(chroms=["chr1"], samples=samples), + fields=FieldSpec(), + plan=PlanSettings( + chunk_size=25_000, + max_threads=1, + long_allele_capacity=8 * 1024 * 1024, + ), + ploidy=2, ) assert (out / "meta.json").exists(), "conversion did not finish" return out diff --git a/tests/dataset/conftest.py b/tests/dataset/conftest.py index c26b1acd..6acbe9fd 100644 --- a/tests/dataset/conftest.py +++ b/tests/dataset/conftest.py @@ -63,18 +63,21 @@ def vcf_and_ref(tmp_path_factory) -> tuple[Path, Path]: def svar2_store(vcf_and_ref, tmp_path_factory) -> Path: bcf, ref = vcf_and_ref from genoray import _core + from genoray._pipeline_args import FieldSpec, PlanSettings, RegionSpec out = tmp_path_factory.mktemp("svar2_write") / "store.svar2" _core.run_conversion_pipeline( - str(bcf), - str(ref), - ["chr1"], - str(out), - ["S0", "S1", "S2"], - 25_000, - 2, - 1, - 8 * 1024 * 1024, + vcf_path=str(bcf), + reference_path=str(ref), + output_dir=str(out), + regions=RegionSpec(chroms=["chr1"], samples=["S0", "S1", "S2"]), + fields=FieldSpec(), + plan=PlanSettings( + chunk_size=25_000, + max_threads=1, + long_allele_capacity=8 * 1024 * 1024, + ), + ploidy=2, ) assert (out / "meta.json").exists(), "conversion did not finish" return out diff --git a/tests/dataset/test_svar2_readbound_diffs.py b/tests/dataset/test_svar2_readbound_diffs.py index 5504e0c3..ff91a661 100644 --- a/tests/dataset/test_svar2_readbound_diffs.py +++ b/tests/dataset/test_svar2_readbound_diffs.py @@ -38,6 +38,7 @@ @pytest.fixture(scope="module") def svar2_store_dense_snp(tmp_path_factory) -> Path: from genoray import _core + from genoray._pipeline_args import FieldSpec, PlanSettings, RegionSpec d = tmp_path_factory.mktemp("svar2_readbound_diffs_dense_snp") ref = d / "ref.fa" @@ -52,15 +53,17 @@ def svar2_store_dense_snp(tmp_path_factory) -> Path: out = d / "store" _core.run_conversion_pipeline( - str(bcf), - str(ref), - ["chr1"], - str(out), - ["S0", "S1"], - 25_000, - 2, - 1, - 8 * 1024 * 1024, + vcf_path=str(bcf), + reference_path=str(ref), + output_dir=str(out), + regions=RegionSpec(chroms=["chr1"], samples=["S0", "S1"]), + fields=FieldSpec(), + plan=PlanSettings( + chunk_size=25_000, + max_threads=1, + long_allele_capacity=8 * 1024 * 1024, + ), + ploidy=2, ) assert (out / "meta.json").exists(), "conversion did not finish" return out diff --git a/tests/dataset/test_svar2_readbound_haps.py b/tests/dataset/test_svar2_readbound_haps.py index a95e9e15..29349494 100644 --- a/tests/dataset/test_svar2_readbound_haps.py +++ b/tests/dataset/test_svar2_readbound_haps.py @@ -237,6 +237,7 @@ def test_readbound_matches_union_oracle_with_shifts(svar2_store_2s): @pytest.fixture(scope="module") def svar2_store_dense_snp(tmp_path_factory) -> Path: from genoray import _core + from genoray._pipeline_args import FieldSpec, PlanSettings, RegionSpec d = tmp_path_factory.mktemp("svar2_readbound_dense_snp") ref = d / "ref.fa" @@ -251,15 +252,17 @@ def svar2_store_dense_snp(tmp_path_factory) -> Path: out = d / "store" _core.run_conversion_pipeline( - str(bcf), - str(ref), - ["chr1"], - str(out), - ["S0", "S1"], - 25_000, - 2, - 1, - 8 * 1024 * 1024, + vcf_path=str(bcf), + reference_path=str(ref), + output_dir=str(out), + regions=RegionSpec(chroms=["chr1"], samples=["S0", "S1"]), + fields=FieldSpec(), + plan=PlanSettings( + chunk_size=25_000, + max_threads=1, + long_allele_capacity=8 * 1024 * 1024, + ), + ploidy=2, ) assert (out / "meta.json").exists(), "conversion did not finish" return out diff --git a/tests/dataset/test_svar2_readbound_variants.py b/tests/dataset/test_svar2_readbound_variants.py index 2389255e..1cf8599f 100644 --- a/tests/dataset/test_svar2_readbound_variants.py +++ b/tests/dataset/test_svar2_readbound_variants.py @@ -97,6 +97,7 @@ def test_readbound_variants_match_decode_oracle(svar2_store_2s, regions): @pytest.fixture(scope="module") def svar2_store_dense_snp(tmp_path_factory) -> Path: from genoray import _core + from genoray._pipeline_args import FieldSpec, PlanSettings, RegionSpec d = tmp_path_factory.mktemp("svar2_readbound_variants_dense_snp") ref = d / "ref.fa" @@ -111,15 +112,17 @@ def svar2_store_dense_snp(tmp_path_factory) -> Path: out = d / "store" _core.run_conversion_pipeline( - str(bcf), - str(ref), - ["chr1"], - str(out), - ["S0", "S1"], - 25_000, - 2, - 1, - 8 * 1024 * 1024, + vcf_path=str(bcf), + reference_path=str(ref), + output_dir=str(out), + regions=RegionSpec(chroms=["chr1"], samples=["S0", "S1"]), + fields=FieldSpec(), + plan=PlanSettings( + chunk_size=25_000, + max_threads=1, + long_allele_capacity=8 * 1024 * 1024, + ), + ploidy=2, ) assert (out / "meta.json").exists(), "conversion did not finish" return out diff --git a/tests/dataset/test_write_svar2.py b/tests/dataset/test_write_svar2.py index ebc5ebfa..73bc5b97 100644 --- a/tests/dataset/test_write_svar2.py +++ b/tests/dataset/test_write_svar2.py @@ -71,9 +71,11 @@ def test_write_svar2_emits_cache(svar2_store: Path, tmp_path: Path): # independent oracle for this fixture's grid. It does NOT by itself prove a # mis-transposed axis order fails loudly here -- `_find_ranges`'s test # fixture happens not to distinguish some axis permutations, so that - # property is enforced structurally instead, by `nonempty_entries`'s own - # shape check (raises on any transpose that changes rank or the ploidy - # axis) and pinned end-to-end by tests/dataset/test_svar2_fields_read.py. + # property used to be enforced structurally by `nonempty_entries`'s shape + # check. Since the writer consumes genoray's sparse stream (#405) there is + # no transpose left to get wrong -- the chunk arrives region-major with + # absolute cell ids -- so the axis order is now unrepresentable rather than + # checked. Still pinned end-to-end by tests/dataset/test_svar2_fields_read.py. # # It compares WIDTHS and NON-EMPTY entries, not raw bytes: the sparse layout # deliberately discards an empty cell's insertion point, which is exactly the @@ -217,6 +219,7 @@ def test_write_svar2_max_ends_matches_svar1( def tie_stores(tmp_path_factory) -> tuple[Path, Path]: """Matched .svar2 and .svar stores from the same two-same-POS-records VCF.""" from genoray import VCF, SparseVar, _core + from genoray._pipeline_args import FieldSpec, PlanSettings, RegionSpec from tests.dataset.conftest import _REF @@ -233,15 +236,17 @@ def tie_stores(tmp_path_factory) -> tuple[Path, Path]: svar2_out = d / "store.svar2" _core.run_conversion_pipeline( - str(bcf), - str(ref), - ["chr1"], - str(svar2_out), - ["S0", "S1"], - 25_000, - 2, - 1, - 8 * 1024 * 1024, + vcf_path=str(bcf), + reference_path=str(ref), + output_dir=str(svar2_out), + regions=RegionSpec(chroms=["chr1"], samples=["S0", "S1"]), + fields=FieldSpec(), + plan=PlanSettings( + chunk_size=25_000, + max_threads=1, + long_allele_capacity=8 * 1024 * 1024, + ), + ploidy=2, ) assert (svar2_out / "meta.json").exists(), "svar2 conversion did not finish" @@ -319,7 +324,7 @@ def test_write_svar2_chunked_matches_unchunked(svar2_store: Path, tmp_path): ) calls: list[int] = [] - real = SparseVar2._find_ranges_chunked + real = SparseVar2._find_ranges_chunked_sparse def spy(self, *args, **kwargs): stream = real(self, *args, **kwargs) @@ -336,11 +341,14 @@ def spy(self, *args, **kwargs): overwrite=True, ) - SparseVar2._find_ranges_chunked = spy + SparseVar2._find_ranges_chunked_sparse = spy try: small = tmp_path / "small.gvl" # 2 regions x ploidy 2 x 2 channels x 2 endpoints x 8 bytes = 128 bytes - # per sample; the chunker's own 2x safety margin needs 256 bytes for + # per sample. The sparse stream is planned from that same DENSE + # per-sample cost (genoray sizes chunks for the worst case, not the + # realized fill), so this budget still forces the same split. + # The chunker's own 2x safety margin needs 256 bytes for # even one sample, so 256 is the smallest budget that both succeeds # and forces one-sample-per-chunk (this store has S=2, so that's 2 # chunks). @@ -353,7 +361,7 @@ def spy(self, *args, **kwargs): overwrite=True, ) finally: - SparseVar2._find_ranges_chunked = real + SparseVar2._find_ranges_chunked_sparse = real assert calls and all(c == 1 for c in calls), ( f"expected one sample per chunk under a 256-byte budget, got {calls}" @@ -533,18 +541,23 @@ def svar2_store_unsorted(vcf_and_ref, tmp_path_factory) -> Path: """ bcf, ref = vcf_and_ref from genoray import _core + from genoray._pipeline_args import FieldSpec, PlanSettings, RegionSpec out = tmp_path_factory.mktemp("svar2_write_unsorted") / "store.svar2" _core.run_conversion_pipeline( - str(bcf), - str(ref), - ["chr1"], - str(out), - ["S1", "S0"], # reversed vs. the lexicographic order gvl.write emits - 25_000, - 2, - 1, - 8 * 1024 * 1024, + vcf_path=str(bcf), + reference_path=str(ref), + output_dir=str(out), + regions=RegionSpec( + chroms=["chr1"], samples=["S1", "S0"] + ), # reversed vs. the lexicographic order gvl.write emits + fields=FieldSpec(), + plan=PlanSettings( + chunk_size=25_000, + max_threads=1, + long_allele_capacity=8 * 1024 * 1024, + ), + ploidy=2, ) assert (out / "meta.json").exists(), "conversion did not finish" return out @@ -857,7 +870,7 @@ def test_write_svar2_empty_cell_is_zero_not_insertion_point( ): """A genuinely empty cell reads back as (0, 0), not genoray's insertion point. - `nonempty_entries` filters on width, so an all-empty (region, sample, ploid) + genoray's sparse stream filters on width, so an all-empty (region, sample, ploid) cell is never written. `_SparseRanges.lookup` then returns (0, 0) for it -- the one place `_SparseRanges` and `_DenseRanges` diverge (see `_SparseRanges`'s docstring and the comment in `_write_from_svar2`), since a diff --git a/tests/test_svar2_realign_tracks.py b/tests/test_svar2_realign_tracks.py index 0d54f42c..ff07fdea 100644 --- a/tests/test_svar2_realign_tracks.py +++ b/tests/test_svar2_realign_tracks.py @@ -33,6 +33,7 @@ @pytest.fixture(scope="module") def svar2_del_store(tmp_path_factory) -> Path: from genoray import _core + from genoray._pipeline_args import FieldSpec, PlanSettings, RegionSpec d = tmp_path_factory.mktemp("svar2_del") ref = d / "ref.fa" @@ -47,15 +48,17 @@ def svar2_del_store(tmp_path_factory) -> Path: out = d / "store" _core.run_conversion_pipeline( - str(bcf), - str(ref), - ["chr1"], - str(out), - ["S0", "S1"], - 25_000, - 2, - 1, - 8 * 1024 * 1024, + vcf_path=str(bcf), + reference_path=str(ref), + output_dir=str(out), + regions=RegionSpec(chroms=["chr1"], samples=["S0", "S1"]), + fields=FieldSpec(), + plan=PlanSettings( + chunk_size=25_000, + max_threads=1, + long_allele_capacity=8 * 1024 * 1024, + ), + ploidy=2, ) assert (out / "meta.json").exists(), "conversion did not finish" return out diff --git a/tests/unit/dataset/test_svar2_ranges.py b/tests/unit/dataset/test_svar2_ranges.py index 20e0962b..5494e29f 100644 --- a/tests/unit/dataset/test_svar2_ranges.py +++ b/tests/unit/dataset/test_svar2_ranges.py @@ -924,40 +924,6 @@ def test_append_contig_rejects_out_of_range_cell_id(tmp_path): w.close() -def test_nonempty_entries_rejects_snp_indel_shape_mismatch(): - """snp and indel blocks must share a shape. - - A caller that slices or transposes the two channels inconsistently (e.g. - a stale sample count on one channel) would otherwise index past one - array's bounds or silently pair up unrelated cells -- checked explicitly - since both are same-rank, same-dtype arrays that would not otherwise fail - fast in `snp[..., 1] > snp[..., 0]`-style broadcasting. - """ - from genvarloader._dataset._svar2_ranges import nonempty_entries - - snp = np.zeros((2, 3, 2, 2), np.int64) - indel = np.zeros((2, 4, 2, 2), np.int64) # samples axis mismatch: 3 vs 4 - with pytest.raises(ValueError, match="share a shape"): - nonempty_entries(snp, indel, slot0=0, ploidy=2) - - -def test_nonempty_entries_rejects_ploidy_axis_mismatch(): - """The ploidy axis must match the declared `ploidy`. - - Reproduced without this guard: declaring `ploidy=2` against a block whose - axis-2 size is actually 3 makes `cell = (slot0 + sj) * ploidy + pj` alias - distinct `(sample, ploid)` pairs onto the same cell id -- e.g. cell id 2 - is emitted by both `(sj=0, pj=2)` and `(sj=1, pj=0)` -- with no error at - all, silently merging two samples' variants into one cell. - """ - from genvarloader._dataset._svar2_ranges import nonempty_entries - - snp = np.zeros((2, 3, 3, 2), np.int64) # real ploidy axis is 3 - indel = np.zeros((2, 3, 3, 2), np.int64) - with pytest.raises(ValueError, match="ploidy"): - nonempty_entries(snp, indel, slot0=0, ploidy=2) - - def test_svar2_n_variants_is_a_zero_stride_view(): """#355: a dense (R, S, P) int32 of zeros is 50.7 GB at All of Us chr19. From fbfefd119a771a4c982511e59b1cfd45f439aec2 Mon Sep 17 00:00:00 2001 From: d-laub Date: Wed, 16 Sep 2026 05:43:03 -0700 Subject: [PATCH 2/3] build(deps): require genoray >=4.1.0 for the sparse range stream `_write_from_svar2` now calls `SparseVar2._find_ranges_chunked_sparse` and the test fixtures call the keyword-only `_core.run_conversion_pipeline`. Neither exists before 4.1.0. `pixi.lock` is deliberately not regenerated and the `pixi-lock` / `pyrefly` hooks are skipped for this commit: 4.1.0 is not on PyPI yet, so pixi cannot resolve this range at all. Run `pixi lock` and re-run the hooks once the release lands. Co-Authored-By: Claude Opus 5 (1M context) --- pixi.toml | 12 +++++++----- pyproject.toml | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/pixi.toml b/pixi.toml index b838d846..f24cabdb 100644 --- a/pixi.toml +++ b/pixi.toml @@ -102,11 +102,13 @@ numba = "==0.59.1" pyarrow = ">=21" hirola = "==0.3" seqpro = "==0.22.0" -# genoray >=3.4.0 as the prebuilt abi3 wheel from PyPI — one cp310-abi3 wheel covers -# py310-313 on both platforms. 3.4.0 carries SparseVar2._find_ranges_chunked, the -# memory-bounded chunked range API _write_from_svar2 consumes (gvl#333). Mirrors -# the pyproject range, which spans 3.x and 4.x. -genoray = ">=3.4.0,<5" +# genoray >=4.1.0 as the prebuilt abi3 wheel from PyPI — one cp310-abi3 wheel covers +# py310-313 on both platforms. 4.1.0 carries +# SparseVar2._find_ranges_chunked_sparse, the sparse chunked range API +# _write_from_svar2 consumes (gvl#405), and the keyword-only, struct-grouped +# _core.run_conversion_pipeline the test fixtures call (d-laub/genoray#153). +# Mirrors the pyproject range. +genoray = ">=4.1.0,<5" polars = "==1.37.1" loguru = "*" natsort = "*" diff --git a/pyproject.toml b/pyproject.toml index 21067747..09b2351e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,7 +16,7 @@ dependencies = [ # contig's ranges at once (gvl#333). 4.x is supported: its breaking changes # (SparseVar2.from_vcf(tune=) removal, from_vcf_list(max_mem=) semantics) # are on APIs GVL never calls. - "genoray>=3.4.0,<5", + "genoray>=4.1.0,<5", "numpy", "loguru", "natsort", From 56e7d70eb8b0844aade06555f46c3402771a92bd Mon Sep 17 00:00:00 2001 From: d-laub Date: Wed, 16 Sep 2026 15:11:36 -0700 Subject: [PATCH 3/3] chore(deps): require genoray >=5,<6 and port to keyword-only pipeline entry points genoray 5.0.0 is out, carrying both changes this branch needs: the sparse range emission from d-laub/genoray#206 and the keyword-only, grouped-argument pipeline entry points from d-laub/genoray#200. The previous pin (`>=4.1.0,<5`) anticipated a 4.1.0 that was never cut, so it excludes the release it was waiting for. Bump the pin in `pyproject.toml` and `pixi.toml` to `>=5,<6`, relock, and move both `Cargo.toml` git deps (`svar2-codec`, `genoray_core`) to the 5.0.0 tag commit 714f876. 5.0.0's breaking changes -- the `GENORAY_*` environment variables, the `reader_workers=` parameter and `resolve_log_level` -- all land on APIs genvarloader never calls, so nothing here needed rewriting for them. What did need rewriting: #200 made the `_core` pipeline entry points keyword-only and grouped their arguments into `RegionSpec` / `FieldSpec` / `PlanSettings`. The twelve test call sites that build svar2 fixtures now pass keywords and those dataclasses instead of a positional argument list. Re-checked the empty-cell contract at the new rev, as the comment in `Cargo.toml` asks: `gather_haps_readbound_impl` still consumes every range purely as a slice bound, so a `len == 0` range's `start` is never dereferenced. Full suite against the real 5.0.0 wheel: 1315 passed, 43 skipped, 4 xfailed. Co-Authored-By: Claude Opus 5 (1M context) --- Cargo.lock | 4 +- Cargo.toml | 15 +- pixi.lock | 237 +++++++++++----------- pixi.toml | 8 +- pyproject.toml | 13 +- tests/dataset/test_svar2_contig_naming.py | 21 +- tests/dataset/test_svar2_dataset.py | 42 ++-- 7 files changed, 180 insertions(+), 160 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 88f3aab5..937dcf7b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -501,7 +501,7 @@ dependencies = [ [[package]] name = "genoray" version = "0.1.0" -source = "git+https://github.com/d-laub/genoray.git?rev=d66ec0e03d097fa8c338567b0938924be67315db#d66ec0e03d097fa8c338567b0938924be67315db" +source = "git+https://github.com/d-laub/genoray.git?rev=714f8761574b0d4e934d18c694dcaadacd946a2d#714f8761574b0d4e934d18c694dcaadacd946a2d" dependencies = [ "bytemuck", "crossbeam-channel", @@ -1479,7 +1479,7 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "svar2-codec" version = "0.1.0" -source = "git+https://github.com/d-laub/genoray.git?rev=d66ec0e03d097fa8c338567b0938924be67315db#d66ec0e03d097fa8c338567b0938924be67315db" +source = "git+https://github.com/d-laub/genoray.git?rev=714f8761574b0d4e934d18c694dcaadacd946a2d#714f8761574b0d4e934d18c694dcaadacd946a2d" [[package]] name = "syn" diff --git a/Cargo.toml b/Cargo.toml index 477109c1..bb7cf0f0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,18 +22,21 @@ seqpro-core = "0.1" # genoray crates are pulled straight from GitHub (no crates.io publish). Cargo finds # each package by name inside the repo — no in-repo path is given or needed. Bump `rev` # to pull newer genoray code; both crates must share the same rev (one clone, one repo). -# Currently tag 4.0.1. Keep this rev in step with the `genoray` Python pin: the Rust +# Currently tag 5.0.0. Keep this rev in step with the `genoray` Python pin: the Rust # code here reads svar2 stores that the Python package writes, so a format change that # lands in one and not the other is invisible until it corrupts a read. # `default-features = false` selects genoray's query-only core; since 4.0.1 that also # excludes `tracing`/`tracing-subscriber`, which are gated behind its `conversion` # feature (d-laub/genoray#165). # The sparse range cache's empty-cell contract also depends on this pin: -# `gather_haps_readbound_impl` (genoray:src/query/gather.rs:772) must never -# dereference an empty range's `start`, since that's what makes writing `(0, 0)` -# for an absent cell safe rather than a corrupt read. Re-check this on any bump. -svar2-codec = { git = "https://github.com/d-laub/genoray.git", rev = "d66ec0e03d097fa8c338567b0938924be67315db" } -genoray_core = { git = "https://github.com/d-laub/genoray.git", rev = "d66ec0e03d097fa8c338567b0938924be67315db", package = "genoray", default-features = false } +# `gather_haps_readbound_impl` (genoray:src/query/gather.rs:869 at 5.0.0) must +# never dereference an empty range's `start`, since that's what makes writing +# `(0, 0)` for an absent cell safe rather than a corrupt read. Re-check this on +# any bump. Re-checked at 5.0.0: every range is consumed as a SLICE bound +# (`d_snp_pos[ss..se]`, `snp_positions[vs..ve]`), so `len == 0` yields an empty +# slice and the loop body never runs -- the `start` is never dereferenced. +svar2-codec = { git = "https://github.com/d-laub/genoray.git", rev = "714f8761574b0d4e934d18c694dcaadacd946a2d" } +genoray_core = { git = "https://github.com/d-laub/genoray.git", rev = "714f8761574b0d4e934d18c694dcaadacd946a2d", package = "genoray", default-features = false } [features] extension-module = ["pyo3/extension-module"] diff --git a/pixi.lock b/pixi.lock index 499499dd..c536f9fd 100644 --- a/pixi.lock +++ b/pixi.lock @@ -1,7 +1,16 @@ version: 7 platforms: - name: linux-64 + virtual-packages: + - __unix=0=0 + - __linux=4.18 + - __glibc=2.28 + - __archspec=0=x86_64 - name: osx-arm64 + virtual-packages: + - __unix=0=0 + - __osx=13.0 + - __archspec=0=m1 environments: default: channels: @@ -164,7 +173,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-2.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda - - pypi: . + - pypi: ./ - pypi: https://files.pythonhosted.org/packages/00/ba/8d8aa1df96e0666752e5c9d406d440495df2014d315b2a95bbef9856b23e/datafusion-50.1.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/08/75/ec73e38812bca7c2240aff481b9ddff20d1ad2f10dee4b3353f5eeaacdab/polars-1.37.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0a/59/69032bf511d51bbc2d45311110386042a7b6a62e6149f919e94a1b55979e/pybigwig-0.3.25-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl @@ -191,7 +200,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/6b/a4/bd8ad7d1cf66268219f282d4268b6ba73f8ff51c5fba2c9663adab103615/sorted_nearest-0.0.41.tar.gz - pypi: https://files.pythonhosted.org/packages/6e/ae/76fb528c6112a3df5a581a18f1a2ceee5983d54977d7f2b6bc883637fe4c/polars_config_meta-0.3.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/cc/18245721fa7747065ab478316c7fea7c74777d07f37ae60db2e84f8172e8/beartype-0.22.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/73/48/8980acebec96c6615639e44471e00023f15274ce027e485805b0c8b49280/genoray-4.0.1-cp310-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/74/ff/9d30128a88df6c795097b6f73218d4a5afcd0e2d74cf2dedd99b28d42cdc/cyvcf2-0.31.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl @@ -212,6 +220,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b4/f6/1c671874560a70d902dd57028a75411c176910de2df3d6a6a533de424131/cyclopts-4.21.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ba/1e/acc4d70f88a0a277e4a1fa77ebb985ceabaf900430f875bf9338e11c9420/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c9/87/a51030071ed0e4a9a9a411420d671353a1a5ea834b3e53091e2de44d4e48/genoray-5.0.0-cp310-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/ca/d0/411c82285a7586e97326020f6b5ecbc2f2ffcbef72aa108c897de1b0a540/pandera-0.32.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cc/e4/d71e71edc972d534f51cff72fa30edb8b0e5df109b2e5ae67a3985faebb9/joblib_progress-1.0.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ce/7d/0b8e265c43978292425249ae1fd63d5f7b0a719c78eee70055751b5bb8cb/oxbow-0.5.2-cp39-abi3-manylinux_2_28_x86_64.whl @@ -336,7 +345,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-2.1.2-py310h72544b6_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - - pypi: . + - pypi: ./ - pypi: https://files.pythonhosted.org/packages/08/75/ec73e38812bca7c2240aff481b9ddff20d1ad2f10dee4b3353f5eeaacdab/polars-1.37.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/13/4f/66d99628ff8ce7857aca52fed8f0066ce209f96be2fede6cef9f84e8d04f/pandas-2.3.3-cp310-cp310-macosx_11_0_arm64.whl @@ -350,7 +359,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/2a/68/1fc93dd759605b5d00fc98b50200739e41ed32bd22d6ba35ca6c3932371b/rich_rst-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/92/73ab995881de743ddfebe51e6ed35aa6bd709ae7f09eea2cc8e9716bfa36/seqpro-0.22.0-cp39-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4b/fe/c6498d404af1089eec01d9a60810223910ea87d5c8015bc5b6986e8f612f/genoray-4.0.1-cp310-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/55/5e/f8f4f7cc9b24b35103eb9e19f0f69935d16b878b4c5e4511ecd2261403fb/vcfixture-0.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/56/c6/65f646c7ff09bd257f660434adb45c4dfcbbcebcc030562fecf6f5bf887d/pydantic_core-2.46.4-cp310-cp310-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/5b/29/74eeb4d3f3ae61ca096b018ad486b3b3c74b17bec09ab4edab721cbefec3/typeguard-4.5.2-py3-none-any.whl @@ -380,6 +388,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/a7/06/3d6badcf13db419e25b07041d9c7b4a2c331d3f4e7134445ec5df57714cd/coloredlogs-15.0.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a7/5f/ed01f9a3cdffbd5a008556fc7b2a08ddb1cc6ace7effa7340604b1d16699/docstring_parser-0.18.0-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/ae/fa/9788f3e8457d419d51a6fa35cb334ebff40e2f8ef5a15a62a776f685e646/genoray-5.0.0-cp310-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/b2/16/9298cca16e26d2fc3751a2b93469cc14a6f8bb9fb5f4087977926d936383/hirola-0.3.0-py3-none-macosx_10_6_universal2.whl - pypi: https://files.pythonhosted.org/packages/b4/f6/1c671874560a70d902dd57028a75411c176910de2df3d6a6a533de424131/cyclopts-4.21.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl @@ -544,7 +553,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-2.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda - - pypi: . + - pypi: ./ - pypi: https://files.pythonhosted.org/packages/00/ba/8d8aa1df96e0666752e5c9d406d440495df2014d315b2a95bbef9856b23e/datafusion-50.1.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/02/ad/0b9cc9f38a7324a7eb1d80f834eaa5283d17e9271bbda3186e598dddaeac/yarl-1.24.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/08/75/ec73e38812bca7c2240aff481b9ddff20d1ad2f10dee4b3353f5eeaacdab/polars-1.37.1-py3-none-any.whl @@ -592,7 +601,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/71/43/1947f06babed6b3f1d7f38b0c767f52df66bfb2bc10b468c4a7de9eceff2/aiohappyeyeballs-2.7.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/cc/18245721fa7747065ab478316c7fea7c74777d07f37ae60db2e84f8172e8/beartype-0.22.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/72/25/973bd6128381951b23cdcd8a9870c6dcfc5606cb864df8eabd82e529f9c1/torchinfo-1.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/73/48/8980acebec96c6615639e44471e00023f15274ce027e485805b0c8b49280/genoray-4.0.1-cp310-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/74/ff/9d30128a88df6c795097b6f73218d4a5afcd0e2d74cf2dedd99b28d42cdc/cyvcf2-0.31.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl @@ -622,6 +630,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/c2/f3/d86c845465a2723ad7e1e5c36dcd75ddb82898b3f53be47ebd429fb2fa5d/nvidia_nvtx-13.0.85-py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c3/68/483a78f5e8f31b08fb1bb671559968c0ca3a065ac7acabfc7cee55214fd6/nvidia_cuda_nvrtc-13.0.88-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c3/a2/c7f6ebf546f8f644edf0f999aa98ece106986a77a7b922316bf6414ff825/torchmetrics-1.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c9/87/a51030071ed0e4a9a9a411420d671353a1a5ea834b3e53091e2de44d4e48/genoray-5.0.0-cp310-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/ca/d0/411c82285a7586e97326020f6b5ecbc2f2ffcbef72aa108c897de1b0a540/pandera-0.32.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cc/e4/d71e71edc972d534f51cff72fa30edb8b0e5df109b2e5ae67a3985faebb9/joblib_progress-1.0.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ce/7d/0b8e265c43978292425249ae1fd63d5f7b0a719c78eee70055751b5bb8cb/oxbow-0.5.2-cp39-abi3-manylinux_2_28_x86_64.whl @@ -753,7 +762,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-2.1.2-py310h72544b6_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - - pypi: . + - pypi: ./ - pypi: https://files.pythonhosted.org/packages/08/75/ec73e38812bca7c2240aff481b9ddff20d1ad2f10dee4b3353f5eeaacdab/polars-1.37.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/13/4f/66d99628ff8ce7857aca52fed8f0066ce209f96be2fede6cef9f84e8d04f/pandas-2.3.3-cp310-cp310-macosx_11_0_arm64.whl @@ -766,7 +775,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/68/1fc93dd759605b5d00fc98b50200739e41ed32bd22d6ba35ca6c3932371b/rich_rst-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/92/73ab995881de743ddfebe51e6ed35aa6bd709ae7f09eea2cc8e9716bfa36/seqpro-0.22.0-cp39-abi3-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/4b/fe/c6498d404af1089eec01d9a60810223910ea87d5c8015bc5b6986e8f612f/genoray-4.0.1-cp310-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/55/5e/f8f4f7cc9b24b35103eb9e19f0f69935d16b878b4c5e4511ecd2261403fb/vcfixture-0.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/56/c6/65f646c7ff09bd257f660434adb45c4dfcbbcebcc030562fecf6f5bf887d/pydantic_core-2.46.4-cp310-cp310-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/5b/29/74eeb4d3f3ae61ca096b018ad486b3b3c74b17bec09ab4edab721cbefec3/typeguard-4.5.2-py3-none-any.whl @@ -794,6 +802,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/a7/06/3d6badcf13db419e25b07041d9c7b4a2c331d3f4e7134445ec5df57714cd/coloredlogs-15.0.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a7/5f/ed01f9a3cdffbd5a008556fc7b2a08ddb1cc6ace7effa7340604b1d16699/docstring_parser-0.18.0-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/ae/fa/9788f3e8457d419d51a6fa35cb334ebff40e2f8ef5a15a62a776f685e646/genoray-5.0.0-cp310-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/b2/16/9298cca16e26d2fc3751a2b93469cc14a6f8bb9fb5f4087977926d936383/hirola-0.3.0-py3-none-macosx_10_6_universal2.whl - pypi: https://files.pythonhosted.org/packages/b4/f6/1c671874560a70d902dd57028a75411c176910de2df3d6a6a533de424131/cyclopts-4.21.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl @@ -976,7 +985,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-2.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda - - pypi: . + - pypi: ./ - pypi: https://files.pythonhosted.org/packages/00/ba/8d8aa1df96e0666752e5c9d406d440495df2014d315b2a95bbef9856b23e/datafusion-50.1.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/01/8e/1e35281b8ab6d5d72ebe9911edcdffa3f36b04ed9d51dec6dd140396e220/scipy-1.17.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl @@ -1044,7 +1053,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/6e/ae/76fb528c6112a3df5a581a18f1a2ceee5983d54977d7f2b6bc883637fe4c/polars_config_meta-0.3.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/cc/18245721fa7747065ab478316c7fea7c74777d07f37ae60db2e84f8172e8/beartype-0.22.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/72/25/973bd6128381951b23cdcd8a9870c6dcfc5606cb864df8eabd82e529f9c1/torchinfo-1.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/73/48/8980acebec96c6615639e44471e00023f15274ce027e485805b0c8b49280/genoray-4.0.1-cp310-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/77/39/4d8414260c3d83f22029a39e51553c173611b378d62ca391e5ca68e65cfa/awkward-2.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl @@ -1089,6 +1097,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/c4/13/680c54afe3e65767bed7ec1a15571e1a2f1257128733851ade24abcefbcc/kiwisolver-1.5.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c7/e1/68c2256b69a314eba133673377ba9118c356f6342a0c02b61de449cf2bf2/narwhals-2.21.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c9/87/a51030071ed0e4a9a9a411420d671353a1a5ea834b3e53091e2de44d4e48/genoray-5.0.0-cp310-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/cb/98/6af411189d9413534c3eb691182bff1f5c6d44ed2f93f2edfe52a1bbceb8/more_itertools-11.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cc/8f/ec6289987824b29529d0dfda0d74a07cec60e54b9c92f3c9da4c0ac732de/contourpy-1.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl @@ -1225,7 +1234,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-2.1.2-py312h2bbb03f_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - - pypi: . + - pypi: ./ - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/bf/6f506a37c7f8ecc4576caf9486e303c7af249f6d70447bb51dde9d78cb99/sphinx_book_theme-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/03/78/843bcf0cf31f88d2f8a9a063d2d80817b1901657d83d65b89b3aa835732e/nbsphinx-0.9.8-py3-none-any.whl @@ -1264,7 +1273,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/47/d4/dbacced3953544b9a93088cc10ef2b596d348c983d5c67a404fa41ec51ba/fonttools-4.62.1-cp312-cp312-macosx_10_13_universal2.whl - - pypi: https://files.pythonhosted.org/packages/4b/fe/c6498d404af1089eec01d9a60810223910ea87d5c8015bc5b6986e8f612f/genoray-4.0.1-cp310-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/4d/a1/bca7fd3d452b272e13335db8d6b0b3ecde0f90ad6f16f3328c6fb150c889/rpds_py-0.30.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4e/ca/03624e017e5ee2d7ce8a08d89f81c1e535eb3c30d7b2dc4a435ea3fbbeae/mkdocs_glightbox-0.5.2-py3-none-any.whl @@ -1324,6 +1332,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/aa/1c/d920d64b22f8dd028a8b90e2d756e431a5d86194caa78e3819c7bf53b4b3/zstandard-0.25.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/ab/b5/36c712098e6191d1b4e349304ef73a8d06aed77e56ceaac8c0a306c7bda1/jupyterlab_widgets-3.0.16-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ae/e5/6dc3400bc4bea5e6576c2468536bad65b956483f2c32ec9af9c98e7c068d/polars_bio-0.20.1-cp39-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/ae/fa/9788f3e8457d419d51a6fa35cb334ebff40e2f8ef5a15a62a776f685e646/genoray-5.0.0-cp310-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b2/02/cf107b01494c19dc100f1d0b7ac3cc08666e96ba2d64db7626066cee895e/scipy-1.17.1-cp312-cp312-macosx_12_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/b2/16/9298cca16e26d2fc3751a2b93469cc14a6f8bb9fb5f4087977926d936383/hirola-0.3.0-py3-none-macosx_10_6_universal2.whl @@ -1507,7 +1516,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-2.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda - - pypi: . + - pypi: ./ - pypi: https://download-r2.pytorch.org/whl/cu126/torch-2.10.0%2Bcu126-cp312-cp312-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/00/ba/8d8aa1df96e0666752e5c9d406d440495df2014d315b2a95bbef9856b23e/datafusion-50.1.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/01/8e/1e35281b8ab6d5d72ebe9911edcdffa3f36b04ed9d51dec6dd140396e220/scipy-1.17.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl @@ -1590,7 +1599,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/71/cc/18245721fa7747065ab478316c7fea7c74777d07f37ae60db2e84f8172e8/beartype-0.22.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/72/25/973bd6128381951b23cdcd8a9870c6dcfc5606cb864df8eabd82e529f9c1/torchinfo-1.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/1b/44a01c4e70933637c93e6e1a8063d1e998b50213a6b65ac5a9169c47e98e/nvidia_curand_cu12-10.3.7.77-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/73/48/8980acebec96c6615639e44471e00023f15274ce027e485805b0c8b49280/genoray-4.0.1-cp310-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/75/2e/46030320b5a80661e88039f59060d1790298b4718944a65a7f2aeda3d9e9/nvidia_cuda_nvrtc_cu12-12.6.77-py3-none-manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/77/39/4d8414260c3d83f22029a39e51553c173611b378d62ca391e5ca68e65cfa/awkward-2.9.0-py3-none-any.whl @@ -1646,6 +1654,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/c4/13/680c54afe3e65767bed7ec1a15571e1a2f1257128733851ade24abcefbcc/kiwisolver-1.5.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c7/e1/68c2256b69a314eba133673377ba9118c356f6342a0c02b61de449cf2bf2/narwhals-2.21.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c9/87/a51030071ed0e4a9a9a411420d671353a1a5ea834b3e53091e2de44d4e48/genoray-5.0.0-cp310-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/cb/98/6af411189d9413534c3eb691182bff1f5c6d44ed2f93f2edfe52a1bbceb8/more_itertools-11.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cc/8f/ec6289987824b29529d0dfda0d74a07cec60e54b9c92f3c9da4c0ac732de/contourpy-1.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl @@ -1787,7 +1796,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-2.1.2-py312h2bbb03f_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - - pypi: . + - pypi: ./ - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/bf/6f506a37c7f8ecc4576caf9486e303c7af249f6d70447bb51dde9d78cb99/sphinx_book_theme-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/03/78/843bcf0cf31f88d2f8a9a063d2d80817b1901657d83d65b89b3aa835732e/nbsphinx-0.9.8-py3-none-any.whl @@ -1825,7 +1834,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/47/d4/dbacced3953544b9a93088cc10ef2b596d348c983d5c67a404fa41ec51ba/fonttools-4.62.1-cp312-cp312-macosx_10_13_universal2.whl - - pypi: https://files.pythonhosted.org/packages/4b/fe/c6498d404af1089eec01d9a60810223910ea87d5c8015bc5b6986e8f612f/genoray-4.0.1-cp310-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/4d/a1/bca7fd3d452b272e13335db8d6b0b3ecde0f90ad6f16f3328c6fb150c889/rpds_py-0.30.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4e/ca/03624e017e5ee2d7ce8a08d89f81c1e535eb3c30d7b2dc4a435ea3fbbeae/mkdocs_glightbox-0.5.2-py3-none-any.whl @@ -1883,6 +1891,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/aa/1c/d920d64b22f8dd028a8b90e2d756e431a5d86194caa78e3819c7bf53b4b3/zstandard-0.25.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/ab/b5/36c712098e6191d1b4e349304ef73a8d06aed77e56ceaac8c0a306c7bda1/jupyterlab_widgets-3.0.16-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ae/e5/6dc3400bc4bea5e6576c2468536bad65b956483f2c32ec9af9c98e7c068d/polars_bio-0.20.1-cp39-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/ae/fa/9788f3e8457d419d51a6fa35cb334ebff40e2f8ef5a15a62a776f685e646/genoray-5.0.0-cp310-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b2/02/cf107b01494c19dc100f1d0b7ac3cc08666e96ba2d64db7626066cee895e/scipy-1.17.1-cp312-cp312-macosx_12_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/b2/16/9298cca16e26d2fc3751a2b93469cc14a6f8bb9fb5f4087977926d936383/hirola-0.3.0-py3-none-macosx_10_6_universal2.whl @@ -2005,7 +2014,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/6b/a4/bd8ad7d1cf66268219f282d4268b6ba73f8ff51c5fba2c9663adab103615/sorted_nearest-0.0.41.tar.gz - pypi: https://files.pythonhosted.org/packages/6e/ae/76fb528c6112a3df5a581a18f1a2ceee5983d54977d7f2b6bc883637fe4c/polars_config_meta-0.3.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/cc/18245721fa7747065ab478316c7fea7c74777d07f37ae60db2e84f8172e8/beartype-0.22.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/73/48/8980acebec96c6615639e44471e00023f15274ce027e485805b0c8b49280/genoray-4.0.1-cp310-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/74/ff/9d30128a88df6c795097b6f73218d4a5afcd0e2d74cf2dedd99b28d42cdc/cyvcf2-0.31.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl @@ -2030,6 +2038,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b4/f6/1c671874560a70d902dd57028a75411c176910de2df3d6a6a533de424131/cyclopts-4.21.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ba/1e/acc4d70f88a0a277e4a1fa77ebb985ceabaf900430f875bf9338e11c9420/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c9/87/a51030071ed0e4a9a9a411420d671353a1a5ea834b3e53091e2de44d4e48/genoray-5.0.0-cp310-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/ca/d0/411c82285a7586e97326020f6b5ecbc2f2ffcbef72aa108c897de1b0a540/pandera-0.32.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cc/e4/d71e71edc972d534f51cff72fa30edb8b0e5df109b2e5ae67a3985faebb9/joblib_progress-1.0.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ce/7d/0b8e265c43978292425249ae1fd63d5f7b0a719c78eee70055751b5bb8cb/oxbow-0.5.2-cp39-abi3-manylinux_2_28_x86_64.whl @@ -2094,7 +2103,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/3a/13/547360d81e6d88d58492968ffda9f9542854f11310ee556fef14260cc886/zipp-4.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/92/73ab995881de743ddfebe51e6ed35aa6bd709ae7f09eea2cc8e9716bfa36/seqpro-0.22.0-cp39-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4b/fe/c6498d404af1089eec01d9a60810223910ea87d5c8015bc5b6986e8f612f/genoray-4.0.1-cp310-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/55/5e/f8f4f7cc9b24b35103eb9e19f0f69935d16b878b4c5e4511ecd2261403fb/vcfixture-0.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/56/c6/65f646c7ff09bd257f660434adb45c4dfcbbcebcc030562fecf6f5bf887d/pydantic_core-2.46.4-cp310-cp310-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/5b/29/74eeb4d3f3ae61ca096b018ad486b3b3c74b17bec09ab4edab721cbefec3/typeguard-4.5.2-py3-none-any.whl @@ -2129,6 +2137,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/a7/5f/ed01f9a3cdffbd5a008556fc7b2a08ddb1cc6ace7effa7340604b1d16699/docstring_parser-0.18.0-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/ad/81/8e983840c6e5b93b33c2ba81aa3d52c2e42f0e9a690ce7607a2e61da4a5c/charset_normalizer-3.4.9-cp310-cp310-macosx_10_9_universal2.whl + - pypi: https://files.pythonhosted.org/packages/ae/fa/9788f3e8457d419d51a6fa35cb334ebff40e2f8ef5a15a62a776f685e646/genoray-5.0.0-cp310-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/b2/16/9298cca16e26d2fc3751a2b93469cc14a6f8bb9fb5f4087977926d936383/hirola-0.3.0-py3-none-macosx_10_6_universal2.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl @@ -2424,7 +2433,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.15-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2025.6.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda - - pypi: . + - pypi: ./ - pypi: https://files.pythonhosted.org/packages/00/ba/8d8aa1df96e0666752e5c9d406d440495df2014d315b2a95bbef9856b23e/datafusion-50.1.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/08/75/ec73e38812bca7c2240aff481b9ddff20d1ad2f10dee4b3353f5eeaacdab/polars-1.37.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0a/59/69032bf511d51bbc2d45311110386042a7b6a62e6149f919e94a1b55979e/pybigwig-0.3.25-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl @@ -2451,7 +2460,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/6b/a4/bd8ad7d1cf66268219f282d4268b6ba73f8ff51c5fba2c9663adab103615/sorted_nearest-0.0.41.tar.gz - pypi: https://files.pythonhosted.org/packages/6e/ae/76fb528c6112a3df5a581a18f1a2ceee5983d54977d7f2b6bc883637fe4c/polars_config_meta-0.3.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/cc/18245721fa7747065ab478316c7fea7c74777d07f37ae60db2e84f8172e8/beartype-0.22.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/73/48/8980acebec96c6615639e44471e00023f15274ce027e485805b0c8b49280/genoray-4.0.1-cp310-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/74/ff/9d30128a88df6c795097b6f73218d4a5afcd0e2d74cf2dedd99b28d42cdc/cyvcf2-0.31.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl @@ -2470,6 +2478,7 @@ environments: - 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/b4/f6/1c671874560a70d902dd57028a75411c176910de2df3d6a6a533de424131/cyclopts-4.21.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ba/1e/acc4d70f88a0a277e4a1fa77ebb985ceabaf900430f875bf9338e11c9420/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c9/87/a51030071ed0e4a9a9a411420d671353a1a5ea834b3e53091e2de44d4e48/genoray-5.0.0-cp310-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/ca/d0/411c82285a7586e97326020f6b5ecbc2f2ffcbef72aa108c897de1b0a540/pandera-0.32.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cc/e4/d71e71edc972d534f51cff72fa30edb8b0e5df109b2e5ae67a3985faebb9/joblib_progress-1.0.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ce/7d/0b8e265c43978292425249ae1fd63d5f7b0a719c78eee70055751b5bb8cb/oxbow-0.5.2-cp39-abi3-manylinux_2_28_x86_64.whl @@ -2660,7 +2669,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h4818236_10.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-ng-2.3.3-hed4e4f5_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - - pypi: . + - pypi: ./ - pypi: https://files.pythonhosted.org/packages/08/75/ec73e38812bca7c2240aff481b9ddff20d1ad2f10dee4b3353f5eeaacdab/polars-1.37.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0c/2c/d4d96c78e72031f3171fb3a584b557d79d191e9bb4e93747f793c18f8623/fast_histogram-0.14-cp39-abi3-macosx_11_0_arm64.whl @@ -2673,7 +2682,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/68/1fc93dd759605b5d00fc98b50200739e41ed32bd22d6ba35ca6c3932371b/rich_rst-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/92/73ab995881de743ddfebe51e6ed35aa6bd709ae7f09eea2cc8e9716bfa36/seqpro-0.22.0-cp39-abi3-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/4b/fe/c6498d404af1089eec01d9a60810223910ea87d5c8015bc5b6986e8f612f/genoray-4.0.1-cp310-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/55/5e/f8f4f7cc9b24b35103eb9e19f0f69935d16b878b4c5e4511ecd2261403fb/vcfixture-0.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/56/c6/65f646c7ff09bd257f660434adb45c4dfcbbcebcc030562fecf6f5bf887d/pydantic_core-2.46.4-cp310-cp310-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/5b/29/74eeb4d3f3ae61ca096b018ad486b3b3c74b17bec09ab4edab721cbefec3/typeguard-4.5.2-py3-none-any.whl @@ -2700,6 +2708,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/a7/06/3d6badcf13db419e25b07041d9c7b4a2c331d3f4e7134445ec5df57714cd/coloredlogs-15.0.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a7/5f/ed01f9a3cdffbd5a008556fc7b2a08ddb1cc6ace7effa7340604b1d16699/docstring_parser-0.18.0-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/ae/fa/9788f3e8457d419d51a6fa35cb334ebff40e2f8ef5a15a62a776f685e646/genoray-5.0.0-cp310-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/b2/16/9298cca16e26d2fc3751a2b93469cc14a6f8bb9fb5f4087977926d936383/hirola-0.3.0-py3-none-macosx_10_6_universal2.whl - pypi: https://files.pythonhosted.org/packages/b4/f6/1c671874560a70d902dd57028a75411c176910de2df3d6a6a533de424131/cyclopts-4.21.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c1/39/2c9aea082383c8d41d0d8b8f9907dc6273f8cee47a8c83d0c8bad02488b4/pysam-0.24.0-cp310-cp310-macosx_11_0_arm64.whl @@ -2880,7 +2889,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-2.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda - - pypi: . + - pypi: ./ - pypi: https://files.pythonhosted.org/packages/00/ba/8d8aa1df96e0666752e5c9d406d440495df2014d315b2a95bbef9856b23e/datafusion-50.1.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/08/75/ec73e38812bca7c2240aff481b9ddff20d1ad2f10dee4b3353f5eeaacdab/polars-1.37.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0a/59/69032bf511d51bbc2d45311110386042a7b6a62e6149f919e94a1b55979e/pybigwig-0.3.25-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl @@ -2907,7 +2916,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/6b/a4/bd8ad7d1cf66268219f282d4268b6ba73f8ff51c5fba2c9663adab103615/sorted_nearest-0.0.41.tar.gz - pypi: https://files.pythonhosted.org/packages/6e/ae/76fb528c6112a3df5a581a18f1a2ceee5983d54977d7f2b6bc883637fe4c/polars_config_meta-0.3.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/cc/18245721fa7747065ab478316c7fea7c74777d07f37ae60db2e84f8172e8/beartype-0.22.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/73/48/8980acebec96c6615639e44471e00023f15274ce027e485805b0c8b49280/genoray-4.0.1-cp310-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/74/ff/9d30128a88df6c795097b6f73218d4a5afcd0e2d74cf2dedd99b28d42cdc/cyvcf2-0.31.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl @@ -2928,6 +2936,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b4/f6/1c671874560a70d902dd57028a75411c176910de2df3d6a6a533de424131/cyclopts-4.21.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ba/1e/acc4d70f88a0a277e4a1fa77ebb985ceabaf900430f875bf9338e11c9420/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c9/87/a51030071ed0e4a9a9a411420d671353a1a5ea834b3e53091e2de44d4e48/genoray-5.0.0-cp310-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/ca/d0/411c82285a7586e97326020f6b5ecbc2f2ffcbef72aa108c897de1b0a540/pandera-0.32.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cc/e4/d71e71edc972d534f51cff72fa30edb8b0e5df109b2e5ae67a3985faebb9/joblib_progress-1.0.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ce/7d/0b8e265c43978292425249ae1fd63d5f7b0a719c78eee70055751b5bb8cb/oxbow-0.5.2-cp39-abi3-manylinux_2_28_x86_64.whl @@ -3052,7 +3061,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-2.1.2-py310h72544b6_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - - pypi: . + - pypi: ./ - pypi: https://files.pythonhosted.org/packages/08/75/ec73e38812bca7c2240aff481b9ddff20d1ad2f10dee4b3353f5eeaacdab/polars-1.37.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/13/4f/66d99628ff8ce7857aca52fed8f0066ce209f96be2fede6cef9f84e8d04f/pandas-2.3.3-cp310-cp310-macosx_11_0_arm64.whl @@ -3066,7 +3075,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/2a/68/1fc93dd759605b5d00fc98b50200739e41ed32bd22d6ba35ca6c3932371b/rich_rst-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/92/73ab995881de743ddfebe51e6ed35aa6bd709ae7f09eea2cc8e9716bfa36/seqpro-0.22.0-cp39-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4b/fe/c6498d404af1089eec01d9a60810223910ea87d5c8015bc5b6986e8f612f/genoray-4.0.1-cp310-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/55/5e/f8f4f7cc9b24b35103eb9e19f0f69935d16b878b4c5e4511ecd2261403fb/vcfixture-0.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/56/c6/65f646c7ff09bd257f660434adb45c4dfcbbcebcc030562fecf6f5bf887d/pydantic_core-2.46.4-cp310-cp310-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/5b/29/74eeb4d3f3ae61ca096b018ad486b3b3c74b17bec09ab4edab721cbefec3/typeguard-4.5.2-py3-none-any.whl @@ -3096,6 +3104,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/a7/06/3d6badcf13db419e25b07041d9c7b4a2c331d3f4e7134445ec5df57714cd/coloredlogs-15.0.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a7/5f/ed01f9a3cdffbd5a008556fc7b2a08ddb1cc6ace7effa7340604b1d16699/docstring_parser-0.18.0-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/ae/fa/9788f3e8457d419d51a6fa35cb334ebff40e2f8ef5a15a62a776f685e646/genoray-5.0.0-cp310-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/b2/16/9298cca16e26d2fc3751a2b93469cc14a6f8bb9fb5f4087977926d936383/hirola-0.3.0-py3-none-macosx_10_6_universal2.whl - pypi: https://files.pythonhosted.org/packages/b4/f6/1c671874560a70d902dd57028a75411c176910de2df3d6a6a533de424131/cyclopts-4.21.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl @@ -3278,7 +3287,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-2.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda - - pypi: . + - pypi: ./ - pypi: https://files.pythonhosted.org/packages/00/ba/8d8aa1df96e0666752e5c9d406d440495df2014d315b2a95bbef9856b23e/datafusion-50.1.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/09/7d/af933f0f6e0767995b4e2d705a0665e454d1c19402aa7e895de3951ebb04/scipy-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl @@ -3311,7 +3320,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/6c/3c/75dce39944a6ef37edbaf804910c54a83073e245ac83f554ccae04a2a96f/awkward_cpp-52-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/6e/ae/76fb528c6112a3df5a581a18f1a2ceee5983d54977d7f2b6bc883637fe4c/polars_config_meta-0.3.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/cc/18245721fa7747065ab478316c7fea7c74777d07f37ae60db2e84f8172e8/beartype-0.22.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/73/48/8980acebec96c6615639e44471e00023f15274ce027e485805b0c8b49280/genoray-4.0.1-cp310-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/74/dc/035d54638fc5d2971cbf1e987ccd45f1091c83bcf747281cf6cc25e72c88/pyarrow-21.0.0-cp311-cp311-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/77/39/4d8414260c3d83f22029a39e51553c173611b378d62ca391e5ca68e65cfa/awkward-2.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl @@ -3333,6 +3341,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/c1/66/4f1f8decc506e7a561245982832e4ab87d95e6b08b1b9ec657f2c91ad5e1/polars_bio-0.20.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c6/84/2a0980d2c9f554fdc4a2c27f012de42a21737ac6c67cfacabf3c2a043f71/pgenlib-0.94.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c7/e1/68c2256b69a314eba133673377ba9118c356f6342a0c02b61de449cf2bf2/narwhals-2.21.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c9/87/a51030071ed0e4a9a9a411420d671353a1a5ea834b3e53091e2de44d4e48/genoray-5.0.0-cp310-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/cb/98/6af411189d9413534c3eb691182bff1f5c6d44ed2f93f2edfe52a1bbceb8/more_itertools-11.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cc/e4/d71e71edc972d534f51cff72fa30edb8b0e5df109b2e5ae67a3985faebb9/joblib_progress-1.0.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ce/7d/0b8e265c43978292425249ae1fd63d5f7b0a719c78eee70055751b5bb8cb/oxbow-0.5.2-cp39-abi3-manylinux_2_28_x86_64.whl @@ -3448,7 +3457,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-2.1.2-py311hc949640_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - - pypi: . + - pypi: ./ - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0a/8f/16812ee742bbdda2746a15f5cc788cbaf4d329c35b2ca1f6cdf45685866c/ncls-0.0.70-cp311-cp311-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl @@ -3465,7 +3474,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/34/0b/b9d1911cfefa61399821dfb37f486d83e0f42630a8d12f7194270c417002/llvmlite-0.47.0-cp311-cp311-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/3b/92/73ab995881de743ddfebe51e6ed35aa6bd709ae7f09eea2cc8e9716bfa36/seqpro-0.22.0-cp39-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4b/fe/c6498d404af1089eec01d9a60810223910ea87d5c8015bc5b6986e8f612f/genoray-4.0.1-cp310-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/4e/ca/03624e017e5ee2d7ce8a08d89f81c1e535eb3c30d7b2dc4a435ea3fbbeae/mkdocs_glightbox-0.5.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/55/5e/f8f4f7cc9b24b35103eb9e19f0f69935d16b878b4c5e4511ecd2261403fb/vcfixture-0.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/b0/a4ffc4ae74d2d822200dcc46898987d8eb6032d1e2b219cae39da6f5cbcc/pandas-3.0.3-cp311-cp311-macosx_11_0_arm64.whl @@ -3498,6 +3506,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ac/4d/e66465c5411a7cf4866aeadc7d108081d8ceba9bc7abe6b14aa21c671ec3/zstandard-0.25.0-cp311-cp311-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/ae/6f/aa064a3e74b5745afbdf250594f38e7ead05e2d651bcb35994b9417a0d4d/pydantic_core-2.46.4-cp311-cp311-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/ae/e5/6dc3400bc4bea5e6576c2468536bad65b956483f2c32ec9af9c98e7c068d/polars_bio-0.20.1-cp39-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/ae/fa/9788f3e8457d419d51a6fa35cb334ebff40e2f8ef5a15a62a776f685e646/genoray-5.0.0-cp310-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/b2/16/9298cca16e26d2fc3751a2b93469cc14a6f8bb9fb5f4087977926d936383/hirola-0.3.0-py3-none-macosx_10_6_universal2.whl - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/3e/48599a38009ca60ff82a6f38c8a621ce3c0286aa7397c7d79e741bd9060e/polars_runtime_32-1.40.1-cp310-abi3-macosx_11_0_arm64.whl @@ -3678,7 +3687,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-2.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda - - pypi: . + - pypi: ./ - pypi: https://files.pythonhosted.org/packages/00/ba/8d8aa1df96e0666752e5c9d406d440495df2014d315b2a95bbef9856b23e/datafusion-50.1.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl @@ -3709,7 +3718,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/6c/3c/3f62dee257eb3d6b2c1ef2a09d36d9793c7111156a73b5654d2c2305e5ce/idna-3.14-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6e/ae/76fb528c6112a3df5a581a18f1a2ceee5983d54977d7f2b6bc883637fe4c/polars_config_meta-0.3.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/cc/18245721fa7747065ab478316c7fea7c74777d07f37ae60db2e84f8172e8/beartype-0.22.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/73/48/8980acebec96c6615639e44471e00023f15274ce027e485805b0c8b49280/genoray-4.0.1-cp310-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/77/39/4d8414260c3d83f22029a39e51553c173611b378d62ca391e5ca68e65cfa/awkward-2.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl @@ -3730,6 +3738,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c1/66/4f1f8decc506e7a561245982832e4ab87d95e6b08b1b9ec657f2c91ad5e1/polars_bio-0.20.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c7/e1/68c2256b69a314eba133673377ba9118c356f6342a0c02b61de449cf2bf2/narwhals-2.21.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c9/87/a51030071ed0e4a9a9a411420d671353a1a5ea834b3e53091e2de44d4e48/genoray-5.0.0-cp310-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/cb/98/6af411189d9413534c3eb691182bff1f5c6d44ed2f93f2edfe52a1bbceb8/more_itertools-11.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cc/b4/111ae6d102845c2fdbf75b8c9dc5ad38c0cdc4a59c4384511054b3864266/pgenlib-0.94.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/cc/e4/d71e71edc972d534f51cff72fa30edb8b0e5df109b2e5ae67a3985faebb9/joblib_progress-1.0.6-py3-none-any.whl @@ -3848,7 +3857,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-2.1.2-py312h2bbb03f_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - - pypi: . + - pypi: ./ - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/13/2f/b4530fbf948867702d0a3f27de4a6aab1d156f406d72852ab902c4d04de9/rich_rst-1.3.2-py3-none-any.whl @@ -3865,7 +3874,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/2f/97/9214bd9b860e680a281232e218d10b718a7280b593f4ab56240a558dc975/pgenlib-0.94.0-cp312-cp312-macosx_10_13_universal2.whl - pypi: https://files.pythonhosted.org/packages/3b/92/73ab995881de743ddfebe51e6ed35aa6bd709ae7f09eea2cc8e9716bfa36/seqpro-0.22.0-cp39-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4b/fe/c6498d404af1089eec01d9a60810223910ea87d5c8015bc5b6986e8f612f/genoray-4.0.1-cp310-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/4e/ca/03624e017e5ee2d7ce8a08d89f81c1e535eb3c30d7b2dc4a435ea3fbbeae/mkdocs_glightbox-0.5.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/55/5e/f8f4f7cc9b24b35103eb9e19f0f69935d16b878b4c5e4511ecd2261403fb/vcfixture-0.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/57/bc/76f8f8c5cf9adee47fdb7bbb03be8900f76f902d451d7477cf12b845e1de/numba-0.65.1-cp312-cp312-macosx_12_0_arm64.whl @@ -3896,6 +3904,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/aa/1c/d920d64b22f8dd028a8b90e2d756e431a5d86194caa78e3819c7bf53b4b3/zstandard-0.25.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/ae/e5/6dc3400bc4bea5e6576c2468536bad65b956483f2c32ec9af9c98e7c068d/polars_bio-0.20.1-cp39-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/ae/fa/9788f3e8457d419d51a6fa35cb334ebff40e2f8ef5a15a62a776f685e646/genoray-5.0.0-cp310-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/b2/16/9298cca16e26d2fc3751a2b93469cc14a6f8bb9fb5f4087977926d936383/hirola-0.3.0-py3-none-macosx_10_6_universal2.whl - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c5/f3/a983d28637bfcd763a9c7aafdb6d5c0ebf3d487d1e1459ffdb57e2f01117/numpy-2.4.4-cp312-cp312-macosx_11_0_arm64.whl @@ -4078,7 +4087,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-2.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda - - pypi: . + - pypi: ./ - pypi: https://files.pythonhosted.org/packages/00/ba/8d8aa1df96e0666752e5c9d406d440495df2014d315b2a95bbef9856b23e/datafusion-50.1.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/07/f8/41db9de19d7987d6b04715a02b3b40aea467000275d9d758ffaa31af7d50/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl @@ -4109,7 +4118,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/6c/3c/3f62dee257eb3d6b2c1ef2a09d36d9793c7111156a73b5654d2c2305e5ce/idna-3.14-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6e/ae/76fb528c6112a3df5a581a18f1a2ceee5983d54977d7f2b6bc883637fe4c/polars_config_meta-0.3.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/cc/18245721fa7747065ab478316c7fea7c74777d07f37ae60db2e84f8172e8/beartype-0.22.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/73/48/8980acebec96c6615639e44471e00023f15274ce027e485805b0c8b49280/genoray-4.0.1-cp310-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/77/39/4d8414260c3d83f22029a39e51553c173611b378d62ca391e5ca68e65cfa/awkward-2.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl @@ -4131,6 +4139,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/c1/66/4f1f8decc506e7a561245982832e4ab87d95e6b08b1b9ec657f2c91ad5e1/polars_bio-0.20.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c4/ea/066ce356c5df3c2d42b72801f768d41bf691f58f6d2a90f6334fbed39785/pysam-0.24.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c7/e1/68c2256b69a314eba133673377ba9118c356f6342a0c02b61de449cf2bf2/narwhals-2.21.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c9/87/a51030071ed0e4a9a9a411420d671353a1a5ea834b3e53091e2de44d4e48/genoray-5.0.0-cp310-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/cb/98/6af411189d9413534c3eb691182bff1f5c6d44ed2f93f2edfe52a1bbceb8/more_itertools-11.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cc/e4/d71e71edc972d534f51cff72fa30edb8b0e5df109b2e5ae67a3985faebb9/joblib_progress-1.0.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ce/7d/0b8e265c43978292425249ae1fd63d5f7b0a719c78eee70055751b5bb8cb/oxbow-0.5.2-cp39-abi3-manylinux_2_28_x86_64.whl @@ -4249,7 +4258,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-2.1.2-py313h0997733_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - - pypi: . + - pypi: ./ - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/73/0291a64843270f4efb86cdcf2ee0f2048631b65ec6b405398b2b4dbf11bf/scipy-1.18.0-cp313-cp313-macosx_12_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl @@ -4267,7 +4276,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/3e/fe/1624eb5024e897bf4074bfc31f9e5e823160aed1ac14e7720e849a3d1109/selectolax-0.4.8-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/3f/06/9ae96a3e5dcfd119377ba33d4c42a7d89da1efabd5cb3e366b156c45ff4d/zstandard-0.25.0-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4b/fe/c6498d404af1089eec01d9a60810223910ea87d5c8015bc5b6986e8f612f/genoray-4.0.1-cp310-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/4e/ca/03624e017e5ee2d7ce8a08d89f81c1e535eb3c30d7b2dc4a435ea3fbbeae/mkdocs_glightbox-0.5.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/55/5e/f8f4f7cc9b24b35103eb9e19f0f69935d16b878b4c5e4511ecd2261403fb/vcfixture-0.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/bc/246f452431c592a2a424050e8bb9ccf494fb47613fd97c912f4d573a5e3b/phantom_types-3.0.2-py3-none-any.whl @@ -4298,6 +4306,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/a7/5f/ed01f9a3cdffbd5a008556fc7b2a08ddb1cc6ace7effa7340604b1d16699/docstring_parser-0.18.0-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/ae/e5/6dc3400bc4bea5e6576c2468536bad65b956483f2c32ec9af9c98e7c068d/polars_bio-0.20.1-cp39-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/ae/fa/9788f3e8457d419d51a6fa35cb334ebff40e2f8ef5a15a62a776f685e646/genoray-5.0.0-cp310-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/b2/16/9298cca16e26d2fc3751a2b93469cc14a6f8bb9fb5f4087977926d936383/hirola-0.3.0-py3-none-macosx_10_6_universal2.whl - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c1/62/2b7a48fbb745d344742c0277f01286dead15f3f68e4f359fbfcf7b48f70f/numpy-2.4.4-cp313-cp313-macosx_11_0_arm64.whl @@ -4588,7 +4597,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.15-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2025.6.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda - - pypi: . + - pypi: ./ - pypi: https://files.pythonhosted.org/packages/00/ba/8d8aa1df96e0666752e5c9d406d440495df2014d315b2a95bbef9856b23e/datafusion-50.1.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/02/ad/0b9cc9f38a7324a7eb1d80f834eaa5283d17e9271bbda3186e598dddaeac/yarl-1.24.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/08/75/ec73e38812bca7c2240aff481b9ddff20d1ad2f10dee4b3353f5eeaacdab/polars-1.37.1-py3-none-any.whl @@ -4636,7 +4645,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/71/43/1947f06babed6b3f1d7f38b0c767f52df66bfb2bc10b468c4a7de9eceff2/aiohappyeyeballs-2.7.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/cc/18245721fa7747065ab478316c7fea7c74777d07f37ae60db2e84f8172e8/beartype-0.22.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/72/25/973bd6128381951b23cdcd8a9870c6dcfc5606cb864df8eabd82e529f9c1/torchinfo-1.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/73/48/8980acebec96c6615639e44471e00023f15274ce027e485805b0c8b49280/genoray-4.0.1-cp310-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/74/ff/9d30128a88df6c795097b6f73218d4a5afcd0e2d74cf2dedd99b28d42cdc/cyvcf2-0.31.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl @@ -4664,6 +4672,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/c2/f3/d86c845465a2723ad7e1e5c36dcd75ddb82898b3f53be47ebd429fb2fa5d/nvidia_nvtx-13.0.85-py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c3/68/483a78f5e8f31b08fb1bb671559968c0ca3a065ac7acabfc7cee55214fd6/nvidia_cuda_nvrtc-13.0.88-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c3/a2/c7f6ebf546f8f644edf0f999aa98ece106986a77a7b922316bf6414ff825/torchmetrics-1.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c9/87/a51030071ed0e4a9a9a411420d671353a1a5ea834b3e53091e2de44d4e48/genoray-5.0.0-cp310-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/ca/d0/411c82285a7586e97326020f6b5ecbc2f2ffcbef72aa108c897de1b0a540/pandera-0.32.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cc/e4/d71e71edc972d534f51cff72fa30edb8b0e5df109b2e5ae67a3985faebb9/joblib_progress-1.0.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ce/7d/0b8e265c43978292425249ae1fd63d5f7b0a719c78eee70055751b5bb8cb/oxbow-0.5.2-cp39-abi3-manylinux_2_28_x86_64.whl @@ -4860,7 +4869,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h4818236_10.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-ng-2.3.3-hed4e4f5_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - - pypi: . + - pypi: ./ - pypi: https://files.pythonhosted.org/packages/08/75/ec73e38812bca7c2240aff481b9ddff20d1ad2f10dee4b3353f5eeaacdab/polars-1.37.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0c/2c/d4d96c78e72031f3171fb3a584b557d79d191e9bb4e93747f793c18f8623/fast_histogram-0.14-cp39-abi3-macosx_11_0_arm64.whl @@ -4873,7 +4882,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/68/1fc93dd759605b5d00fc98b50200739e41ed32bd22d6ba35ca6c3932371b/rich_rst-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/92/73ab995881de743ddfebe51e6ed35aa6bd709ae7f09eea2cc8e9716bfa36/seqpro-0.22.0-cp39-abi3-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/4b/fe/c6498d404af1089eec01d9a60810223910ea87d5c8015bc5b6986e8f612f/genoray-4.0.1-cp310-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/55/5e/f8f4f7cc9b24b35103eb9e19f0f69935d16b878b4c5e4511ecd2261403fb/vcfixture-0.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/56/c6/65f646c7ff09bd257f660434adb45c4dfcbbcebcc030562fecf6f5bf887d/pydantic_core-2.46.4-cp310-cp310-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/5b/29/74eeb4d3f3ae61ca096b018ad486b3b3c74b17bec09ab4edab721cbefec3/typeguard-4.5.2-py3-none-any.whl @@ -4900,6 +4908,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/a7/06/3d6badcf13db419e25b07041d9c7b4a2c331d3f4e7134445ec5df57714cd/coloredlogs-15.0.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a7/5f/ed01f9a3cdffbd5a008556fc7b2a08ddb1cc6ace7effa7340604b1d16699/docstring_parser-0.18.0-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/ae/fa/9788f3e8457d419d51a6fa35cb334ebff40e2f8ef5a15a62a776f685e646/genoray-5.0.0-cp310-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/b2/16/9298cca16e26d2fc3751a2b93469cc14a6f8bb9fb5f4087977926d936383/hirola-0.3.0-py3-none-macosx_10_6_universal2.whl - pypi: https://files.pythonhosted.org/packages/b4/f6/1c671874560a70d902dd57028a75411c176910de2df3d6a6a533de424131/cyclopts-4.21.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c1/39/2c9aea082383c8d41d0d8b8f9907dc6273f8cee47a8c83d0c8bad02488b4/pysam-0.24.0-cp310-cp310-macosx_11_0_arm64.whl @@ -9863,7 +9872,7 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/zipp?source=compressed-mapping + - pkg:pypi/zipp?source=hash-mapping size: 24190 timestamp: 1779159948016 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda @@ -11603,11 +11612,11 @@ packages: purls: [] size: 433413 timestamp: 1764777166076 -- pypi: . +- pypi: ./ name: genvarloader requires_dist: - seqpro>=0.22 - - genoray>=3.4.0,<5 + - genoray>=5,<6 - numpy - loguru - natsort @@ -13320,41 +13329,6 @@ packages: requires_dist: - typing-extensions>=4.1.0 ; python_full_version < '3.11' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/4b/fe/c6498d404af1089eec01d9a60810223910ea87d5c8015bc5b6986e8f612f/genoray-4.0.1-cp310-abi3-macosx_11_0_arm64.whl - name: genoray - version: 4.0.1 - sha256: 86f4bada63399c334dcb5e3d496e77b85c58007319a05da2a337d0e76bafbc29 - requires_dist: - - seqpro>=0.21.1,<0.23 - - numpy>=1.26 - - pandas>=2.2.3 - - hirola>=0.3.0 - - pgenlib>=0.91.0 - - cyvcf2>=0.31.1 - - pysam>=0.22 - - polars>=1.37.1 - - polars-bio>=0.20.1,<0.34 - - pyranges>=0.1.3 - - rich>=13 - - typing-extensions>=4.14 - - pyarrow>=21 - - tqdm>=4.65 - - phantom-types>=3 - - more-itertools>=10 - - loguru>=0.7.0 - - attrs - - awkward - - numba - - cyclopts - - zstandard - - pydantic - - oxbow>=0.5.1,<0.6 - - joblib>=1.4.2,<2 - - joblib-progress>=1.0.6,<2 - - filelock>3,<4 - - scipy>=1.10 - - pooch>=1.7 - requires_python: '>=3.10,<3.15' - pypi: https://files.pythonhosted.org/packages/4d/a1/bca7fd3d452b272e13335db8d6b0b3ecde0f90ad6f16f3328c6fb150c889/rpds_py-0.30.0-cp312-cp312-macosx_11_0_arm64.whl name: rpds-py version: 0.30.0 @@ -14267,41 +14241,6 @@ packages: version: 10.3.7.77 sha256: a42cd1344297f70b9e39a1e4f467a4e1c10f1da54ff7a85c12197f6c652c8bdf requires_python: '>=3' -- pypi: https://files.pythonhosted.org/packages/73/48/8980acebec96c6615639e44471e00023f15274ce027e485805b0c8b49280/genoray-4.0.1-cp310-abi3-manylinux_2_28_x86_64.whl - name: genoray - version: 4.0.1 - sha256: 8f5e25527b0f5489c2dc38e563209c2a4f0819aeb9fa171f5584c1a0e078473d - requires_dist: - - seqpro>=0.21.1,<0.23 - - numpy>=1.26 - - pandas>=2.2.3 - - hirola>=0.3.0 - - pgenlib>=0.91.0 - - cyvcf2>=0.31.1 - - pysam>=0.22 - - polars>=1.37.1 - - polars-bio>=0.20.1,<0.34 - - pyranges>=0.1.3 - - rich>=13 - - typing-extensions>=4.14 - - pyarrow>=21 - - tqdm>=4.65 - - phantom-types>=3 - - more-itertools>=10 - - loguru>=0.7.0 - - attrs - - awkward - - numba - - cyclopts - - zstandard - - pydantic - - oxbow>=0.5.1,<0.6 - - joblib>=1.4.2,<2 - - joblib-progress>=1.0.6,<2 - - filelock>3,<4 - - scipy>=1.10 - - pooch>=1.7 - requires_python: '>=3.10,<3.15' - pypi: https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl name: sphinx version: 9.1.0 @@ -15658,6 +15597,40 @@ packages: - bioframe ; extra == 'viz' - matplotlib ; extra == 'viz' requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/ae/fa/9788f3e8457d419d51a6fa35cb334ebff40e2f8ef5a15a62a776f685e646/genoray-5.0.0-cp310-abi3-macosx_11_0_arm64.whl + name: genoray + version: 5.0.0 + sha256: f5b5f3c4f296ed7e4013db8546c2528f32a520d5f09e36a0c4b3463ce1641258 + requires_dist: + - seqpro>=0.21.1,<0.23 + - numpy>=1.26 + - pandas>=2.2.3 + - hirola>=0.3.0 + - pgenlib>=0.91.0 + - cyvcf2>=0.31.1 + - pysam>=0.22 + - polars>=1.37.1 + - polars-bio>=0.20.1,<0.34 + - rich>=13 + - typing-extensions>=4.14 + - pyarrow>=21 + - tqdm>=4.65 + - phantom-types>=3 + - more-itertools>=10 + - loguru>=0.7.0 + - attrs + - awkward + - numba + - cyclopts + - zstandard + - pydantic + - oxbow>=0.5.1,<0.6 + - joblib>=1.4.2,<2 + - joblib-progress>=1.0.6,<2 + - filelock>3,<4 + - scipy>=1.10 + - pooch>=1.7 + requires_python: '>=3.10,<3.15' - pypi: https://files.pythonhosted.org/packages/af/eb/ff4b8c503fa1f1796679dce648854d58751982426e4e4b37d6fce49d259c/nvidia_cublas_cu12-12.6.4.1-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl name: nvidia-cublas-cu12 version: 12.6.4.1 @@ -16262,6 +16235,40 @@ packages: version: 3.0.1 sha256: 6cd7b3897da8d6c9ffb968a6781fa6532dce9c3618a4b127d920dab764a19064 requires_python: '!=3.0.*,!=3.1.*,!=3.2.*' +- pypi: https://files.pythonhosted.org/packages/c9/87/a51030071ed0e4a9a9a411420d671353a1a5ea834b3e53091e2de44d4e48/genoray-5.0.0-cp310-abi3-manylinux_2_28_x86_64.whl + name: genoray + version: 5.0.0 + sha256: 1acf4a99c9afb196cfe8c9c53ad3e82668d092c6c72626c5ff6777f080afa07e + requires_dist: + - seqpro>=0.21.1,<0.23 + - numpy>=1.26 + - pandas>=2.2.3 + - hirola>=0.3.0 + - pgenlib>=0.91.0 + - cyvcf2>=0.31.1 + - pysam>=0.22 + - polars>=1.37.1 + - polars-bio>=0.20.1,<0.34 + - rich>=13 + - typing-extensions>=4.14 + - pyarrow>=21 + - tqdm>=4.65 + - phantom-types>=3 + - more-itertools>=10 + - loguru>=0.7.0 + - attrs + - awkward + - numba + - cyclopts + - zstandard + - pydantic + - oxbow>=0.5.1,<0.6 + - joblib>=1.4.2,<2 + - joblib-progress>=1.0.6,<2 + - filelock>3,<4 + - scipy>=1.10 + - pooch>=1.7 + requires_python: '>=3.10,<3.15' - pypi: https://files.pythonhosted.org/packages/ca/d0/411c82285a7586e97326020f6b5ecbc2f2ffcbef72aa108c897de1b0a540/pandera-0.32.1-py3-none-any.whl name: pandera version: 0.32.1 diff --git a/pixi.toml b/pixi.toml index f24cabdb..17715a7f 100644 --- a/pixi.toml +++ b/pixi.toml @@ -102,13 +102,13 @@ numba = "==0.59.1" pyarrow = ">=21" hirola = "==0.3" seqpro = "==0.22.0" -# genoray >=4.1.0 as the prebuilt abi3 wheel from PyPI — one cp310-abi3 wheel covers -# py310-313 on both platforms. 4.1.0 carries +# genoray >=5 as the prebuilt abi3 wheel from PyPI — one cp310-abi3 wheel covers +# py310-313 on both platforms. 5.0.0 carries # SparseVar2._find_ranges_chunked_sparse, the sparse chunked range API # _write_from_svar2 consumes (gvl#405), and the keyword-only, struct-grouped -# _core.run_conversion_pipeline the test fixtures call (d-laub/genoray#153). +# _core pipeline entry points the test fixtures call (d-laub/genoray#153, #200). # Mirrors the pyproject range. -genoray = ">=4.1.0,<5" +genoray = ">=5,<6" polars = "==1.37.1" loguru = "*" natsort = "*" diff --git a/pyproject.toml b/pyproject.toml index 09b2351e..0a88e632 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,12 +11,13 @@ license = { file = "LICENSE.txt" } requires-python = ">=3.10,<3.14" # >= 3.14 blocked by pyarrow/genoray dependencies = [ "seqpro>=0.22", - # >=3.4.0 carries SparseVar2._find_ranges_chunked, the memory-bounded chunked - # range API _write_from_svar2 consumes to avoid materializing a whole - # contig's ranges at once (gvl#333). 4.x is supported: its breaking changes - # (SparseVar2.from_vcf(tune=) removal, from_vcf_list(max_mem=) semantics) - # are on APIs GVL never calls. - "genoray>=4.1.0,<5", + # >=5 carries SparseVar2._find_ranges_chunked_sparse, the sparse chunked + # range API _write_from_svar2 consumes (gvl#405), and the keyword-only, + # struct-grouped _core pipeline entry points the test fixtures call + # (d-laub/genoray#153, #200). 5.0.0's breaking changes -- the GENORAY_* + # environment variables, SparseVar2.from_vcf(reader_workers=) and + # resolve_log_level -- are all on APIs GVL never calls. + "genoray>=5,<6", "numpy", "loguru", "natsort", diff --git a/tests/dataset/test_svar2_contig_naming.py b/tests/dataset/test_svar2_contig_naming.py index c6beedc9..b6d1ebd7 100644 --- a/tests/dataset/test_svar2_contig_naming.py +++ b/tests/dataset/test_svar2_contig_naming.py @@ -40,6 +40,7 @@ def ensembl_svar2_store(tmp_path_factory) -> Path: """A ``.svar2`` store whose only contig is spelled ``1``.""" from genoray import _core + from genoray._pipeline_args import FieldSpec, PlanSettings, RegionSpec d = tmp_path_factory.mktemp("svar2_contig_naming") ref = d / "ref.fa" @@ -54,15 +55,17 @@ def ensembl_svar2_store(tmp_path_factory) -> Path: out = d / "store.svar2" _core.run_conversion_pipeline( - str(bcf), - str(ref), - ["1"], - str(out), - ["S0", "S1"], - 25_000, - 2, - 1, - 8 * 1024 * 1024, + vcf_path=str(bcf), + reference_path=str(ref), + output_dir=str(out), + regions=RegionSpec(chroms=["1"], samples=["S0", "S1"]), + fields=FieldSpec(), + plan=PlanSettings( + chunk_size=25_000, + max_threads=1, + long_allele_capacity=8 * 1024 * 1024, + ), + ploidy=2, ) assert (out / "meta.json").exists(), "conversion did not finish" return out diff --git a/tests/dataset/test_svar2_dataset.py b/tests/dataset/test_svar2_dataset.py index b80cbe26..b073046e 100644 --- a/tests/dataset/test_svar2_dataset.py +++ b/tests/dataset/test_svar2_dataset.py @@ -112,18 +112,21 @@ def svar_fixture(_src, tmp_path_factory) -> Path: def svar2_fixture(_src, tmp_path_factory) -> Path: bcf, ref = _src from genoray import _core + from genoray._pipeline_args import FieldSpec, PlanSettings, RegionSpec out = tmp_path_factory.mktemp("svar2") / "store.svar2" _core.run_conversion_pipeline( - str(bcf), - str(ref), - ["chr1"], - str(out), - ["S0", "S1"], - 25_000, - 2, - 1, - 8 * 1024 * 1024, + vcf_path=str(bcf), + reference_path=str(ref), + output_dir=str(out), + regions=RegionSpec(chroms=["chr1"], samples=["S0", "S1"]), + fields=FieldSpec(), + plan=PlanSettings( + chunk_size=25_000, + max_threads=1, + long_allele_capacity=8 * 1024 * 1024, + ), + ploidy=2, ) assert (out / "meta.json").exists(), "svar2 conversion did not finish" return out @@ -788,18 +791,21 @@ def svar_fixture2(_src2, tmp_path_factory) -> Path: def svar2_fixture2(_src2, tmp_path_factory) -> Path: bcf, ref = _src2 from genoray import _core + from genoray._pipeline_args import FieldSpec, PlanSettings, RegionSpec out = tmp_path_factory.mktemp("svar2_mc") / "store.svar2" _core.run_conversion_pipeline( - str(bcf), - str(ref), - ["chr1", "chr2"], - str(out), - ["S0", "S1"], - 25_000, - 2, - 1, - 8 * 1024 * 1024, + vcf_path=str(bcf), + reference_path=str(ref), + output_dir=str(out), + regions=RegionSpec(chroms=["chr1", "chr2"], samples=["S0", "S1"]), + fields=FieldSpec(), + plan=PlanSettings( + chunk_size=25_000, + max_threads=1, + long_allele_capacity=8 * 1024 * 1024, + ), + ploidy=2, ) assert (out / "meta.json").exists(), "svar2 conversion did not finish" return out