diff --git a/.github/workflows/run-commit-hooks.yml b/.github/workflows/run-commit-hooks.yml new file mode 100644 index 0000000..7c945d8 --- /dev/null +++ b/.github/workflows/run-commit-hooks.yml @@ -0,0 +1,35 @@ +name: Check pre-commit hooks + +on: + push: + branches: [main] + pull_request: + workflow_dispatch: + +env: + FORCE_COLOR: "1" + +jobs: + tests-using-pixi: + timeout-minutes: 10 + runs-on: ubuntu-latest + steps: + - name: Check out the repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Install Pixi + uses: prefix-dev/setup-pixi@v0.8.8 + with: + pixi-version: "latest" + run-install: false + + - name: Install pre-commit + run: pixi global install pre-commit + + - name: install pre-commit hooks + run: pre-commit install + + - name: Run pre-commit hooks + run: pre-commit run --all --show-diff-on-failure diff --git a/.github/workflows/run_tests.yaml b/.github/workflows/run_tests.yaml deleted file mode 100644 index 3ed7f5c..0000000 --- a/.github/workflows/run_tests.yaml +++ /dev/null @@ -1,29 +0,0 @@ -name: bigwig-loader ci - -on: - push: - branches: - - main - tags: - - v*.*.* - pull_request: {} - -jobs: - # RUN MYPY STATIC TYPE ANALYSIS ON BIGWIG-LOADER SOURCE - typing: - name: mypy type analysis - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: Set up Python - uses: actions/setup-python@v4 - with: - python-version: "3.10" - - name: Install dependencies - run: | - sed -i '0,/^ *"cupy",/s///' pyproject.toml - python -m pip install --upgrade pip - python -m pip install -e .[dev] - - name: Run mypy - run: | - mypy --python-version=3.10 bigwig_loader diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 0000000..770a702 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,38 @@ +name: Tests-With-Pixi + +on: + push: + branches: [main] + pull_request: + workflow_dispatch: + +env: + FORCE_COLOR: "1" + +jobs: + tests-using-pixi: + timeout-minutes: 10 + runs-on: ubuntu-22.04-gpu-t4 + steps: + - name: Check out the repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: run nvidia-smi + run: nvidia-smi + + - name: Install Pixi + uses: prefix-dev/setup-pixi@v0.8.8 + with: + pixi-version: "latest" + run-install: false + + - name: Install pre-commit + run: pixi global install pre-commit + + - name: Install dev environment using pixi + run: pixi install --environment dev + + - name: Run tests + run: pixi run --environment dev test diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f8cfeaf..fe57a5f 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -29,8 +29,8 @@ repos: hooks: - id: mypy additional_dependencies: - - pydantic==2.1.1 - - pydantic-settings==2.0.3 + - pydantic==2.12.4 + - pydantic-settings==2.12.0 exclude: "^(build|docs|tests|benchmark|examples)" - repo: https://github.com/asottile/pyupgrade rev: v3.10.1 @@ -38,7 +38,7 @@ repos: - id: pyupgrade args: [--py37-plus, --keep-runtime-typing] - repo: https://github.com/PyCQA/bandit - rev: '1.7.5' + rev: '1.8.6' hooks: - id: bandit args: [ "-c", "pyproject.toml" ] diff --git a/README.md b/README.md index dc3b793..123b84e 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,33 @@ Fast batched dataloading of BigWig files containing epigentic track data and corresponding sequences powered by GPU for deep learning applications. +> ⚠️ **BREAKING CHANGE (v0.3.0+)**: The output matrix dimensionality has changed from `(n_tracks, batch_size, sequence_length)` to `(batch_size, sequence_length, n_tracks)`. This change was long overdue and eliminates the need for (potentially memory expensive) transpose operations downstream. If you're upgrading from an earlier version, please update your code accordingly (probaby you need to delete one transpose in your code). + +> ✨ **NEW FEATURE (v0.3.0+)**: Full `bfloat16` support! You can now specify `dtype="bfloat16"` to get output tensors in bfloat16 format, reducing memory usage by 50%. + + + + ## Quickstart +### Installation with Pixi +Using [pixi](https://pixi.sh/) to install bigwig-loader is highly recommended. +Please take a look at the pixi.toml file. If you just want to use bigwig-loader, just +copy that pixi.toml, add the other libraries you need and use the "prod" environment +(you don't need to clone this repo, pixi will download bigwig-loader from the +conda "dataloading" channel): + +* Install pixi, if not installed: + ```shell + curl -fsSL https://pixi.sh/install.sh | sh + ``` + +* change directory to wherever you put the pixi.toml, and: + ```shell + pixi run -e prod + ``` + + ### Installation with conda/mamba Bigwig-loader mainly depends on the rapidsai kvikio library and cupy, both of which are best installed using @@ -65,16 +90,17 @@ dataset = PytorchBigWigDataset( regions_of_interest=train_regions, collection=example_bigwigs_directory, reference_genome_path=reference_genome_file, - sequence_length=1000, - center_bin_to_predict=500, + sequence_length=1000,000, + center_bin_to_predict=500,000, window_size=1, - batch_size=32, - super_batch_size=1024, - batches_per_epoch=20, + batch_size=1, + super_batch_size=4, + batches_per_epoch=100, maximum_unknown_bases_fraction=0.1, sequence_encoder="onehot", n_threads=4, return_batch_objects=True, + dtype="bfloat16" ) # Don't use num_workers > 0 in DataLoader. The heavy @@ -88,7 +114,7 @@ class MyTerribleModel(torch.nn.Module): self.linear = torch.nn.Linear(4, 2) def forward(self, batch): - return self.linear(batch).transpose(1, 2) + return self.linear(batch) model = MyTerribleModel() @@ -98,10 +124,10 @@ def poisson_loss(pred, target): return (pred - target * torch.log(pred.clamp(min=1e-8))).mean() for batch in dataloader: - # batch.sequences.shape = n_batch (32), sequence_length (1000), onehot encoding (4) + # batch.sequences.shape = n_batch x sequence_length x onehot encoding (4) pred = model(batch.sequences) - # batch.values.shape = n_batch (32), n_tracks (2) center_bin_to_predict (500) - loss = poisson_loss(pred[:, :, 250:750], batch.values) + # batch.values.shape = n_batch x center_bin_to_predict x n_tracks + loss = poisson_loss(pred[:, 250000:750000, :], batch.values) print(loss) optimizer.zero_grad() loss.backward() @@ -166,19 +192,23 @@ anything is unclear, please open an issue. ### Environment +The pixi.toml includes a dev environment that has bigwig-loader installed +as an editable pypi dependency. + 1. `git clone git@github.com:pfizer-opensource/bigwig-loader` 2. `cd bigwig-loader` -3. create the conda environment" `conda env create -f environment.yml` -4. `pip install -e '.[dev]'` -5. run `pre-commit install` to install the pre-commit hooks +3. optional: `pixi install -e dev` +4. run `pre-commit install` to install the pre-commit hooks ### Run Tests Tests are in the tests directory. One of the most important tests is test_against_pybigwig which makes sure that if there is a mistake in pyBigWIg, it is also in bigwig-loader. +In order to run these tests you need gpu. + ```shell -pytest -vv . +pixi run -e dev test ``` When github runners with GPU's will become available we would also diff --git a/bigwig_loader/batch_processor.py b/bigwig_loader/batch_processor.py index 082916d..1d8efa1 100644 --- a/bigwig_loader/batch_processor.py +++ b/bigwig_loader/batch_processor.py @@ -2,6 +2,7 @@ # from typing import TYPE_CHECKING from typing import Callable +from typing import Literal from typing import Optional from typing import Sequence from typing import Union @@ -12,6 +13,7 @@ from bigwig_loader.bigwig import BigWig from bigwig_loader.decompressor import Decoder +from bigwig_loader.default_value import replace_out_tensor_if_needed from bigwig_loader.functional import load_decode_search from bigwig_loader.intervals_to_values import intervals_to_values from bigwig_loader.memory_bank import MemoryBank @@ -59,19 +61,29 @@ def decoder(self) -> Decoder: def memory_bank(self) -> MemoryBank: return MemoryBank(elastic=True) - def _get_out_tensor(self, batch_size: int, sequence_length: int) -> cp.ndarray: + def _get_out_tensor( + self, + batch_size: int, + sequence_length: int, + dtype: Literal["bfloat16", "float32"] = "float32", + ) -> cp.ndarray: """Resuses a reserved tensor if possible (when out shape is constant), otherwise creates a new one. args: batch_size: batch size sequence_length: length of genomic sequence + dtype: output dtype ('float32' or 'bfloat16') returns: - tensor of shape (number of bigwig files, batch_size, sequence_length) + tensor of shape (batch_size, sequence_length, number of bigwig files) """ - shape = (len(self._bigwigs), batch_size, sequence_length) - if self._out.shape != shape: - self._out = cp.zeros(shape, dtype=cp.float32) + self._out = replace_out_tensor_if_needed( + self._out, + batch_size=batch_size, + sequence_length=sequence_length, + number_of_tracks=len(self._bigwigs), + dtype=dtype, + ) return self._out def preprocess( @@ -105,6 +117,7 @@ def get_batch( window_size: int = 1, scaling_factors_cupy: Optional[cp.ndarray] = None, default_value: float = 0.0, + dtype: Literal["float32", "bfloat16"] = "float32", out: Optional[cp.ndarray] = None, ) -> cp.ndarray: ( @@ -139,9 +152,10 @@ def get_batch( query_ends=abs_end, window_size=window_size, default_value=default_value, + dtype=dtype, out=out, ) - batch = cp.transpose(out, (1, 0, 2)) + # batch = cp.transpose(out, (1, 0, 2)) if scaling_factors_cupy is not None: - batch *= scaling_factors_cupy - return batch + out *= scaling_factors_cupy + return out diff --git a/bigwig_loader/bigwig.py b/bigwig_loader/bigwig.py index cdbab14..f65ad75 100644 --- a/bigwig_loader/bigwig.py +++ b/bigwig_loader/bigwig.py @@ -424,7 +424,7 @@ def _guess_max_rows_per_chunk( data_offsets = self.rtree_leaf_nodes["data_offset"] data_sizes = self.rtree_leaf_nodes["data_size"] if len(data_offsets) > sample_size: - sample_indices = sample(range(len(data_offsets)), sample_size) + sample_indices = sample(range(len(data_offsets)), sample_size) # nosec data_offsets = data_offsets[sample_indices] data_sizes = data_sizes[sample_indices] diff --git a/bigwig_loader/collection.py b/bigwig_loader/collection.py index 6d6fcf0..f117412 100644 --- a/bigwig_loader/collection.py +++ b/bigwig_loader/collection.py @@ -97,7 +97,7 @@ def reset_gpu(self) -> None: need to be recreated on the new gpu. """ - self._out = cp.zeros((len(self), 1, 1), dtype=cp.float32) + # self._out = cp.zeros(1, (len(self), 1), dtype=cp.float32) if "decoder" in self.__dict__: del self.__dict__["decoder"] if "memory_bank" in self.__dict__: @@ -131,7 +131,7 @@ def batch_processor(self) -> BatchProcessor: @cached_property def scaling_factors_cupy(self) -> cp.ndarray: return cp.asarray(self._scaling_factors, dtype=cp.float32).reshape( - 1, len(self._scaling_factors), 1 + 1, 1, len(self._scaling_factors) ) def get_batch( diff --git a/bigwig_loader/dataset.py b/bigwig_loader/dataset.py index fa3753e..66533e3 100644 --- a/bigwig_loader/dataset.py +++ b/bigwig_loader/dataset.py @@ -87,6 +87,12 @@ class BigWigDataset: tracks in case sub_sample_tracks is set. Should be Iterable batches of track indices. return_batch_objects: if True, the batches will be returned as instances of bigwig_loader.batch.Batch + dtype: float32 or bfloat16 output encoding of the target values (not the sequence encoding). + Cupy does not support bfloat16 yet, but the cuda kernel that creates the target values + does. When bfloat16 is choosen, the cupy array will show to have the data type uint16 + which can, for example, be converted to a torch.bfloat16 by + torch_tensor = torch.as_tensor(out) # torch uint16 + torch_tensor = torch_tensor.view(torch.bfloat16) # Reinterpret as bfloat16 """ def __init__( @@ -107,7 +113,7 @@ def __init__( ] = "onehot", file_extensions: Sequence[str] = (".bigWig", ".bw"), crawl: bool = True, - scale: Optional[dict[Union[str | Path], Any]] = None, + scale: Optional[dict[Union[str, Path], Any]] = None, default_value: float = 0.0, first_n_files: Optional[int] = None, position_sampler_buffer_size: int = 100000, @@ -117,6 +123,7 @@ def __init__( custom_position_sampler: Optional[Iterable[tuple[str, int]]] = None, custom_track_sampler: Optional[Iterable[list[int]]] = None, return_batch_objects: bool = False, + dtype: Literal["float32", "bfloat16"] = "float32", ): super().__init__() @@ -176,6 +183,8 @@ def __init__( else: self._track_sampler = None + self._dtype = dtype + def _create_dataloader(self) -> StreamedDataloader: sequence_sampler = GenomicSequenceSampler( reference_genome_path=self.reference_genome_path, @@ -199,6 +208,7 @@ def _create_dataloader(self) -> StreamedDataloader: slice_size=self.batch_size, window_size=self.window_size, default_value=self._default_value, + dtype=self._dtype, ) def __iter__( diff --git a/bigwig_loader/default_value.py b/bigwig_loader/default_value.py new file mode 100644 index 0000000..75e6b32 --- /dev/null +++ b/bigwig_loader/default_value.py @@ -0,0 +1,118 @@ +from math import isnan +from typing import Literal + +import cupy as cp + + +def get_default_value(value: float, dtype: str) -> cp.uint16 | cp.float32: + """bfloat16 is not supported by cupy yet, + so we use uint16. This only works for the + final output, because we have a custom + cuda kernel (which does support bfloat16) + populating the final out tensor. + """ + if dtype == "bfloat16": + if value == 0: + return cp.uint16(0) + if isnan(value): + return cp.uint16(0x7FC0) + else: + raise ValueError( + "When using bfloat16, please do not use" + "any other default value than 0 or NaN." + ) + if dtype == "float32" or dtype == cp.float32: + return cp.float32(value) + raise ValueError("Only bfloat16 or float32 are supported.") + + +def create_output_tensor( + batch_size: int, + sequence_length: int, + number_of_tracks: int, + default_value: float = 0.0, + dtype: Literal["bfloat16", "float32"] = "float32", +) -> cp.ndarray: + """Get output tensor in the correct shape: batch_size x sequence_length x n_tracks""" + shape = (batch_size, sequence_length, number_of_tracks) + if dtype == "bfloat16": + out_dtype = cp.uint16 + elif dtype == "float32": + out_dtype = cp.float32 + else: + raise ValueError("Only bfloat16 or float32 are supported.") + converted_default_value = get_default_value(value=default_value, dtype=dtype) + + return cp.full(shape, converted_default_value, dtype=out_dtype) + + +def output_tensor_correct_format( + tensor: cp.ndarray, + batch_size: int, + sequence_length: int, + number_of_tracks: int, + dtype: str, +) -> bool: + if tensor.shape != (batch_size, sequence_length, number_of_tracks): + return False + if dtype not in ("bfloat16", "float32"): + return False + if dtype == "bfloat16" and tensor.dtype != cp.dtype("uint16"): + return False + if (dtype == "float32" or dtype == cp.float32) and tensor.dtype != cp.dtype( + "float32" + ): + return False + return True + + +def fill( + tensor: cp.ndarray, + default_value: float, + dtype: Literal["bfloat16", "float32"] = "float32", +) -> cp.ndarray: + tensor.fill(get_default_value(default_value, dtype=dtype)) + return tensor + + +def replace_out_tensor_if_needed( + tensor: cp.ndarray | None, + batch_size: int, + sequence_length: int, + number_of_tracks: int, + default_value: float = 0.0, + dtype: Literal["bfloat16", "float32"] = "float32", + reset_values: bool = False, +) -> cp.ndarray: + """Replace tensor if needed. First check if the given tensor is correct format. + + If the tensor is None or has incorrect shape/dtype, create a new one. + Otherwise, return the existing tensor. + """ + if tensor is None: + return create_output_tensor( + batch_size=batch_size, + sequence_length=sequence_length, + number_of_tracks=number_of_tracks, + default_value=default_value, + dtype=dtype, + ) + + if output_tensor_correct_format( + tensor=tensor, + batch_size=batch_size, + sequence_length=sequence_length, + number_of_tracks=number_of_tracks, + dtype=dtype, + ): + if reset_values: + tensor = fill(tensor, default_value=default_value, dtype=dtype) + return tensor + + return create_output_tensor( + batch_size=batch_size, + sequence_length=sequence_length, + number_of_tracks=number_of_tracks, + default_value=default_value, + dtype=dtype, + ) diff --git a/bigwig_loader/download_example_data.py b/bigwig_loader/download_example_data.py index 54e5fe1..5e8f046 100644 --- a/bigwig_loader/download_example_data.py +++ b/bigwig_loader/download_example_data.py @@ -84,6 +84,10 @@ def unzip_gz_file(compressed_file_path: Path, output_file_path: Path) -> Path: "https://www.encodeproject.org/files/ENCFF270ISQ/@@download/ENCFF270ISQ.bigWig", "5fef60f9f1e43b9a17075c352650865e", ), + "mc_Late_Childhood_GLU_BS.bins128.bw": ( + "https://brainome.ucsd.edu/emukamel/PEC_igv/binc_bigwig/mc_Late_Childhood_GLU_BS.bins128.bw", + "c91eee81f11e4dc7cecaae72abd14c66", + ), } diff --git a/bigwig_loader/intervals_to_values.py b/bigwig_loader/intervals_to_values.py index b379747..72e5808 100644 --- a/bigwig_loader/intervals_to_values.py +++ b/bigwig_loader/intervals_to_values.py @@ -2,22 +2,47 @@ import math from math import isnan from pathlib import Path +from typing import Literal import cupy as cp +from bigwig_loader.default_value import replace_out_tensor_if_needed from bigwig_loader.searchsorted import interval_searchsorted CUDA_KERNEL_DIR = Path(__file__).parent.parent / "cuda_kernels" -def get_cuda_kernel() -> str: - with open(CUDA_KERNEL_DIR / "intervals_to_values.cu") as f: - kernel_code = f.read() - return kernel_code +class Kernel: + def __init__( + self, cudafile: Path = CUDA_KERNEL_DIR / "intervals_to_values_contiguous.cu" + ) -> None: + with open(cudafile) as f: + self.kernel_code = f.read() + self.kernel_names = { + "float32": "intervals_to_values_float32", + "bfloat16": "intervals_to_values_bfloat16", + } + self._kernels: dict[str, cp.RawKernel] = {} -cuda_kernel = cp.RawKernel(get_cuda_kernel(), "intervals_to_values") -cuda_kernel.compile() + def get_kernel_by_dtype( + self, dtype: Literal["float32", "bfloat16"] + ) -> cp.RawKernel: + if dtype in self._kernels: + return self._kernels[dtype] + kernel = cp.RawKernel(self.kernel_code, self.kernel_names[dtype]) + kernel.compile() + self._kernels[dtype] = kernel + return kernel + + def __call__( # type: ignore[no-untyped-def] + self, *args, dtype: Literal["float32", "bfloat16"], **kwargs + ) -> cp.ndarray: + kernel = self.get_kernel_by_dtype(dtype=dtype) + return kernel(*args, **kwargs) + + +cuda_kernel = Kernel() def intervals_to_values( @@ -32,6 +57,8 @@ def intervals_to_values( window_size: int = 1, default_value: float = 0.0, out: cp.ndarray | None = None, + scaling_factors: cp.ndarray | None = None, + dtype: Literal["float32", "bfloat16"] = "float32", ) -> cp.ndarray: """ This function converts intervals to values. It can do this for multiple tracks at once. @@ -45,6 +72,7 @@ def intervals_to_values( When the sequence length is not a multiple of window_size, the output length will be sequence_length // window_size, ignoring the last "incomplete" window. + Output shape: batch_size x sequence_length x n_tracks (no transpose needed!) Args: array_start: array of length sum(sizes) with the start positions of the intervals @@ -52,16 +80,17 @@ def intervals_to_values( array_value: array of length sum(sizes) with the value for those intervals query_starts: array of length batch_size with the (genomic) start positions of each batch element query_ends: array of length batch_size with the (genomic) end positions of each batch element - out: array of size n_tracks x batch_size x sequence_length to store the output found_starts: result of searchsorted (if precalculated). Indices into track_starts. found_ends: result of searchsorted (if precalculated). Indices into track_ends. sizes: number of elements in track_starts/track_ends/track_values for each track. Only needed when found_starts and found_ends are not given. window_size: size in basepairs to average over (default: 1) default_value: value to use for regions where no data is specified (default: 0.0) - out: array of size n_tracks x batch_size x sequence_length to store the output. + out: array of size batch_size x sequence_length x n_tracks to store the output. + scaling_factors: optional array of shape (n_tracks,) to scale each track's values + dtype: output dtype, either 'float32' or 'bfloat16' Returns: - out: array of size n_tracks x batch_size x sequence_length + out: array of size batch_size x sequence_length x n_tracks """ if cp.unique(query_ends - query_starts).size != 1: @@ -72,11 +101,9 @@ def intervals_to_values( sequence_length = (query_ends[0] - query_starts[0]).item() if (found_starts is None or found_ends is None) and sizes is None: - # just one size, which is the length of the entire track_starts/tracks_ends/tracks_values sizes = cp.asarray([len(array_start)], dtype=array_start.dtype) if found_starts is None or found_ends is None: - # n_subarrays x n_queries found_starts, found_ends = interval_searchsorted( array_start, array_end, @@ -86,26 +113,23 @@ def intervals_to_values( absolute_indices=True, ) - if out is None: - logging.debug(f"Creating new out tensor with default value {default_value}") - - out = cp.full( - (found_starts.shape[0], len(query_starts), sequence_length // window_size), - default_value, - dtype=cp.float32, - ) - logging.debug(out) + reduced_sequence_length = sequence_length // window_size + batch_size = len(query_starts) + num_tracks = found_starts.shape[0] - else: - logging.debug(f"Setting default value in output tensor to {default_value}") - out.fill(default_value) - logging.debug(out) + out = replace_out_tensor_if_needed( + out, + batch_size=batch_size, + sequence_length=reduced_sequence_length, + number_of_tracks=num_tracks, + default_value=default_value, + dtype=dtype, + reset_values=True, + ) max_number_intervals = min( sequence_length, (found_ends - found_starts).max().item() ) - batch_size = query_starts.shape[0] - num_tracks = found_starts.shape[0] if window_size == 1: n_threads_needed = batch_size * max_number_intervals * num_tracks @@ -127,6 +151,12 @@ def intervals_to_values( array_value = cp.ascontiguousarray(array_value) default_value_isnan = isnan(default_value) + # Handle scaling factors - convert to float32 if provided + if scaling_factors is not None: + scaling_factors = cp.ascontiguousarray(scaling_factors, dtype=cp.float32) + else: + scaling_factors = cp.asarray([], dtype=cp.float32) + cuda_kernel( (grid_size,), (block_size,), @@ -140,13 +170,15 @@ def intervals_to_values( array_value, num_tracks, batch_size, - sequence_length, + sequence_length, # should really sequence length, not reduced sequence length max_number_intervals, window_size, cp.float32(default_value), default_value_isnan, + scaling_factors, out, ), + dtype=dtype, ) return out diff --git a/bigwig_loader/pytorch.py b/bigwig_loader/pytorch.py index 08750dc..922f7ce 100644 --- a/bigwig_loader/pytorch.py +++ b/bigwig_loader/pytorch.py @@ -74,7 +74,9 @@ def __init__( self.track_names = track_names @classmethod - def from_batch(cls, batch: Batch) -> "PytorchBatch": + def from_batch( + cls, batch: Batch, dtype: Literal["float32", "bfloat16"] = "float32" + ) -> "PytorchBatch": if batch.other_batched is not None: other_batched = ( [cls._convert_if_possible(tensor) for tensor in batch.other_batched], @@ -85,7 +87,7 @@ def from_batch(cls, batch: Batch) -> "PytorchBatch": chromosomes=cls._convert_if_possible(batch.chromosomes), starts=cls._convert_if_possible(batch.starts), ends=cls._convert_if_possible(batch.ends), - values=cls._convert_if_possible(batch.values), + values=cls._convert_track_values(batch.values, dtype=dtype), track_indices=cls._convert_if_possible(batch.track_indices), sequences=cls._convert_if_possible(batch.sequences), other_batched=other_batched, @@ -99,6 +101,18 @@ def _convert_if_possible(tensor: Any) -> Any: return torch.as_tensor(tensor) return tensor + @staticmethod + def _convert_track_values( + tensor: cp.ndarray, dtype: Literal["float32", "bfloat16"] = "float32" + ) -> torch.Tensor: + torch_tensor = torch.as_tensor(tensor) + + # Handle bfloat16 conversion from uint16 + if dtype == "bfloat16" and tensor.dtype == cp.uint16: + torch_tensor = torch_tensor.view(torch.bfloat16) + + return torch_tensor + GENOMIC_SEQUENCE_TYPE = Union[torch.Tensor, list[str], None] BATCH_TYPE = Union[ @@ -172,6 +186,7 @@ class PytorchBigWigDataset(IterableDataset[BATCH_TYPE]): custom_track_sampler: if specified, this sampler will be used to sample tracks. When not specified, each batch simply contains all tracks, or a randomly sellected subset of tracks in case sub_sample_tracks is set. Should be Iterable batches of track indices. + dtype: float32 or bfloat16 output encoding of the target values (not the sequence encoding). """ def __init__( @@ -202,6 +217,7 @@ def __init__( custom_position_sampler: Optional[Iterable[tuple[str, int]]] = None, custom_track_sampler: Optional[Iterable[list[int]]] = None, return_batch_objects: bool = False, + dtype: Literal["float32", "bfloat16"] = "float32", ): super().__init__() self._dataset = BigWigDataset( @@ -229,6 +245,7 @@ def __init__( custom_position_sampler=custom_position_sampler, custom_track_sampler=custom_track_sampler, return_batch_objects=True, + dtype=dtype, ) self._return_batch_objects = return_batch_objects @@ -236,7 +253,7 @@ def __iter__( self, ) -> Iterator[BATCH_TYPE]: for batch in self._dataset: - pytorch_batch = PytorchBatch.from_batch(batch) # type: ignore + pytorch_batch = PytorchBatch.from_batch(batch, dtype=self._dataset._dtype) # type: ignore if self._return_batch_objects: yield pytorch_batch elif pytorch_batch.track_indices is None: diff --git a/bigwig_loader/sampler/track_sampler.py b/bigwig_loader/sampler/track_sampler.py index c21f379..68854aa 100644 --- a/bigwig_loader/sampler/track_sampler.py +++ b/bigwig_loader/sampler/track_sampler.py @@ -9,4 +9,6 @@ def __init__(self, total_number_of_tracks: int, sample_size: int): def __iter__(self) -> Iterator[list[int]]: while True: - yield sorted(sample(range(self.total_number_of_tracks), self.sample_size)) + yield sorted( + sample(range(self.total_number_of_tracks), self.sample_size) # nosec + ) diff --git a/bigwig_loader/streamed_dataset.py b/bigwig_loader/streamed_dataset.py index 314058a..1ddbb33 100644 --- a/bigwig_loader/streamed_dataset.py +++ b/bigwig_loader/streamed_dataset.py @@ -4,6 +4,7 @@ from typing import Generator from typing import Iterable from typing import Iterator +from typing import Literal import cupy as cp @@ -12,6 +13,7 @@ from bigwig_loader.batch_processor import BatchProcessor from bigwig_loader.batch_processor import PreprocessedReturnType from bigwig_loader.collection import BigWigCollection +from bigwig_loader.default_value import replace_out_tensor_if_needed from bigwig_loader.intervals_to_values import intervals_to_values InputBatchType = Batch | IntervalType @@ -109,6 +111,7 @@ def __init__( slice_size: int | None = None, window_size: int = 1, default_value: float = 0.0, + dtype: Literal["float32", "bfloat16"] = "float32", ): self.input_generator = input_generator self.collection = collection @@ -129,6 +132,7 @@ def __init__( self._entered = False self._out = None self._default_value = default_value + self._dtype = dtype def __enter__(self) -> "StreamedDataloader": self._entered = True @@ -197,17 +201,26 @@ def _generate_batches(self) -> Generator[Batch, None, None]: slice_size = self._determine_slice_size(n_samples=n_samples) out = self._get_out_tensor( + batch_size=slice_size, sequence_length=(abs_end[0] - abs_start[0]).item() // self.window_size, number_of_tracks=found_starts.shape[0], - batch_size=slice_size, ) + # Prepare scaling factors if needed + scaling_factors = None + if self.collection.scaling_factors_cupy is not None: + scaling_factors = ( + self.collection.scaling_factors_cupy.squeeze() + ) # Shape: (n_tracks,) + if batch.track_indices is not None: + scaling_factors = scaling_factors[batch.track_indices] + for select in self._slices_objects(n_samples, slice_size): with self.main_stream as stream: stream.synchronize() - value_matrix = intervals_to_values( + values = intervals_to_values( array_start=start_data, array_end=end_data, array_value=value_data, @@ -218,21 +231,15 @@ def _generate_batches(self) -> Generator[Batch, None, None]: window_size=self.window_size, default_value=self._default_value, out=out, + dtype=self._dtype, + scaling_factors=scaling_factors, # NEW: pass scaling factors to kernel ) - values = cp.transpose(value_matrix, (1, 0, 2)) - if self.collection.scaling_factors_cupy is not None: - scaling_factors = self.collection.scaling_factors_cupy - if batch.track_indices is not None: - scaling_factors = scaling_factors[ - :, batch.track_indices, : - ] - - values *= scaling_factors - stream.synchronize() + # Removed the old scaling multiplication code - now handled in kernel! sliced_query = batch[select] sliced_query.values = values + stream.synchronize() yield sliced_query @@ -246,12 +253,16 @@ def _generate_batches(self) -> Generator[Batch, None, None]: raise e def _get_out_tensor( - self, number_of_tracks: int, batch_size: int, sequence_length: int + self, batch_size: int, sequence_length: int, number_of_tracks: int ) -> cp.ndarray: - shape = (number_of_tracks, batch_size, sequence_length) - - if self._out is None or self._out.shape != shape: - self._out = cp.full(shape, self._default_value, dtype=cp.float32) + self._out = replace_out_tensor_if_needed( + tensor=self._out, + batch_size=batch_size, + sequence_length=sequence_length, + number_of_tracks=number_of_tracks, + default_value=self._default_value, + dtype=self._dtype, + ) return self._out def _determine_slice_size(self, n_samples: int) -> int: diff --git a/conda-forge-pypi-map.json b/conda-forge-pypi-map.json new file mode 100644 index 0000000..f6ef1dd --- /dev/null +++ b/conda-forge-pypi-map.json @@ -0,0 +1,5 @@ +{ + "pytorch": "torch", + "pytorch-gpu": "torch", + "pytorch-cpu": "torch" +} diff --git a/cuda_kernels/intervals_to_values.cu b/cuda_kernels/intervals_to_values.cu index 2d1299d..3e27fba 100644 --- a/cuda_kernels/intervals_to_values.cu +++ b/cuda_kernels/intervals_to_values.cu @@ -21,7 +21,7 @@ void intervals_to_values( int thread = blockIdx.x * blockDim.x + threadIdx.x; -// # out is a 1D array of size batch_size x n_tracks x sequence_length +// # out is a 1D array of n_tracks x batch_size x sequence_length // // # n_tracks x n_batch diff --git a/cuda_kernels/intervals_to_values_contiguous.cu b/cuda_kernels/intervals_to_values_contiguous.cu new file mode 100644 index 0000000..c4e699f --- /dev/null +++ b/cuda_kernels/intervals_to_values_contiguous.cu @@ -0,0 +1,215 @@ +#include +#include + +template +__device__ __forceinline__ T cast_value(float value); + +template<> +__device__ __forceinline__ float cast_value(float value) { + return value; +} + +template<> +__device__ __forceinline__ __nv_bfloat16 cast_value<__nv_bfloat16>(float value) { + return __float2bfloat16(value); +} + +template +__global__ +void intervals_to_values_kernel( + const unsigned int* query_starts, + const unsigned int* query_ends, + const unsigned int* found_starts, + const unsigned int* found_ends, + const unsigned int* track_starts, + const unsigned int* track_ends, + const float* track_values, + const int n_tracks, + const int batch_size, + const int sequence_length, + const int max_number_intervals, + const int window_size, + const float default_value, + const bool default_value_isnan, + const float* scaling_factors, // NEW: scaling factors array of length n_tracks + T* out +) { + int thread = blockIdx.x * blockDim.x + threadIdx.x; + + // Same thread indexing as before + int batch_index = thread % batch_size; + int i = thread % (batch_size * n_tracks); + int track_index = i / batch_size; + + if (window_size == 1) { + int j = (thread / (batch_size * n_tracks)) % max_number_intervals; + + int found_start_index = found_starts[i]; + int found_end_index = found_ends[i]; + int query_start = query_starts[batch_index]; + int query_end = query_ends[batch_index]; + + int cursor = found_start_index + j; + + if (cursor < found_end_index) { + int interval_start = track_starts[cursor]; + int interval_end = track_ends[cursor]; + int start_index = max(interval_start - query_start, 0); + int end_index = min(interval_end, query_end) - query_start; + + float value = track_values[cursor]; + + // Apply scaling factor here + if (scaling_factors != nullptr) { + value *= scaling_factors[track_index]; + } + + T typed_value = cast_value(value); + + int base_offset = batch_index * (sequence_length * n_tracks) + track_index; + + for (int pos = start_index; pos < end_index; pos++) { + out[base_offset + pos * n_tracks] = typed_value; + } + } + } else { + int found_start_index = found_starts[i]; + int found_end_index = found_ends[i]; + int query_start = query_starts[batch_index]; + int query_end = query_ends[batch_index]; + + int cursor = found_start_index; + int window_index = 0; + float summation = 0.0f; + int valid_count = 0; + + int reduced_dim = sequence_length / window_size; + + while (cursor < found_end_index && window_index < reduced_dim) { + int window_start = window_index * window_size; + int window_end = window_start + window_size; + + int interval_start = track_starts[cursor]; + int interval_end = track_ends[cursor]; + + int start_index = max(interval_start - query_start, 0); + int end_index = min(interval_end, query_end) - query_start; + + if (start_index >= window_end) { + float final_value; + if (default_value_isnan) { + final_value = (valid_count > 0) ? (summation / valid_count) : CUDART_NAN_F; + } else { + summation = summation + (window_size - valid_count) * default_value; + final_value = summation / window_size; + } + + // Apply scaling factor + if (scaling_factors != nullptr) { + final_value *= scaling_factors[track_index]; + } + + T out_value = cast_value(final_value); + int out_idx = batch_index * (reduced_dim * n_tracks) + window_index * n_tracks + track_index; + out[out_idx] = out_value; + + summation = 0.0f; + valid_count = 0; + window_index += 1; + continue; + } + + int number = min(window_end, end_index) - max(window_start, start_index); + + if (number > 0) { + summation += number * track_values[cursor]; + valid_count += number; + } + + if (end_index >= window_end || cursor + 1 >= found_end_index) { + float final_value; + if (default_value_isnan) { + final_value = (valid_count > 0) ? (summation / valid_count) : CUDART_NAN_F; + } else { + summation = summation + (window_size - valid_count) * default_value; + final_value = summation / window_size; + } + + // Apply scaling factor + if (scaling_factors != nullptr) { + final_value *= scaling_factors[track_index]; + } + + T out_value = cast_value(final_value); + int out_idx = batch_index * (reduced_dim * n_tracks) + window_index * n_tracks + track_index; + out[out_idx] = out_value; + + summation = 0.0f; + valid_count = 0; + window_index += 1; + } + + if (end_index < window_end) { + cursor += 1; + } + } + } +} + +// Update wrapper functions to include scaling_factors + +extern "C" __global__ +void intervals_to_values_float32( + const unsigned int* query_starts, + const unsigned int* query_ends, + const unsigned int* found_starts, + const unsigned int* found_ends, + const unsigned int* track_starts, + const unsigned int* track_ends, + const float* track_values, + const int n_tracks, + const int batch_size, + const int sequence_length, + const int max_number_intervals, + const int window_size, + const float default_value, + const bool default_value_isnan, + const float* scaling_factors, + float* out +) { + intervals_to_values_kernel( + query_starts, query_ends, found_starts, found_ends, + track_starts, track_ends, track_values, + n_tracks, batch_size, sequence_length, max_number_intervals, + window_size, default_value, default_value_isnan, + scaling_factors, out + ); +} + +extern "C" __global__ +void intervals_to_values_bfloat16( + const unsigned int* query_starts, + const unsigned int* query_ends, + const unsigned int* found_starts, + const unsigned int* found_ends, + const unsigned int* track_starts, + const unsigned int* track_ends, + const float* track_values, + const int n_tracks, + const int batch_size, + const int sequence_length, + const int max_number_intervals, + const int window_size, + const float default_value, + const bool default_value_isnan, + const float* scaling_factors, + __nv_bfloat16* out +) { + intervals_to_values_kernel<__nv_bfloat16>( + query_starts, query_ends, found_starts, found_ends, + track_starts, track_ends, track_values, + n_tracks, batch_size, sequence_length, max_number_intervals, + window_size, default_value, default_value_isnan, + scaling_factors, out + ); +} diff --git a/pixi.lock b/pixi.lock new file mode 100644 index 0000000..c69d9da --- /dev/null +++ b/pixi.lock @@ -0,0 +1,5713 @@ +version: 6 +environments: + default: + channels: + - url: https://conda.anaconda.org/rapidsai/ + - url: https://conda.anaconda.org/conda-forge/ + - url: https://conda.anaconda.org/nvidia/ + - url: https://conda.anaconda.org/bioconda/ + - url: https://conda.anaconda.org/dataloading/ + indexes: + - https://pypi.org/simple + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_8.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.10.5-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.44-h1aa0949_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-38_h4a7cf45_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-38_h0358290_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h9ec8514_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-h767d61c_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-hcd61629_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-h767d61c_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-38_h47877c9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-devel-5.8.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.0-hee844dc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h8f9b012_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-h4852527_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.2-he9a06e4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.3.4-py311h2e04523_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.0-h26f9b46_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.3.3-py311hed34c8f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-25.3-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.11.0-he550d4f_1_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.11-8_cp311.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.8.1-hbcc6ac9_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-gpl-tools-5.8.1-hbcc6ac9_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-tools-5.8.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda + - pypi: https://files.pythonhosted.org/packages/8e/ad/a2f3964aa37da5a4c94c1e5f3934d6ac1333f991f675fcf08a618397a413/aiobotocore-2.25.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6b/f3/083907ee3437425b4e376aa58b2c915eb1a33703ec0dc30040f7ae3368c6/aiohttp-3.13.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/10/a1/510b0a7fadc6f43a6ce50152e69dbd86415240835868bb0bd9b5b88b1e06/aioitertools-0.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.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/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/d2/507fd0ee4dd574d2bdbdeac5df83f39d2cae1ffe97d4622cca6f6bab39f1/botocore-1.40.70-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/b1/71a477adc7c36e5fb628245dfbdea2166feae310757dea848d02bd0689fd/frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/eb/02/a6b21098b1d5d6249b7c5ab69dde30108a71e4e819d4a9778f1de1d5b70d/fsspec-2025.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/b4/b9b800c45527aadd64d5b442f9b932b00648617eb5d63d2c7a6587b7cafc/jmespath-1.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a8/9f/78f8761c2705d4c6d7516faed63c0ebdac569f6db1bef95e0d5218fdc146/multidict-6.7.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b6/0f/49d1f74a216149240c4b9403218111f11670bd11af0919fda357bb056bf2/numcodecs-0.16.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b1/29/c028a0731e202035f0e2e0bfbf1a3e46ad6c628cbb17f6f1cc9eea5d9ff1/pathlib_abc-0.5.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/6a/57f43e054fb3d3a56ac9fc532bc684fc6169a26c75c353e65425b3e56eef/propcache-0.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/82/2f/e68750da9b04856e2a7ec56fc6f034a5a79775e9b9a81882252789873798/pydantic-2.12.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/be/8fed28dd0a180dca19e72c233cbf58efa36df055e5b9d90d64fd1740b828/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c1/60/5d4751ba3f4a40a6891f24eec885f51afd78d208498268c734e256fb13c4/pydantic_settings-2.12.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/0b/fadfd7d0088efa3ba0cdcdbb51d093e18d3700f6f88634aa8387106394a4/pyfaidx-0.9.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/1b/a298b06749107c305e1fe0f814c6c74aea7b2f1e10989cb30f544a1b3253/python_dotenv-1.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2d/fc/56cba14af8ad8fd020c85b6e44328520ac55939bb1f9d01444ad470504cb/s3fs-2025.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2d/32/2569fc0a8c7215fdb55bfe1aa8fe5dada6042c4918625ce13be72eb434ed/universal_pathlib-0.3.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/8f/a32a99fc03e4b37e31b57cb9cefc65050ea08147a8ce12f288616b05ef54/wrapt-1.17.3-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/46/00/71b90ed48e895667ecfb1eaab27c1523ee2fa217433ed77a73b13205ca4b/yarl-1.22.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_8.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.10.5-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-38_h51639a9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-38_hb0561ab_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-21.1.5-hf598326_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-he5f378a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-hfcf01ff_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-h742603c_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-38_hd9741b5_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-devel-5.8.1-h39f12f2_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_ha158390_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.0-h8adb53f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-21.1.5-h4a912ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.3.4-py311h8685306_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.0-h5503f6c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.3.3-py311hdb8e4fa_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-25.3-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.11.0-h3ba56d0_1_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.11-8_cp311.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h892fb3f_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.8.1-h9a6d368_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-gpl-tools-5.8.1-h9a6d368_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-tools-5.8.1-h39f12f2_2.conda + - pypi: https://files.pythonhosted.org/packages/8e/ad/a2f3964aa37da5a4c94c1e5f3934d6ac1333f991f675fcf08a618397a413/aiobotocore-2.25.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/eb/d3/7f68bc02a67716fe80f063e19adbd80a642e30682ce74071269e17d2dba1/aiohttp-3.13.2-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/10/a1/510b0a7fadc6f43a6ce50152e69dbd86415240835868bb0bd9b5b88b1e06/aioitertools-0.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.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/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/d2/507fd0ee4dd574d2bdbdeac5df83f39d2cae1ffe97d4622cca6f6bab39f1/botocore-1.40.70-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6e/ef/0e8f1fe32f8a53dd26bdd1f9347efe0778b0fddf62789ea683f4cc7d787d/frozenlist-1.8.0-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/eb/02/a6b21098b1d5d6249b7c5ab69dde30108a71e4e819d4a9778f1de1d5b70d/fsspec-2025.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/b4/b9b800c45527aadd64d5b442f9b932b00648617eb5d63d2c7a6587b7cafc/jmespath-1.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4d/e1/866a5d77be6ea435711bef2a4291eed11032679b6b28b56b4776ab06ba3e/multidict-6.7.0-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/3b/6a/64c25a089e8537441fe67c09ecb7f3f7fb5d98cd04faf01f605d43aca41c/numcodecs-0.16.3-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b1/29/c028a0731e202035f0e2e0bfbf1a3e46ad6c628cbb17f6f1cc9eea5d9ff1/pathlib_abc-0.5.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d3/1d/11605e99ac8ea9435651ee71ab4cb4bf03f0949586246476a25aadfec54a/propcache-0.4.1-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/82/2f/e68750da9b04856e2a7ec56fc6f034a5a79775e9b9a81882252789873798/pydantic-2.12.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/12/44/37e403fd9455708b3b942949e1d7febc02167662bf1a7da5b78ee1ea2842/pydantic_core-2.41.5-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/c1/60/5d4751ba3f4a40a6891f24eec885f51afd78d208498268c734e256fb13c4/pydantic_settings-2.12.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/0b/fadfd7d0088efa3ba0cdcdbb51d093e18d3700f6f88634aa8387106394a4/pyfaidx-0.9.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/1b/a298b06749107c305e1fe0f814c6c74aea7b2f1e10989cb30f544a1b3253/python_dotenv-1.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2d/fc/56cba14af8ad8fd020c85b6e44328520ac55939bb1f9d01444ad470504cb/s3fs-2025.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2d/32/2569fc0a8c7215fdb55bfe1aa8fe5dada6042c4918625ce13be72eb434ed/universal_pathlib-0.3.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/25/3e8cc2c46b5329c5957cec959cb76a10718e1a513309c31399a4dad07eb3/wrapt-1.17.3-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/c1/da/8da9f6a53f67b5106ffe902c6fa0164e10398d4e150d85838b82f424072a/yarl-1.22.0-cp311-cp311-macosx_11_0_arm64.whl + dev: + channels: + - url: https://conda.anaconda.org/rapidsai/ + - url: https://conda.anaconda.org/conda-forge/ + - url: https://conda.anaconda.org/nvidia/ + - url: https://conda.anaconda.org/bioconda/ + - url: https://conda.anaconda.org/dataloading/ + indexes: + - https://pypi.org/simple + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-6_kmp_llvm.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.2-h39aace5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.44-h9d8b0ac_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.44-h4852527_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_8.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.10.5-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.11.14-py311hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/crc32c-2.8-py311haee01d2_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-64-12.8.90-ha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_linux-64-12.8.93-ha770c72_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-crt-tools-12.8.93-ha770c72_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-12.8.90-h5888daf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-dev-12.8.90-h5888daf_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-dev_linux-64-12.8.90-h3f2d84a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-static-12.8.90-h5888daf_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-static_linux-64-12.8.90-h3f2d84a_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart_linux-64-12.8.90-h3f2d84a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cuobjdump-12.8.90-hbd13f7d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cupti-12.8.90-h5888daf_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-driver-dev_linux-64-12.8.90-h3f2d84a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-12.8.93-hcdd1206_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvcc-dev_linux-64-12.8.93-he91c749_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-impl-12.8.93-h85509e4_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-tools-12.8.93-he02047a_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc_linux-64-12.8.93-he0b4e1d_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvdisasm-12.8.90-hbd13f7d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvrtc-12.8.93-h5888daf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvtx-12.8.90-h5888daf_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-64-12.8.93-ha770c72_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-impl-12.8.93-he02047a_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-tools-12.8.93-he02047a_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.8-h5d125a7_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cudnn-9.10.2.21-hbcb9cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cupy-13.6.0-py311h72da3fd_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cupy-core-13.6.0-py311he30c881_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/deprecated-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/donfig-0.8.1.post1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fastrlock-0.8.3-py311hc665b79_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-14.3.0-hd9e9e21_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-14.3.0-h298d278_12.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gmpy2-2.2.1-py311h92a432a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-14.3.0-he663afc_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-14.3.0-h95f728e_12.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_8.conda + - conda: https://conda.anaconda.org/rapidsai/linux-64/kvikio-25.08.00-cuda12_py311_250806_2f72c39a.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.44-h1aa0949_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250127.1-cxx17_hbbce691_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-37_h5875eb1_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.76-h0b2e76d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-37_hfef963f_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcublas-12.8.4.1-h9ab20c4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcudnn-9.10.2.21-hf7e9902_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcudnn-dev-9.10.2.21-h58dd1b1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcudss-0.6.0.5-h58dd1b1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufft-11.3.3.83-h5888daf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufile-1.13.1.3-h628e99a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufile-dev-1.13.1.3-h5888daf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurand-10.3.9.90-h9ab20c4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcusolver-11.7.3.90-h9ab20c4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcusparse-12.5.8.93-h5888daf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h9ec8514_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-h767d61c_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-14.3.0-h85bb3a7_107.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-h767d61c_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.12.1-default_h7f8ec31_1002.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + - conda: https://conda.anaconda.org/rapidsai/linux-64/libkvikio-25.08.00-cuda12_9_250806_2f72c39a.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-37_h5e43f62_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-devel-5.8.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmagma-2.9.0-h19665d7_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnl-3.11.0-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnuma-2.0.18-hb9d3cd8_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvcomp-4.2.0.11-hb7e823c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvjitlink-12.9.86-hecca717_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h7460b1f_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-14.3.0-hd08acf3_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.0-hee844dc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h8f9b012_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-14.3.0-h85bb3a7_107.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-h4852527_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.10-h085a93f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.7.1-cuda126_mkl_hc2b21a2_300.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-257.10-h085a93f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.2-he9a06e4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.1-ha9997c6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.1-h26afc86_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-21.1.5-h4922eb0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py311h3778330_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2024.2.2-ha770c72_17.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mpc-1.3.1-h24ddda3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.1-h90cbb55_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.1.2-py311hdf67eae_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nccl-2.28.9.1-h4d09622_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.5-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numcodecs-0.16.1-py311hed34c8f_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.3.4-py311h2e04523_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.0-h26f9b46_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/optree-0.17.0-py311hdf67eae_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.3.3-py311hed34c8f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-25.3-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.11.0-he550d4f_1_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.11-8_cp311.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.7.1-cuda126_mkl_py311_hcada2b2_300.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-gpu-2.7.1-cuda126_mkl_ha999a5f_300.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py311h3778330_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-60.0-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/sleef-3.9.0-ha0421bc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_8.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.13.0-h8d10470_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/triton-3.3.0-cuda126py311h126903f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.17.3-py311h49ec1c0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.8.1-hbcc6ac9_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-gpl-tools-5.8.1-hbcc6ac9_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-tools-5.8.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.1.3-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda + - pypi: https://files.pythonhosted.org/packages/d1/a2/cc8aea5535022f1b3ad1dc4ab971339bc77f91612961aa95c6bda5b2240a/aim-3.28.0-cp311-cp311-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ef/a6/73be7c95aeba0e22e596a7f2206eebcc631516dfbb6d6d7057719d475d28/aim-ui-3.28.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/53/13/207ebb5b2315640a68378c31cb31cfe1182373d11a813bd52219c83700a7/aimrecords-0.0.7-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/01/11/3fcb62df83e2f147ff787b7aad6b934512016fbf38f217dd3ce7fbe1f03b/aimrocks-0.5.2-cp311-cp311-manylinux_2_24_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/8e/ad/a2f3964aa37da5a4c94c1e5f3934d6ac1333f991f675fcf08a618397a413/aiobotocore-2.25.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bc/8a/340a1555ae33d7354dbca4faa54948d76d89a27ceef032c8c3bc661d003e/aiofiles-25.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6b/f3/083907ee3437425b4e376aa58b2c915eb1a33703ec0dc30040f7ae3368c6/aiohttp-3.13.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/10/a1/510b0a7fadc6f43a6ce50152e69dbd86415240835868bb0bd9b5b88b1e06/aioitertools-0.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a5/32/7df1d81ec2e50fb661944a35183d87e62d3f6c6d9f8aff64a4f245226d55/alembic-1.17.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-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/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2f/f5/c36551e93acba41a59939ae6a0fb77ddb3f2e8e8caa716410c65f7341f72/asgi_lifespan-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/03/58572025c77b9e6027155b272a1b96298e711cd4f95c24967f7137ab0c4b/base58-2.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f3/cf/e24d08b37cd318754a8e94906c8b34b88676899aad1907ff6942311f13c4/boto3-1.40.70-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/d2/507fd0ee4dd574d2bdbdeac5df83f39d2cae1ffe97d4622cca6f6bab39f1/botocore-1.40.70-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/c5/1e741d26306c42e2bf6ab740b2202872727e0f606033c9dd713f8b93f5a8/cachetools-6.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/70/7d/9bc192684cea499815ff478dfcdc13835ddf401365057044fb721ec6bddb/certifi-2025.11.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/91/500d892b2bf36529a75b77958edfcd5ad8e2ce4064ce2ecfeab2125d72d1/cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/6d/fc/de9cce525b2c5b94b47c70a4b4fb19f871b24995c728e957ee68ab1671ea/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/db/d3/9dcc0f5797f070ec8edf30fbadfb200e71d9db6b84d211e3b2085a7589a0/click-8.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/56/9e/0677e78b1e6a13527f39c4b39c767b351e256b333050539861c63f98bd61/coverage-7.11.3-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c9/56/e7e69b427c3878352c2fb9b450bd0e19ed552753491d39d7d0a2f5226d41/cryptography-46.0.3-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1b/36/6b6266549802234286438298d494152deb19922a94928d9dcd256659ebd1/cython-3.2.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/94/fd/2e6f7d706899cc08690c5f6641e2ffbfffe019e8f16ce77104caa5730910/fastapi-0.121.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/b1/71a477adc7c36e5fb628245dfbdea2166feae310757dea848d02bd0689fd/frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1f/8e/abdd3f14d735b2929290a018ecf133c901be4874b858dd1c604b9319f064/greenlet-3.2.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/b4/b9b800c45527aadd64d5b442f9b932b00648617eb5d63d2c7a6587b7cafc/jmespath-1.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/87/fb/99f81ac72ae23375f22b7afdb7642aba97c00a713c217124420147681a2f/mako-1.3.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a8/9f/78f8761c2705d4c6d7516faed63c0ebdac569f6db1bef95e0d5218fdc146/multidict-6.7.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1a/52/ec4a061dd599eb8179d5411d99775bec2a20542505988f40fc2fee781068/mypy-1.18.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ef/82/7a9d0550484a62c6da82858ee9419f3dd1ccc9aa1c26a1e43da3ecd20b0d/natsort-8.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fb/ec/b0c23ec7fc9df5af527b2d63f15a92699f7fd0515986763ed8e50489a755/ncls-0.0.70-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b1/29/c028a0731e202035f0e2e0bfbf1a3e46ad6c628cbb17f6f1cc9eea5d9ff1/pathlib_abc-0.5.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/1e/db9470f2d030b4995083044cd8738cdd1bf773106819f6d8ba12597d5352/pillow-12.0.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/6a/57f43e054fb3d3a56ac9fc532bc684fc6169a26c75c353e65425b3e56eef/propcache-0.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ce/b1/5f49af514f76431ba4eea935b8ad3725cdeb397e9245ab919dbc1d1dc20f/psutil-7.1.3-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/34/72/f52aaea9c9f8265b259b154a197a3c8e16967ff5e7628468f8f1a8db9971/pyBigWig-0.3.24-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/2f/e68750da9b04856e2a7ec56fc6f034a5a79775e9b9a81882252789873798/pydantic-2.12.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/be/8fed28dd0a180dca19e72c233cbf58efa36df055e5b9d90d64fd1740b828/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c1/60/5d4751ba3f4a40a6891f24eec885f51afd78d208498268c734e256fb13c4/pydantic_settings-2.12.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/0b/fadfd7d0088efa3ba0cdcdbb51d093e18d3700f6f88634aa8387106394a4/pyfaidx-0.9.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/72/99/cafef234114a3b6d9f3aaed0723b437c40c57bdb7b3e4c3a575bc4890052/pytest-9.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/35/f8b19922b6a25bc0880171a2f1a003eaeb93657475193ab516fd87cac9da/pytest_asyncio-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5a/cc/06253936f4a7fa2e0f48dfe6d851d9c56df896a9ab09ac019d70b760619c/pytest_mock-3.15.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/87/d5/81d38a91c1fdafb6711f053f5a9b92ff788013b19821257c2c38c1e132df/pytest_sugar-1.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/1b/a298b06749107c305e1fe0f814c6c74aea7b2f1e10989cb30f544a1b3253/python_dotenv-1.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/c0/3848f4006f7e164ee20833ca984067e4b3fc99fe7f1dfa88b4927e681299/restrictedpython-8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2d/fc/56cba14af8ad8fd020c85b6e44328520ac55939bb1f9d01444ad470504cb/s3fs-2025.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/f0/ae7ca09223a81a1d890b2557186ea015f6e0502e9b8cb8e1813f1d8cfa4e/s3transfer-0.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/94/2d/fdb9246d9d32518bda5d90f4b65030b9bf403a935cfe4c36a474846517cb/sqlalchemy-2.0.44-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a3/e0/021c772d6a662f43b63044ab481dc6ac7592447605b5b35a957785363122/starlette-0.49.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/d5/141f53d7c1eb2a80e6d3e9a390228c3222c27705cbe7f048d3623053f3ca/termcolor-3.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/da/75dfd804fc11e6612846758a23f13271b76d577e299592b4371a4ca4cd09/tomli-2.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2d/32/2569fc0a8c7215fdb55bfe1aa8fe5dada6042c4918625ce13be72eb434ed/universal_pathlib-0.3.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ee/d9/d88e73ca598f4f6ff671fb5fde8a32925c2e08a637303a1d12883c7305fa/uvicorn-0.38.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/93/1f/5d6dbf551766308f6f50f8baf8e9860be6182911e8106da7a7f73785f4c4/websockets-15.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/46/00/71b90ed48e895667ecfb1eaab27c1523ee2fa217433ed77a73b13205ca4b/yarl-1.22.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: ./ + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_8.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.10.5-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-38_h51639a9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-38_hb0561ab_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-21.1.5-hf598326_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-he5f378a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-hfcf01ff_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-h742603c_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-38_hd9741b5_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-devel-5.8.1-h39f12f2_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_ha158390_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.0-h8adb53f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-21.1.5-h4a912ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.3.4-py311h8685306_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.0-h5503f6c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.3.3-py311hdb8e4fa_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-25.3-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.11.0-h3ba56d0_1_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.11-8_cp311.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h892fb3f_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.8.1-h9a6d368_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-gpl-tools-5.8.1-h9a6d368_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-tools-5.8.1-h39f12f2_2.conda + - pypi: https://files.pythonhosted.org/packages/e4/15/eb91fe1e7fede7491076f46a196a4d63de1de0cb0d2a29feaf318a7496da/aim-3.28.0-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/ef/a6/73be7c95aeba0e22e596a7f2206eebcc631516dfbb6d6d7057719d475d28/aim-ui-3.28.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/53/13/207ebb5b2315640a68378c31cb31cfe1182373d11a813bd52219c83700a7/aimrecords-0.0.7-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/97/65/4facb46715fb7bf9b3f22930dd04165fcc74991366bedd74740c82a29d70/aimrocks-0.5.2-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/8e/ad/a2f3964aa37da5a4c94c1e5f3934d6ac1333f991f675fcf08a618397a413/aiobotocore-2.25.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bc/8a/340a1555ae33d7354dbca4faa54948d76d89a27ceef032c8c3bc661d003e/aiofiles-25.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/eb/d3/7f68bc02a67716fe80f063e19adbd80a642e30682ce74071269e17d2dba1/aiohttp-3.13.2-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/10/a1/510b0a7fadc6f43a6ce50152e69dbd86415240835868bb0bd9b5b88b1e06/aioitertools-0.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a5/32/7df1d81ec2e50fb661944a35183d87e62d3f6c6d9f8aff64a4f245226d55/alembic-1.17.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-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/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2f/f5/c36551e93acba41a59939ae6a0fb77ddb3f2e8e8caa716410c65f7341f72/asgi_lifespan-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/03/58572025c77b9e6027155b272a1b96298e711cd4f95c24967f7137ab0c4b/base58-2.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f3/cf/e24d08b37cd318754a8e94906c8b34b88676899aad1907ff6942311f13c4/boto3-1.40.70-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/d2/507fd0ee4dd574d2bdbdeac5df83f39d2cae1ffe97d4622cca6f6bab39f1/botocore-1.40.70-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/c5/1e741d26306c42e2bf6ab740b2202872727e0f606033c9dd713f8b93f5a8/cachetools-6.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/70/7d/9bc192684cea499815ff478dfcdc13835ddf401365057044fb721ec6bddb/certifi-2025.11.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4f/8b/f0e4c441227ba756aafbe78f117485b25bb26b1c059d01f137fa6d14896b/cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/ed/27/c6491ff4954e58a10f69ad90aca8a1b6fe9c5d3c6f380907af3c37435b59/charset_normalizer-3.4.4-cp311-cp311-macosx_10_9_universal2.whl + - pypi: https://files.pythonhosted.org/packages/db/d3/9dcc0f5797f070ec8edf30fbadfb200e71d9db6b84d211e3b2085a7589a0/click-8.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/5c/dbfc73329726aef26dbf7fefef81b8a2afd1789343a579ea6d99bf15d26e/coverage-7.11.3-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/1d/42/9c391dd801d6cf0d561b5890549d4b27bafcc53b39c31a817e69d87c625b/cryptography-46.0.3-cp311-abi3-macosx_10_9_universal2.whl + - pypi: https://files.pythonhosted.org/packages/94/fd/2e6f7d706899cc08690c5f6641e2ffbfffe019e8f16ce77104caa5730910/fastapi-0.121.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/91/7216b27286936c16f5b4d0c530087e4a54eead683e6b0b73dd0c64844af6/filelock-3.20.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6e/ef/0e8f1fe32f8a53dd26bdd1f9347efe0778b0fddf62789ea683f4cc7d787d/frozenlist-1.8.0-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/eb/02/a6b21098b1d5d6249b7c5ab69dde30108a71e4e819d4a9778f1de1d5b70d/fsspec-2025.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/b4/b9b800c45527aadd64d5b442f9b932b00648617eb5d63d2c7a6587b7cafc/jmespath-1.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/87/fb/99f81ac72ae23375f22b7afdb7642aba97c00a713c217124420147681a2f/mako-1.3.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e1/2e/5898933336b61975ce9dc04decbc0a7f2fee78c30353c5efba7f2d6ff27a/markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/4d/e1/866a5d77be6ea435711bef2a4291eed11032679b6b28b56b4776ab06ba3e/multidict-6.7.0-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/0f/e0/1e96c3d4266a06d4b0197ace5356d67d937d8358e2ee3ffac71faa843724/mypy-1.18.2-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3b/6a/64c25a089e8537441fe67c09ecb7f3f7fb5d98cd04faf01f605d43aca41c/numcodecs-0.16.3-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b1/29/c028a0731e202035f0e2e0bfbf1a3e46ad6c628cbb17f6f1cc9eea5d9ff1/pathlib_abc-0.5.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2e/05/069b1f8a2e4b5a37493da6c5868531c3f77b85e716ad7a590ef87d58730d/pillow-12.0.0-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d3/1d/11605e99ac8ea9435651ee71ab4cb4bf03f0949586246476a25aadfec54a/propcache-0.4.1-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/68/3a/9f93cff5c025029a36d9a92fef47220ab4692ee7f2be0fba9f92813d0cb8/psutil-7.1.3-cp36-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/d4/3b/c95c24acc022957b0fad73ce9b6431fe3ddf164b6dd742d5b7b03f806457/pybigwig-0.3.24.tar.gz + - pypi: https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/2f/e68750da9b04856e2a7ec56fc6f034a5a79775e9b9a81882252789873798/pydantic-2.12.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/12/44/37e403fd9455708b3b942949e1d7febc02167662bf1a7da5b78ee1ea2842/pydantic_core-2.41.5-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/c1/60/5d4751ba3f4a40a6891f24eec885f51afd78d208498268c734e256fb13c4/pydantic_settings-2.12.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/0b/fadfd7d0088efa3ba0cdcdbb51d093e18d3700f6f88634aa8387106394a4/pyfaidx-0.9.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/72/99/cafef234114a3b6d9f3aaed0723b437c40c57bdb7b3e4c3a575bc4890052/pytest-9.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/35/f8b19922b6a25bc0880171a2f1a003eaeb93657475193ab516fd87cac9da/pytest_asyncio-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5a/cc/06253936f4a7fa2e0f48dfe6d851d9c56df896a9ab09ac019d70b760619c/pytest_mock-3.15.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/87/d5/81d38a91c1fdafb6711f053f5a9b92ff788013b19821257c2c38c1e132df/pytest_sugar-1.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/1b/a298b06749107c305e1fe0f814c6c74aea7b2f1e10989cb30f544a1b3253/python_dotenv-1.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/c0/3848f4006f7e164ee20833ca984067e4b3fc99fe7f1dfa88b4927e681299/restrictedpython-8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2d/fc/56cba14af8ad8fd020c85b6e44328520ac55939bb1f9d01444ad470504cb/s3fs-2025.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/f0/ae7ca09223a81a1d890b2557186ea015f6e0502e9b8cb8e1813f1d8cfa4e/s3transfer-0.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/d5/4abd13b245c7d91bdf131d4916fd9e96a584dac74215f8b5bc945206a974/sqlalchemy-2.0.44-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/a3/e0/021c772d6a662f43b63044ab481dc6ac7592447605b5b35a957785363122/starlette-0.49.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/d5/141f53d7c1eb2a80e6d3e9a390228c3222c27705cbe7f048d3623053f3ca/termcolor-3.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/86/7f/d8fffe6a7aefdb61bced88fcb5e280cfd71e08939da5894161bd71bea022/tomli-2.3.0-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2d/32/2569fc0a8c7215fdb55bfe1aa8fe5dada6042c4918625ce13be72eb434ed/universal_pathlib-0.3.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ee/d9/d88e73ca598f4f6ff671fb5fde8a32925c2e08a637303a1d12883c7305fa/uvicorn-0.38.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/86/f2/10b55821dd40eb696ce4704a87d57774696f9451108cff0d2824c97e0f97/websockets-15.0.1-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/31/25/3e8cc2c46b5329c5957cec959cb76a10718e1a513309c31399a4dad07eb3/wrapt-1.17.3-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/c1/da/8da9f6a53f67b5106ffe902c6fa0164e10398d4e150d85838b82f424072a/yarl-1.22.0-cp311-cp311-macosx_11_0_arm64.whl + dev-cpu: + channels: + - url: https://conda.anaconda.org/rapidsai/ + - url: https://conda.anaconda.org/conda-forge/ + - url: https://conda.anaconda.org/nvidia/ + - url: https://conda.anaconda.org/bioconda/ + - url: https://conda.anaconda.org/dataloading/ + indexes: + - https://pypi.org/simple + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-6_kmp_llvm.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_8.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.10.5-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.11.14-py311hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gmpy2-2.2.1-py311h92a432a_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.44-h1aa0949_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250512.1-cxx17_hba17884_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-38_h5875eb1_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-38_hfef963f_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h9ec8514_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-h767d61c_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.12.1-default_h7f8ec31_1002.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-38_h5e43f62_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-devel-5.8.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-6.31.1-h49aed37_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.0-hee844dc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h8f9b012_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-h4852527_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.8.0-cpu_mkl_h09b866c_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.2-he9a06e4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.1-ha9997c6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.1-h26afc86_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-21.1.5-h4922eb0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py311h3778330_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2025.3.0-h0e700b2_462.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mpc-1.3.1-h24ddda3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.1-h90cbb55_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.5-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.3.4-py311h2e04523_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.0-h26f9b46_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/optree-0.17.0-py311hdf67eae_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.3.3-py311hed34c8f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-25.3-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-2.13.6-pyhc790b64_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-abi-4-hd8ed1ab_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-2.13.6-pyh217bc35_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.11.0-he550d4f_1_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.11-8_cp311.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.8.0-cpu_mkl_py311_hcfbaf12_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-cpu-2.8.0-cpu_mkl_hc60beec_102.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/sleef-3.9.0-ha0421bc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2022.3.0-h8d10470_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.8.1-hbcc6ac9_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-gpl-tools-5.8.1-hbcc6ac9_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-tools-5.8.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda + - pypi: https://files.pythonhosted.org/packages/d1/a2/cc8aea5535022f1b3ad1dc4ab971339bc77f91612961aa95c6bda5b2240a/aim-3.28.0-cp311-cp311-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ef/a6/73be7c95aeba0e22e596a7f2206eebcc631516dfbb6d6d7057719d475d28/aim-ui-3.28.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/53/13/207ebb5b2315640a68378c31cb31cfe1182373d11a813bd52219c83700a7/aimrecords-0.0.7-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/01/11/3fcb62df83e2f147ff787b7aad6b934512016fbf38f217dd3ce7fbe1f03b/aimrocks-0.5.2-cp311-cp311-manylinux_2_24_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/8e/ad/a2f3964aa37da5a4c94c1e5f3934d6ac1333f991f675fcf08a618397a413/aiobotocore-2.25.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bc/8a/340a1555ae33d7354dbca4faa54948d76d89a27ceef032c8c3bc661d003e/aiofiles-25.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6b/f3/083907ee3437425b4e376aa58b2c915eb1a33703ec0dc30040f7ae3368c6/aiohttp-3.13.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/10/a1/510b0a7fadc6f43a6ce50152e69dbd86415240835868bb0bd9b5b88b1e06/aioitertools-0.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a5/32/7df1d81ec2e50fb661944a35183d87e62d3f6c6d9f8aff64a4f245226d55/alembic-1.17.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-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/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2f/f5/c36551e93acba41a59939ae6a0fb77ddb3f2e8e8caa716410c65f7341f72/asgi_lifespan-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/03/58572025c77b9e6027155b272a1b96298e711cd4f95c24967f7137ab0c4b/base58-2.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f3/cf/e24d08b37cd318754a8e94906c8b34b88676899aad1907ff6942311f13c4/boto3-1.40.70-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/d2/507fd0ee4dd574d2bdbdeac5df83f39d2cae1ffe97d4622cca6f6bab39f1/botocore-1.40.70-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/c5/1e741d26306c42e2bf6ab740b2202872727e0f606033c9dd713f8b93f5a8/cachetools-6.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/70/7d/9bc192684cea499815ff478dfcdc13835ddf401365057044fb721ec6bddb/certifi-2025.11.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/91/500d892b2bf36529a75b77958edfcd5ad8e2ce4064ce2ecfeab2125d72d1/cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/6d/fc/de9cce525b2c5b94b47c70a4b4fb19f871b24995c728e957ee68ab1671ea/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/db/d3/9dcc0f5797f070ec8edf30fbadfb200e71d9db6b84d211e3b2085a7589a0/click-8.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/56/9e/0677e78b1e6a13527f39c4b39c767b351e256b333050539861c63f98bd61/coverage-7.11.3-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c9/56/e7e69b427c3878352c2fb9b450bd0e19ed552753491d39d7d0a2f5226d41/cryptography-46.0.3-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/94/fd/2e6f7d706899cc08690c5f6641e2ffbfffe019e8f16ce77104caa5730910/fastapi-0.121.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/b1/71a477adc7c36e5fb628245dfbdea2166feae310757dea848d02bd0689fd/frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1f/8e/abdd3f14d735b2929290a018ecf133c901be4874b858dd1c604b9319f064/greenlet-3.2.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/b4/b9b800c45527aadd64d5b442f9b932b00648617eb5d63d2c7a6587b7cafc/jmespath-1.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/87/fb/99f81ac72ae23375f22b7afdb7642aba97c00a713c217124420147681a2f/mako-1.3.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a8/9f/78f8761c2705d4c6d7516faed63c0ebdac569f6db1bef95e0d5218fdc146/multidict-6.7.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1a/52/ec4a061dd599eb8179d5411d99775bec2a20542505988f40fc2fee781068/mypy-1.18.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b6/0f/49d1f74a216149240c4b9403218111f11670bd11af0919fda357bb056bf2/numcodecs-0.16.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b1/29/c028a0731e202035f0e2e0bfbf1a3e46ad6c628cbb17f6f1cc9eea5d9ff1/pathlib_abc-0.5.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/1e/db9470f2d030b4995083044cd8738cdd1bf773106819f6d8ba12597d5352/pillow-12.0.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/6a/57f43e054fb3d3a56ac9fc532bc684fc6169a26c75c353e65425b3e56eef/propcache-0.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ce/b1/5f49af514f76431ba4eea935b8ad3725cdeb397e9245ab919dbc1d1dc20f/psutil-7.1.3-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/34/72/f52aaea9c9f8265b259b154a197a3c8e16967ff5e7628468f8f1a8db9971/pyBigWig-0.3.24-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/2f/e68750da9b04856e2a7ec56fc6f034a5a79775e9b9a81882252789873798/pydantic-2.12.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/be/8fed28dd0a180dca19e72c233cbf58efa36df055e5b9d90d64fd1740b828/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c1/60/5d4751ba3f4a40a6891f24eec885f51afd78d208498268c734e256fb13c4/pydantic_settings-2.12.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/0b/fadfd7d0088efa3ba0cdcdbb51d093e18d3700f6f88634aa8387106394a4/pyfaidx-0.9.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0b/8b/6300fb80f858cda1c51ffa17075df5d846757081d11ab4aa35cef9e6258b/pytest-9.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/35/f8b19922b6a25bc0880171a2f1a003eaeb93657475193ab516fd87cac9da/pytest_asyncio-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5a/cc/06253936f4a7fa2e0f48dfe6d851d9c56df896a9ab09ac019d70b760619c/pytest_mock-3.15.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/87/d5/81d38a91c1fdafb6711f053f5a9b92ff788013b19821257c2c38c1e132df/pytest_sugar-1.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/1b/a298b06749107c305e1fe0f814c6c74aea7b2f1e10989cb30f544a1b3253/python_dotenv-1.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/c0/3848f4006f7e164ee20833ca984067e4b3fc99fe7f1dfa88b4927e681299/restrictedpython-8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2d/fc/56cba14af8ad8fd020c85b6e44328520ac55939bb1f9d01444ad470504cb/s3fs-2025.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/f0/ae7ca09223a81a1d890b2557186ea015f6e0502e9b8cb8e1813f1d8cfa4e/s3transfer-0.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/94/2d/fdb9246d9d32518bda5d90f4b65030b9bf403a935cfe4c36a474846517cb/sqlalchemy-2.0.44-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a3/e0/021c772d6a662f43b63044ab481dc6ac7592447605b5b35a957785363122/starlette-0.49.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/d5/141f53d7c1eb2a80e6d3e9a390228c3222c27705cbe7f048d3623053f3ca/termcolor-3.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/da/75dfd804fc11e6612846758a23f13271b76d577e299592b4371a4ca4cd09/tomli-2.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2d/32/2569fc0a8c7215fdb55bfe1aa8fe5dada6042c4918625ce13be72eb434ed/universal_pathlib-0.3.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ee/d9/d88e73ca598f4f6ff671fb5fde8a32925c2e08a637303a1d12883c7305fa/uvicorn-0.38.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/93/1f/5d6dbf551766308f6f50f8baf8e9860be6182911e8106da7a7f73785f4c4/websockets-15.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5d/8f/a32a99fc03e4b37e31b57cb9cefc65050ea08147a8ce12f288616b05ef54/wrapt-1.17.3-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/46/00/71b90ed48e895667ecfb1eaab27c1523ee2fa217433ed77a73b13205ca4b/yarl-1.22.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_8.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.10.5-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.11.14-py311hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gmp-6.3.0-h7bae524_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gmpy2-2.2.1-py311hd340a2e_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20250512.1-cxx17_hd41c47c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-38_h51639a9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-38_hb0561ab_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-21.1.5-hf598326_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-he5f378a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-hfcf01ff_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-h742603c_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-38_hd9741b5_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-devel-5.8.1-h39f12f2_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_ha158390_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-6.31.1-h658db43_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.0-h8adb53f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtorch-2.8.0-cpu_generic_h0fc8bc6_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-21.1.5-h4a912ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py311ha9b3269_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mpc-1.3.1-h8f1351a_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mpfr-4.2.1-hb693164_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.5-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nomkl-1.0-h5ca1d4c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.3.4-py311h8685306_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.0-h5503f6c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/optree-0.17.0-py311h5a5e7c7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.3.3-py311hdb8e4fa_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-25.3-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-2.13.6-pyhc790b64_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-abi-4-hd8ed1ab_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-2.13.6-pyh217bc35_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.11.0-h3ba56d0_1_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.11-8_cp311.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pytorch-2.8.0-cpu_generic_py311_hf0c13c8_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pytorch-cpu-2.8.0-cpu_generic_py311_h510b526_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sleef-3.9.0-hb028509_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h892fb3f_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.8.1-h9a6d368_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-gpl-tools-5.8.1-h9a6d368_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-tools-5.8.1-h39f12f2_2.conda + - pypi: https://files.pythonhosted.org/packages/e4/15/eb91fe1e7fede7491076f46a196a4d63de1de0cb0d2a29feaf318a7496da/aim-3.28.0-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/ef/a6/73be7c95aeba0e22e596a7f2206eebcc631516dfbb6d6d7057719d475d28/aim-ui-3.28.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/53/13/207ebb5b2315640a68378c31cb31cfe1182373d11a813bd52219c83700a7/aimrecords-0.0.7-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/97/65/4facb46715fb7bf9b3f22930dd04165fcc74991366bedd74740c82a29d70/aimrocks-0.5.2-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/8e/ad/a2f3964aa37da5a4c94c1e5f3934d6ac1333f991f675fcf08a618397a413/aiobotocore-2.25.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bc/8a/340a1555ae33d7354dbca4faa54948d76d89a27ceef032c8c3bc661d003e/aiofiles-25.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/eb/d3/7f68bc02a67716fe80f063e19adbd80a642e30682ce74071269e17d2dba1/aiohttp-3.13.2-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/10/a1/510b0a7fadc6f43a6ce50152e69dbd86415240835868bb0bd9b5b88b1e06/aioitertools-0.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a5/32/7df1d81ec2e50fb661944a35183d87e62d3f6c6d9f8aff64a4f245226d55/alembic-1.17.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-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/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2f/f5/c36551e93acba41a59939ae6a0fb77ddb3f2e8e8caa716410c65f7341f72/asgi_lifespan-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/03/58572025c77b9e6027155b272a1b96298e711cd4f95c24967f7137ab0c4b/base58-2.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f3/cf/e24d08b37cd318754a8e94906c8b34b88676899aad1907ff6942311f13c4/boto3-1.40.70-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/d2/507fd0ee4dd574d2bdbdeac5df83f39d2cae1ffe97d4622cca6f6bab39f1/botocore-1.40.70-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/c5/1e741d26306c42e2bf6ab740b2202872727e0f606033c9dd713f8b93f5a8/cachetools-6.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/70/7d/9bc192684cea499815ff478dfcdc13835ddf401365057044fb721ec6bddb/certifi-2025.11.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4f/8b/f0e4c441227ba756aafbe78f117485b25bb26b1c059d01f137fa6d14896b/cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/ed/27/c6491ff4954e58a10f69ad90aca8a1b6fe9c5d3c6f380907af3c37435b59/charset_normalizer-3.4.4-cp311-cp311-macosx_10_9_universal2.whl + - pypi: https://files.pythonhosted.org/packages/db/d3/9dcc0f5797f070ec8edf30fbadfb200e71d9db6b84d211e3b2085a7589a0/click-8.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/5c/dbfc73329726aef26dbf7fefef81b8a2afd1789343a579ea6d99bf15d26e/coverage-7.11.3-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/1d/42/9c391dd801d6cf0d561b5890549d4b27bafcc53b39c31a817e69d87c625b/cryptography-46.0.3-cp311-abi3-macosx_10_9_universal2.whl + - pypi: https://files.pythonhosted.org/packages/94/fd/2e6f7d706899cc08690c5f6641e2ffbfffe019e8f16ce77104caa5730910/fastapi-0.121.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6e/ef/0e8f1fe32f8a53dd26bdd1f9347efe0778b0fddf62789ea683f4cc7d787d/frozenlist-1.8.0-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/b4/b9b800c45527aadd64d5b442f9b932b00648617eb5d63d2c7a6587b7cafc/jmespath-1.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/87/fb/99f81ac72ae23375f22b7afdb7642aba97c00a713c217124420147681a2f/mako-1.3.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4d/e1/866a5d77be6ea435711bef2a4291eed11032679b6b28b56b4776ab06ba3e/multidict-6.7.0-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/0f/e0/1e96c3d4266a06d4b0197ace5356d67d937d8358e2ee3ffac71faa843724/mypy-1.18.2-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3b/6a/64c25a089e8537441fe67c09ecb7f3f7fb5d98cd04faf01f605d43aca41c/numcodecs-0.16.3-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b1/29/c028a0731e202035f0e2e0bfbf1a3e46ad6c628cbb17f6f1cc9eea5d9ff1/pathlib_abc-0.5.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2e/05/069b1f8a2e4b5a37493da6c5868531c3f77b85e716ad7a590ef87d58730d/pillow-12.0.0-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d3/1d/11605e99ac8ea9435651ee71ab4cb4bf03f0949586246476a25aadfec54a/propcache-0.4.1-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/68/3a/9f93cff5c025029a36d9a92fef47220ab4692ee7f2be0fba9f92813d0cb8/psutil-7.1.3-cp36-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/d4/3b/c95c24acc022957b0fad73ce9b6431fe3ddf164b6dd742d5b7b03f806457/pybigwig-0.3.24.tar.gz + - pypi: https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/2f/e68750da9b04856e2a7ec56fc6f034a5a79775e9b9a81882252789873798/pydantic-2.12.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/12/44/37e403fd9455708b3b942949e1d7febc02167662bf1a7da5b78ee1ea2842/pydantic_core-2.41.5-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/c1/60/5d4751ba3f4a40a6891f24eec885f51afd78d208498268c734e256fb13c4/pydantic_settings-2.12.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/0b/fadfd7d0088efa3ba0cdcdbb51d093e18d3700f6f88634aa8387106394a4/pyfaidx-0.9.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0b/8b/6300fb80f858cda1c51ffa17075df5d846757081d11ab4aa35cef9e6258b/pytest-9.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/35/f8b19922b6a25bc0880171a2f1a003eaeb93657475193ab516fd87cac9da/pytest_asyncio-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5a/cc/06253936f4a7fa2e0f48dfe6d851d9c56df896a9ab09ac019d70b760619c/pytest_mock-3.15.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/87/d5/81d38a91c1fdafb6711f053f5a9b92ff788013b19821257c2c38c1e132df/pytest_sugar-1.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/1b/a298b06749107c305e1fe0f814c6c74aea7b2f1e10989cb30f544a1b3253/python_dotenv-1.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/c0/3848f4006f7e164ee20833ca984067e4b3fc99fe7f1dfa88b4927e681299/restrictedpython-8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2d/fc/56cba14af8ad8fd020c85b6e44328520ac55939bb1f9d01444ad470504cb/s3fs-2025.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/f0/ae7ca09223a81a1d890b2557186ea015f6e0502e9b8cb8e1813f1d8cfa4e/s3transfer-0.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/d5/4abd13b245c7d91bdf131d4916fd9e96a584dac74215f8b5bc945206a974/sqlalchemy-2.0.44-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/a3/e0/021c772d6a662f43b63044ab481dc6ac7592447605b5b35a957785363122/starlette-0.49.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/d5/141f53d7c1eb2a80e6d3e9a390228c3222c27705cbe7f048d3623053f3ca/termcolor-3.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/86/7f/d8fffe6a7aefdb61bced88fcb5e280cfd71e08939da5894161bd71bea022/tomli-2.3.0-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2d/32/2569fc0a8c7215fdb55bfe1aa8fe5dada6042c4918625ce13be72eb434ed/universal_pathlib-0.3.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ee/d9/d88e73ca598f4f6ff671fb5fde8a32925c2e08a637303a1d12883c7305fa/uvicorn-0.38.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/86/f2/10b55821dd40eb696ce4704a87d57774696f9451108cff0d2824c97e0f97/websockets-15.0.1-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/31/25/3e8cc2c46b5329c5957cec959cb76a10718e1a513309c31399a4dad07eb3/wrapt-1.17.3-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/c1/da/8da9f6a53f67b5106ffe902c6fa0164e10398d4e150d85838b82f424072a/yarl-1.22.0-cp311-cp311-macosx_11_0_arm64.whl + prod: + channels: + - url: https://conda.anaconda.org/rapidsai/ + - url: https://conda.anaconda.org/conda-forge/ + - url: https://conda.anaconda.org/nvidia/ + - url: https://conda.anaconda.org/bioconda/ + - url: https://conda.anaconda.org/dataloading/ + indexes: + - https://pypi.org/simple + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-6_kmp_llvm.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.2-h39aace5_0.conda + - conda: https://conda.anaconda.org/dataloading/linux-64/bigwig-loader-0.2.1-py311h9bf148f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.44-h9d8b0ac_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.44-h4852527_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/biopython-1.86-py311h49ec1c0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_8.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.10.5-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.11.14-py311hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/crc32c-2.8-py311haee01d2_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-64-12.8.90-ha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_linux-64-12.8.93-ha770c72_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-crt-tools-12.8.93-ha770c72_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-12.8.90-h5888daf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-dev-12.8.90-h5888daf_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-dev_linux-64-12.8.90-h3f2d84a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-static-12.8.90-h5888daf_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-static_linux-64-12.8.90-h3f2d84a_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart_linux-64-12.8.90-h3f2d84a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cuobjdump-12.8.90-hbd13f7d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cupti-12.8.90-h5888daf_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-driver-dev_linux-64-12.8.90-h3f2d84a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-12.8.93-hcdd1206_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvcc-dev_linux-64-12.8.93-he91c749_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-impl-12.8.93-h85509e4_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-tools-12.8.93-he02047a_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc_linux-64-12.8.93-he0b4e1d_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvdisasm-12.8.90-hbd13f7d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvrtc-12.8.93-h5888daf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvtx-12.8.90-h5888daf_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-64-12.8.93-ha770c72_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-impl-12.8.93-he02047a_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-tools-12.8.93-he02047a_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.8-h5d125a7_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cudnn-9.10.2.21-hbcb9cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cupy-13.6.0-py311h72da3fd_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cupy-core-13.6.0-py311he30c881_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cython-3.2.0-py311h0daaf2c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/deprecated-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/donfig-0.8.1.post1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fastrlock-0.8.3-py311hc665b79_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-14.3.0-hd9e9e21_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-14.3.0-h298d278_12.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gmpy2-2.2.1-py311h92a432a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-14.3.0-he663afc_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-14.3.0-h95f728e_12.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_8.conda + - conda: https://conda.anaconda.org/rapidsai/linux-64/kvikio-25.08.00-cuda12_py311_250806_2f72c39a.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.44-h1aa0949_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250127.1-cxx17_hbbce691_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-37_h5875eb1_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.76-h0b2e76d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-37_hfef963f_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcublas-12.8.4.1-h9ab20c4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcudnn-9.10.2.21-hf7e9902_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcudnn-dev-9.10.2.21-h58dd1b1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcudss-0.6.0.5-h58dd1b1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufft-11.3.3.83-h5888daf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufile-1.13.1.3-h628e99a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufile-dev-1.13.1.3-h5888daf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurand-10.3.9.90-h9ab20c4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcusolver-11.7.3.90-h9ab20c4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcusparse-12.5.8.93-h5888daf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h9ec8514_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-h767d61c_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-14.3.0-h85bb3a7_107.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-h767d61c_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.12.1-default_h7f8ec31_1002.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + - conda: https://conda.anaconda.org/rapidsai/linux-64/libkvikio-25.08.00-cuda12_9_250806_2f72c39a.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-37_h5e43f62_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-devel-5.8.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmagma-2.9.0-h19665d7_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnl-3.11.0-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnuma-2.0.18-hb9d3cd8_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvcomp-4.2.0.11-hb7e823c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvjitlink-12.9.86-hecca717_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h7460b1f_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-14.3.0-hd08acf3_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.0-hee844dc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h8f9b012_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-14.3.0-h85bb3a7_107.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-h4852527_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.10-h085a93f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.7.1-cuda126_mkl_hc2b21a2_300.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-257.10-h085a93f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.2-he9a06e4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.1-ha9997c6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.1-h26afc86_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-21.1.5-h4922eb0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py311h3778330_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2024.2.2-ha770c72_17.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mpc-1.3.1-h24ddda3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.1-h90cbb55_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.1.2-py311hdf67eae_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nccl-2.28.9.1-h4d09622_0.conda + - conda: https://conda.anaconda.org/bioconda/linux-64/ncls-0.0.70-py311haab0aaa_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.5-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numcodecs-0.16.1-py311hed34c8f_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py311h64a7726_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.0-h26f9b46_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/optree-0.17.0-py311hdf67eae_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.3.3-py311hed34c8f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathlib-abc-0.5.2-pyh9692d8f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-25.3-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.12.4-pyh3cfb1c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.41.5-py311h902ca64_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-settings-2.12.0-pyh3cfb1c2_0.conda + - conda: https://conda.anaconda.org/bioconda/noarch/pyfaidx-0.9.0.3-pyhdfd78af_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.11.0-he550d4f_1_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.11-8_cp311.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.7.1-cuda126_mkl_py311_hcada2b2_300.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-gpu-2.7.1-cuda126_mkl_ha999a5f_300.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/bioconda/linux-64/pyvcf3-1.0.4-py311haab0aaa_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py311h3778330_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-60.0-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/sleef-3.9.0-ha0421bc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_8.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.13.0-h8d10470_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/triton-3.3.0-cuda126py311h126903f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/universal_pathlib-0.3.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.17.3-py311h49ec1c0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.8.1-hbcc6ac9_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-gpl-tools-5.8.1-hbcc6ac9_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-tools-5.8.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.1.3-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda + - pypi: https://files.pythonhosted.org/packages/8e/ad/a2f3964aa37da5a4c94c1e5f3934d6ac1333f991f675fcf08a618397a413/aiobotocore-2.25.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6b/f3/083907ee3437425b4e376aa58b2c915eb1a33703ec0dc30040f7ae3368c6/aiohttp-3.13.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/10/a1/510b0a7fadc6f43a6ce50152e69dbd86415240835868bb0bd9b5b88b1e06/aioitertools-0.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/d2/507fd0ee4dd574d2bdbdeac5df83f39d2cae1ffe97d4622cca6f6bab39f1/botocore-1.40.70-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/b1/71a477adc7c36e5fb628245dfbdea2166feae310757dea848d02bd0689fd/frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/b4/b9b800c45527aadd64d5b442f9b932b00648617eb5d63d2c7a6587b7cafc/jmespath-1.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a8/9f/78f8761c2705d4c6d7516faed63c0ebdac569f6db1bef95e0d5218fdc146/multidict-6.7.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/52/6a/57f43e054fb3d3a56ac9fc532bc684fc6169a26c75c353e65425b3e56eef/propcache-0.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/2d/fc/56cba14af8ad8fd020c85b6e44328520ac55939bb1f9d01444ad470504cb/s3fs-2025.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/46/00/71b90ed48e895667ecfb1eaab27c1523ee2fa217433ed77a73b13205ca4b/yarl-1.22.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_8.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.10.5-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-38_h51639a9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-38_hb0561ab_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-21.1.5-hf598326_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-he5f378a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-hfcf01ff_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-h742603c_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-38_hd9741b5_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-devel-5.8.1-h39f12f2_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_ha158390_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.0-h8adb53f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-21.1.5-h4a912ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.3.4-py311h8685306_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.0-h5503f6c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.3.3-py311hdb8e4fa_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-25.3-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.11.0-h3ba56d0_1_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.11-8_cp311.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h892fb3f_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.8.1-h9a6d368_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-gpl-tools-5.8.1-h9a6d368_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-tools-5.8.1-h39f12f2_2.conda + - pypi: https://files.pythonhosted.org/packages/8e/ad/a2f3964aa37da5a4c94c1e5f3934d6ac1333f991f675fcf08a618397a413/aiobotocore-2.25.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/eb/d3/7f68bc02a67716fe80f063e19adbd80a642e30682ce74071269e17d2dba1/aiohttp-3.13.2-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/10/a1/510b0a7fadc6f43a6ce50152e69dbd86415240835868bb0bd9b5b88b1e06/aioitertools-0.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.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/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/d2/507fd0ee4dd574d2bdbdeac5df83f39d2cae1ffe97d4622cca6f6bab39f1/botocore-1.40.70-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6e/ef/0e8f1fe32f8a53dd26bdd1f9347efe0778b0fddf62789ea683f4cc7d787d/frozenlist-1.8.0-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/eb/02/a6b21098b1d5d6249b7c5ab69dde30108a71e4e819d4a9778f1de1d5b70d/fsspec-2025.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/b4/b9b800c45527aadd64d5b442f9b932b00648617eb5d63d2c7a6587b7cafc/jmespath-1.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4d/e1/866a5d77be6ea435711bef2a4291eed11032679b6b28b56b4776ab06ba3e/multidict-6.7.0-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/3b/6a/64c25a089e8537441fe67c09ecb7f3f7fb5d98cd04faf01f605d43aca41c/numcodecs-0.16.3-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b1/29/c028a0731e202035f0e2e0bfbf1a3e46ad6c628cbb17f6f1cc9eea5d9ff1/pathlib_abc-0.5.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d3/1d/11605e99ac8ea9435651ee71ab4cb4bf03f0949586246476a25aadfec54a/propcache-0.4.1-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/82/2f/e68750da9b04856e2a7ec56fc6f034a5a79775e9b9a81882252789873798/pydantic-2.12.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/12/44/37e403fd9455708b3b942949e1d7febc02167662bf1a7da5b78ee1ea2842/pydantic_core-2.41.5-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/c1/60/5d4751ba3f4a40a6891f24eec885f51afd78d208498268c734e256fb13c4/pydantic_settings-2.12.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/0b/fadfd7d0088efa3ba0cdcdbb51d093e18d3700f6f88634aa8387106394a4/pyfaidx-0.9.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/1b/a298b06749107c305e1fe0f814c6c74aea7b2f1e10989cb30f544a1b3253/python_dotenv-1.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2d/fc/56cba14af8ad8fd020c85b6e44328520ac55939bb1f9d01444ad470504cb/s3fs-2025.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2d/32/2569fc0a8c7215fdb55bfe1aa8fe5dada6042c4918625ce13be72eb434ed/universal_pathlib-0.3.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/25/3e8cc2c46b5329c5957cec959cb76a10718e1a513309c31399a4dad07eb3/wrapt-1.17.3-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/c1/da/8da9f6a53f67b5106ffe902c6fa0164e10398d4e150d85838b82f424072a/yarl-1.22.0-cp311-cp311-macosx_11_0_arm64.whl +packages: +- conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 + md5: d7c89558ba9fa0495403155b64376d81 + license: None + purls: [] + size: 2562 + timestamp: 1578324546067 +- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + build_number: 16 + sha256: fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22 + md5: 73aaf86a425cc6e73fcf236a5a46396d + depends: + - _libgcc_mutex 0.1 conda_forge + - libgomp >=7.5.0 + constrains: + - openmp_impl 9999 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 23621 + timestamp: 1650670423406 +- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-6_kmp_llvm.conda + build_number: 6 + sha256: 2425bafa327e15e4ff5faa17671ecdae658284ff52ebbd2ad24d1c51622d2300 + md5: 197811678264cb9da0d2ea0726a70661 + depends: + - llvm-openmp >=9.0.1 + license: BSD-3-Clause + purls: [] + size: 8298 + timestamp: 1762822449517 +- pypi: https://files.pythonhosted.org/packages/d1/a2/cc8aea5535022f1b3ad1dc4ab971339bc77f91612961aa95c6bda5b2240a/aim-3.28.0-cp311-cp311-manylinux_2_28_x86_64.whl + name: aim + version: 3.28.0 + sha256: 797ea9b442ed0e666cfe2f05ac7cb6b7837aeab3e7f8727cdcc689297a9ebe7b + requires_dist: + - aim-ui==3.28.0 + - aimrecords==0.0.7 + - aimrocks==0.5.* + - cachetools>=4.0.0 + - click>=7.0 + - cryptography>=3.0 + - filelock>=3.3.0,<4 + - numpy>=1.12.0,<3 + - psutil>=5.6.7 + - restrictedpython>=5.1 + - tqdm>=4.20.0 + - aiofiles>=0.5.0 + - alembic>=1.5.0,<2 + - fastapi>=0.69.0,<1 + - jinja2>=2.10.0,<4 + - pytz>=2019.1 + - sqlalchemy>=1.4.1 + - uvicorn>=0.12.0,<1 + - pillow>=8.0.0 + - packaging>=15.0 + - python-dateutil + - requests + - websockets + - boto3 + requires_python: '>=3.7.0' +- pypi: https://files.pythonhosted.org/packages/e4/15/eb91fe1e7fede7491076f46a196a4d63de1de0cb0d2a29feaf318a7496da/aim-3.28.0-cp311-cp311-macosx_11_0_arm64.whl + name: aim + version: 3.28.0 + sha256: a05f5b2037e91e94b2fc8800572883612884c8c6280e7ed0fdad89492625b742 + requires_dist: + - aim-ui==3.28.0 + - aimrecords==0.0.7 + - aimrocks==0.5.* + - cachetools>=4.0.0 + - click>=7.0 + - cryptography>=3.0 + - filelock>=3.3.0,<4 + - numpy>=1.12.0,<3 + - psutil>=5.6.7 + - restrictedpython>=5.1 + - tqdm>=4.20.0 + - aiofiles>=0.5.0 + - alembic>=1.5.0,<2 + - fastapi>=0.69.0,<1 + - jinja2>=2.10.0,<4 + - pytz>=2019.1 + - sqlalchemy>=1.4.1 + - uvicorn>=0.12.0,<1 + - pillow>=8.0.0 + - packaging>=15.0 + - python-dateutil + - requests + - websockets + - boto3 + requires_python: '>=3.7.0' +- pypi: https://files.pythonhosted.org/packages/ef/a6/73be7c95aeba0e22e596a7f2206eebcc631516dfbb6d6d7057719d475d28/aim-ui-3.28.0.tar.gz + name: aim-ui + version: 3.28.0 + sha256: 77945a2a92295d4e82923cc0e722b0663a46e7e6bdafbef3b1ce9b0626f01f01 +- pypi: https://files.pythonhosted.org/packages/53/13/207ebb5b2315640a68378c31cb31cfe1182373d11a813bd52219c83700a7/aimrecords-0.0.7-py2.py3-none-any.whl + name: aimrecords + version: 0.0.7 + sha256: b9276890891c5fd68f817e20fc5d466a80c01e22fa468eaa979331448a75d601 + requires_dist: + - base58==2.0.1 + requires_python: '>=3.5.0' +- pypi: https://files.pythonhosted.org/packages/01/11/3fcb62df83e2f147ff787b7aad6b934512016fbf38f217dd3ce7fbe1f03b/aimrocks-0.5.2-cp311-cp311-manylinux_2_24_x86_64.whl + name: aimrocks + version: 0.5.2 + sha256: 762f7b41793165717a9e0589658cd81bffb54161295ec7403534d40692ac9281 +- pypi: https://files.pythonhosted.org/packages/97/65/4facb46715fb7bf9b3f22930dd04165fcc74991366bedd74740c82a29d70/aimrocks-0.5.2-cp311-cp311-macosx_11_0_arm64.whl + name: aimrocks + version: 0.5.2 + sha256: d74170021b17451881df18683eb0aa97417cb8b030b3dea425d7580891c22608 +- pypi: https://files.pythonhosted.org/packages/8e/ad/a2f3964aa37da5a4c94c1e5f3934d6ac1333f991f675fcf08a618397a413/aiobotocore-2.25.2-py3-none-any.whl + name: aiobotocore + version: 2.25.2 + sha256: 0cec45c6ba7627dd5e5460337291c86ac38c3b512ec4054ce76407d0f7f2a48f + requires_dist: + - aiohttp>=3.9.2,<4.0.0 + - aioitertools>=0.5.1,<1.0.0 + - botocore>=1.40.46,<1.40.71 + - python-dateutil>=2.1,<3.0.0 + - jmespath>=0.7.1,<2.0.0 + - multidict>=6.0.0,<7.0.0 + - wrapt>=1.10.10,<2.0.0 + - awscli>=1.42.46,<1.42.71 ; extra == 'awscli' + - boto3>=1.40.46,<1.40.71 ; extra == 'boto3' + - httpx>=0.25.1,<0.29 ; extra == 'httpx' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/bc/8a/340a1555ae33d7354dbca4faa54948d76d89a27ceef032c8c3bc661d003e/aiofiles-25.1.0-py3-none-any.whl + name: aiofiles + version: 25.1.0 + sha256: abe311e527c862958650f9438e859c1fa7568a141b22abcd015e120e86a85695 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl + name: aiohappyeyeballs + version: 2.6.1 + sha256: f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/6b/f3/083907ee3437425b4e376aa58b2c915eb1a33703ec0dc30040f7ae3368c6/aiohttp-3.13.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: aiohttp + version: 3.13.2 + sha256: a3b6fb0c207cc661fa0bf8c66d8d9b657331ccc814f4719468af61034b478592 + requires_dist: + - aiohappyeyeballs>=2.5.0 + - aiosignal>=1.4.0 + - async-timeout>=4.0,<6.0 ; python_full_version < '3.11' + - attrs>=17.3.0 + - frozenlist>=1.1.1 + - multidict>=4.5,<7.0 + - propcache>=0.2.0 + - yarl>=1.17.0,<2.0 + - aiodns>=3.3.0 ; extra == 'speedups' + - brotli ; platform_python_implementation == 'CPython' and extra == 'speedups' + - brotlicffi ; platform_python_implementation != 'CPython' and extra == 'speedups' + - backports-zstd ; python_full_version < '3.14' and platform_python_implementation == 'CPython' and extra == 'speedups' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/eb/d3/7f68bc02a67716fe80f063e19adbd80a642e30682ce74071269e17d2dba1/aiohttp-3.13.2-cp311-cp311-macosx_11_0_arm64.whl + name: aiohttp + version: 3.13.2 + sha256: 43dff14e35aba17e3d6d5ba628858fb8cb51e30f44724a2d2f0c75be492c55e9 + requires_dist: + - aiohappyeyeballs>=2.5.0 + - aiosignal>=1.4.0 + - async-timeout>=4.0,<6.0 ; python_full_version < '3.11' + - attrs>=17.3.0 + - frozenlist>=1.1.1 + - multidict>=4.5,<7.0 + - propcache>=0.2.0 + - yarl>=1.17.0,<2.0 + - aiodns>=3.3.0 ; extra == 'speedups' + - brotli ; platform_python_implementation == 'CPython' and extra == 'speedups' + - brotlicffi ; platform_python_implementation != 'CPython' and extra == 'speedups' + - backports-zstd ; python_full_version < '3.14' and platform_python_implementation == 'CPython' and extra == 'speedups' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/10/a1/510b0a7fadc6f43a6ce50152e69dbd86415240835868bb0bd9b5b88b1e06/aioitertools-0.13.0-py3-none-any.whl + name: aioitertools + version: 0.13.0 + sha256: 0be0292b856f08dfac90e31f4739432f4cb6d7520ab9eb73e143f4f2fa5259be + requires_dist: + - typing-extensions>=4.0 ; python_full_version < '3.10' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl + name: aiosignal + version: 1.4.0 + sha256: 053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e + requires_dist: + - frozenlist>=1.1.0 + - typing-extensions>=4.2 ; python_full_version < '3.13' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/a5/32/7df1d81ec2e50fb661944a35183d87e62d3f6c6d9f8aff64a4f245226d55/alembic-1.17.1-py3-none-any.whl + name: alembic + version: 1.17.1 + sha256: cbc2386e60f89608bb63f30d2d6cc66c7aaed1fe105bd862828600e5ad167023 + requires_dist: + - sqlalchemy>=1.4.0 + - mako + - typing-extensions>=4.12 + - tomli ; python_full_version < '3.11' + - tzdata ; extra == 'tz' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl + name: annotated-doc + version: 0.0.4 + sha256: 571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + name: annotated-types + version: 0.7.0 + sha256: 1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53 + requires_dist: + - typing-extensions>=4.0.0 ; python_full_version < '3.9' + requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda + sha256: e0ea1ba78fbb64f17062601edda82097fcf815012cf52bb704150a2668110d48 + md5: 2934f256a8acfe48f6ebb4fce6cde29c + depends: + - python >=3.9 + - typing-extensions >=4.0.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/annotated-types + size: 18074 + timestamp: 1733247158254 +- pypi: https://files.pythonhosted.org/packages/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl + name: anyio + version: 4.11.0 + sha256: 0287e96f4d26d4149305414d4e3bc32f0dcd0862365a4bddea19d7a1ec38c4fc + requires_dist: + - exceptiongroup>=1.0.2 ; python_full_version < '3.11' + - idna>=2.8 + - sniffio>=1.1 + - typing-extensions>=4.5 ; python_full_version < '3.13' + - trio>=0.31.0 ; extra == 'trio' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/2f/f5/c36551e93acba41a59939ae6a0fb77ddb3f2e8e8caa716410c65f7341f72/asgi_lifespan-2.1.0-py3-none-any.whl + name: asgi-lifespan + version: 2.1.0 + sha256: ed840706680e28428c01e14afb3875d7d76d3206f3d5b2f2294e059b5c23804f + requires_dist: + - sniffio + requires_python: '>=3.7' +- conda: https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.2-h39aace5_0.conda + sha256: a9c114cbfeda42a226e2db1809a538929d2f118ef855372293bd188f71711c48 + md5: 791365c5f65975051e4e017b5da3abf5 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: GPL-2.0-or-later + license_family: GPL + purls: + - pkg:pypi/attr + size: 68072 + timestamp: 1756738968573 +- pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + name: attrs + version: 25.4.0 + sha256: adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/3c/03/58572025c77b9e6027155b272a1b96298e711cd4f95c24967f7137ab0c4b/base58-2.0.1-py3-none-any.whl + name: base58 + version: 2.0.1 + sha256: 447adc750d6b642987ffc6d397ecd15a799852d5f6a1d308d384500243825058 + requires_python: '>=3.5' +- pypi: ./ + name: bigwig-loader + version: 0.2.1.post7+g438ad6399.d20251112 + sha256: dc1493380fe72ce5a90b4882deb13b24906e91d0ede0b25b80cce67419c80801 + requires_dist: + - numpy + - cupy + - cython + - pandas + - ncls + - pyfaidx + - pydantic + - pydantic-settings + - python-dotenv + - universal-pathlib + - natsort + - mypy ; extra == 'test' + - pytest ; extra == 'test' + - pybigwig ; extra == 'test' + - bigwig-loader[test] ; extra == 'dev' + - black ; extra == 'dev' + - isort ; extra == 'dev' + - bandit ; extra == 'dev' + - pip-tools ; extra == 'dev' + - pre-commit ; extra == 'dev' + requires_python: '>=3.10' + editable: true +- conda: https://conda.anaconda.org/dataloading/linux-64/bigwig-loader-0.2.1-py311h9bf148f_0.conda + sha256: 295759f73eb5a44ae33af6b250f61be5c412a56ebb17676cb750f23c42482504 + md5: 6ce0b746fff4f7368ca2484c055e7f45 + depends: + - cupy >=12.0.0 + - cython + - kvikio >=24.06.00,<=25.08.00 + - libgcc >=15 + - natsort + - ncls + - numpy >=1.26.4,<2.0a0 + - pandas + - pydantic + - pydantic-settings + - pyfaidx + - python >=3.11,<3.12.0a0 + - python-dotenv + - python_abi 3.11.* *_cp311 + - universal_pathlib + license: Apache-2.0 + size: 295306 + timestamp: 1761230326189 +- conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.44-h9d8b0ac_5.conda + sha256: 62cd59d8e63a7d564e0c1be6864d1a57360c76ed5c813d8d178c88d79a989fc3 + md5: 071454f683b847f604f85b5284555dbf + depends: + - ld_impl_linux-64 2.44 h1aa0949_5 + - sysroot_linux-64 + - zstd >=1.5.7,<1.6.0a0 + license: GPL-3.0-only + purls: + - pkg:pypi/binutils-impl-linux-64 + size: 3663196 + timestamp: 1762674679053 +- conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.44-h4852527_5.conda + sha256: 3423a6a3b14daf86bb3590a44c94c2f0415dffa4f0c3855acaa2ac52fb57515b + md5: 49bfee16b8ccbbe72aee2c806d49d34b + depends: + - binutils_impl_linux-64 2.44 h9d8b0ac_5 + license: GPL-3.0-only + purls: + - pkg:pypi/binutils-linux-64 + size: 36189 + timestamp: 1762674702264 +- conda: https://conda.anaconda.org/conda-forge/linux-64/biopython-1.86-py311h49ec1c0_0.conda + sha256: edb6339d4714f642d7d97649b4e379cc513a15f1e666a4a3d19fec4a883c2296 + md5: e52878a5c94017b6f7c033ba7d26bc6b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - numpy + - python >=3.11,<3.12.0a0 + - python_abi 3.11.* *_cp311 + license: LicenseRef-Biopython + purls: + - pkg:pypi/biopython + size: 3323306 + timestamp: 1761734827058 +- pypi: https://files.pythonhosted.org/packages/f3/cf/e24d08b37cd318754a8e94906c8b34b88676899aad1907ff6942311f13c4/boto3-1.40.70-py3-none-any.whl + name: boto3 + version: 1.40.70 + sha256: e8c2f4f4cb36297270f1023ebe5b100333e0e88ab6457a9687d80143d2e15bf9 + requires_dist: + - botocore>=1.40.70,<1.41.0 + - jmespath>=0.7.1,<2.0.0 + - s3transfer>=0.14.0,<0.15.0 + - botocore[crt]>=1.21.0,<2.0a0 ; extra == 'crt' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/55/d2/507fd0ee4dd574d2bdbdeac5df83f39d2cae1ffe97d4622cca6f6bab39f1/botocore-1.40.70-py3-none-any.whl + name: botocore + version: 1.40.70 + sha256: 4a394ad25f5d9f1ef0bed610365744523eeb5c22de6862ab25d8c93f9f6d295c + requires_dist: + - jmespath>=0.7.1,<2.0.0 + - python-dateutil>=2.1,<3.0.0 + - urllib3>=1.25.4,<1.27 ; python_full_version < '3.10' + - urllib3>=1.25.4,!=2.2.0,<3 ; python_full_version >= '3.10' + - awscrt==0.27.6 ; extra == 'crt' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_8.conda + sha256: c30daba32ddebbb7ded490f0e371eae90f51e72db620554089103b4a6934b0d5 + md5: 51a19bba1b8ebfb60df25cde030b7ebc + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: bzip2-1.0.6 + license_family: BSD + purls: + - pkg:pypi/bzip2 + size: 260341 + timestamp: 1757437258798 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_8.conda + sha256: b456200636bd5fecb2bec63f7e0985ad2097cf1b83d60ce0b6968dffa6d02aa1 + md5: 58fd217444c2a5701a44244faf518206 + depends: + - __osx >=11.0 + license: bzip2-1.0.6 + license_family: BSD + purls: + - pkg:pypi/bzip2 + size: 125061 + timestamp: 1757437486465 +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.10.5-hbd8a1cb_0.conda + sha256: 3b5ad78b8bb61b6cdc0978a6a99f8dfb2cc789a451378d054698441005ecbdb6 + md5: f9e5fbc24009179e8b0409624691758a + depends: + - __unix + license: ISC + purls: + - pkg:pypi/ca-certificates + size: 155907 + timestamp: 1759649036195 +- pypi: https://files.pythonhosted.org/packages/96/c5/1e741d26306c42e2bf6ab740b2202872727e0f606033c9dd713f8b93f5a8/cachetools-6.2.1-py3-none-any.whl + name: cachetools + version: 6.2.1 + sha256: 09868944b6dde876dfd44e1d47e18484541eaf12f26f29b7af91b26cc892d701 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/70/7d/9bc192684cea499815ff478dfcdc13835ddf401365057044fb721ec6bddb/certifi-2025.11.12-py3-none-any.whl + name: certifi + version: 2025.11.12 + sha256: 97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/4f/8b/f0e4c441227ba756aafbe78f117485b25bb26b1c059d01f137fa6d14896b/cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl + name: cffi + version: 2.0.0 + sha256: 2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c + requires_dist: + - pycparser ; implementation_name != 'PyPy' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/d7/91/500d892b2bf36529a75b77958edfcd5ad8e2ce4064ce2ecfeab2125d72d1/cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: cffi + version: 2.0.0 + sha256: 8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26 + requires_dist: + - pycparser ; implementation_name != 'PyPy' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/6d/fc/de9cce525b2c5b94b47c70a4b4fb19f871b24995c728e957ee68ab1671ea/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: charset-normalizer + version: 3.4.4 + sha256: 840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/ed/27/c6491ff4954e58a10f69ad90aca8a1b6fe9c5d3c6f380907af3c37435b59/charset_normalizer-3.4.4-cp311-cp311-macosx_10_9_universal2.whl + name: charset-normalizer + version: 3.4.4 + sha256: 6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/db/d3/9dcc0f5797f070ec8edf30fbadfb200e71d9db6b84d211e3b2085a7589a0/click-8.3.0-py3-none-any.whl + name: click + version: 8.3.0 + sha256: 9b9f285302c6e3064f4330c05f05b81945b2a39544279343e6e7c5f27a9baddc + requires_dist: + - colorama ; sys_platform == 'win32' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/56/9e/0677e78b1e6a13527f39c4b39c767b351e256b333050539861c63f98bd61/coverage-7.11.3-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + name: coverage + version: 7.11.3 + sha256: 0542ddf6107adbd2592f29da9f59f5d9cff7947b5bb4f734805085c327dcffaa + requires_dist: + - tomli ; python_full_version <= '3.11' and extra == 'toml' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/5d/5c/dbfc73329726aef26dbf7fefef81b8a2afd1789343a579ea6d99bf15d26e/coverage-7.11.3-cp311-cp311-macosx_11_0_arm64.whl + name: coverage + version: 7.11.3 + sha256: 8d264402fc179776d43e557e1ca4a7d953020d3ee95f7ec19cc2c9d769277f06 + requires_dist: + - tomli ; python_full_version <= '3.11' and extra == 'toml' + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.11.14-py311hd8ed1ab_2.conda + noarch: generic + sha256: c871fe68dcc6b79b322e4fcf9f2b131162094c32a68d48c87aa8582995948a01 + md5: 43ed151bed1a0eb7181d305fed7cf051 + depends: + - python >=3.11,<3.12.0a0 + - python_abi * *_cp311 + license: Python-2.0 + purls: + - pkg:pypi/cpython + size: 47257 + timestamp: 1761172995774 +- conda: https://conda.anaconda.org/conda-forge/linux-64/crc32c-2.8-py311haee01d2_1.conda + sha256: 077c34d81a8e2e3c8a8bfe75cee0254670f4f01666bb50c906c73c3913e236fc + md5: 435ee5bba7ae7b07fd4f78942f268773 + depends: + - python + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - python_abi 3.11.* *_cp311 + license: LGPL-2.1-or-later + purls: + - pkg:pypi/crc32c + size: 76497 + timestamp: 1762474324268 +- pypi: https://files.pythonhosted.org/packages/1d/42/9c391dd801d6cf0d561b5890549d4b27bafcc53b39c31a817e69d87c625b/cryptography-46.0.3-cp311-abi3-macosx_10_9_universal2.whl + name: cryptography + version: 46.0.3 + sha256: 109d4ddfadf17e8e7779c39f9b18111a09efb969a301a31e987416a0191ed93a + requires_dist: + - cffi>=1.14 ; python_full_version == '3.8.*' and platform_python_implementation != 'PyPy' + - cffi>=2.0.0 ; python_full_version >= '3.9' and platform_python_implementation != 'PyPy' + - typing-extensions>=4.13.2 ; python_full_version < '3.11' + - bcrypt>=3.1.5 ; extra == 'ssh' + - nox[uv]>=2024.4.15 ; extra == 'nox' + - cryptography-vectors==46.0.3 ; extra == 'test' + - pytest>=7.4.0 ; extra == 'test' + - pytest-benchmark>=4.0 ; extra == 'test' + - pytest-cov>=2.10.1 ; extra == 'test' + - pytest-xdist>=3.5.0 ; extra == 'test' + - pretend>=0.7 ; extra == 'test' + - certifi>=2024 ; extra == 'test' + - pytest-randomly ; extra == 'test-randomorder' + - sphinx>=5.3.0 ; extra == 'docs' + - sphinx-rtd-theme>=3.0.0 ; extra == 'docs' + - sphinx-inline-tabs ; extra == 'docs' + - pyenchant>=3 ; extra == 'docstest' + - readme-renderer>=30.0 ; extra == 'docstest' + - sphinxcontrib-spelling>=7.3.1 ; extra == 'docstest' + - build>=1.0.0 ; extra == 'sdist' + - ruff>=0.11.11 ; extra == 'pep8test' + - mypy>=1.14 ; extra == 'pep8test' + - check-sdist ; extra == 'pep8test' + - click>=8.0.1 ; extra == 'pep8test' + requires_python: '>=3.8,!=3.9.0,!=3.9.1' +- pypi: https://files.pythonhosted.org/packages/c9/56/e7e69b427c3878352c2fb9b450bd0e19ed552753491d39d7d0a2f5226d41/cryptography-46.0.3-cp311-abi3-manylinux_2_28_x86_64.whl + name: cryptography + version: 46.0.3 + sha256: a2c0cd47381a3229c403062f764160d57d4d175e022c1df84e168c6251a22eec + requires_dist: + - cffi>=1.14 ; python_full_version == '3.8.*' and platform_python_implementation != 'PyPy' + - cffi>=2.0.0 ; python_full_version >= '3.9' and platform_python_implementation != 'PyPy' + - typing-extensions>=4.13.2 ; python_full_version < '3.11' + - bcrypt>=3.1.5 ; extra == 'ssh' + - nox[uv]>=2024.4.15 ; extra == 'nox' + - cryptography-vectors==46.0.3 ; extra == 'test' + - pytest>=7.4.0 ; extra == 'test' + - pytest-benchmark>=4.0 ; extra == 'test' + - pytest-cov>=2.10.1 ; extra == 'test' + - pytest-xdist>=3.5.0 ; extra == 'test' + - pretend>=0.7 ; extra == 'test' + - certifi>=2024 ; extra == 'test' + - pytest-randomly ; extra == 'test-randomorder' + - sphinx>=5.3.0 ; extra == 'docs' + - sphinx-rtd-theme>=3.0.0 ; extra == 'docs' + - sphinx-inline-tabs ; extra == 'docs' + - pyenchant>=3 ; extra == 'docstest' + - readme-renderer>=30.0 ; extra == 'docstest' + - sphinxcontrib-spelling>=7.3.1 ; extra == 'docstest' + - build>=1.0.0 ; extra == 'sdist' + - ruff>=0.11.11 ; extra == 'pep8test' + - mypy>=1.14 ; extra == 'pep8test' + - check-sdist ; extra == 'pep8test' + - click>=8.0.1 ; extra == 'pep8test' + requires_python: '>=3.8,!=3.9.0,!=3.9.1' +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-64-12.8.90-ha770c72_1.conda + sha256: 43b572b5d0c912b5be6c581846443ce24dfb7b6f6013365808cd88d11b8d4391 + md5: cebd15fd844ae8d2b961905c70ab5b62 + depends: + - cuda-version >=12.8,<12.9.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: + - pkg:pypi/cuda-cccl-linux-64 + size: 1064204 + timestamp: 1741373535593 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_linux-64-12.8.93-ha770c72_3.conda + sha256: cc09a43373a0e0677051fc6821d797b89ed9d96119d95e342e94f704fc9a5338 + md5: 21a6a73bb90807d78cd0c5f07e3715b9 + depends: + - cuda-version >=12.8,<12.9.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: + - pkg:pypi/cuda-crt-dev-linux-64 + size: 93330 + timestamp: 1744159239919 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-crt-tools-12.8.93-ha770c72_3.conda + sha256: 8d17500d74992372e3d4929c056ca16a89026ec6b9c9147fcc3c67c54d3a8cac + md5: 3f8d05bb84dbe78ce1b94f85ce74e691 + depends: + - cuda-version >=12.8,<12.9.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: + - pkg:pypi/cuda-crt-tools + size: 28081 + timestamp: 1744159249576 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-12.8.90-h5888daf_1.conda + sha256: 294b789d6bce9944fc5987c86dc1cdcdbc4eb965f559b81749dbf03b43e6c135 + md5: 46e0a8ffe985a3aa2652446fc40c7fe9 + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-cudart_linux-64 12.8.90 h3f2d84a_1 + - cuda-version >=12.8,<12.9.0a0 + - libgcc >=13 + - libstdcxx >=13 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: + - pkg:pypi/cuda-cudart + size: 22751 + timestamp: 1741374679128 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-dev-12.8.90-h5888daf_1.conda + sha256: a25c9ff8aac4aebac31885ff9e00fd196a0695f13f435de1d8dbc2ec8d438043 + md5: f2d36f5c109827225b7dba169f7fae76 + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-cudart 12.8.90 h5888daf_1 + - cuda-cudart-dev_linux-64 12.8.90 h3f2d84a_1 + - cuda-cudart-static 12.8.90 h5888daf_1 + - cuda-version >=12.8,<12.9.0a0 + - libgcc >=13 + - libstdcxx >=13 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: + - pkg:pypi/cuda-cudart-dev + size: 23184 + timestamp: 1741374710131 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-dev_linux-64-12.8.90-h3f2d84a_1.conda + sha256: 04284c4e1f1bbc0625c24a806a4c2680de7b8b079d81cd7fe4f7bc1e1e1ddf66 + md5: 097bef67ba07eba0180cc6f979b3fd41 + depends: + - cuda-cccl_linux-64 + - cuda-cudart-static_linux-64 + - cuda-cudart_linux-64 + - cuda-version >=12.8,<12.9.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: + - pkg:pypi/cuda-cudart-dev-linux-64 + size: 385560 + timestamp: 1741374687362 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-static-12.8.90-h5888daf_1.conda + sha256: ed45add3d27d5dd2c5706a7d78eff00ee862327f6c026373861d8089286d3375 + md5: adee0dd8c67b8977df0e0c9cceb12f9c + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-cudart-static_linux-64 12.8.90 h3f2d84a_1 + - cuda-version >=12.8,<12.9.0a0 + - libgcc >=13 + - libstdcxx >=13 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: + - pkg:pypi/cuda-cudart-static + size: 22779 + timestamp: 1741374696039 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-static_linux-64-12.8.90-h3f2d84a_1.conda + sha256: 517dfb4b562c9dbdd3f05c35af7f0d0eaa40d204d4a1a373c674e93ed130227d + md5: 7209c9a9ee3e0e7c50fb76fa166f4292 + depends: + - cuda-version >=12.8,<12.9.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: + - pkg:pypi/cuda-cudart-static-linux-64 + size: 987272 + timestamp: 1741374656668 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart_linux-64-12.8.90-h3f2d84a_1.conda + sha256: b8b307d03eb16aa111d244004ac48d1e0d0592ade846566bb392f75c54b6828f + md5: 7bfc39f6fd3cfba6ef5fe8db0bc0e94f + depends: + - cuda-version >=12.8,<12.9.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: + - pkg:pypi/cuda-cudart-linux-64 + size: 192766 + timestamp: 1741374664938 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cuobjdump-12.8.90-hbd13f7d_1.conda + sha256: 262fbee5daf766777cdc924e40d982ceff9358d8316faa683d6496e402f79b0a + md5: 58f3a7019158135be2aa99f77a07b7b0 + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-nvdisasm + - cuda-version >=12.8,<12.9.0a0 + - libgcc >=13 + - libstdcxx >=13 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: + - pkg:pypi/cuda-cuobjdump + size: 232426 + timestamp: 1742416137141 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cupti-12.8.90-h5888daf_1.conda + sha256: d0560bcb505ccf6a3d71e153d45dd6afec5ee7009d9482c723210ac2ce79db1b + md5: d08def22d8f7c7a2875ed8c53aebd185 + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-version >=12.8,<12.9.0a0 + - libgcc >=13 + - libstdcxx >=13 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: + - pkg:pypi/cuda-cupti + size: 1848503 + timestamp: 1743629512155 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-driver-dev_linux-64-12.8.90-h3f2d84a_1.conda + sha256: d5f86e98c79149e6ef8a5a0062a6757a1d17966af26c653ff11e8295ba27f76b + md5: 7ddc5be86428f211f06ccce23c712503 + depends: + - cuda-version >=12.8,<12.9.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: + - pkg:pypi/cuda-driver-dev-linux-64 + size: 36985 + timestamp: 1741374672216 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-12.8.93-hcdd1206_2.conda + sha256: fa311071c58649de53bdae218453f32983ba684a659ba284d100133cb86fee62 + md5: 04103ae1cfff32c1a76cd31164b8e128 + depends: + - cuda-nvcc_linux-64 12.8.93.* + - gcc_linux-64 + - gxx_linux-64 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: + - pkg:pypi/cuda-nvcc + size: 24875 + timestamp: 1746136037405 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvcc-dev_linux-64-12.8.93-he91c749_3.conda + sha256: 47bf6a1b54a06f1888ad81a0f0527ca778fa5c945e50ec687d7a452d5f56e2a3 + md5: 6a0303279ec665b316449afb3e1e2096 + depends: + - cuda-crt-dev_linux-64 12.8.93 ha770c72_3 + - cuda-nvvm-dev_linux-64 12.8.93 ha770c72_3 + - cuda-version >=12.8,<12.9.0a0 + - libgcc >=6 + constrains: + - gcc_impl_linux-64 >=6,<15.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: + - pkg:pypi/cuda-nvcc-dev-linux-64 + size: 13298256 + timestamp: 1744159454859 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-impl-12.8.93-h85509e4_3.conda + sha256: 7013b68277642b5a38f4a46c5c47d160d91461e13cc766219010d3be5b4f516e + md5: 1ee91cd614461de074fbdf1696486470 + depends: + - cuda-cudart >=12.8.90,<13.0a0 + - cuda-cudart-dev + - cuda-nvcc-dev_linux-64 12.8.93 he91c749_3 + - cuda-nvcc-tools 12.8.93 he02047a_3 + - cuda-nvvm-impl 12.8.93 he02047a_3 + - cuda-version >=12.8,<12.9.0a0 + constrains: + - gcc_impl_linux-64 >=6,<15.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: + - pkg:pypi/cuda-nvcc-impl + size: 26416 + timestamp: 1744159505703 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-tools-12.8.93-he02047a_3.conda + sha256: 0de99bd6972c805b5aeebcc7d1a9ffa1855accbe823daf3f6e12b27b14e6efca + md5: 6edaf1ed7e0447ba8dbee643fe991832 + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-crt-tools 12.8.93 ha770c72_3 + - cuda-nvvm-tools 12.8.93 he02047a_3 + - cuda-version >=12.8,<12.9.0a0 + - libgcc >=12 + - libstdcxx >=12 + constrains: + - gcc_impl_linux-64 >=6,<15.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: + - pkg:pypi/cuda-nvcc-tools + size: 25644307 + timestamp: 1744159388339 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc_linux-64-12.8.93-he0b4e1d_2.conda + sha256: b6493943eed33fed6d80e06b605056952900fefd7e17fa1309f4286b623fc193 + md5: 1f334882100acde78478119815d08acb + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-cudart-dev_linux-64 12.8.* + - cuda-driver-dev_linux-64 12.8.* + - cuda-nvcc-dev_linux-64 12.8.93.* + - cuda-nvcc-impl 12.8.93.* + - cuda-nvcc-tools 12.8.93.* + - sysroot_linux-64 >=2.17,<3.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: + - pkg:pypi/cuda-nvcc-linux-64 + size: 26846 + timestamp: 1746136036842 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvdisasm-12.8.90-hbd13f7d_1.conda + sha256: b8db8c6a1dd658ad66739f473df8c16a35143d8058f1bc7e66d221691dcbb737 + md5: c6d84f4b5d81dad39054eb37ecd2d136 + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-version >=12.8,<12.9.0a0 + - libgcc >=13 + - libstdcxx >=13 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: + - pkg:pypi/cuda-nvdisasm + size: 5124390 + timestamp: 1742414503225 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvrtc-12.8.93-h5888daf_1.conda + sha256: 38edf4f501ccbb996cc9f0797fcf404c12d4aeef974308cf8b997b470409c171 + md5: 7c5ae09d55b1b2b390772755fe5b4c13 + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-version >=12.8,<12.9.0a0 + - libgcc >=13 + - libstdcxx >=13 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: + - pkg:pypi/cuda-nvrtc + size: 66214407 + timestamp: 1742405328961 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvtx-12.8.90-h5888daf_1.conda + sha256: 0ce1ff2d4ab5ba7c91373125815f8127f5c338d25ace4bef5fb30fb17402a7b2 + md5: 8f32e53c88c897392a1ba79a4f268276 + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-version >=12.8,<12.9.0a0 + - libgcc >=13 + - libstdcxx >=13 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: + - pkg:pypi/cuda-nvtx + size: 32175 + timestamp: 1743625825363 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-64-12.8.93-ha770c72_3.conda + sha256: 24c6d5931c98f1b2b780a982bc366553bc2077b95f8e96ad5b7cc89dfe905e8f + md5: c37acb85903a13a9cec10a4e7142b893 + depends: + - cuda-version >=12.8,<12.9.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: + - pkg:pypi/cuda-nvvm-dev-linux-64 + size: 26128 + timestamp: 1744159257892 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-impl-12.8.93-he02047a_3.conda + sha256: 84f57701cb23d07b4da310cf37d389ce255748e3d3246ef0eac3014e05195a3e + md5: 53f3160d917aa94e2715f25539536b1e + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-version >=12.8,<12.9.0a0 + - libgcc >=12 + - libstdcxx >=12 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: + - pkg:pypi/cuda-nvvm-impl + size: 21755778 + timestamp: 1744159278467 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-tools-12.8.93-he02047a_3.conda + sha256: 11ea6ad293b37d6cf0847ee337cc27c2939befb9b0275b54353083a2a3d44a56 + md5: 7a11cf7b5686e55ecb042dcede921592 + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-version >=12.8,<12.9.0a0 + - libgcc >=12 + - libstdcxx >=12 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: + - pkg:pypi/cuda-nvvm-tools + size: 24620959 + timestamp: 1744159329485 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.8-h5d125a7_3.conda + sha256: 6f93ceb66267e69728d83cf98673221f6b1f95a3514b3a97777cfd0ef8e24f3f + md5: 794eaca58880616a508dd6f6eb389266 + constrains: + - cudatoolkit 12.8|12.8.* + - __cuda >=12 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: + - pkg:pypi/cuda-version + size: 21086 + timestamp: 1737663758355 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cudnn-9.10.2.21-hbcb9cd8_0.conda + sha256: 5760ad9de2ecff210b018503168d26996497604608cf59f93df90f01ea4eb982 + md5: c8168e26c0a9f50425ac05d6a5201c12 + depends: + - __glibc >=2.28,<3.0.a0 + - cuda-version >=12,<13.0a0 + - libcudnn-dev 9.10.2.21 h58dd1b1_0 + - libgcc >=14 + - libstdcxx >=14 + constrains: + - cudnn-jit <0a + license: LicenseRef-cuDNN-Software-License-Agreement + purls: + - pkg:pypi/cudnn + size: 19646 + timestamp: 1762823905292 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cupy-13.6.0-py311h72da3fd_2.conda + sha256: 01f0f69dbc66ca8fe7182678258915425573f5ae5aef338efb963aceb444ef1f + md5: 7ff80f6526ae96cff25f226544e72baa + depends: + - cuda-cudart-dev_linux-64 + - cuda-nvrtc + - cuda-version >=12,<13.0a0 + - cupy-core 13.6.0 py311he30c881_2 + - libcublas + - libcufft + - libcurand + - libcusolver + - libcusparse + - python >=3.11,<3.12.0a0 + - python_abi 3.11.* *_cp311 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cupy + size: 359669 + timestamp: 1757732902729 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cupy-core-13.6.0-py311he30c881_2.conda + sha256: 45e67d3a56d36935e4189b17e707bf6b887d21df6411fab9d835455a10250db8 + md5: c9ca2bae852b83675f256aec6c518396 + depends: + - __glibc >=2.17,<3.0.a0 + - fastrlock >=0.8.3,<0.9.0a0 + - libgcc >=14 + - libstdcxx >=14 + - numpy >=1.22 + - python >=3.11,<3.12.0a0 + - python_abi 3.11.* *_cp311 + constrains: + - __cuda >=12.0 + - cuda-version >=12,<13.0a0 + - cupy >=13.6.0,<13.7.0a0 + - nccl >=2.27.7.1,<3.0a0 + - cuda-nvrtc >=12,<13.0a0 + - cutensor >=2.3.1.0,<3.0a0 + - libcusparse >=12,<13.0a0 + - scipy >=1.7,<1.17 + - libcufft >=11,<12.0a0 + - libcurand >=10,<11.0a0 + - optuna ~=3.0 + - libcusolver >=11,<12.0a0 + - libcublas >=12,<13.0a0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cupy-core + size: 56743670 + timestamp: 1757732786905 +- pypi: https://files.pythonhosted.org/packages/1b/36/6b6266549802234286438298d494152deb19922a94928d9dcd256659ebd1/cython-3.2.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: cython + version: 3.2.0 + sha256: 8a98925517819d62ea25d2cf40057df60a9bcf75fdd1d6ed3882e6ae0730d82f + requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/linux-64/cython-3.2.0-py311h0daaf2c_0.conda + sha256: b19aad7bfc7c1d2ed47031b1c19a0921115bda308c2996085e7fd414916d21c8 + md5: 61ea54f864b285212e9c0f4bf416ea22 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - python >=3.11,<3.12.0a0 + - python_abi 3.11.* *_cp311 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/cython + size: 3743822 + timestamp: 1762342554163 +- conda: https://conda.anaconda.org/conda-forge/noarch/deprecated-1.3.1-pyhd8ed1ab_0.conda + sha256: c994a70449d548dd388768090c71c1da81e1e128a281547ab9022908d46878c5 + md5: bf74a83f7a0f2a21b5d709997402cac4 + depends: + - python >=3.10 + - wrapt <2,>=1.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/deprecated + size: 15815 + timestamp: 1761813872696 +- conda: https://conda.anaconda.org/conda-forge/noarch/donfig-0.8.1.post1-pyhd8ed1ab_1.conda + sha256: d58e97d418f71703e822c422af5b9c431e3621a0ecdc8b0334c1ca33e076dfe7 + md5: c56a7fa5597ad78b62e1f5d21f7f8b8f + depends: + - python >=3.9 + - pyyaml + license: MIT + license_family: MIT + purls: + - pkg:pypi/donfig + size: 22491 + timestamp: 1734368817583 +- pypi: https://files.pythonhosted.org/packages/94/fd/2e6f7d706899cc08690c5f6641e2ffbfffe019e8f16ce77104caa5730910/fastapi-0.121.1-py3-none-any.whl + name: fastapi + version: 0.121.1 + sha256: 2c5c7028bc3a58d8f5f09aecd3fd88a000ccc0c5ad627693264181a3c33aa1fc + requires_dist: + - starlette>=0.40.0,<0.50.0 + - pydantic>=1.7.4,!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0 + - typing-extensions>=4.8.0 + - annotated-doc>=0.0.2 + - fastapi-cli[standard]>=0.0.8 ; extra == 'standard' + - httpx>=0.23.0,<1.0.0 ; extra == 'standard' + - jinja2>=3.1.5 ; extra == 'standard' + - python-multipart>=0.0.18 ; extra == 'standard' + - email-validator>=2.0.0 ; extra == 'standard' + - uvicorn[standard]>=0.12.0 ; extra == 'standard' + - fastapi-cli[standard-no-fastapi-cloud-cli]>=0.0.8 ; extra == 'standard-no-fastapi-cloud-cli' + - httpx>=0.23.0,<1.0.0 ; extra == 'standard-no-fastapi-cloud-cli' + - jinja2>=3.1.5 ; extra == 'standard-no-fastapi-cloud-cli' + - python-multipart>=0.0.18 ; extra == 'standard-no-fastapi-cloud-cli' + - email-validator>=2.0.0 ; extra == 'standard-no-fastapi-cloud-cli' + - uvicorn[standard]>=0.12.0 ; extra == 'standard-no-fastapi-cloud-cli' + - fastapi-cli[standard]>=0.0.8 ; extra == 'all' + - httpx>=0.23.0,<1.0.0 ; extra == 'all' + - jinja2>=3.1.5 ; extra == 'all' + - python-multipart>=0.0.18 ; extra == 'all' + - itsdangerous>=1.1.0 ; extra == 'all' + - pyyaml>=5.3.1 ; extra == 'all' + - ujson>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0 ; extra == 'all' + - orjson>=3.2.1 ; extra == 'all' + - email-validator>=2.0.0 ; extra == 'all' + - uvicorn[standard]>=0.12.0 ; extra == 'all' + - pydantic-settings>=2.0.0 ; extra == 'all' + - pydantic-extra-types>=2.0.0 ; extra == 'all' + requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/linux-64/fastrlock-0.8.3-py311hc665b79_2.conda + sha256: 5299a4aeaf04fbc2f8f46e707ae16c1f4e594905e6df18457f18ba002a886110 + md5: ac18884886449ce97b76f8906462ff27 + depends: + - python + - libgcc >=14 + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - python_abi 3.11.* *_cp311 + license: MIT + license_family: MIT + purls: + - pkg:pypi/fastrlock + size: 41082 + timestamp: 1756729161435 +- pypi: https://files.pythonhosted.org/packages/76/91/7216b27286936c16f5b4d0c530087e4a54eead683e6b0b73dd0c64844af6/filelock-3.20.0-py3-none-any.whl + name: filelock + version: 3.20.0 + sha256: 339b4732ffda5cd79b13f4e2711a31b0365ce445d95d243bb996273d072546a2 + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.20.0-pyhd8ed1ab_0.conda + sha256: 19025a4078ff3940d97eb0da29983d5e0deac9c3e09b0eabf897daeaf9d1114e + md5: 66b8b26023b8efdf8fcb23bac4b6325d + depends: + - python >=3.10 + license: Unlicense + purls: + - pkg:pypi/filelock + size: 17976 + timestamp: 1759948208140 +- pypi: https://files.pythonhosted.org/packages/11/b1/71a477adc7c36e5fb628245dfbdea2166feae310757dea848d02bd0689fd/frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + name: frozenlist + version: 1.8.0 + sha256: 2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/6e/ef/0e8f1fe32f8a53dd26bdd1f9347efe0778b0fddf62789ea683f4cc7d787d/frozenlist-1.8.0-cp311-cp311-macosx_11_0_arm64.whl + name: frozenlist + version: 1.8.0 + sha256: fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/eb/02/a6b21098b1d5d6249b7c5ab69dde30108a71e4e819d4a9778f1de1d5b70d/fsspec-2025.10.0-py3-none-any.whl + name: fsspec + version: 2025.10.0 + sha256: 7c7712353ae7d875407f97715f0e1ffcc21e33d5b24556cb1e090ae9409ec61d + requires_dist: + - adlfs ; extra == 'abfs' + - adlfs ; extra == 'adl' + - pyarrow>=1 ; extra == 'arrow' + - dask ; extra == 'dask' + - distributed ; extra == 'dask' + - pre-commit ; extra == 'dev' + - ruff>=0.5 ; extra == 'dev' + - numpydoc ; extra == 'doc' + - sphinx ; extra == 'doc' + - sphinx-design ; extra == 'doc' + - sphinx-rtd-theme ; extra == 'doc' + - yarl ; extra == 'doc' + - dropbox ; extra == 'dropbox' + - dropboxdrivefs ; extra == 'dropbox' + - requests ; extra == 'dropbox' + - adlfs ; extra == 'full' + - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'full' + - dask ; extra == 'full' + - distributed ; extra == 'full' + - dropbox ; extra == 'full' + - dropboxdrivefs ; extra == 'full' + - fusepy ; extra == 'full' + - gcsfs ; extra == 'full' + - libarchive-c ; extra == 'full' + - ocifs ; extra == 'full' + - panel ; extra == 'full' + - paramiko ; extra == 'full' + - pyarrow>=1 ; extra == 'full' + - pygit2 ; extra == 'full' + - requests ; extra == 'full' + - s3fs ; extra == 'full' + - smbprotocol ; extra == 'full' + - tqdm ; extra == 'full' + - fusepy ; extra == 'fuse' + - gcsfs ; extra == 'gcs' + - pygit2 ; extra == 'git' + - requests ; extra == 'github' + - gcsfs ; extra == 'gs' + - panel ; extra == 'gui' + - pyarrow>=1 ; extra == 'hdfs' + - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'http' + - libarchive-c ; extra == 'libarchive' + - ocifs ; extra == 'oci' + - s3fs ; extra == 's3' + - paramiko ; extra == 'sftp' + - smbprotocol ; extra == 'smb' + - paramiko ; extra == 'ssh' + - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'test' + - numpy ; extra == 'test' + - pytest ; extra == 'test' + - pytest-asyncio!=0.22.0 ; extra == 'test' + - pytest-benchmark ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-mock ; extra == 'test' + - pytest-recording ; extra == 'test' + - pytest-rerunfailures ; extra == 'test' + - requests ; extra == 'test' + - aiobotocore>=2.5.4,<3.0.0 ; extra == 'test-downstream' + - dask[dataframe,test] ; extra == 'test-downstream' + - moto[server]>4,<5 ; extra == 'test-downstream' + - pytest-timeout ; extra == 'test-downstream' + - xarray ; extra == 'test-downstream' + - adlfs ; extra == 'test-full' + - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'test-full' + - cloudpickle ; extra == 'test-full' + - dask ; extra == 'test-full' + - distributed ; extra == 'test-full' + - dropbox ; extra == 'test-full' + - dropboxdrivefs ; extra == 'test-full' + - fastparquet ; extra == 'test-full' + - fusepy ; extra == 'test-full' + - gcsfs ; extra == 'test-full' + - jinja2 ; extra == 'test-full' + - kerchunk ; extra == 'test-full' + - libarchive-c ; extra == 'test-full' + - lz4 ; extra == 'test-full' + - notebook ; extra == 'test-full' + - numpy ; extra == 'test-full' + - ocifs ; extra == 'test-full' + - pandas ; extra == 'test-full' + - panel ; extra == 'test-full' + - paramiko ; extra == 'test-full' + - pyarrow ; extra == 'test-full' + - pyarrow>=1 ; extra == 'test-full' + - pyftpdlib ; extra == 'test-full' + - pygit2 ; extra == 'test-full' + - pytest ; extra == 'test-full' + - pytest-asyncio!=0.22.0 ; extra == 'test-full' + - pytest-benchmark ; extra == 'test-full' + - pytest-cov ; extra == 'test-full' + - pytest-mock ; extra == 'test-full' + - pytest-recording ; extra == 'test-full' + - pytest-rerunfailures ; extra == 'test-full' + - python-snappy ; extra == 'test-full' + - requests ; extra == 'test-full' + - smbprotocol ; extra == 'test-full' + - tqdm ; extra == 'test-full' + - urllib3 ; extra == 'test-full' + - zarr ; extra == 'test-full' + - zstandard ; python_full_version < '3.14' and extra == 'test-full' + - tqdm ; extra == 'tqdm' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.10.0-pyhd8ed1ab_0.conda + sha256: df5cb57bb668cd5b2072d8bd66380ff7acb12e8c337f47dd4b9a75a6a6496a6d + md5: d18004c37182f83b9818b714825a7627 + depends: + - python >=3.10 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/fsspec + size: 146592 + timestamp: 1761840236679 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-14.3.0-hd9e9e21_7.conda + sha256: bddd2b13469334fdd474281753cf0b347ac16c3e123ecfdce556ba16fbda9454 + md5: 54876317578ad4bf695aad97ff8398d9 + depends: + - binutils_impl_linux-64 >=2.40 + - libgcc >=14.3.0 + - libgcc-devel_linux-64 14.3.0 h85bb3a7_107 + - libgomp >=14.3.0 + - libsanitizer 14.3.0 hd08acf3_7 + - libstdcxx >=14.3.0 + - sysroot_linux-64 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: + - pkg:pypi/gcc-impl-linux-64 + size: 69987984 + timestamp: 1759965829687 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-14.3.0-h298d278_12.conda + sha256: 0c56509170aa709cf80ef0663e17a1ab22fc57051794088994fc60290b352f46 + md5: 051081e67fa626cf3021e507e4a73c79 + depends: + - gcc_impl_linux-64 14.3.0.* + - binutils_linux-64 + - sysroot_linux-64 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/gcc-linux-64 + size: 27952 + timestamp: 1759866571695 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda + sha256: 309cf4f04fec0c31b6771a5809a1909b4b3154a2208f52351e1ada006f4c750c + md5: c94a5994ef49749880a8139cf9afcbe1 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: GPL-2.0-or-later OR LGPL-3.0-or-later + purls: + - pkg:pypi/gmp + size: 460055 + timestamp: 1718980856608 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/gmp-6.3.0-h7bae524_2.conda + sha256: 76e222e072d61c840f64a44e0580c2503562b009090f55aa45053bf1ccb385dd + md5: eed7278dfbab727b56f2c0b64330814b + depends: + - __osx >=11.0 + - libcxx >=16 + license: GPL-2.0-or-later OR LGPL-3.0-or-later + purls: + - pkg:pypi/gmp + size: 365188 + timestamp: 1718981343258 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gmpy2-2.2.1-py311h92a432a_1.conda + sha256: ccd4368c620a10bbda1faecd812cca2b458fc6fd418a7ed90c812d6a74334dc1 + md5: f52bc73f5cc31a2b5eb141b7ada9272c + depends: + - __glibc >=2.17,<3.0.a0 + - gmp >=6.3.0,<7.0a0 + - libgcc >=14 + - mpc >=1.3.1,<2.0a0 + - mpfr >=4.2.1,<5.0a0 + - python >=3.11,<3.12.0a0 + - python_abi 3.11.* *_cp311 + license: LGPL-3.0-or-later + license_family: LGPL + purls: + - pkg:pypi/gmpy2 + size: 204058 + timestamp: 1756739693610 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gmpy2-2.2.1-py311h92a432a_2.conda + sha256: fbe865298f27112a605284020205b2803ac913c095af5f5b10d9b7fd7dfd24dc + md5: a84186a60d84f6506b54ceb65e83d363 + depends: + - __glibc >=2.17,<3.0.a0 + - gmp >=6.3.0,<7.0a0 + - libgcc >=14 + - mpc >=1.3.1,<2.0a0 + - mpfr >=4.2.1,<5.0a0 + - python >=3.11,<3.12.0a0 + - python_abi 3.11.* *_cp311 + license: LGPL-3.0-or-later + purls: + - pkg:pypi/gmpy2 + size: 202878 + timestamp: 1762946866045 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/gmpy2-2.2.1-py311hd340a2e_2.conda + sha256: c6da87c4ccc7146c516424507376bc46a29474f3358bdfec0f30412073e287f4 + md5: d4c43cd142182f705cddf23348dc2150 + depends: + - __osx >=11.0 + - gmp >=6.3.0,<7.0a0 + - mpc >=1.3.1,<2.0a0 + - mpfr >=4.2.1,<5.0a0 + - python >=3.11,<3.12.0a0 + - python >=3.11,<3.12.0a0 *_cpython + - python_abi 3.11.* *_cp311 + license: LGPL-3.0-or-later + purls: + - pkg:pypi/gmpy2 + size: 156570 + timestamp: 1762947542958 +- pypi: https://files.pythonhosted.org/packages/1f/8e/abdd3f14d735b2929290a018ecf133c901be4874b858dd1c604b9319f064/greenlet-3.2.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + name: greenlet + version: 3.2.4 + sha256: 2523e5246274f54fdadbce8494458a2ebdcdbc7b802318466ac5606d3cded1f8 + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + - setuptools ; extra == 'test' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-14.3.0-he663afc_7.conda + sha256: 597579f6ce995c2a53dcb290c75d94819ca92f898687162f992a208a5ea1b65b + md5: 2700e7aad63bca8c26c2042a6a7214d6 + depends: + - gcc_impl_linux-64 14.3.0 hd9e9e21_7 + - libstdcxx-devel_linux-64 14.3.0 h85bb3a7_107 + - sysroot_linux-64 + - tzdata + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: + - pkg:pypi/gxx-impl-linux-64 + size: 15187856 + timestamp: 1759966051354 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-14.3.0-h95f728e_12.conda + sha256: 559996c580c31b939702b819368ad19d2f610bbb5b568d033e3c78bea49e730f + md5: 7778058aa8b54953ddd09c3297e59e4d + depends: + - gxx_impl_linux-64 14.3.0.* + - gcc_linux-64 ==14.3.0 h298d278_12 + - binutils_linux-64 + - sysroot_linux-64 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/gxx-linux-64 + size: 27050 + timestamp: 1759866571696 +- pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + name: h11 + version: 0.16.0 + sha256: 63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86 + requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + sha256: 71e750d509f5fa3421087ba88ef9a7b9be11c53174af3aa4d06aff4c18b38e8e + md5: 8b189310083baabfb622af68fd9d3ae3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + purls: + - pkg:pypi/icu + size: 12129203 + timestamp: 1720853576813 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + sha256: 9ba12c93406f3df5ab0a43db8a4b4ef67a5871dfd401010fbe29b218b2cbe620 + md5: 5eb22c1d7b3fc4abb50d92d621583137 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/icu + size: 11857802 + timestamp: 1720853997952 +- pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl + name: idna + version: '3.11' + sha256: 771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea + requires_dist: + - ruff>=0.6.2 ; extra == 'all' + - mypy>=1.11.2 ; extra == 'all' + - pytest>=8.3.2 ; extra == 'all' + - flake8>=7.1.1 ; extra == 'all' + requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + sha256: c18ab120a0613ada4391b15981d86ff777b5690ca461ea7e9e49531e8f374745 + md5: 63ccfdc3a3ce25b027b8767eb722fca8 + depends: + - python >=3.9 + - zipp >=3.20 + - python + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/importlib-metadata + size: 34641 + timestamp: 1747934053147 +- pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl + name: iniconfig + version: 2.3.0 + sha256: f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl + name: jinja2 + version: 3.1.6 + sha256: 85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 + requires_dist: + - markupsafe>=2.0 + - babel>=2.7 ; extra == 'i18n' + requires_python: '>=3.7' +- conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + sha256: f1ac18b11637ddadc05642e8185a851c7fab5998c6f5470d716812fae943b2af + md5: 446bd6c8cb26050d528881df495ce646 + depends: + - markupsafe >=2.0 + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jinja2 + size: 112714 + timestamp: 1741263433881 +- pypi: https://files.pythonhosted.org/packages/31/b4/b9b800c45527aadd64d5b442f9b932b00648617eb5d63d2c7a6587b7cafc/jmespath-1.0.1-py3-none-any.whl + name: jmespath + version: 1.0.1 + sha256: 02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980 + requires_python: '>=3.7' +- conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_8.conda + sha256: 305c22a251db227679343fd73bfde121e555d466af86e537847f4c8b9436be0d + md5: ff007ab0f0fdc53d245972bba8a6d40c + constrains: + - sysroot_linux-64 ==2.28 + license: LGPL-2.0-or-later AND LGPL-2.0-or-later WITH exceptions AND GPL-2.0-or-later + license_family: GPL + purls: + - pkg:pypi/kernel-headers-linux-64 + size: 1272697 + timestamp: 1752669126073 +- conda: https://conda.anaconda.org/rapidsai/linux-64/kvikio-25.08.00-cuda12_py311_250806_2f72c39a.conda + sha256: e8e8e94654d344777966df6c50c2cfa0a83b7636de20b293679dd7b44775c6d3 + md5: c958ca9b7cb2795ddac44964565ed00d + depends: + - cuda-version >=12,<13.0a0 + - cupy >=12.0.0 + - libkvikio 25.8.0.* + - numcodecs !=0.12.0 + - numpy >=1.23,<3.0a0 + - packaging + - python + - zarr >=2.0.0,<4.0.0a0 + - cuda-cudart + - libgcc >=13 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=13 + - libgcc >=13 + - libnvcomp >=4.2.0.11,<5.0a0 + - python_abi 3.11.* *_cp311 + license: Apache-2.0 + size: 512609 + timestamp: 1754500324324 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.44-h1aa0949_5.conda + sha256: dab1fbf65abb05d3f2ee49dff90d60eeb2e02039fcb561343c7cea5dea523585 + md5: 511ed8935448c1875776b60ad3daf3a1 + depends: + - __glibc >=2.17,<3.0.a0 + - zstd >=1.5.7,<1.6.0a0 + constrains: + - binutils_impl_linux-64 2.44 + license: GPL-3.0-only + purls: + - pkg:pypi/ld-impl-linux-64 + size: 741516 + timestamp: 1762674665675 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250127.1-cxx17_hbbce691_0.conda + sha256: 65d5ca837c3ee67b9d769125c21dc857194d7f6181bb0e7bd98ae58597b457d0 + md5: 00290e549c5c8a32cc271020acc9ec6b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + constrains: + - abseil-cpp =20250127.1 + - libabseil-static =20250127.1=cxx17* + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/libabseil + size: 1325007 + timestamp: 1742369558286 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250512.1-cxx17_hba17884_0.conda + sha256: dcd1429a1782864c452057a6c5bc1860f2b637dc20a2b7e6eacd57395bbceff8 + md5: 83b160d4da3e1e847bf044997621ed63 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + constrains: + - libabseil-static =20250512.1=cxx17* + - abseil-cpp =20250512.1 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/libabseil + size: 1310612 + timestamp: 1750194198254 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20250512.1-cxx17_hd41c47c_0.conda + sha256: 7f0ee9ae7fa2cf7ac92b0acf8047c8bac965389e48be61bf1d463e057af2ea6a + md5: 360dbb413ee2c170a0a684a33c4fc6b8 + depends: + - __osx >=11.0 + - libcxx >=18 + constrains: + - libabseil-static =20250512.1=cxx17* + - abseil-cpp =20250512.1 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/libabseil + size: 1174081 + timestamp: 1750194620012 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-37_h5875eb1_mkl.conda + build_number: 37 + sha256: 815cc467cb4ffe421f72cff675da33287555ec977388ed5baa09be90448efcbe + md5: 888c2ae634bce09709dffd739ba9f1bc + depends: + - mkl >=2024.2.2,<2025.0a0 + constrains: + - liblapacke 3.9.0 37*_mkl + - liblapack 3.9.0 37*_mkl + - blas 2.137 mkl + - libcblas 3.9.0 37*_mkl + track_features: + - blas_mkl + - blas_mkl_2 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/libblas + size: 17867 + timestamp: 1760212752777 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-38_h4a7cf45_openblas.conda + build_number: 38 + sha256: b26a32302194e05fa395d5135699fd04a905c6ad71f24333f97c64874e053623 + md5: 3509b5e2aaa5f119013c8969fdd9a905 + depends: + - libopenblas >=0.3.30,<0.3.31.0a0 + - libopenblas >=0.3.30,<1.0a0 + constrains: + - libcblas 3.9.0 38*_openblas + - blas 2.138 openblas + - liblapacke 3.9.0 38*_openblas + - mkl <2026 + - liblapack 3.9.0 38*_openblas + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/libblas + size: 17522 + timestamp: 1761680084434 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-38_h5875eb1_mkl.conda + build_number: 38 + sha256: 92da128915b6d074524fda62f1fc39b003eef97033be6c08bdc985bc01df5adc + md5: 964191c395c74240f6ab88bbecdaf612 + depends: + - mkl >=2025.3.0,<2026.0a0 + constrains: + - liblapack 3.9.0 38*_mkl + - blas 2.138 mkl + - libcblas 3.9.0 38*_mkl + - liblapacke 3.9.0 38*_mkl + track_features: + - blas_mkl + - blas_mkl_2 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/libblas + size: 17918 + timestamp: 1761680169865 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-38_h51639a9_openblas.conda + build_number: 38 + sha256: 1850e189ca9b623497b857cf905bb2c8d57c8a42de5aed63a9b0bd857a1af2ae + md5: 90a49011b477170c063b385cbacf9138 + depends: + - libopenblas >=0.3.30,<0.3.31.0a0 + - libopenblas >=0.3.30,<1.0a0 + constrains: + - liblapack 3.9.0 38*_openblas + - libcblas 3.9.0 38*_openblas + - mkl <2026 + - liblapacke 3.9.0 38*_openblas + - blas 2.138 openblas + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/libblas + size: 17695 + timestamp: 1761680554564 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.76-h0b2e76d_0.conda + sha256: a946b61be1af15ff08c7722e9bac0fab446d8b9896c9f0f35657dfcf887fda8a + md5: 0f7f0c878c8dceb3b9ec67f5c06d6057 + depends: + - __glibc >=2.17,<3.0.a0 + - attr >=2.5.1,<2.6.0a0 + - libgcc >=13 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/libcap + size: 121852 + timestamp: 1744577167992 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-37_hfef963f_mkl.conda + build_number: 37 + sha256: d3d3bf31803396001e74de27f266781cd9d5f9e34b288762b9e6e1183a7815a4 + md5: f66eb9a9396715013772b8a3ef7396be + depends: + - libblas 3.9.0 37_h5875eb1_mkl + constrains: + - liblapacke 3.9.0 37*_mkl + - blas 2.137 mkl + - liblapack 3.9.0 37*_mkl + track_features: + - blas_mkl + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/libcblas + size: 17495 + timestamp: 1760212763579 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-38_h0358290_openblas.conda + build_number: 38 + sha256: 7fe653f45c01eb16d7b48ad934b068dad2885d6f4a7c41512b6a5f1f522bffe9 + md5: bcd928a9376a215cd9164a4312dd5e98 + depends: + - libblas 3.9.0 38_h4a7cf45_openblas + constrains: + - blas 2.138 openblas + - liblapack 3.9.0 38*_openblas + - liblapacke 3.9.0 38*_openblas + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/libcblas + size: 17503 + timestamp: 1761680091587 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-38_hfef963f_mkl.conda + build_number: 38 + sha256: 94e0599d062a892e5ca3c2240feb7cb754779d68075f301bcb1fb5f290b6a6fd + md5: b71baaa269cfecb2b0ffb6eaff577d88 + depends: + - libblas 3.9.0 38_h5875eb1_mkl + constrains: + - liblapack 3.9.0 38*_mkl + - blas 2.138 mkl + - liblapacke 3.9.0 38*_mkl + track_features: + - blas_mkl + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/libcblas + size: 17535 + timestamp: 1761680182631 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-38_hb0561ab_openblas.conda + build_number: 38 + sha256: 5ab5a9aa350a5838d91f0e4feed30f765cbea461ee9515bf214d459c3378a531 + md5: eab61fcb277d6fa9f059bba437fd3612 + depends: + - libblas 3.9.0 38_h51639a9_openblas + constrains: + - liblapack 3.9.0 38*_openblas + - liblapacke 3.9.0 38*_openblas + - blas 2.138 openblas + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/libcblas + size: 17685 + timestamp: 1761680563279 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcublas-12.8.4.1-h9ab20c4_1.conda + sha256: 3d3f7344db000feced2f9154cf0b3f3d245a1d317a1981e43b8b15f7baaaf6f1 + md5: 3ba4fd8bef181c020173d29ac67cae68 + depends: + - __glibc >=2.28,<3.0.a0 + - cuda-nvrtc + - cuda-version >=12.8,<12.9.0a0 + - libgcc >=13 + - libstdcxx >=13 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: + - pkg:pypi/libcublas + size: 471593172 + timestamp: 1742405543791 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcudnn-9.10.2.21-hf7e9902_0.conda + sha256: dc6b89e874867b2cdf08224059bd1543cbb72ed646da177c1454596469c9a4bb + md5: a178a1f3642521f104ecceeefa138d01 + depends: + - __glibc >=2.28,<3.0.a0 + - cuda-nvrtc + - cuda-version >=12,<13.0a0 + - libcublas + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + constrains: + - libcudnn-jit <0a + license: LicenseRef-cuDNN-Software-License-Agreement + purls: + - pkg:pypi/libcudnn + size: 526823453 + timestamp: 1762823414388 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcudnn-dev-9.10.2.21-h58dd1b1_0.conda + sha256: e9fef18b943a8181427734bc9fada8a594e3a8391fa2a8d59d980acfe1c2cf04 + md5: 7d7a47d067261531c3089dcec326d6fa + depends: + - __glibc >=2.28,<3.0.a0 + - cuda-version >=12,<13.0a0 + - libcudnn 9.10.2.21 hf7e9902_0 + - libgcc >=14 + - libstdcxx >=14 + constrains: + - libcudnn-jit-dev <0a + license: LicenseRef-cuDNN-Software-License-Agreement + purls: + - pkg:pypi/libcudnn-dev + size: 44188 + timestamp: 1762823889020 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcudss-0.6.0.5-h58dd1b1_0.conda + sha256: 6da3c21c86751846759692f2afdbfb8ed76076530be9e626d0cf9afa809afaee + md5: b347c1d8d190bbaeb8b58ccb986cdd7a + depends: + - __glibc >=2.28,<3.0.a0 + - _openmp_mutex >=4.5 + - cuda-version >=12,<13.0a0 + - libcublas + - libgcc >=14 + - libstdcxx >=14 + constrains: + - libcudss-commlayer-nccl 0.6.0.5 h4d09622_0 + - libcudss-commlayer-mpi 0.6.0.5 h09b4041_0 + - libcudss0 <0.0.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: + - pkg:pypi/libcudss + size: 36268949 + timestamp: 1753302377524 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcufft-11.3.3.83-h5888daf_1.conda + sha256: 1a38727a9666b7020ad844fd5074693b2c378d0161f58401d9f8488bdeb920a1 + md5: d0d12b6842be47267e3214e7ab2b1b02 + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-version >=12.8,<12.9.0a0 + - libgcc >=13 + - libstdcxx >=13 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: + - pkg:pypi/libcufft + size: 154743307 + timestamp: 1742415975122 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcufile-1.13.1.3-h628e99a_1.conda + sha256: 213f5df6ed25d19c4390666708a32ea457b1dcda64aca121f861b94671e2ed63 + md5: 9a97a35e7e63910013d638c389fa3514 + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-version >=12.8,<12.9.0a0 + - libgcc >=13 + - libstdcxx >=13 + - rdma-core >=55.0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: + - pkg:pypi/libcufile + size: 960749 + timestamp: 1743624986191 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcufile-dev-1.13.1.3-h5888daf_1.conda + sha256: 2ae87005e291fffbcbce7c9cf65062ae464030072d5eaea4f1f18ae19e6a5a90 + md5: 6aaa4d5464ffeb274611e28db2ddafa2 + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-version >=12.8,<12.9.0a0 + - libcufile 1.13.1.3 h628e99a_1 + - libgcc >=13 + - libstdcxx >=13 + constrains: + - libcufile-static >=1.13.1.3 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: + - pkg:pypi/libcufile-dev + size: 35023 + timestamp: 1743625021471 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcurand-10.3.9.90-h9ab20c4_1.conda + sha256: 379b2fd280bc4f4da999ab6560f56d4d3c02485089fb5f50b8933731a3eb5078 + md5: 06061f033297d93999b89d3c067f5f1c + depends: + - __glibc >=2.28,<3.0.a0 + - cuda-version >=12.8,<12.9.0a0 + - libgcc >=13 + - libstdcxx >=13 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: + - pkg:pypi/libcurand + size: 45729190 + timestamp: 1742487698497 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcusolver-11.7.3.90-h9ab20c4_1.conda + sha256: 868ba1b0b0ae15f7621ee960a459a74b9a17b69ba629c510a11bb37480e7b6df + md5: 2d58a7eb9150525ea89195cf1bcfbc4c + depends: + - __glibc >=2.28,<3.0.a0 + - cuda-version >=12.8,<12.9.0a0 + - libcublas >=12.8.4.1,<12.9.0a0 + - libcusparse >=12.5.8.93,<12.6.0a0 + - libgcc >=13 + - libnvjitlink >=12.8.93,<13.0.0a0 + - libstdcxx >=13 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: + - pkg:pypi/libcusolver + size: 164375128 + timestamp: 1742415308752 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcusparse-12.5.8.93-h5888daf_1.conda + sha256: c97c95beedc098c5a9ec9250ac6eaf1a7db4c8475de0e4f42997df973133a7e3 + md5: 2ba14c21959411d913a0e74f58d52e08 + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-version >=12.8,<12.9.0a0 + - libgcc >=13 + - libnvjitlink >=12.8.93,<13.0.0a0 + - libstdcxx >=13 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: + - pkg:pypi/libcusparse + size: 170119902 + timestamp: 1743620054443 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-21.1.5-hf598326_0.conda + sha256: cb441b85669eec99a593f59e6bb18c1d8a46d13eebadfc6a55f0b298109bf510 + md5: fbfdbf6e554275d2661c4541f45fed53 + depends: + - __osx >=11.0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: + - pkg:pypi/libcxx + size: 569449 + timestamp: 1762258167196 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h9ec8514_0.conda + sha256: 25cbdfa65580cfab1b8d15ee90b4c9f1e0d72128f1661449c9a999d341377d54 + md5: 35f29eec58405aaf55e01cb470d8c26a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: + - pkg:pypi/libffi + size: 57821 + timestamp: 1760295480630 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-he5f378a_0.conda + sha256: 9b8acdf42df61b7bfe8bdc545c016c29e61985e79748c64ad66df47dbc2e295f + md5: 411ff7cd5d1472bba0f55c0faf04453b + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/libffi + size: 40251 + timestamp: 1760295839166 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-h767d61c_7.conda + sha256: 08f9b87578ab981c7713e4e6a7d935e40766e10691732bba376d4964562bcb45 + md5: c0374badb3a5d4b1372db28d19462c53 + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + constrains: + - libgomp 15.2.0 h767d61c_7 + - libgcc-ng ==15.2.0=*_7 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: + - pkg:pypi/libgcc + size: 822552 + timestamp: 1759968052178 +- conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-14.3.0-h85bb3a7_107.conda + sha256: 57a1e792e9cffb3e641c84d3830eb637a81c85f33bdc3d45ac7b653c701f9d68 + md5: 84915638a998fae4d495fa038683a73e + depends: + - __unix + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: + - pkg:pypi/libgcc-devel-linux-64 + size: 2731390 + timestamp: 1759965626607 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_7.conda + sha256: 2045066dd8e6e58aaf5ae2b722fb6dfdbb57c862b5f34ac7bfb58c40ef39b6ad + md5: 280ea6eee9e2ddefde25ff799c4f0363 + depends: + - libgcc 15.2.0 h767d61c_7 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: + - pkg:pypi/libgcc-ng + size: 29313 + timestamp: 1759968065504 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_7.conda + sha256: 9ca24328e31c8ef44a77f53104773b9fe50ea8533f4c74baa8489a12de916f02 + md5: 8621a450add4e231f676646880703f49 + depends: + - libgfortran5 15.2.0 hcd61629_7 + constrains: + - libgfortran-ng ==15.2.0=*_7 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: + - pkg:pypi/libgfortran + size: 29275 + timestamp: 1759968110483 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-hfcf01ff_1.conda + sha256: e9a5d1208b9dc0b576b35a484d527d9b746c4e65620e0d77c44636033b2245f0 + md5: f699348e3f4f924728e33551b1920f79 + depends: + - libgfortran5 15.2.0 h742603c_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: + - pkg:pypi/libgfortran + size: 134016 + timestamp: 1759712902814 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-hcd61629_7.conda + sha256: e93ceda56498d98c9f94fedec3e2d00f717cbedfc97c49be0e5a5828802f2d34 + md5: f116940d825ffc9104400f0d7f1a4551 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15.2.0 + constrains: + - libgfortran 15.2.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: + - pkg:pypi/libgfortran5 + size: 1572758 + timestamp: 1759968082504 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-h742603c_1.conda + sha256: 18808697013a625ca876eeee3d86ee5b656f17c391eca4a4bc70867717cc5246 + md5: afccf412b03ce2f309f875ff88419173 + depends: + - llvm-openmp >=8.0.0 + constrains: + - libgfortran 15.2.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: + - pkg:pypi/libgfortran5 + size: 764028 + timestamp: 1759712189275 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-h767d61c_7.conda + sha256: e9fb1c258c8e66ee278397b5822692527c5f5786d372fe7a869b900853f3f5ca + md5: f7b4d76975aac7e5d9e6ad13845f92fe + depends: + - __glibc >=2.17,<3.0.a0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: + - pkg:pypi/libgomp + size: 447919 + timestamp: 1759967942498 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.12.1-default_h7f8ec31_1002.conda + sha256: f7fbc792dbcd04bf27219c765c10c239937b34c6c1a1f77a5827724753e02da1 + md5: c01021ae525a76fe62720c7346212d74 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libxml2 + - libxml2-16 >=2.14.6 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/libhwloc + size: 2450642 + timestamp: 1757624375958 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + sha256: c467851a7312765447155e071752d7bf9bf44d610a5687e32706f480aad2833f + md5: 915f5995e94f60e9a4826e0b0920ee88 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: LGPL-2.1-only + purls: + - pkg:pypi/libiconv + size: 790176 + timestamp: 1754908768807 +- conda: https://conda.anaconda.org/rapidsai/linux-64/libkvikio-25.08.00-cuda12_9_250806_2f72c39a.conda + sha256: 34d71d4718306f5ffbe4ec4a0277672aaa49758702e5267f2bafb246d164b55e + md5: e79f34ae4d591065d76575329ab02aca + depends: + - cuda-version >=12,<13.0a0 + - libcufile-dev + - libgcc >=15 + - libgcc >=14 + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.28,<3.0.a0 + - libnuma >=2.0.18,<3.0a0 + license: Apache-2.0 + size: 339716 + timestamp: 1754500125933 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-37_h5e43f62_mkl.conda + build_number: 37 + sha256: 1919047509e5067052130db19d7e9afcf74c045f45cbbf72940919f3875359de + md5: 0c4af651539e79160cd3f0783391e918 + depends: + - libblas 3.9.0 37_h5875eb1_mkl + constrains: + - liblapacke 3.9.0 37*_mkl + - blas 2.137 mkl + - libcblas 3.9.0 37*_mkl + track_features: + - blas_mkl + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/liblapack + size: 17510 + timestamp: 1760212773952 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-38_h47877c9_openblas.conda + build_number: 38 + sha256: 63d6073dd4f82ab46943ad99a22fc4edda83b0f8fe6170bdaba7a43352bed007 + md5: 88f10bff57b423a3fd2d990c6055771e + depends: + - libblas 3.9.0 38_h4a7cf45_openblas + constrains: + - libcblas 3.9.0 38*_openblas + - blas 2.138 openblas + - liblapacke 3.9.0 38*_openblas + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/liblapack + size: 17501 + timestamp: 1761680098660 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-38_h5e43f62_mkl.conda + build_number: 38 + sha256: 9b1ec163bc17b887deeee375f5795f57c2b6a90d847850fd9786f03853bdb584 + md5: 1836e677ec1cde974e75fbe0d0245444 + depends: + - libblas 3.9.0 38_h5875eb1_mkl + constrains: + - blas 2.138 mkl + - libcblas 3.9.0 38*_mkl + - liblapacke 3.9.0 38*_mkl + track_features: + - blas_mkl + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/liblapack + size: 17563 + timestamp: 1761680194101 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-38_hd9741b5_openblas.conda + build_number: 38 + sha256: df4f43d2ba45b7b80a45e8c0e51d3d7675a00047089beea7dc54e685825df9f6 + md5: 4525f30079caf1a2290538c2c531f354 + depends: + - libblas 3.9.0 38_h51639a9_openblas + constrains: + - liblapacke 3.9.0 38*_openblas + - blas 2.138 openblas + - libcblas 3.9.0 38*_openblas + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/liblapack + size: 17709 + timestamp: 1761680572118 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda + sha256: f2591c0069447bbe28d4d696b7fcb0c5bd0b4ac582769b89addbcf26fb3430d8 + md5: 1a580f7796c7bf6393fddb8bbbde58dc + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - xz 5.8.1.* + license: 0BSD + purls: + - pkg:pypi/liblzma + size: 112894 + timestamp: 1749230047870 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_2.conda + sha256: 0cb92a9e026e7bd4842f410a5c5c665c89b2eb97794ffddba519a626b8ce7285 + md5: d6df911d4564d77c4374b02552cb17d1 + depends: + - __osx >=11.0 + constrains: + - xz 5.8.1.* + license: 0BSD + purls: + - pkg:pypi/liblzma + size: 92286 + timestamp: 1749230283517 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-devel-5.8.1-hb9d3cd8_2.conda + sha256: 329e66330a8f9cbb6a8d5995005478188eb4ba8a6b6391affa849744f4968492 + md5: f61edadbb301530bd65a32646bd81552 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - liblzma 5.8.1 hb9d3cd8_2 + license: 0BSD + purls: + - pkg:pypi/liblzma-devel + size: 439868 + timestamp: 1749230061968 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-devel-5.8.1-h39f12f2_2.conda + sha256: 974804430e24f0b00f3a48b67ec10c9f5441c9bb3d82cc0af51ba45b8a75a241 + md5: 1201137f1a5ec9556032ffc04dcdde8d + depends: + - __osx >=11.0 + - liblzma 5.8.1 h39f12f2_2 + license: 0BSD + purls: + - pkg:pypi/liblzma-devel + size: 116244 + timestamp: 1749230297170 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libmagma-2.9.0-h19665d7_1.conda + sha256: 13d50a4f7da02e6acce4b5b6df82072c0f447a2c5ba1f4a3190dfec3a9174965 + md5: 38b3447782263c96b0c0a7b92c97575e + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + - cuda-cudart >=12.6.77,<13.0a0 + - cuda-version >=12.6,<13 + - libblas >=3.9.0,<4.0a0 + - libcublas >=12.6.4.1,<13.0a0 + - libcusparse >=12.5.4.2,<13.0a0 + - libgcc >=13 + - liblapack >=3.9.0,<4.0a0 + - libstdcxx >=13 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/libmagma + size: 371275523 + timestamp: 1739994057566 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libnl-3.11.0-hb9d3cd8_0.conda + sha256: ba7c5d294e3d80f08ac5a39564217702d1a752e352e486210faff794ac5001b4 + md5: db63358239cbe1ff86242406d440e44a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: LGPL-2.1-or-later + license_family: LGPL + purls: + - pkg:pypi/libnl + size: 741323 + timestamp: 1731846827427 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda + sha256: 927fe72b054277cde6cb82597d0fcf6baf127dcbce2e0a9d8925a68f1265eef5 + md5: d864d34357c3b65a4b731f78c0801dc4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: LGPL-2.1-only + license_family: GPL + purls: + - pkg:pypi/libnsl + size: 33731 + timestamp: 1750274110928 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libnuma-2.0.18-hb9d3cd8_3.conda + sha256: eb130af5be94c7db5e3448c7f254f8e066e62d1b76cd1c6c7c33f3565a55a685 + md5: 20ab6b90150325f1af7ca96bffafde63 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: LGPL-2.1-only + purls: + - pkg:pypi/libnuma + size: 44030 + timestamp: 1749573854077 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libnvcomp-4.2.0.11-hb7e823c_1.conda + sha256: 59d56256e2a7a95c15bf3f2c8245c5a7e3f280c44bbedb16aa0e6fed49cf1b2b + md5: 11959340baf7b525ddceb23618f5e23b + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-version >=12,<13.0a0 + - libgcc >=14 + - libstdcxx >=14 + license: LicenseRef-nvCOMP-Software-License-Agreement AND LicenseRef-NVIDIA-End-User-License-Agreement + purls: + - pkg:pypi/libnvcomp + size: 17280563 + timestamp: 1752877668217 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libnvjitlink-12.9.86-hecca717_2.conda + sha256: 3b1c851f4fc42d347ce1c1606bdd195343a47f121e0fceb7a1f1e5aa1d497da9 + md5: 3461b0f2d5cbb7973d361f9e85241d98 + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-version >=12,<12.10.0a0 + - libgcc >=14 + - libstdcxx >=14 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: + - pkg:pypi/libnvjitlink + size: 30515495 + timestamp: 1760723776293 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_3.conda + sha256: 200899e5acc01fa29550d2782258d9cf33e55ce4cbce8faed9c6fe0b774852aa + md5: ac2e4832427d6b159576e8a68305c722 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libgfortran + - libgfortran5 >=14.3.0 + constrains: + - openblas >=0.3.30,<0.3.31.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/libopenblas + size: 5918287 + timestamp: 1761748180250 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_ha158390_3.conda + sha256: dcc626c7103503d1dfc0371687ad553cb948b8ed0249c2a721147bdeb8db4a73 + md5: a18a7f471c517062ee71b843ef95eb8a + depends: + - __osx >=11.0 + - libgfortran + - libgfortran5 >=14.3.0 + - llvm-openmp >=19.1.7 + constrains: + - openblas >=0.3.30,<0.3.31.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/libopenblas + size: 4285762 + timestamp: 1761749506256 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h7460b1f_2.conda + sha256: 674635c341a7838138a0698fc5704eab3b9a3a14f85e6f47a9d7568b8fa01a11 + md5: 25b96b519eb2ed19faeef1c12954e82b + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20250127.1,<20250128.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/libprotobuf + size: 3475015 + timestamp: 1753801238063 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-6.31.1-h49aed37_2.conda + sha256: 1679f16c593d769f3dab219adb1117cbaaddb019080c5a59f79393dc9f45b84f + md5: 94cb88daa0892171457d9fdc69f43eca + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20250512.1,<20250513.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/libprotobuf + size: 4645876 + timestamp: 1760550892361 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-6.31.1-h658db43_2.conda + sha256: a01c3829eb0e3c1354ee7d61c5cde9a79dcebe6ccc7114c2feadf30aecbc7425 + md5: 155d3d17eaaf49ddddfe6c73842bc671 + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20250512.1,<20250513.0a0 + - libcxx >=19 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/libprotobuf + size: 2982875 + timestamp: 1760550241203 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-14.3.0-hd08acf3_7.conda + sha256: 73eb65f58ed086cf73fb9af3be4a9b288f630e9c2e1caacc75aff5f265d2dda2 + md5: 716f4c96e07207d74e635c915b8b3f8b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14.3.0 + - libstdcxx >=14.3.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: + - pkg:pypi/libsanitizer + size: 5110341 + timestamp: 1759965766003 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.0-hee844dc_0.conda + sha256: 4c992dcd0e34b68f843e75406f7f303b1b97c248d18f3c7c330bdc0bc26ae0b3 + md5: 729a572a3ebb8c43933b30edcc628ceb + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc >=14 + - libzlib >=1.3.1,<2.0a0 + license: blessing + purls: + - pkg:pypi/libsqlite + size: 945576 + timestamp: 1762299687230 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.0-h8adb53f_0.conda + sha256: b43d198f147f46866e5336c4a6b91668beef698bfba69d1706158460eadb2c1b + md5: 5fb1945dbc6380e6fe7e939a62267772 + depends: + - __osx >=11.0 + - icu >=75.1,<76.0a0 + - libzlib >=1.3.1,<2.0a0 + license: blessing + purls: + - pkg:pypi/libsqlite + size: 909508 + timestamp: 1762300078624 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h8f9b012_7.conda + sha256: 1b981647d9775e1cdeb2fab0a4dd9cd75a6b0de2963f6c3953dbd712f78334b3 + md5: 5b767048b1b3ee9a954b06f4084f93dc + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc 15.2.0 h767d61c_7 + constrains: + - libstdcxx-ng ==15.2.0=*_7 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: + - pkg:pypi/libstdcxx + size: 3898269 + timestamp: 1759968103436 +- conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-14.3.0-h85bb3a7_107.conda + sha256: 54ba5632d93faebbec3899d9df84c6e71c4574d70a2f3babfc5aac4247874038 + md5: eaf0f047b048c4d86a4b8c60c0e95f38 + depends: + - __unix + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: + - pkg:pypi/libstdcxx-devel-linux-64 + size: 13244605 + timestamp: 1759965656146 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-h4852527_7.conda + sha256: 024fd46ac3ea8032a5ec3ea7b91c4c235701a8bf0e6520fe5e6539992a6bd05f + md5: f627678cf829bd70bccf141a19c3ad3e + depends: + - libstdcxx 15.2.0 h8f9b012_7 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: + - pkg:pypi/libstdcxx-ng + size: 29343 + timestamp: 1759968157195 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.10-h085a93f_1.conda + sha256: a57cdd2eec34c49fe748412c1f3cf26f54dc9f346cd1f6f691b90d592ae25660 + md5: fbe2f90c5e1a2c3affbda77807883dca + depends: + - __glibc >=2.17,<3.0.a0 + - libcap >=2.76,<2.77.0a0 + - libgcc >=14 + license: LGPL-2.1-or-later + purls: + - pkg:pypi/libsystemd0 + size: 491334 + timestamp: 1762460699434 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.7.1-cuda126_mkl_hc2b21a2_300.conda + sha256: 6bfd89503205a68fb9be5f41b180fc81f7a898ead35d796f01f6b5417d8735f8 + md5: 14a196b86d4a2f95393143136d3a2cb7 + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex * *_llvm + - _openmp_mutex >=4.5 + - cuda-cudart >=12.6.77,<13.0a0 + - cuda-cupti >=12.6.80,<13.0a0 + - cuda-nvrtc >=12.6.85,<13.0a0 + - cuda-nvtx >=12.6.77,<13.0a0 + - cuda-version >=12.6,<13 + - cudnn >=9.10.1.4,<10.0a0 + - libabseil * cxx17* + - libabseil >=20250127.1,<20250128.0a0 + - libblas * *mkl + - libcblas >=3.9.0,<4.0a0 + - libcublas >=12.6.4.1,<13.0a0 + - libcudss >=0.6.0.5,<0.6.1.0a0 + - libcufft >=11.3.0.4,<12.0a0 + - libcufile >=1.11.1.6,<2.0a0 + - libcurand >=10.3.7.77,<11.0a0 + - libcusolver >=11.7.1.2,<12.0a0 + - libcusparse >=12.5.4.2,<13.0a0 + - libgcc >=13 + - libmagma >=2.9.0,<2.9.1.0a0 + - libprotobuf >=5.29.3,<5.29.4.0a0 + - libstdcxx >=13 + - libuv >=1.51.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - llvm-openmp >=20.1.7 + - mkl >=2024.2.2,<2025.0a0 + - nccl >=2.27.3.1,<3.0a0 + - sleef >=3.8,<4.0a0 + constrains: + - pytorch-gpu 2.7.1 + - pytorch 2.7.1 cuda126_mkl_*_300 + - pytorch-cpu <0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/libtorch + size: 558349447 + timestamp: 1750230066831 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.8.0-cpu_mkl_h09b866c_102.conda + sha256: 7033538481a66ed4f59f3b88a952f55b85596429271643678fd14a4e0a9666b9 + md5: 0194f4ea9e74964548ddb220b61d4712 + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex * *_llvm + - _openmp_mutex >=4.5 + - libabseil * cxx17* + - libabseil >=20250512.1,<20250513.0a0 + - libblas * *mkl + - libcblas >=3.9.0,<4.0a0 + - libgcc >=14 + - libprotobuf >=6.31.1,<6.31.2.0a0 + - libstdcxx >=14 + - libuv >=1.51.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - llvm-openmp >=21.1.4 + - mkl >=2025.3.0,<2026.0a0 + - pybind11-abi 4 + - sleef >=3.9.0,<4.0a0 + constrains: + - pytorch-cpu 2.8.0 + - pytorch-gpu <0.0a0 + - pytorch 2.8.0 cpu_mkl_*_102 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/libtorch + size: 58954930 + timestamp: 1762096008648 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtorch-2.8.0-cpu_generic_h0fc8bc6_2.conda + sha256: 0ed7d6b9b8c235bf2fceaf2385b9b9974fe1d617b359e1ae3e0356eb5451f746 + md5: a3dd2052b8590e147aff10f69bd4bb6c + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20250512.1,<20250513.0a0 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libcxx >=19 + - liblapack >=3.9.0,<4.0a0 + - libprotobuf >=6.31.1,<6.31.2.0a0 + - libuv >=1.51.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - llvm-openmp >=19.1.7 + - numpy >=1.23,<3 + - pybind11-abi 4 + - python >=3.11,<3.12.0a0 *_cpython + - python_abi 3.11.* *_cp311 + - sleef >=3.9.0,<4.0a0 + constrains: + - pytorch 2.8.0 cpu_generic_*_2 + - openblas * openmp_* + - pytorch-gpu <0.0a0 + - pytorch-cpu 2.8.0 + - libopenblas * openmp_* + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/libtorch + size: 29854869 + timestamp: 1762100452297 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-257.10-h085a93f_1.conda + sha256: 135f043ced014c8a94b62f111726addc3b14f52525f4e1d6daafd97372c1b772 + md5: 553d592cb7712ac732f58e781a2dc7b6 + depends: + - __glibc >=2.17,<3.0.a0 + - libcap >=2.76,<2.77.0a0 + - libgcc >=14 + license: LGPL-2.1-or-later + purls: + - pkg:pypi/libudev1 + size: 145067 + timestamp: 1762460712193 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.2-he9a06e4_0.conda + sha256: e5ec6d2ad7eef538ddcb9ea62ad4346fde70a4736342c4ad87bd713641eb9808 + md5: 80c07c68d2f6870250959dcc95b209d1 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/libuuid + size: 37135 + timestamp: 1758626800002 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda + sha256: c180f4124a889ac343fc59d15558e93667d894a966ec6fdb61da1604481be26b + md5: 0f03292cc56bf91a077a134ea8747118 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: + - pkg:pypi/libuv + size: 895108 + timestamp: 1753948278280 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda + sha256: 042c7488ad97a5629ec0a991a8b2a3345599401ecc75ad6a5af73b60e6db9689 + md5: c0d87c3c8e075daf1daf6c31b53e8083 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/libuv + size: 421195 + timestamp: 1753948426421 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.1-h26afc86_0.conda + sha256: ec0735ae56c3549149eebd7dc22c0bed91fd50c02eaa77ff418613ddda190aa8 + md5: e512be7dc1f84966d50959e900ca121f + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.1,<6.0a0 + - libxml2-16 2.15.1 ha9997c6_0 + - libzlib >=1.3.1,<2.0a0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/libxml2 + size: 45283 + timestamp: 1761015644057 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.1-ha9997c6_0.conda + sha256: 71436e72a286ef8b57d6f4287626ff91991eb03c7bdbe835280521791efd1434 + md5: e7733bc6785ec009e47a224a71917e84 + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.1,<6.0a0 + - libzlib >=1.3.1,<2.0a0 + constrains: + - libxml2 2.15.1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/libxml2-16 + size: 556302 + timestamp: 1761015637262 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 + md5: edb0dca6bc32e4f4789199455a1dbeb8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: + - pkg:pypi/libzlib + size: 60963 + timestamp: 1727963148474 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + sha256: ce34669eadaba351cd54910743e6a2261b67009624dbc7daeeafdef93616711b + md5: 369964e85dc26bfe78f41399b366c435 + depends: + - __osx >=11.0 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: + - pkg:pypi/libzlib + size: 46438 + timestamp: 1727963202283 +- conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-21.1.5-h4922eb0_0.conda + sha256: b80325cd93884912ab78717dc5c2145373e5aefeb1ad6af34267ab33b5a7eea4 + md5: 527e993cefc9ac376b8fb112f47cc2e0 + depends: + - __glibc >=2.17,<3.0.a0 + constrains: + - openmp 21.1.5|21.1.5.* + - intel-openmp <0.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: + - pkg:pypi/llvm-openmp + size: 3226046 + timestamp: 1762315432827 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-21.1.5-h4a912ad_0.conda + sha256: a9707045db6a1b9dc2b196f02c3e31d72fe3dbab4ebc4976f3b913c26394dca0 + md5: 9ae7847a3bef5e050f3921260032033c + depends: + - __osx >=11.0 + constrains: + - intel-openmp <0.0a0 + - openmp 21.1.5|21.1.5.* + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: + - pkg:pypi/llvm-openmp + size: 285516 + timestamp: 1762315951771 +- pypi: https://files.pythonhosted.org/packages/87/fb/99f81ac72ae23375f22b7afdb7642aba97c00a713c217124420147681a2f/mako-1.3.10-py3-none-any.whl + name: mako + version: 1.3.10 + sha256: baef24a52fc4fc514a0887ac600f9f1cff3d82c61d4d700a1fa84d597b88db59 + requires_dist: + - markupsafe>=0.9.2 + - pytest ; extra == 'testing' + - babel ; extra == 'babel' + - lingua ; extra == 'lingua' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/e1/2e/5898933336b61975ce9dc04decbc0a7f2fee78c30353c5efba7f2d6ff27a/markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl + name: markupsafe + version: 3.0.3 + sha256: 4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py311h3778330_0.conda + sha256: 66c072c37aefa046f3fd4ca69978429421ef9e8a8572e19de534272a6482e997 + md5: 0954f1a6a26df4a510b54f73b2a0345c + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.11,<3.12.0a0 + - python_abi 3.11.* *_cp311 + constrains: + - jinja2 >=3.0.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/markupsafe + size: 26016 + timestamp: 1759055312513 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py311ha9b3269_0.conda + sha256: c6b20ca60d739f78525dff778292f7011454befda2cc3e1a725ded897fbf9b33 + md5: df124303925c7ad5d7eb15179d38c4e3 + depends: + - __osx >=11.0 + - python >=3.11,<3.12.0a0 + - python >=3.11,<3.12.0a0 *_cpython + - python_abi 3.11.* *_cp311 + constrains: + - jinja2 >=3.0.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/markupsafe + size: 26326 + timestamp: 1759055494628 +- conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2024.2.2-ha770c72_17.conda + sha256: 1e59d0dc811f150d39c2ff2da930d69dcb91cb05966b7df5b7d85133006668ed + md5: e4ab075598123e783b788b995afbdad0 + depends: + - _openmp_mutex * *_llvm + - _openmp_mutex >=4.5 + - llvm-openmp >=20.1.8 + - tbb 2021.* + license: LicenseRef-IntelSimplifiedSoftwareOct2022 + license_family: Proprietary + purls: + - pkg:pypi/mkl + size: 124988693 + timestamp: 1753975818422 +- conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2025.3.0-h0e700b2_462.conda + sha256: b5ddfb4378c19d0d69e751478a7733dee035d1dd1f206e7a88a5df4ee71345e0 + md5: a2e8e73f7132ea5ea70fda6f3cf05578 + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex * *_llvm + - _openmp_mutex >=4.5 + - libgcc >=14 + - libstdcxx >=14 + - llvm-openmp >=21.1.4 + - tbb >=2022.2.0 + license: LicenseRef-IntelSimplifiedSoftwareOct2022 + license_family: Proprietary + purls: + - pkg:pypi/mkl + size: 125177250 + timestamp: 1761668323993 +- conda: https://conda.anaconda.org/conda-forge/linux-64/mpc-1.3.1-h24ddda3_1.conda + sha256: 1bf794ddf2c8b3a3e14ae182577c624fa92dea975537accff4bc7e5fea085212 + md5: aa14b9a5196a6d8dd364164b7ce56acf + depends: + - __glibc >=2.17,<3.0.a0 + - gmp >=6.3.0,<7.0a0 + - libgcc >=13 + - mpfr >=4.2.1,<5.0a0 + license: LGPL-3.0-or-later + license_family: LGPL + purls: + - pkg:pypi/mpc + size: 116777 + timestamp: 1725629179524 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/mpc-1.3.1-h8f1351a_1.conda + sha256: 2700899ad03302a1751dbf2bca135407e470dd83ac897ab91dd8675d4300f158 + md5: a5635df796b71f6ca400fc7026f50701 + depends: + - __osx >=11.0 + - gmp >=6.3.0,<7.0a0 + - mpfr >=4.2.1,<5.0a0 + license: LGPL-3.0-or-later + license_family: LGPL + purls: + - pkg:pypi/mpc + size: 104766 + timestamp: 1725629165420 +- conda: https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.1-h90cbb55_3.conda + sha256: f25d2474dd557ca66c6231c8f5ace5af312efde1ba8290a6ea5e1732a4e669c0 + md5: 2eeb50cab6652538eee8fc0bc3340c81 + depends: + - __glibc >=2.17,<3.0.a0 + - gmp >=6.3.0,<7.0a0 + - libgcc >=13 + license: LGPL-3.0-only + license_family: LGPL + purls: + - pkg:pypi/mpfr + size: 634751 + timestamp: 1725746740014 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/mpfr-4.2.1-hb693164_3.conda + sha256: 4463e4e2aba7668e37a1b8532859191b4477a6f3602a5d6b4d64ad4c4baaeac5 + md5: 4e4ea852d54cc2b869842de5044662fb + depends: + - __osx >=11.0 + - gmp >=6.3.0,<7.0a0 + license: LGPL-3.0-only + license_family: LGPL + purls: + - pkg:pypi/mpfr + size: 345517 + timestamp: 1725746730583 +- conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda + sha256: 7d7aa3fcd6f42b76bd711182f3776a02bef09a68c5f117d66b712a6d81368692 + md5: 3585aa87c43ab15b167b574cd73b057b + depends: + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/mpmath + size: 439705 + timestamp: 1733302781386 +- conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.1.2-py311hdf67eae_1.conda + sha256: 8c81a6208def64afc3e208326d78d7af60bcbc32d44afe1269b332df84084f29 + md5: c1153b2cb3318889ce624a3b4f0db7f7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - python >=3.11,<3.12.0a0 + - python_abi 3.11.* *_cp311 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/msgpack-python + size: 102979 + timestamp: 1762504186626 +- pypi: https://files.pythonhosted.org/packages/4d/e1/866a5d77be6ea435711bef2a4291eed11032679b6b28b56b4776ab06ba3e/multidict-6.7.0-cp311-cp311-macosx_11_0_arm64.whl + name: multidict + version: 6.7.0 + sha256: 4c09703000a9d0fa3c3404b27041e574cc7f4df4c6563873246d0e11812a94b6 + requires_dist: + - typing-extensions>=4.1.0 ; python_full_version < '3.11' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/a8/9f/78f8761c2705d4c6d7516faed63c0ebdac569f6db1bef95e0d5218fdc146/multidict-6.7.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: multidict + version: 6.7.0 + sha256: 3e56d780c238f9e1ae66a22d2adf8d16f485381878250db8d496623cd38b22bd + requires_dist: + - typing-extensions>=4.1.0 ; python_full_version < '3.11' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/0f/e0/1e96c3d4266a06d4b0197ace5356d67d937d8358e2ee3ffac71faa843724/mypy-1.18.2-cp311-cp311-macosx_11_0_arm64.whl + name: mypy + version: 1.18.2 + sha256: 776bb00de1778caf4db739c6e83919c1d85a448f71979b6a0edd774ea8399341 + requires_dist: + - typing-extensions>=4.6.0 + - mypy-extensions>=1.0.0 + - pathspec>=0.9.0 + - tomli>=1.1.0 ; python_full_version < '3.11' + - psutil>=4.0 ; extra == 'dmypy' + - setuptools>=50 ; extra == 'mypyc' + - lxml ; extra == 'reports' + - pip ; extra == 'install-types' + - orjson ; extra == 'faster-cache' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/1a/52/ec4a061dd599eb8179d5411d99775bec2a20542505988f40fc2fee781068/mypy-1.18.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: mypy + version: 1.18.2 + sha256: 1331eb7fd110d60c24999893320967594ff84c38ac6d19e0a76c5fd809a84c86 + requires_dist: + - typing-extensions>=4.6.0 + - mypy-extensions>=1.0.0 + - pathspec>=0.9.0 + - tomli>=1.1.0 ; python_full_version < '3.11' + - psutil>=4.0 ; extra == 'dmypy' + - setuptools>=50 ; extra == 'mypyc' + - lxml ; extra == 'reports' + - pip ; extra == 'install-types' + - orjson ; extra == 'faster-cache' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl + name: mypy-extensions + version: 1.1.0 + sha256: 1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/ef/82/7a9d0550484a62c6da82858ee9419f3dd1ccc9aa1c26a1e43da3ecd20b0d/natsort-8.4.0-py3-none-any.whl + name: natsort + version: 8.4.0 + sha256: 4732914fb471f56b5cce04d7bae6f164a592c7712e1c85f9ef585e197299521c + requires_dist: + - fastnumbers>=2.0.0 ; extra == 'fast' + - pyicu>=1.0.0 ; extra == 'icu' + requires_python: '>=3.7' +- conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyh29332c3_1.conda + sha256: 594ae12c32f163f6d312e38de41311a89e476544613df0c1d048f699721621d7 + md5: 0aa03903d33997f3886be58abc890aef + depends: + - python >=3.9 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/natsort + size: 39002 + timestamp: 1733880463101 +- conda: https://conda.anaconda.org/conda-forge/linux-64/nccl-2.28.9.1-h4d09622_0.conda + sha256: 12de75cf9b11c1e975f26f84ee1ac6a77f7b65f26eb819d1d45c3007dad1ef85 + md5: d41326b02eb74cf875803c265dde8210 + depends: + - __glibc >=2.28,<3.0.a0 + - cuda-version >=12.2a.0,<13.0a0 + - libgcc >=14 + - libstdcxx >=14 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/nccl + size: 193073223 + timestamp: 1762821007597 +- pypi: https://files.pythonhosted.org/packages/fb/ec/b0c23ec7fc9df5af527b2d63f15a92699f7fd0515986763ed8e50489a755/ncls-0.0.70-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: ncls + version: 0.0.70 + sha256: 91d2fca94a5adaf3e7f42e5360c3bd8220ce3da9adde8209c05aa9849383cd1b + requires_dist: + - numpy + - black ; extra == 'dev' + - bumpver ; extra == 'dev' + - isort ; extra == 'dev' + - pip-tools ; extra == 'dev' + - pytest ; extra == 'dev' +- conda: https://conda.anaconda.org/bioconda/linux-64/ncls-0.0.70-py311haab0aaa_0.tar.bz2 + sha256: 14f7962484f705c5cffa9d02893bffc4d5ed27ed014adc094ea5c81de2e5abb4 + md5: ef8af807ac3bdad9b080686b2c1bc9ca + depends: + - libgcc >=13 + - numpy + - python >=3.11,<3.12.0a0 + - python_abi 3.11.* *_cp311 + - setuptools + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/ncls?source=hash-mapping + size: 724344 + timestamp: 1751920741532 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + sha256: 3fde293232fa3fca98635e1167de6b7c7fda83caf24b9d6c91ec9eefb4f4d586 + md5: 47e340acb35de30501a76c7c799c41d7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: X11 AND BSD-3-Clause + purls: + - pkg:pypi/ncurses + size: 891641 + timestamp: 1738195959188 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + sha256: 2827ada40e8d9ca69a153a45f7fd14f32b2ead7045d3bbb5d10964898fe65733 + md5: 068d497125e4bf8a66bf707254fff5ae + depends: + - __osx >=11.0 + license: X11 AND BSD-3-Clause + purls: + - pkg:pypi/ncurses + size: 797030 + timestamp: 1738196177597 +- conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.5-pyhe01879c_0.conda + sha256: 02019191a2597865940394ff42418b37bc585a03a1c643d7cea9981774de2128 + md5: 16bff3d37a4f99e3aa089c36c2b8d650 + depends: + - python >=3.11 + - python + constrains: + - numpy >=1.25 + - scipy >=1.11.2 + - matplotlib >=3.8 + - pandas >=2.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/networkx + size: 1564462 + timestamp: 1749078300258 +- conda: https://conda.anaconda.org/conda-forge/noarch/nomkl-1.0-h5ca1d4c_0.tar.bz2 + sha256: d38542a151a90417065c1a234866f97fd1ea82a81de75ecb725955ab78f88b4b + md5: 9a66894dfd07c4510beb6b3f9672ccc0 + constrains: + - mkl <0.a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/nomkl + size: 3843 + timestamp: 1582593857545 +- pypi: https://files.pythonhosted.org/packages/3b/6a/64c25a089e8537441fe67c09ecb7f3f7fb5d98cd04faf01f605d43aca41c/numcodecs-0.16.3-cp311-cp311-macosx_11_0_arm64.whl + name: numcodecs + version: 0.16.3 + sha256: e2afe73d5ebaf9ca0cd5c83aad945da80d29a33d860a80d43a7248491d8813ff + requires_dist: + - numpy>=1.24 + - typing-extensions + - sphinx ; extra == 'docs' + - sphinx-issues ; extra == 'docs' + - pydata-sphinx-theme ; extra == 'docs' + - numpydoc ; extra == 'docs' + - coverage ; extra == 'test' + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + - pyzstd ; extra == 'test' + - importlib-metadata ; extra == 'test-extras' + - msgpack ; extra == 'msgpack' + - zfpy>=1.0.0 ; extra == 'zfpy' + - pcodec>=0.3,<0.4 ; extra == 'pcodec' + - crc32c>=2.7 ; extra == 'crc32c' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/b6/0f/49d1f74a216149240c4b9403218111f11670bd11af0919fda357bb056bf2/numcodecs-0.16.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: numcodecs + version: 0.16.3 + sha256: 85a7f1cae9eb18b85709af46570bf9c60056e7155c4c8f610e8080c68124d0e5 + requires_dist: + - numpy>=1.24 + - typing-extensions + - sphinx ; extra == 'docs' + - sphinx-issues ; extra == 'docs' + - pydata-sphinx-theme ; extra == 'docs' + - numpydoc ; extra == 'docs' + - coverage ; extra == 'test' + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + - pyzstd ; extra == 'test' + - importlib-metadata ; extra == 'test-extras' + - msgpack ; extra == 'msgpack' + - zfpy>=1.0.0 ; extra == 'zfpy' + - pcodec>=0.3,<0.4 ; extra == 'pcodec' + - crc32c>=2.7 ; extra == 'crc32c' + requires_python: '>=3.11' +- conda: https://conda.anaconda.org/conda-forge/linux-64/numcodecs-0.16.1-py311hed34c8f_2.conda + sha256: 005214a1ff35cd3fabf83d05e93c6d6bd6a6545173e1f1e9fd1248650d97b5b1 + md5: 37e00c968593324b4c86104d8b71629e + depends: + - __glibc >=2.17,<3.0.a0 + - deprecated + - libgcc >=14 + - libstdcxx >=14 + - msgpack-python + - numpy >=1.23,<3 + - numpy >=1.24 + - python >=3.11,<3.12.0a0 + - python_abi 3.11.* *_cp311 + - typing_extensions + license: MIT + license_family: MIT + purls: + - pkg:pypi/numcodecs + size: 821684 + timestamp: 1759814235116 +- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py311h64a7726_0.conda + sha256: 3f4365e11b28e244c95ba8579942b0802761ba7bb31c026f50d1a9ea9c728149 + md5: a502d7aad449a1206efb366d6a12c52d + depends: + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libgcc-ng >=12 + - liblapack >=3.9.0,<4.0a0 + - libstdcxx-ng >=12 + - python >=3.11,<3.12.0a0 + - python_abi 3.11.* *_cp311 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy + size: 8065890 + timestamp: 1707225944355 +- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.3.4-py311h2e04523_0.conda + sha256: 67cc072b8f5c157df4228a1a2291628e5ca2360f48ef572a64e2cf2bf55d2e25 + md5: d84afde5a6f028204f24180ff87cf429 + depends: + - python + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - python_abi 3.11.* *_cp311 + - liblapack >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libblas >=3.9.0,<4.0a0 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy + size: 9418119 + timestamp: 1761162089374 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.3.4-py311h8685306_0.conda + sha256: 218062c97ec67991972d99dcdd2ff5fa6e596095b316496911d3cd2f0f3e0eaf + md5: c72f70484e64c8106d560f60963b354a + depends: + - python + - python 3.11.* *_cpython + - __osx >=11.0 + - libcxx >=19 + - liblapack >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libblas >=3.9.0,<4.0a0 + - python_abi 3.11.* *_cp311 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy + size: 7278993 + timestamp: 1761161589274 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.0-h26f9b46_0.conda + sha256: a47271202f4518a484956968335b2521409c8173e123ab381e775c358c67fe6d + md5: 9ee58d5c534af06558933af3c845a780 + depends: + - __glibc >=2.17,<3.0.a0 + - ca-certificates + - libgcc >=14 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/openssl + size: 3165399 + timestamp: 1762839186699 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.0-h5503f6c_0.conda + sha256: ebe93dafcc09e099782fe3907485d4e1671296bc14f8c383cb6f3dfebb773988 + md5: b34dc4172653c13dcf453862f251af2b + depends: + - __osx >=11.0 + - ca-certificates + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/openssl + size: 3108371 + timestamp: 1762839712322 +- conda: https://conda.anaconda.org/conda-forge/linux-64/optree-0.17.0-py311hdf67eae_2.conda + sha256: eaf556aff78eaa7f889bf39a38f01f5990a356a9696ef15e0f9959ec43418e18 + md5: 9e5bbc8866c6d9e83c7a31e2273e75b2 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - python >=3.11,<3.12.0a0 + - python_abi 3.11.* *_cp311 + - typing-extensions >=4.6 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/optree + size: 444433 + timestamp: 1762488011091 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/optree-0.17.0-py311h5a5e7c7_2.conda + sha256: ca7c98662259c8e8cce66fda3cf971e339b853acb4ccc892d9fdc60e967ebb3c + md5: 389b08d3b05381acd15f8851f0d43914 + depends: + - __osx >=11.0 + - libcxx >=19 + - python >=3.11,<3.12.0a0 + - python >=3.11,<3.12.0a0 *_cpython + - python_abi 3.11.* *_cp311 + - typing-extensions >=4.6 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/optree + size: 389377 + timestamp: 1762488254088 +- pypi: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl + name: packaging + version: '25.0' + sha256: 29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484 + requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + sha256: 289861ed0c13a15d7bbb408796af4de72c2fe67e2bcb0de98f4c3fce259d7991 + md5: 58335b26c38bf4a20f399384c33cbcf9 + depends: + - python >=3.8 + - python + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/packaging + size: 62477 + timestamp: 1745345660407 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.3.3-py311hed34c8f_1.conda + sha256: c97f796345f5b9756e4404bbb4ee049afd5ea1762be6ee37ce99162cbee3b1d3 + md5: 72e3452bf0ff08132e86de0272f2fbb0 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - numpy >=1.22.4 + - numpy >=1.23,<3 + - python >=3.11,<3.12.0a0 + - python-dateutil >=2.8.2 + - python-tzdata >=2022.7 + - python_abi 3.11.* *_cp311 + - pytz >=2020.1 + constrains: + - beautifulsoup4 >=4.11.2 + - scipy >=1.10.0 + - pytables >=3.8.0 + - gcsfs >=2022.11.0 + - odfpy >=1.4.1 + - xlsxwriter >=3.0.5 + - openpyxl >=3.1.0 + - html5lib >=1.1 + - python-calamine >=0.1.7 + - qtpy >=2.3.0 + - pyxlsb >=1.0.10 + - xarray >=2022.12.0 + - pandas-gbq >=0.19.0 + - numexpr >=2.8.4 + - tzdata >=2022.7 + - pyreadstat >=1.2.0 + - lxml >=4.9.2 + - pyqt5 >=5.15.9 + - s3fs >=2022.11.0 + - fastparquet >=2022.12.0 + - psycopg2 >=2.9.6 + - xlrd >=2.0.1 + - matplotlib >=3.6.3 + - blosc >=1.21.3 + - numba >=0.56.4 + - sqlalchemy >=2.0.0 + - fsspec >=2022.11.0 + - pyarrow >=10.0.1 + - zstandard >=0.19.0 + - bottleneck >=1.3.6 + - tabulate >=0.9.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pandas + size: 15337715 + timestamp: 1759266002530 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.3.3-py311hdb8e4fa_1.conda + sha256: 2d9350d3d16d3626fe30930026d527e3d3af4fa1ec3e6b9d4791cbb49bb186f3 + md5: ea737715ac61b431bfd5adbcd9ea0cae + depends: + - __osx >=11.0 + - libcxx >=19 + - numpy >=1.22.4 + - numpy >=1.23,<3 + - python >=3.11,<3.12.0a0 + - python >=3.11,<3.12.0a0 *_cpython + - python-dateutil >=2.8.2 + - python-tzdata >=2022.7 + - python_abi 3.11.* *_cp311 + - pytz >=2020.1 + constrains: + - tabulate >=0.9.0 + - xlrd >=2.0.1 + - html5lib >=1.1 + - pyqt5 >=5.15.9 + - psycopg2 >=2.9.6 + - gcsfs >=2022.11.0 + - lxml >=4.9.2 + - pytables >=3.8.0 + - pyxlsb >=1.0.10 + - sqlalchemy >=2.0.0 + - openpyxl >=3.1.0 + - pandas-gbq >=0.19.0 + - matplotlib >=3.6.3 + - python-calamine >=0.1.7 + - numba >=0.56.4 + - beautifulsoup4 >=4.11.2 + - pyreadstat >=1.2.0 + - xlsxwriter >=3.0.5 + - fsspec >=2022.11.0 + - blosc >=1.21.3 + - odfpy >=1.4.1 + - pyarrow >=10.0.1 + - numexpr >=2.8.4 + - bottleneck >=1.3.6 + - tzdata >=2022.7 + - xarray >=2022.12.0 + - s3fs >=2022.11.0 + - zstandard >=0.19.0 + - scipy >=1.10.0 + - qtpy >=2.3.0 + - fastparquet >=2022.12.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pandas + size: 14389534 + timestamp: 1759266253108 +- pypi: https://files.pythonhosted.org/packages/b1/29/c028a0731e202035f0e2e0bfbf1a3e46ad6c628cbb17f6f1cc9eea5d9ff1/pathlib_abc-0.5.2-py3-none-any.whl + name: pathlib-abc + version: 0.5.2 + sha256: 4c9d94cf1b23af417ce7c0417b43333b06a106c01000b286c99de230d95eefbb + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/pathlib-abc-0.5.2-pyh9692d8f_0.conda + sha256: 70fff431251c35a2fe82a04452e8b37afe71a1d9e04c84c75bc10b70a50ada09 + md5: 9c7e6958c1ddc27ceb271eb7422bee56 + depends: + - python >=3.10 + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/pathlib-abc + size: 23607 + timestamp: 1760357881073 +- pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl + name: pathspec + version: 0.12.1 + sha256: a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/2e/05/069b1f8a2e4b5a37493da6c5868531c3f77b85e716ad7a590ef87d58730d/pillow-12.0.0-cp311-cp311-macosx_11_0_arm64.whl + name: pillow + version: 12.0.0 + sha256: a3475b96f5908b3b16c47533daaa87380c491357d197564e0ba34ae75c0f3257 + requires_dist: + - furo ; extra == 'docs' + - olefile ; extra == 'docs' + - sphinx>=8.2 ; extra == 'docs' + - sphinx-autobuild ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-inline-tabs ; extra == 'docs' + - sphinxext-opengraph ; extra == 'docs' + - olefile ; extra == 'fpx' + - olefile ; extra == 'mic' + - arro3-compute ; extra == 'test-arrow' + - arro3-core ; extra == 'test-arrow' + - nanoarrow ; extra == 'test-arrow' + - pyarrow ; extra == 'test-arrow' + - check-manifest ; extra == 'tests' + - coverage>=7.4.2 ; extra == 'tests' + - defusedxml ; extra == 'tests' + - markdown2 ; extra == 'tests' + - olefile ; extra == 'tests' + - packaging ; extra == 'tests' + - pyroma>=5 ; extra == 'tests' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - pytest-timeout ; extra == 'tests' + - pytest-xdist ; extra == 'tests' + - trove-classifiers>=2024.10.12 ; extra == 'tests' + - defusedxml ; extra == 'xmp' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/41/1e/db9470f2d030b4995083044cd8738cdd1bf773106819f6d8ba12597d5352/pillow-12.0.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: pillow + version: 12.0.0 + sha256: bee2a6db3a7242ea309aa7ee8e2780726fed67ff4e5b40169f2c940e7eb09227 + requires_dist: + - furo ; extra == 'docs' + - olefile ; extra == 'docs' + - sphinx>=8.2 ; extra == 'docs' + - sphinx-autobuild ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-inline-tabs ; extra == 'docs' + - sphinxext-opengraph ; extra == 'docs' + - olefile ; extra == 'fpx' + - olefile ; extra == 'mic' + - arro3-compute ; extra == 'test-arrow' + - arro3-core ; extra == 'test-arrow' + - nanoarrow ; extra == 'test-arrow' + - pyarrow ; extra == 'test-arrow' + - check-manifest ; extra == 'tests' + - coverage>=7.4.2 ; extra == 'tests' + - defusedxml ; extra == 'tests' + - markdown2 ; extra == 'tests' + - olefile ; extra == 'tests' + - packaging ; extra == 'tests' + - pyroma>=5 ; extra == 'tests' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - pytest-timeout ; extra == 'tests' + - pytest-xdist ; extra == 'tests' + - trove-classifiers>=2024.10.12 ; extra == 'tests' + - defusedxml ; extra == 'xmp' + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/noarch/pip-25.3-pyh8b19718_0.conda + sha256: b67692da1c0084516ac1c9ada4d55eaf3c5891b54980f30f3f444541c2706f1e + md5: c55515ca43c6444d2572e0f0d93cb6b9 + depends: + - python >=3.10,<3.13.0a0 + - setuptools + - wheel + license: MIT + license_family: MIT + purls: + - pkg:pypi/pip + size: 1177534 + timestamp: 1762776258783 +- pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl + name: pluggy + version: 1.6.0 + sha256: e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746 + requires_dist: + - pre-commit ; extra == 'dev' + - tox ; extra == 'dev' + - pytest ; extra == 'testing' + - pytest-benchmark ; extra == 'testing' + - coverage ; extra == 'testing' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/52/6a/57f43e054fb3d3a56ac9fc532bc684fc6169a26c75c353e65425b3e56eef/propcache-0.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: propcache + version: 0.4.1 + sha256: fd6f30fdcf9ae2a70abd34da54f18da086160e4d7d9251f81f3da0ff84fc5a48 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/d3/1d/11605e99ac8ea9435651ee71ab4cb4bf03f0949586246476a25aadfec54a/propcache-0.4.1-cp311-cp311-macosx_11_0_arm64.whl + name: propcache + version: 0.4.1 + sha256: 6918ecbd897443087a3b7cd978d56546a812517dcaaca51b49526720571fa93e + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/68/3a/9f93cff5c025029a36d9a92fef47220ab4692ee7f2be0fba9f92813d0cb8/psutil-7.1.3-cp36-abi3-macosx_11_0_arm64.whl + name: psutil + version: 7.1.3 + sha256: bc31fa00f1fbc3c3802141eede66f3a2d51d89716a194bf2cd6fc68310a19880 + requires_dist: + - pytest ; extra == 'dev' + - pytest-instafail ; extra == 'dev' + - pytest-subtests ; extra == 'dev' + - pytest-xdist ; extra == 'dev' + - setuptools ; extra == 'dev' + - abi3audit ; extra == 'dev' + - black ; extra == 'dev' + - check-manifest ; extra == 'dev' + - coverage ; extra == 'dev' + - packaging ; extra == 'dev' + - pylint ; extra == 'dev' + - pyperf ; extra == 'dev' + - pypinfo ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - requests ; extra == 'dev' + - rstcheck ; extra == 'dev' + - ruff ; extra == 'dev' + - sphinx ; extra == 'dev' + - sphinx-rtd-theme ; extra == 'dev' + - toml-sort ; extra == 'dev' + - twine ; extra == 'dev' + - validate-pyproject[all] ; extra == 'dev' + - virtualenv ; extra == 'dev' + - vulture ; extra == 'dev' + - wheel ; extra == 'dev' + - colorama ; os_name == 'nt' and extra == 'dev' + - pyreadline ; os_name == 'nt' and extra == 'dev' + - pywin32 ; os_name == 'nt' and platform_python_implementation != 'PyPy' and extra == 'dev' + - wheel ; os_name == 'nt' and platform_python_implementation != 'PyPy' and extra == 'dev' + - wmi ; os_name == 'nt' and platform_python_implementation != 'PyPy' and extra == 'dev' + - pytest ; extra == 'test' + - pytest-instafail ; extra == 'test' + - pytest-subtests ; extra == 'test' + - pytest-xdist ; extra == 'test' + - setuptools ; extra == 'test' + - pywin32 ; os_name == 'nt' and platform_python_implementation != 'PyPy' and extra == 'test' + - wheel ; os_name == 'nt' and platform_python_implementation != 'PyPy' and extra == 'test' + - wmi ; os_name == 'nt' and platform_python_implementation != 'PyPy' and extra == 'test' + requires_python: '>=3.6' +- pypi: https://files.pythonhosted.org/packages/ce/b1/5f49af514f76431ba4eea935b8ad3725cdeb397e9245ab919dbc1d1dc20f/psutil-7.1.3-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl + name: psutil + version: 7.1.3 + sha256: 3bb428f9f05c1225a558f53e30ccbad9930b11c3fc206836242de1091d3e7dd3 + requires_dist: + - pytest ; extra == 'dev' + - pytest-instafail ; extra == 'dev' + - pytest-subtests ; extra == 'dev' + - pytest-xdist ; extra == 'dev' + - setuptools ; extra == 'dev' + - abi3audit ; extra == 'dev' + - black ; extra == 'dev' + - check-manifest ; extra == 'dev' + - coverage ; extra == 'dev' + - packaging ; extra == 'dev' + - pylint ; extra == 'dev' + - pyperf ; extra == 'dev' + - pypinfo ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - requests ; extra == 'dev' + - rstcheck ; extra == 'dev' + - ruff ; extra == 'dev' + - sphinx ; extra == 'dev' + - sphinx-rtd-theme ; extra == 'dev' + - toml-sort ; extra == 'dev' + - twine ; extra == 'dev' + - validate-pyproject[all] ; extra == 'dev' + - virtualenv ; extra == 'dev' + - vulture ; extra == 'dev' + - wheel ; extra == 'dev' + - colorama ; os_name == 'nt' and extra == 'dev' + - pyreadline ; os_name == 'nt' and extra == 'dev' + - pywin32 ; os_name == 'nt' and platform_python_implementation != 'PyPy' and extra == 'dev' + - wheel ; os_name == 'nt' and platform_python_implementation != 'PyPy' and extra == 'dev' + - wmi ; os_name == 'nt' and platform_python_implementation != 'PyPy' and extra == 'dev' + - pytest ; extra == 'test' + - pytest-instafail ; extra == 'test' + - pytest-subtests ; extra == 'test' + - pytest-xdist ; extra == 'test' + - setuptools ; extra == 'test' + - pywin32 ; os_name == 'nt' and platform_python_implementation != 'PyPy' and extra == 'test' + - wheel ; os_name == 'nt' and platform_python_implementation != 'PyPy' and extra == 'test' + - wmi ; os_name == 'nt' and platform_python_implementation != 'PyPy' and extra == 'test' + requires_python: '>=3.6' +- pypi: https://files.pythonhosted.org/packages/34/72/f52aaea9c9f8265b259b154a197a3c8e16967ff5e7628468f8f1a8db9971/pyBigWig-0.3.24-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: pybigwig + version: 0.3.24 + sha256: 79971bfd78774b1f33a0bc39f0fd8077d2588429d9b0ede634e95e1ecc147a9b + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/d4/3b/c95c24acc022957b0fad73ce9b6431fe3ddf164b6dd742d5b7b03f806457/pybigwig-0.3.24.tar.gz + name: pybigwig + version: 0.3.24 + sha256: bf0b6a025a77a1d34c9dc8f134f661780407ffea9c53d18f785e5f1e95b4983f + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-2.13.6-pyhc790b64_3.conda + sha256: d429f6f255fbe49f09b9ae1377aa8cbc4d9285b8b220c17ae2ad9c4894c91317 + md5: 1594696beebf1ecb6d29a1136f859a74 + depends: + - pybind11-global 2.13.6 *_3 + - python >=3.9 + constrains: + - pybind11-abi ==4 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pybind11 + size: 186821 + timestamp: 1747935138653 +- conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda + sha256: 2558727093f13d4c30e124724566d16badd7de532fd8ee7483628977117d02be + md5: 70ece62498c769280f791e836ac53fff + depends: + - python >=3.8 + - pybind11-global ==3.0.1 *_0 + - python + constrains: + - pybind11-abi ==11 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pybind11 + size: 232875 + timestamp: 1755953378112 +- conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-abi-4-hd8ed1ab_3.tar.bz2 + sha256: d4fb485b79b11042a16dc6abfb0c44c4f557707c2653ac47c81e5d32b24a3bb0 + md5: 878f923dd6acc8aeb47a75da6c4098be + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pybind11-abi + size: 9906 + timestamp: 1610372835205 +- conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-2.13.6-pyh217bc35_3.conda + sha256: c044cfcbe6ef0062d0960e9f9f0de5f8818cec84ed901219ff9994b9a9e57237 + md5: 730a5284e26d6bdb73332dafb26aec82 + depends: + - __unix + - python >=3.9 + constrains: + - pybind11-abi ==4 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pybind11-global + size: 180116 + timestamp: 1747934418811 +- conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda + sha256: f11a5903879fe3a24e0d28329cb2b1945127e85a4cdb444b45545cf079f99e2d + md5: fe10b422ce8b5af5dab3740e4084c3f9 + depends: + - python >=3.8 + - __unix + - python + constrains: + - pybind11-abi ==11 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pybind11-global + size: 228871 + timestamp: 1755953338243 +- pypi: https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl + name: pycparser + version: '2.23' + sha256: e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/82/2f/e68750da9b04856e2a7ec56fc6f034a5a79775e9b9a81882252789873798/pydantic-2.12.4-py3-none-any.whl + name: pydantic + version: 2.12.4 + sha256: 92d3d202a745d46f9be6df459ac5a064fdaa3c1c4cd8adcfa332ccf3c05f871e + requires_dist: + - annotated-types>=0.6.0 + - pydantic-core==2.41.5 + - typing-extensions>=4.14.1 + - typing-inspection>=0.4.2 + - email-validator>=2.0.0 ; extra == 'email' + - tzdata ; python_full_version >= '3.9' and sys_platform == 'win32' and extra == 'timezone' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.12.4-pyh3cfb1c2_0.conda + sha256: c51297f0f6ef13776cc5b61c37d00c0d45faaed34f81d196e64bebc989f3e497 + md5: bf6ce72315b6759453d8c90a894e9e4c + depends: + - annotated-types >=0.6.0 + - pydantic-core 2.41.5 + - python >=3.10 + - typing-extensions >=4.6.1 + - typing-inspection >=0.4.2 + - typing_extensions >=4.14.1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pydantic + size: 320446 + timestamp: 1762379584494 +- pypi: https://files.pythonhosted.org/packages/12/44/37e403fd9455708b3b942949e1d7febc02167662bf1a7da5b78ee1ea2842/pydantic_core-2.41.5-cp311-cp311-macosx_11_0_arm64.whl + name: pydantic-core + version: 2.41.5 + sha256: 7f3bf998340c6d4b0c9a2f02d6a400e51f123b59565d74dc60d252ce888c260b + requires_dist: + - typing-extensions>=4.14.1 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/c8/be/8fed28dd0a180dca19e72c233cbf58efa36df055e5b9d90d64fd1740b828/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: pydantic-core + version: 2.41.5 + sha256: f31d95a179f8d64d90f6831d71fa93290893a33148d890ba15de25642c5d075b + requires_dist: + - typing-extensions>=4.14.1 + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.41.5-py311h902ca64_0.conda + sha256: 2632d271a937fe1aa932f40b282e8786c7d59158268042f158a31ef6bcc7edfe + md5: ffddb15810f766cdde04fe1af24d7168 + depends: + - python + - typing-extensions >=4.6.0,!=4.7.0 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - python_abi 3.11.* *_cp311 + constrains: + - __glibc >=2.17 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pydantic-core + size: 1952130 + timestamp: 1762358856501 +- pypi: https://files.pythonhosted.org/packages/c1/60/5d4751ba3f4a40a6891f24eec885f51afd78d208498268c734e256fb13c4/pydantic_settings-2.12.0-py3-none-any.whl + name: pydantic-settings + version: 2.12.0 + sha256: fddb9fd99a5b18da837b29710391e945b1e30c135477f484084ee513adb93809 + requires_dist: + - pydantic>=2.7.0 + - python-dotenv>=0.21.0 + - typing-inspection>=0.4.0 + - boto3-stubs[secretsmanager] ; extra == 'aws-secrets-manager' + - boto3>=1.35.0 ; extra == 'aws-secrets-manager' + - azure-identity>=1.16.0 ; extra == 'azure-key-vault' + - azure-keyvault-secrets>=4.8.0 ; extra == 'azure-key-vault' + - google-cloud-secret-manager>=2.23.1 ; extra == 'gcp-secret-manager' + - tomli>=2.0.1 ; extra == 'toml' + - pyyaml>=6.0.1 ; extra == 'yaml' + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-settings-2.12.0-pyh3cfb1c2_0.conda + sha256: 17d552dd19501909d626ff50cd23753d56e03ab670ce9096f1c4068e1eb90f2a + md5: 0a3042ce18b785982c64a8567cc3e512 + depends: + - pydantic >=2.7.0 + - python >=3.10 + - python-dotenv >=0.21.0 + - typing-inspection >=0.4.0 + license: MIT + purls: + - pkg:pypi/pydantic-settings + size: 43752 + timestamp: 1762786342653 +- pypi: https://files.pythonhosted.org/packages/ce/0b/fadfd7d0088efa3ba0cdcdbb51d093e18d3700f6f88634aa8387106394a4/pyfaidx-0.9.0.3-py3-none-any.whl + name: pyfaidx + version: 0.9.0.3 + sha256: e494edffd644dbfa141ec63196c274cbb1f029acfc5977108c4fe51fdf5dc3ae + requires_dist: + - importlib-metadata ; python_full_version < '3.8' + - packaging + requires_python: '>=3.7' +- conda: https://conda.anaconda.org/bioconda/noarch/pyfaidx-0.9.0.3-pyhdfd78af_0.conda + sha256: 6bc1f9da77cf3d1bffaf1a4bc04f56d3d6d8f0566f1638a5e6a4a62160594bdd + md5: 8f6df49bcff476e64dba79b29cc01ea0 + depends: + - biopython + - importlib-metadata + - packaging + - python >=3.7 + - pyvcf3 + - setuptools + - six + license: BSD + license_family: BSD + purls: + - pkg:pypi/pyfaidx?source=hash-mapping + size: 35918 + timestamp: 1756912622572 +- pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl + name: pygments + version: 2.19.2 + sha256: 86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b + requires_dist: + - colorama>=0.4.6 ; extra == 'windows-terminal' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/72/99/cafef234114a3b6d9f3aaed0723b437c40c57bdb7b3e4c3a575bc4890052/pytest-9.0.0-py3-none-any.whl + name: pytest + version: 9.0.0 + sha256: e5ccdf10b0bac554970ee88fc1a4ad0ee5d221f8ef22321f9b7e4584e19d7f96 + requires_dist: + - colorama>=0.4 ; sys_platform == 'win32' + - exceptiongroup>=1 ; python_full_version < '3.11' + - iniconfig>=1.0.1 + - packaging>=22 + - pluggy>=1.5,<2 + - pygments>=2.7.2 + - tomli>=1 ; python_full_version < '3.11' + - argcomplete ; extra == 'dev' + - attrs>=19.2 ; extra == 'dev' + - hypothesis>=3.56 ; extra == 'dev' + - mock ; extra == 'dev' + - requests ; extra == 'dev' + - setuptools ; extra == 'dev' + - xmlschema ; extra == 'dev' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/0b/8b/6300fb80f858cda1c51ffa17075df5d846757081d11ab4aa35cef9e6258b/pytest-9.0.1-py3-none-any.whl + name: pytest + version: 9.0.1 + sha256: 67be0030d194df2dfa7b556f2e56fb3c3315bd5c8822c6951162b92b32ce7dad + requires_dist: + - colorama>=0.4 ; sys_platform == 'win32' + - exceptiongroup>=1 ; python_full_version < '3.11' + - iniconfig>=1.0.1 + - packaging>=22 + - pluggy>=1.5,<2 + - pygments>=2.7.2 + - tomli>=1 ; python_full_version < '3.11' + - argcomplete ; extra == 'dev' + - attrs>=19.2 ; extra == 'dev' + - hypothesis>=3.56 ; extra == 'dev' + - mock ; extra == 'dev' + - requests ; extra == 'dev' + - setuptools ; extra == 'dev' + - xmlschema ; extra == 'dev' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/e5/35/f8b19922b6a25bc0880171a2f1a003eaeb93657475193ab516fd87cac9da/pytest_asyncio-1.3.0-py3-none-any.whl + name: pytest-asyncio + version: 1.3.0 + sha256: 611e26147c7f77640e6d0a92a38ed17c3e9848063698d5c93d5aa7aa11cebff5 + requires_dist: + - backports-asyncio-runner>=1.1,<2 ; python_full_version < '3.11' + - pytest>=8.2,<10 + - typing-extensions>=4.12 ; python_full_version < '3.13' + - sphinx>=5.3 ; extra == 'docs' + - sphinx-rtd-theme>=1 ; extra == 'docs' + - coverage>=6.2 ; extra == 'testing' + - hypothesis>=5.7.1 ; extra == 'testing' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl + name: pytest-cov + version: 7.0.0 + sha256: 3b8e9558b16cc1479da72058bdecf8073661c7f57f7d3c5f22a1c23507f2d861 + requires_dist: + - coverage[toml]>=7.10.6 + - pluggy>=1.2 + - pytest>=7 + - process-tests ; extra == 'testing' + - pytest-xdist ; extra == 'testing' + - virtualenv ; extra == 'testing' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/5a/cc/06253936f4a7fa2e0f48dfe6d851d9c56df896a9ab09ac019d70b760619c/pytest_mock-3.15.1-py3-none-any.whl + name: pytest-mock + version: 3.15.1 + sha256: 0a25e2eb88fe5168d535041d09a4529a188176ae608a6d249ee65abc0949630d + requires_dist: + - pytest>=6.2.5 + - pre-commit ; extra == 'dev' + - pytest-asyncio ; extra == 'dev' + - tox ; extra == 'dev' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/87/d5/81d38a91c1fdafb6711f053f5a9b92ff788013b19821257c2c38c1e132df/pytest_sugar-1.1.1-py3-none-any.whl + name: pytest-sugar + version: 1.1.1 + sha256: 2f8319b907548d5b9d03a171515c1d43d2e38e32bd8182a1781eb20b43344cc8 + requires_dist: + - pytest>=6.2.0 + - termcolor>=2.1.0 + - black ; extra == 'dev' + - flake8 ; extra == 'dev' + - pre-commit ; extra == 'dev' +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.11.0-he550d4f_1_cpython.conda + build_number: 1 + sha256: 464f998e406b645ba34771bb53a0a7c2734e855ee78dd021aa4dedfdb65659b7 + md5: 8d14fc2aa12db370a443753c8230be1e + depends: + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-64 >=2.36.1 + - libffi >=3.4,<4.0a0 + - libgcc-ng >=12 + - libnsl >=2.0.0,<2.1.0a0 + - libsqlite >=3.40.0,<4.0a0 + - libuuid >=2.32.1,<3.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - ncurses >=6.3,<7.0a0 + - openssl >=3.0.7,<4.0a0 + - readline >=8.1.2,<9.0a0 + - tk >=8.6.12,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.11.* *_cp311 + license: Python-2.0 + purls: + - pkg:pypi/python + size: 31476523 + timestamp: 1673700777998 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.11.0-h3ba56d0_1_cpython.conda + build_number: 1 + sha256: 28a54d78cd2624a12bd2ceb0f1816b0cba9b4fd97df846b5843b3c1d51642ab2 + md5: 2aa7ca3702d9afd323ca34a9d98879d1 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libffi >=3.4,<4.0a0 + - libsqlite >=3.40.0,<4.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - ncurses >=6.3,<7.0a0 + - openssl >=3.0.7,<4.0a0 + - readline >=8.1.2,<9.0a0 + - tk >=8.6.12,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.11.* *_cp311 + license: Python-2.0 + purls: + - pkg:pypi/python + size: 14492975 + timestamp: 1673699560906 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + sha256: d6a17ece93bbd5139e02d2bd7dbfa80bee1a4261dced63f65f679121686bf664 + md5: 5b8d21249ff20967101ffa321cab24e8 + depends: + - python >=3.9 + - six >=1.5 + - python + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/python-dateutil + size: 233310 + timestamp: 1751104122689 +- pypi: https://files.pythonhosted.org/packages/14/1b/a298b06749107c305e1fe0f814c6c74aea7b2f1e10989cb30f544a1b3253/python_dotenv-1.2.1-py3-none-any.whl + name: python-dotenv + version: 1.2.1 + sha256: b81ee9561e9ca4004139c6cbba3a238c32b03e4894671e181b671e8cb8425d61 + requires_dist: + - click>=5.0 ; extra == 'cli' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.1-pyhcf101f3_0.conda + sha256: aa98e0b1f5472161318f93224f1cfec1355ff69d2f79f896c0b9e033e4a6caf9 + md5: 083725d6cd3dc007f06d04bcf1e613a2 + depends: + - python >=3.10 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/python-dotenv + size: 26922 + timestamp: 1761503229008 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda + sha256: e8392a8044d56ad017c08fec2b0eb10ae3d1235ac967d0aab8bd7b41c4a5eaf0 + md5: 88476ae6ebd24f39261e0854ac244f33 + depends: + - python >=3.9 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/python-tzdata + size: 144160 + timestamp: 1742745254292 +- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.11-8_cp311.conda + build_number: 8 + sha256: fddf123692aa4b1fc48f0471e346400d9852d96eeed77dbfdd746fa50a8ff894 + md5: 8fcb6b0e2161850556231336dae58358 + constrains: + - python 3.11.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/python-abi + size: 7003 + timestamp: 1752805919375 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.7.1-cuda126_mkl_py311_hcada2b2_300.conda + sha256: 67120b373d7c312cccb29449ebcb83e98af771e8accac71c0c911ab6d875223a + md5: 3f895052385bf504b5d19c35578b633a + depends: + - __cuda + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex * *_llvm + - _openmp_mutex >=4.5 + - cuda-cudart >=12.6.77,<13.0a0 + - cuda-cupti >=12.6.80,<13.0a0 + - cuda-nvrtc >=12.6.85,<13.0a0 + - cuda-nvtx >=12.6.77,<13.0a0 + - cuda-version >=12.6,<13 + - cudnn >=9.10.1.4,<10.0a0 + - filelock + - fsspec + - jinja2 + - libabseil * cxx17* + - libabseil >=20250127.1,<20250128.0a0 + - libblas * *mkl + - libcblas >=3.9.0,<4.0a0 + - libcublas >=12.6.4.1,<13.0a0 + - libcudss >=0.6.0.5,<0.6.1.0a0 + - libcufft >=11.3.0.4,<12.0a0 + - libcufile >=1.11.1.6,<2.0a0 + - libcurand >=10.3.7.77,<11.0a0 + - libcusolver >=11.7.1.2,<12.0a0 + - libcusparse >=12.5.4.2,<13.0a0 + - libgcc >=13 + - libmagma >=2.9.0,<2.9.1.0a0 + - libprotobuf >=5.29.3,<5.29.4.0a0 + - libstdcxx >=13 + - libtorch 2.7.1 cuda126_mkl_hc2b21a2_300 + - libuv >=1.51.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - llvm-openmp >=20.1.7 + - mkl >=2024.2.2,<2025.0a0 + - nccl >=2.27.3.1,<3.0a0 + - networkx + - numpy >=1.19,<3 + - optree >=0.13.0 + - pybind11 + - python >=3.11,<3.12.0a0 + - python_abi 3.11.* *_cp311 + - setuptools + - sleef >=3.8,<4.0a0 + - sympy >=1.13.3 + - triton 3.3.0.* + - typing_extensions >=4.10.0 + constrains: + - pytorch-gpu 2.7.1 + - pytorch-cpu <0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/torch?source=project-defined-mapping + size: 29704184 + timestamp: 1750234913435 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.8.0-cpu_mkl_py311_hcfbaf12_102.conda + sha256: 67932ad5a6fc288ecb108e7fbe419d6618cc5f6817cf83b7a1414f97b0936df8 + md5: d37e1fbbc88ef18837e393589a9dade0 + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex * *_llvm + - _openmp_mutex >=4.5 + - filelock + - fsspec + - jinja2 + - libabseil * cxx17* + - libabseil >=20250512.1,<20250513.0a0 + - libblas * *mkl + - libcblas >=3.9.0,<4.0a0 + - libgcc >=14 + - libprotobuf >=6.31.1,<6.31.2.0a0 + - libstdcxx >=14 + - libtorch 2.8.0 cpu_mkl_h09b866c_102 + - libuv >=1.51.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - llvm-openmp >=21.1.4 + - mkl >=2025.3.0,<2026.0a0 + - networkx + - numpy >=1.23,<3 + - optree >=0.13.0 + - pybind11 + - pybind11-abi 4 + - python >=3.11,<3.12.0a0 + - python_abi 3.11.* *_cp311 + - setuptools + - sleef >=3.9.0,<4.0a0 + - sympy >=1.13.3 + - typing_extensions >=4.10.0 + constrains: + - pytorch-cpu 2.8.0 + - pytorch-gpu <0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/torch?source=project-defined-mapping + size: 25306471 + timestamp: 1762096986275 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pytorch-2.8.0-cpu_generic_py311_hf0c13c8_2.conda + sha256: 9d077dfc8c0156dae5e45f1397108499eec8c485a93a010faa51251737780ee8 + md5: 7720cce29784891551d24a3c82087f19 + depends: + - __osx >=11.0 + - filelock + - fsspec + - jinja2 + - libabseil * cxx17* + - libabseil >=20250512.1,<20250513.0a0 + - libcblas >=3.9.0,<4.0a0 + - libcxx >=19 + - liblapack >=3.9.0,<4.0a0 + - libprotobuf >=6.31.1,<6.31.2.0a0 + - libtorch 2.8.0.* *_2 + - libuv >=1.51.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - llvm-openmp >=19.1.7 + - networkx + - nomkl + - numpy >=1.23,<3 + - optree >=0.13.0 + - pybind11 + - pybind11-abi 4 + - python >=3.11,<3.12.0a0 + - python >=3.11,<3.12.0a0 *_cpython + - python_abi 3.11.* *_cp311 + - setuptools + - sleef >=3.9.0,<4.0a0 + - sympy >=1.13.3 + - typing_extensions >=4.10.0 + constrains: + - pytorch-cpu 2.8.0 + - pytorch-gpu <0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/torch?source=project-defined-mapping + size: 23676727 + timestamp: 1762101186554 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-cpu-2.8.0-cpu_mkl_hc60beec_102.conda + sha256: 5df7f8446c63cdc778ad5805ba5a5a0c0c051355f4b864057180316875e38c50 + md5: 2b401c2d6c6b2f0d6c4e1862b4291247 + depends: + - pytorch 2.8.0 cpu_mkl*102 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/torch?source=project-defined-mapping + size: 47595 + timestamp: 1762099535113 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pytorch-cpu-2.8.0-cpu_generic_py311_h510b526_2.conda + sha256: 7f4835f5e4dcfb889a89c6de3a33b41a9a0ed6b41bbce1575599204bbd28f780 + md5: 958795fdef67b2ccf4e09b8cf2ef9b22 + depends: + - pytorch 2.8.0 cpu_generic_py311_hf0c13c8_2 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/torch?source=project-defined-mapping + size: 47986 + timestamp: 1762101298626 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-gpu-2.7.1-cuda126_mkl_ha999a5f_300.conda + sha256: 843e2770216c0f546a884d8f95a3163234ec358b76190f824910d7a437173b0d + md5: 826a6bce436124909ebcc1e3a17cfbb2 + depends: + - pytorch 2.7.1 cuda*_mkl*300 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/torch?source=project-defined-mapping + size: 47733 + timestamp: 1750236070322 +- conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda + sha256: 8d2a8bf110cc1fc3df6904091dead158ba3e614d8402a83e51ed3a8aa93cdeb0 + md5: bc8e3267d44011051f2eb14d22fb0960 + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pytz + size: 189015 + timestamp: 1742920947249 +- conda: https://conda.anaconda.org/bioconda/linux-64/pyvcf3-1.0.4-py311haab0aaa_0.tar.bz2 + sha256: 8d29ad07e53baec17e5da8ea8001d68f307f57cd89716797e7dccade62b2527e + md5: 3a606fc8457159970bbcacc628da816a + depends: + - libgcc >=13 + - python >=3.11,<3.12.0a0 + - python_abi 3.11.* *_cp311 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pyvcf3?source=hash-mapping + size: 1129782 + timestamp: 1749468406959 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py311h3778330_0.conda + sha256: 7dc5c27c0c23474a879ef5898ed80095d26de7f89f4720855603c324cca19355 + md5: 707c3d23f2476d3bfde8345b4e7d7853 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.11,<3.12.0a0 + - python_abi 3.11.* *_cp311 + - yaml >=0.2.5,<0.3.0a0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyyaml + size: 211606 + timestamp: 1758892088237 +- conda: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-60.0-hecca717_0.conda + sha256: 5c09b833b698ecd19da14f5ff903063cf174382d6b32c86166984a93d427d681 + md5: fe7412835a65cd99eacf3afbb124c7ac + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libnl >=3.11.0,<4.0a0 + - libstdcxx >=14 + - libsystemd0 >=257.9 + - libudev1 >=257.9 + license: Linux-OpenIB + license_family: BSD + purls: + - pkg:pypi/rdma-core + size: 1244282 + timestamp: 1761557737114 +- conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda + sha256: 2d6d0c026902561ed77cd646b5021aef2d4db22e57a5b0178dfc669231e06d2c + md5: 283b96675859b20a825f8fa30f311446 + depends: + - libgcc >=13 + - ncurses >=6.5,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: + - pkg:pypi/readline + size: 282480 + timestamp: 1740379431762 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda + sha256: 7db04684d3904f6151eff8673270922d31da1eea7fa73254d01c437f49702e34 + md5: 63ef3f6e6d6d5c589e64f11263dc5676 + depends: + - ncurses >=6.5,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: + - pkg:pypi/readline + size: 252359 + timestamp: 1740379663071 +- pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl + name: requests + version: 2.32.5 + sha256: 2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6 + requires_dist: + - charset-normalizer>=2,<4 + - idna>=2.5,<4 + - urllib3>=1.21.1,<3 + - certifi>=2017.4.17 + - pysocks>=1.5.6,!=1.5.7 ; extra == 'socks' + - chardet>=3.0.2,<6 ; extra == 'use-chardet-on-py3' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/1a/c0/3848f4006f7e164ee20833ca984067e4b3fc99fe7f1dfa88b4927e681299/restrictedpython-8.1-py3-none-any.whl + name: restrictedpython + version: '8.1' + sha256: 4769449c6cdb10f2071649ba386902befff0eff2a8fd6217989fa7b16aeae926 + requires_dist: + - pytest ; extra == 'test' + - pytest-mock ; extra == 'test' + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + requires_python: '>=3.9,<3.15' +- pypi: https://files.pythonhosted.org/packages/2d/fc/56cba14af8ad8fd020c85b6e44328520ac55939bb1f9d01444ad470504cb/s3fs-2025.10.0-py3-none-any.whl + name: s3fs + version: 2025.10.0 + sha256: da7ef25efc1541f5fca8e1116361e49ea1081f83f4e8001fbd77347c625da28a + requires_dist: + - aiobotocore>=2.5.4,<3.0.0 + - fsspec==2025.10.0 + - aiohttp!=4.0.0a0,!=4.0.0a1 + - aiobotocore[awscli]>=2.5.4,<3.0.0 ; extra == 'awscli' + - aiobotocore[boto3]>=2.5.4,<3.0.0 ; extra == 'boto3' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/48/f0/ae7ca09223a81a1d890b2557186ea015f6e0502e9b8cb8e1813f1d8cfa4e/s3transfer-0.14.0-py3-none-any.whl + name: s3transfer + version: 0.14.0 + sha256: ea3b790c7077558ed1f02a3072fb3cb992bbbd253392f4b6e9e8976941c7d456 + requires_dist: + - botocore>=1.37.4,<2.0a0 + - botocore[crt]>=1.37.4,<2.0a0 ; extra == 'crt' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + sha256: 972560fcf9657058e3e1f97186cc94389144b46dbdf58c807ce62e83f977e863 + md5: 4de79c071274a53dcaf2a8c749d1499e + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/setuptools + size: 748788 + timestamp: 1748804951958 +- conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + sha256: 458227f759d5e3fcec5d9b7acce54e10c9e1f4f4b7ec978f3bfd54ce4ee9853d + md5: 3339e3b65d58accf4ca4fb8748ab16b3 + depends: + - python >=3.9 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/six + size: 18455 + timestamp: 1753199211006 +- conda: https://conda.anaconda.org/conda-forge/linux-64/sleef-3.9.0-ha0421bc_0.conda + sha256: 57afc2ab5bdb24cf979964018dddbc5dfaee130b415e6863765e45aed2175ee4 + md5: e8a0b4f5e82ecacffaa5e805020473cb + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + - libgcc >=14 + - libstdcxx >=14 + license: BSL-1.0 + purls: + - pkg:pypi/sleef + size: 1951720 + timestamp: 1756274576844 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/sleef-3.9.0-hb028509_0.conda + sha256: 799d0578369e67b6d0d6ecdacada411c259629fc4a500b99703c5e85d0a68686 + md5: 68f833178f171cfffdd18854c0e9b7f9 + depends: + - __osx >=11.0 + - libcxx >=19 + - llvm-openmp >=19.1.7 + license: BSL-1.0 + purls: + - pkg:pypi/sleef + size: 587027 + timestamp: 1756274982526 +- pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + name: sniffio + version: 1.3.1 + sha256: 2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/94/2d/fdb9246d9d32518bda5d90f4b65030b9bf403a935cfe4c36a474846517cb/sqlalchemy-2.0.44-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: sqlalchemy + version: 2.0.44 + sha256: 3cf6872a23601672d61a68f390e44703442639a12ee9dd5a88bbce52a695e46e + requires_dist: + - importlib-metadata ; python_full_version < '3.8' + - greenlet>=1 ; platform_machine == 'AMD64' or platform_machine == 'WIN32' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'ppc64le' or platform_machine == 'win32' or platform_machine == 'x86_64' + - typing-extensions>=4.6.0 + - greenlet>=1 ; extra == 'asyncio' + - mypy>=0.910 ; extra == 'mypy' + - pyodbc ; extra == 'mssql' + - pymssql ; extra == 'mssql-pymssql' + - pyodbc ; extra == 'mssql-pyodbc' + - mysqlclient>=1.4.0 ; extra == 'mysql' + - mysql-connector-python ; extra == 'mysql-connector' + - mariadb>=1.0.1,!=1.1.2,!=1.1.5,!=1.1.10 ; extra == 'mariadb-connector' + - cx-oracle>=8 ; extra == 'oracle' + - oracledb>=1.0.1 ; extra == 'oracle-oracledb' + - psycopg2>=2.7 ; extra == 'postgresql' + - pg8000>=1.29.1 ; extra == 'postgresql-pg8000' + - greenlet>=1 ; extra == 'postgresql-asyncpg' + - asyncpg ; extra == 'postgresql-asyncpg' + - psycopg2-binary ; extra == 'postgresql-psycopg2binary' + - psycopg2cffi ; extra == 'postgresql-psycopg2cffi' + - psycopg>=3.0.7 ; extra == 'postgresql-psycopg' + - psycopg[binary]>=3.0.7 ; extra == 'postgresql-psycopgbinary' + - pymysql ; extra == 'pymysql' + - greenlet>=1 ; extra == 'aiomysql' + - aiomysql>=0.2.0 ; extra == 'aiomysql' + - greenlet>=1 ; extra == 'aioodbc' + - aioodbc ; extra == 'aioodbc' + - greenlet>=1 ; extra == 'asyncmy' + - asyncmy>=0.2.3,!=0.2.4,!=0.2.6 ; extra == 'asyncmy' + - greenlet>=1 ; extra == 'aiosqlite' + - aiosqlite ; extra == 'aiosqlite' + - typing-extensions!=3.10.0.1 ; extra == 'aiosqlite' + - sqlcipher3-binary ; extra == 'sqlcipher' + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/d4/d5/4abd13b245c7d91bdf131d4916fd9e96a584dac74215f8b5bc945206a974/sqlalchemy-2.0.44-cp311-cp311-macosx_11_0_arm64.whl + name: sqlalchemy + version: 2.0.44 + sha256: de4387a354ff230bc979b46b2207af841dc8bf29847b6c7dbe60af186d97aefa + requires_dist: + - importlib-metadata ; python_full_version < '3.8' + - greenlet>=1 ; platform_machine == 'AMD64' or platform_machine == 'WIN32' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'ppc64le' or platform_machine == 'win32' or platform_machine == 'x86_64' + - typing-extensions>=4.6.0 + - greenlet>=1 ; extra == 'asyncio' + - mypy>=0.910 ; extra == 'mypy' + - pyodbc ; extra == 'mssql' + - pymssql ; extra == 'mssql-pymssql' + - pyodbc ; extra == 'mssql-pyodbc' + - mysqlclient>=1.4.0 ; extra == 'mysql' + - mysql-connector-python ; extra == 'mysql-connector' + - mariadb>=1.0.1,!=1.1.2,!=1.1.5,!=1.1.10 ; extra == 'mariadb-connector' + - cx-oracle>=8 ; extra == 'oracle' + - oracledb>=1.0.1 ; extra == 'oracle-oracledb' + - psycopg2>=2.7 ; extra == 'postgresql' + - pg8000>=1.29.1 ; extra == 'postgresql-pg8000' + - greenlet>=1 ; extra == 'postgresql-asyncpg' + - asyncpg ; extra == 'postgresql-asyncpg' + - psycopg2-binary ; extra == 'postgresql-psycopg2binary' + - psycopg2cffi ; extra == 'postgresql-psycopg2cffi' + - psycopg>=3.0.7 ; extra == 'postgresql-psycopg' + - psycopg[binary]>=3.0.7 ; extra == 'postgresql-psycopgbinary' + - pymysql ; extra == 'pymysql' + - greenlet>=1 ; extra == 'aiomysql' + - aiomysql>=0.2.0 ; extra == 'aiomysql' + - greenlet>=1 ; extra == 'aioodbc' + - aioodbc ; extra == 'aioodbc' + - greenlet>=1 ; extra == 'asyncmy' + - asyncmy>=0.2.3,!=0.2.4,!=0.2.6 ; extra == 'asyncmy' + - greenlet>=1 ; extra == 'aiosqlite' + - aiosqlite ; extra == 'aiosqlite' + - typing-extensions!=3.10.0.1 ; extra == 'aiosqlite' + - sqlcipher3-binary ; extra == 'sqlcipher' + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/a3/e0/021c772d6a662f43b63044ab481dc6ac7592447605b5b35a957785363122/starlette-0.49.3-py3-none-any.whl + name: starlette + version: 0.49.3 + sha256: b579b99715fdc2980cf88c8ec96d3bf1ce16f5a8051a7c2b84ef9b1cdecaea2f + requires_dist: + - anyio>=3.6.2,<5 + - typing-extensions>=4.10.0 ; python_full_version < '3.13' + - httpx>=0.27.0,<0.29.0 ; extra == 'full' + - itsdangerous ; extra == 'full' + - jinja2 ; extra == 'full' + - python-multipart>=0.0.18 ; extra == 'full' + - pyyaml ; extra == 'full' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda + sha256: 09d3b6ac51d437bc996ad006d9f749ca5c645c1900a854a6c8f193cbd13f03a8 + md5: 8c09fac3785696e1c477156192d64b91 + depends: + - __unix + - cpython + - gmpy2 >=2.0.8 + - mpmath >=0.19 + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/sympy + size: 4616621 + timestamp: 1745946173026 +- conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_8.conda + sha256: 0053c17ffbd9f8af1a7f864995d70121c292e317804120be4667f37c92805426 + md5: 1bad93f0aa428d618875ef3a588a889e + depends: + - __glibc >=2.28 + - kernel-headers_linux-64 4.18.0 he073ed8_8 + - tzdata + license: LGPL-2.0-or-later AND LGPL-2.0-or-later WITH exceptions AND GPL-2.0-or-later + license_family: GPL + purls: + - pkg:pypi/sysroot-linux-64 + size: 24210909 + timestamp: 1752669140965 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.13.0-h8d10470_4.conda + sha256: 199a0e8c5bb5fb3ca63d63cfdaeb071c49ec3076343abb41d5fbc6af6ae56a53 + md5: e6d46d70c68d0eb69b9a040ebe3acddf + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libhwloc >=2.12.1,<2.12.2.0a0 + - libstdcxx >=14 + license: Apache-2.0 + purls: + - pkg:pypi/tbb + size: 171868 + timestamp: 1762510046954 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2022.3.0-h8d10470_1.conda + sha256: 2e3238234ae094d5a5f7c559410ea8875351b6bac0d9d0e576bf64b732b8029e + md5: e3259be3341da4bc06c5b7a78c8bf1bd + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libhwloc >=2.12.1,<2.12.2.0a0 + - libstdcxx >=14 + license: Apache-2.0 + purls: + - pkg:pypi/tbb + size: 181262 + timestamp: 1762509955687 +- pypi: https://files.pythonhosted.org/packages/f9/d5/141f53d7c1eb2a80e6d3e9a390228c3222c27705cbe7f048d3623053f3ca/termcolor-3.2.0-py3-none-any.whl + name: termcolor + version: 3.2.0 + sha256: a10343879eba4da819353c55cb8049b0933890c2ebf9ad5d3ecd2bb32ea96ea6 + requires_dist: + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda + sha256: a84ff687119e6d8752346d1d408d5cf360dee0badd487a472aa8ddedfdc219e1 + md5: a0116df4f4ed05c303811a837d5b39d8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: TCL + license_family: BSD + purls: + - pkg:pypi/tk + size: 3285204 + timestamp: 1748387766691 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h892fb3f_2.conda + sha256: cb86c522576fa95c6db4c878849af0bccfd3264daf0cc40dd18e7f4a7bfced0e + md5: 7362396c170252e7b7b0c8fb37fe9c78 + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: TCL + license_family: BSD + purls: + - pkg:pypi/tk + size: 3125538 + timestamp: 1748388189063 +- pypi: https://files.pythonhosted.org/packages/86/7f/d8fffe6a7aefdb61bced88fcb5e280cfd71e08939da5894161bd71bea022/tomli-2.3.0-cp311-cp311-macosx_11_0_arm64.whl + name: tomli + version: 2.3.0 + sha256: 883b1c0d6398a6a9d29b508c331fa56adbcdff647f6ace4dfca0f50e90dfd0ba + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/89/da/75dfd804fc11e6612846758a23f13271b76d577e299592b4371a4ca4cd09/tomli-2.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: tomli + version: 2.3.0 + sha256: a0e285d2649b78c0d9027570d4da3425bdb49830a6156121360b3f8511ea3441 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl + name: tqdm + version: 4.67.1 + sha256: 26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2 + requires_dist: + - colorama ; sys_platform == 'win32' + - pytest>=6 ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - pytest-timeout ; extra == 'dev' + - pytest-asyncio>=0.24 ; extra == 'dev' + - nbval ; extra == 'dev' + - requests ; extra == 'discord' + - slack-sdk ; extra == 'slack' + - requests ; extra == 'telegram' + - ipywidgets>=6 ; extra == 'notebook' + requires_python: '>=3.7' +- conda: https://conda.anaconda.org/conda-forge/linux-64/triton-3.3.0-cuda126py311h126903f_1.conda + sha256: 51b81210150141bf04a0ec8ec82087a760b292351c8b219de441b8d95f811461 + md5: 9818f7138d8492710e56d1c11fedf7f9 + depends: + - python + - setuptools + - cuda-nvcc-tools + - cuda-cuobjdump + - cuda-cudart + - cuda-cupti + - cuda-version >=12.6,<13 + - libstdcxx >=13 + - libgcc >=13 + - __glibc >=2.17,<3.0.a0 + - zstd >=1.5.7,<1.6.0a0 + - libzlib >=1.3.1,<2.0a0 + - cuda-cupti >=12.6.80,<13.0a0 + - python_abi 3.11.* *_cp311 + license: MIT + license_family: MIT + purls: + - pkg:pypi/triton + size: 163129335 + timestamp: 1746164359955 +- pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + name: typing-extensions + version: 4.15.0 + sha256: f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548 + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + sha256: 7c2df5721c742c2a47b2c8f960e718c930031663ac1174da67c1ed5999f7938c + md5: edd329d7d3a4ab45dcf905899a7a6115 + depends: + - typing_extensions ==4.15.0 pyhcf101f3_0 + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/typing-extensions + size: 91383 + timestamp: 1756220668932 +- pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + name: typing-inspection + version: 0.4.2 + sha256: 4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7 + requires_dist: + - typing-extensions>=4.12.0 + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhd8ed1ab_0.conda + sha256: 8aaf69b828c2b94d0784f18f70f11aa032950d304e57e88467120b45c18c24fd + md5: 399701494e731ce73fdd86c185a3d1b4 + depends: + - python >=3.10 + - typing_extensions >=4.12.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/typing-inspection + size: 18799 + timestamp: 1759301271883 +- conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + sha256: 032271135bca55aeb156cee361c81350c6f3fb203f57d024d7e5a1fc9ef18731 + md5: 0caa1af407ecff61170c9437a808404d + depends: + - python >=3.10 + - python + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/typing-extensions + size: 51692 + timestamp: 1756220668932 +- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + sha256: 5aaa366385d716557e365f0a4e9c3fca43ba196872abbbe3d56bb610d131e192 + md5: 4222072737ccff51314b5ece9c7d6f5a + license: LicenseRef-Public-Domain + purls: + - pkg:pypi/tzdata + size: 122968 + timestamp: 1742727099393 +- pypi: https://files.pythonhosted.org/packages/2d/32/2569fc0a8c7215fdb55bfe1aa8fe5dada6042c4918625ce13be72eb434ed/universal_pathlib-0.3.5-py3-none-any.whl + name: universal-pathlib + version: 0.3.5 + sha256: 123275e22a6798df40019c3f72728ff37f73aba8734116ae51b08c4b78598f20 + requires_dist: + - fsspec>=2024.5.0 + - pathlib-abc>=0.5.1,<0.6.0 + - pytest>=8 ; extra == 'tests' + - pytest-sugar>=0.9.7 ; extra == 'tests' + - pytest-cov>=4.1.0 ; extra == 'tests' + - pytest-mock>=3.12.0 ; extra == 'tests' + - pylint>=2.17.4 ; extra == 'tests' + - mypy>=1.10.0 ; extra == 'tests' + - pydantic>=2 ; extra == 'tests' + - pytest-mypy-plugins>=3.1.2 ; extra == 'tests' + - packaging ; extra == 'tests' + - mypy>=1.10.0 ; extra == 'typechecking' + - pytest-mypy-plugins>=3.1.2 ; extra == 'typechecking' + - fsspec[adl,gcs,github,http,s3,smb,ssh]>=2024.5.0 ; extra == 'dev' + - s3fs>=2024.5.0 ; extra == 'dev' + - gcsfs>=2024.5.0 ; extra == 'dev' + - adlfs>=2024 ; extra == 'dev' + - huggingface-hub ; extra == 'dev' + - webdav4[fsspec] ; extra == 'dev' + - moto[s3,server] ; extra == 'dev' + - wsgidav ; extra == 'dev' + - cheroot ; extra == 'dev' + - typing-extensions ; python_full_version < '3.11' and extra == 'dev' + - pydantic ; extra == 'dev-third-party' + - pydantic-settings ; extra == 'dev-third-party' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/universal_pathlib-0.3.5-pyhd8ed1ab_0.conda + sha256: edc37177064cc052f3ba806a3e6ed11cc83013dc696ab1a37ee91485e0a251dd + md5: 65fe2f91dc8d539a3d36c5e60931ff5c + depends: + - fsspec >=2024.5.0 + - pathlib-abc >=0.5.1,<0.6.0 + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/universal-pathlib + size: 62292 + timestamp: 1762676897088 +- pypi: https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl + name: urllib3 + version: 2.5.0 + sha256: e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc + requires_dist: + - brotli>=1.0.9 ; platform_python_implementation == 'CPython' and extra == 'brotli' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'brotli' + - h2>=4,<5 ; extra == 'h2' + - pysocks>=1.5.6,!=1.5.7,<2.0 ; extra == 'socks' + - zstandard>=0.18.0 ; extra == 'zstd' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/ee/d9/d88e73ca598f4f6ff671fb5fde8a32925c2e08a637303a1d12883c7305fa/uvicorn-0.38.0-py3-none-any.whl + name: uvicorn + version: 0.38.0 + sha256: 48c0afd214ceb59340075b4a052ea1ee91c16fbc2a9b1469cca0e54566977b02 + requires_dist: + - click>=7.0 + - h11>=0.8 + - typing-extensions>=4.0 ; python_full_version < '3.11' + - colorama>=0.4 ; sys_platform == 'win32' and extra == 'standard' + - httptools>=0.6.3 ; extra == 'standard' + - python-dotenv>=0.13 ; extra == 'standard' + - pyyaml>=5.1 ; extra == 'standard' + - uvloop>=0.15.1 ; platform_python_implementation != 'PyPy' and sys_platform != 'cygwin' and sys_platform != 'win32' and extra == 'standard' + - watchfiles>=0.13 ; extra == 'standard' + - websockets>=10.4 ; extra == 'standard' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/86/f2/10b55821dd40eb696ce4704a87d57774696f9451108cff0d2824c97e0f97/websockets-15.0.1-cp311-cp311-macosx_11_0_arm64.whl + name: websockets + version: 15.0.1 + sha256: d50fd1ee42388dcfb2b3676132c78116490976f1300da28eb629272d5d93e905 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/93/1f/5d6dbf551766308f6f50f8baf8e9860be6182911e8106da7a7f73785f4c4/websockets-15.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: websockets + version: 15.0.1 + sha256: 8dd8327c795b3e3f219760fa603dcae1dcc148172290a8ab15158cf85a953413 + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda + sha256: 1b34021e815ff89a4d902d879c3bd2040bc1bd6169b32e9427497fa05c55f1ce + md5: 75cb7132eb58d97896e173ef12ac9986 + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/wheel + size: 62931 + timestamp: 1733130309598 +- pypi: https://files.pythonhosted.org/packages/31/25/3e8cc2c46b5329c5957cec959cb76a10718e1a513309c31399a4dad07eb3/wrapt-1.17.3-cp311-cp311-macosx_11_0_arm64.whl + name: wrapt + version: 1.17.3 + sha256: 0610b46293c59a3adbae3dee552b648b984176f8562ee0dba099a56cfbe4df1f + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/5d/8f/a32a99fc03e4b37e31b57cb9cefc65050ea08147a8ce12f288616b05ef54/wrapt-1.17.3-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + name: wrapt + version: 1.17.3 + sha256: b32888aad8b6e68f83a8fdccbf3165f5469702a7544472bdf41f582970ed3311 + requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.17.3-py311h49ec1c0_1.conda + sha256: efcb41a300b58624790d2ce1c6ac9c1da7d23dd91c3d329bd22853866f8f8533 + md5: 47c1c27dee6c31bf8eefbdbdde817d83 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.11,<3.12.0a0 + - python_abi 3.11.* *_cp311 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/wrapt + size: 65464 + timestamp: 1756851731483 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.8.1-hbcc6ac9_2.conda + sha256: 802725371682ea06053971db5b4fb7fbbcaee9cb1804ec688f55e51d74660617 + md5: 68eae977d7d1196d32b636a026dc015d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - liblzma 5.8.1 hb9d3cd8_2 + - liblzma-devel 5.8.1 hb9d3cd8_2 + - xz-gpl-tools 5.8.1 hbcc6ac9_2 + - xz-tools 5.8.1 hb9d3cd8_2 + license: 0BSD AND LGPL-2.1-or-later AND GPL-2.0-or-later + purls: + - pkg:pypi/xz + size: 23987 + timestamp: 1749230104359 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.8.1-h9a6d368_2.conda + sha256: afb747cf017b67cc31d54c6e6c4bd1b1e179fe487a3d23a856232ed7fd0b099b + md5: 39435c82e5a007ef64cbb153ecc40cfd + depends: + - __osx >=11.0 + - liblzma 5.8.1 h39f12f2_2 + - liblzma-devel 5.8.1 h39f12f2_2 + - xz-gpl-tools 5.8.1 h9a6d368_2 + - xz-tools 5.8.1 h39f12f2_2 + license: 0BSD AND LGPL-2.1-or-later AND GPL-2.0-or-later + purls: + - pkg:pypi/xz + size: 23995 + timestamp: 1749230346887 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xz-gpl-tools-5.8.1-hbcc6ac9_2.conda + sha256: 840838dca829ec53f1160f3fca6dbfc43f2388b85f15d3e867e69109b168b87b + md5: bf627c16aa26231720af037a2709ab09 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - liblzma 5.8.1 hb9d3cd8_2 + constrains: + - xz 5.8.1.* + license: 0BSD AND LGPL-2.1-or-later AND GPL-2.0-or-later + purls: + - pkg:pypi/xz-gpl-tools + size: 33911 + timestamp: 1749230090353 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-gpl-tools-5.8.1-h9a6d368_2.conda + sha256: a0790cfb48d240e7b655b0d797a00040219cf39e3ee38e2104e548515df4f9c2 + md5: 09b1442c1d49ac7c5f758c44695e77d1 + depends: + - __osx >=11.0 + - liblzma 5.8.1 h39f12f2_2 + constrains: + - xz 5.8.1.* + license: 0BSD AND LGPL-2.1-or-later AND GPL-2.0-or-later + purls: + - pkg:pypi/xz-gpl-tools + size: 34103 + timestamp: 1749230329933 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xz-tools-5.8.1-hb9d3cd8_2.conda + sha256: 58034f3fca491075c14e61568ad8b25de00cb3ae479de3e69be6d7ee5d3ace28 + md5: 1bad2995c8f1c8075c6c331bf96e46fb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - liblzma 5.8.1 hb9d3cd8_2 + constrains: + - xz 5.8.1.* + license: 0BSD AND LGPL-2.1-or-later + purls: + - pkg:pypi/xz-tools + size: 96433 + timestamp: 1749230076687 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-tools-5.8.1-h39f12f2_2.conda + sha256: 9d1232705e3d175f600dc8e344af9182d0341cdaa73d25330591a28532951063 + md5: 37996935aa33138fca43e4b4563b6a28 + depends: + - __osx >=11.0 + - liblzma 5.8.1 h39f12f2_2 + constrains: + - xz 5.8.1.* + license: 0BSD AND LGPL-2.1-or-later + purls: + - pkg:pypi/xz-tools + size: 86425 + timestamp: 1749230316106 +- conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda + sha256: 6d9ea2f731e284e9316d95fa61869fe7bbba33df7929f82693c121022810f4ad + md5: a77f85f77be52ff59391544bfe73390a + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/yaml + size: 85189 + timestamp: 1753484064210 +- pypi: https://files.pythonhosted.org/packages/46/00/71b90ed48e895667ecfb1eaab27c1523ee2fa217433ed77a73b13205ca4b/yarl-1.22.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: yarl + version: 1.22.0 + sha256: 4c52a6e78aef5cf47a98ef8e934755abf53953379b7d53e68b15ff4420e6683d + requires_dist: + - idna>=2.0 + - multidict>=4.0 + - propcache>=0.2.1 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/c1/da/8da9f6a53f67b5106ffe902c6fa0164e10398d4e150d85838b82f424072a/yarl-1.22.0-cp311-cp311-macosx_11_0_arm64.whl + name: yarl + version: 1.22.0 + sha256: 792a2af6d58177ef7c19cbf0097aba92ca1b9cb3ffdd9c7470e156c8f9b5e028 + requires_dist: + - idna>=2.0 + - multidict>=4.0 + - propcache>=0.2.1 + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.1.3-pyhcf101f3_0.conda + sha256: 3d494f058f1e8aef41c5fac202c45de26fdc7b169ed886522497a8b83615e8db + md5: 540ed093cbc10711485a385a58f34b00 + depends: + - python >=3.11 + - packaging >=22.0 + - numpy >=1.26 + - numcodecs >=0.14 + - typing_extensions >=4.9 + - donfig >=0.8 + - crc32c + - python + constrains: + - fsspec >=2023.10.0 + - obstore >=0.5.1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/zarr + size: 290974 + timestamp: 1758255670714 +- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + sha256: 7560d21e1b021fd40b65bfb72f67945a3fcb83d78ad7ccf37b8b3165ec3b68ad + md5: df5e78d904988eb55042c0c97446079f + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/zipp + size: 22963 + timestamp: 1749421737203 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda + sha256: a4166e3d8ff4e35932510aaff7aa90772f84b4d07e9f6f83c614cba7ceefe0eb + md5: 6432cb5d4ac0046c3ac0a8a0f95842f9 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/zstd + size: 567578 + timestamp: 1742433379869 diff --git a/pixi.toml b/pixi.toml new file mode 100644 index 0000000..6f3dee9 --- /dev/null +++ b/pixi.toml @@ -0,0 +1,65 @@ +[workspace] +channels = ["rapidsai", "conda-forge", "nvidia", "bioconda", "dataloading"] +name = "nucleotides-diffusion" +platforms = ["linux-64", "osx-arm64"] +version = "0.1.0" +conda-pypi-map = { "conda-forge" = "conda-forge-pypi-map.json" } + + +[tasks] +download-example-data = { cmd = "python -m bigwig_loader.download_example_data"} +test = { cmd = "pytest -vv" } +pre-commit-hooks = { cmd = "pre-commit run --all-files --show-diff-on-failure" } + +[feature.gpu.system-requirements] +cuda = "12" + +[feature.gpu.target.linux-64.dependencies] +cuda-version = "12.8.*" +pytorch-gpu = ">=2.6" +cuda-nvcc = "*" +kvikio = "<=25.08.00" + +[feature.released.target.linux-64.dependencies] +bigwig-loader = "*" + +[feature.dev.target.linux-64.pypi-dependencies] +bigwig-loader = { path = ".", editable = true } + +[feature.cpu.target.osx-arm64.dependencies] +pytorch-cpu = "*" + +[feature.cpu.target.linux-64.dependencies] +pytorch-cpu = "*" + +[dependencies] +python = "==3.11" +pip = "*" +numpy = "*" +pandas = "*" + +[pypi-dependencies] +python-dotenv = "*" +pydantic = "*" +pydantic-settings = "*" +universal-pathlib = "*" +fsspec = { version = "*" } +s3fs = "*" +pyfaidx = "*" +numcodecs ="*" + +[feature.test.pypi-dependencies] +pytest = "*" +pytest-sugar = "*" +pytest-cov = "*" +pytest-mock = "*" +mypy = "*" +aim = "==3.28.0" +pytest-asyncio = "*" +asgi-lifespan = "*" +pyBigWig = "*" + +[environments] +prod = {features = ["gpu", "released"]} +dev = {features = ["gpu", "dev", "test"]} +dev-cpu = {features = ["cpu", "test"] } diff --git a/tests/conftest.py b/tests/conftest.py index 539d1af..65b1501 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,8 +1,10 @@ import logging import random +import cupy as cp import pandas as pd import pytest +import torch from bigwig_loader import config from bigwig_loader.download_example_data import get_example_bigwigs_files @@ -62,3 +64,53 @@ def example_intervals(collection) -> tuple[list[str], list[int], list[int]]: start = [start[i] for i in shuffle_index] end = [end[i] for i in shuffle_index] return chrom, start, end + + +def all_close(expected, values, dtype): + """Compare arrays/tensors with dtype-appropriate tolerances. + + For bfloat16, uses looser tolerances due to lower precision. + For float32, uses standard tolerances. + """ + if dtype == "float32": + return cp.allclose(expected, values, equal_nan=True) + elif dtype == "bfloat16": + expected = convert_to_torch_bfloat16(expected) + values = convert_to_torch_bfloat16(values) + return torch.allclose(expected, values, rtol=1e-2, atol=1e-2, equal_nan=True) + raise ValueError(f"Unsupported data type: {dtype}") + + +def convert_to_torch_bfloat16(tensor): + """Convert a CuPy array to PyTorch bfloat16 tensor. + + For uint16 tensors (bfloat16 bits), reinterprets bits as bfloat16. + For float32 tensors, converts to bfloat16. + """ + + torch_tensor = torch.as_tensor(tensor) + + if tensor.dtype == cp.uint16: + # Reinterpret uint16 bits as bfloat16 using view + # This treats the uint16 bit pattern as if it were bfloat16 + torch_tensor = torch_tensor.view(torch.bfloat16) + elif tensor.dtype == cp.float32: + # Convert float32 to bfloat16 + torch_tensor = torch_tensor.to(torch.bfloat16) + else: + # Convert other types to float32 first, then to bfloat16 + torch_tensor = torch_tensor.to(torch.float32).to(torch.bfloat16) + return torch_tensor + + +def uint16_to_float32(tensor): + """Convert uint16 array (containing bfloat16 bits) to float32 values. + + This interprets the uint16 bit pattern as bfloat16, then converts to float32. + Keeps data on GPU throughout the operation. + """ + torch_tensor = convert_to_torch_bfloat16(tensor) + # Convert to float32 to get actual values (stays on GPU) + float32_tensor = torch_tensor.to(torch.float32) + # Convert back to CuPy (stays on GPU) + return cp.asarray(float32_tensor) diff --git a/tests/test_against_pybigwig.py b/tests/test_against_pybigwig.py index a17307b..d5d4e50 100644 --- a/tests/test_against_pybigwig.py +++ b/tests/test_against_pybigwig.py @@ -40,6 +40,8 @@ def test_same_output(bigwig_path): pybigwig_batch = pybigwig_collection.get_batch(chromosomes, starts, ends) np.nan_to_num(pybigwig_batch, copy=False, nan=0.0) + pybigwig_batch = pybigwig_batch.transpose(0, 2, 1) + this_batch = collection.get_batch(chromosomes, starts, ends).get() print("PyBigWig:") print(pybigwig_batch) @@ -64,7 +66,9 @@ def test_same_output_with_nans(bigwig_path): list(df["center"] + 1000), ) - pybigwig_batch = pybigwig_collection.get_batch(chromosomes, starts, ends) + pybigwig_batch = pybigwig_collection.get_batch(chromosomes, starts, ends).transpose( + 0, 2, 1 + ) this_batch = collection.get_batch( chromosomes, starts, ends, default_value=np.nan @@ -116,6 +120,8 @@ def test_windowed_output_against_pybigwig( # And take mean over the window pybigwig_batch = np.nanmean(pybigwig_batch, axis=-1) + pybigwig_batch = pybigwig_batch.transpose(0, 2, 1) + print("PyBigWig (with window function applied afterwards):") print(pybigwig_batch) print("bigwig-loader:") diff --git a/tests/test_collection.py b/tests/test_collection.py index 1e9893e..ab7ff44 100644 --- a/tests/test_collection.py +++ b/tests/test_collection.py @@ -43,7 +43,7 @@ def bigwig_dataset(bigwig_path, reference_genome_path, merged_intervals): def test_dataset(bigwig_dataset): for sequence, target in bigwig_dataset: - assert target.shape == (256, 2, 1000) + assert target.shape == (256, 1000, 2) def test_get_batch(collection): @@ -54,7 +54,7 @@ def test_get_batch(collection): intervals["start"].values, intervals["end"].values, ) - assert batch.shape == (256, n_files, 1000) + assert batch.shape == (256, 1000, n_files) def test_get_batch_with_nans(collection): @@ -76,7 +76,7 @@ def test_get_batch_with_nans(collection): ) print(batch) - assert batch.shape == (3, n_files, 1000) + assert batch.shape == (3, 1000, n_files) assert cp.any(cp.isnan(batch)) @@ -144,5 +144,5 @@ def test_scaling(bigwig_path, reference_genome_path): ) assert cp.allclose( - scaled_batch, unscaled_batch * cp.asarray([3, 10]).reshape(1, 2, 1) + scaled_batch, unscaled_batch * cp.asarray([3, 10]).reshape(1, 1, 2) ) diff --git a/tests/test_dataset.py b/tests/test_dataset.py index dd30fc1..2398288 100644 --- a/tests/test_dataset.py +++ b/tests/test_dataset.py @@ -41,7 +41,8 @@ def dataset_with_track_sampling(bigwig_path, reference_genome_path, merged_inter def test_output_shape(dataset): for i, (sequence, values) in enumerate(dataset): print(i, "---", flush=True) - assert values.shape == (265, 2, 250) + assert values.shape == (265, 250, 2) + assert sequence.shape == (265, 2000, 4) def test_output_shape_sub_sampled_tracks(dataset_with_track_sampling): @@ -50,7 +51,7 @@ def test_output_shape_sub_sampled_tracks(dataset_with_track_sampling): ): print(i, "---", flush=True) assert len(track_indices) == 1 - assert values.shape == (265, 1, 250) + assert values.shape == (265, 250, 1) def test_batch_return_type(bigwig_path, reference_genome_path, merged_intervals): diff --git a/tests/test_intervals_to_values.py b/tests/test_intervals_to_values.py index 8098b33..661c5db 100644 --- a/tests/test_intervals_to_values.py +++ b/tests/test_intervals_to_values.py @@ -1,5 +1,6 @@ import cupy as cp import pytest +from conftest import all_close from bigwig_loader.intervals_to_values import intervals_to_values @@ -29,7 +30,7 @@ def test_get_values_from_intervals(default_value) -> None: track_values = cp.asarray([20.0, 15.0, 30.0, 40.0, 50.0], dtype=cp.dtype("f4")) query_starts = cp.asarray([2], dtype=cp.int32) query_ends = cp.asarray([17], dtype=cp.int32) - reserved = cp.zeros((1, 15), dtype=cp.float32) + reserved = cp.zeros((1, 15, 1), dtype=cp.float32) values = intervals_to_values( track_starts, track_ends, @@ -41,7 +42,12 @@ def test_get_values_from_intervals(default_value) -> None: ) expected = cp.asarray( [[20, 15, 15, 15, 15, 15, 15, 15, 30, 30, 40, 40, 40, 40, 50]] - ) + ).transpose(1, 0) + print("expected", expected.shape) + print(expected) + print("actual", values.shape) + print(values) + assert cp.allclose(expected, values, equal_nan=True) @@ -64,14 +70,16 @@ def test_get_values_from_intervals_edge_case_1(default_value) -> None: out=reserved, ) x = default_value - expected = cp.asarray([[x, x, x, x, 30, 30, 40, 40, 40, 40, 50, 50]]) + expected = cp.asarray([[[x, x, x, x, 30, 30, 40, 40, 40, 40, 50, 50]]]).transpose( + 0, 2, 1 + ) print(expected) print(values) assert ( cp.allclose(values, expected, equal_nan=True) - and expected.shape[-1] == query_ends[0] - query_starts[0] + and expected.shape[1] == query_ends[0] - query_starts[0] ) @@ -93,10 +101,10 @@ def test_get_values_from_intervals_edge_case_2(default_value) -> None: default_value=default_value, out=reserved, ) - expected = cp.asarray([[30, 30, 40, 40, 40, 40, 50, 50]]) + expected = cp.asarray([[[30, 30, 40, 40, 40, 40, 50, 50]]]).transpose(0, 2, 1) assert ( cp.allclose(values, expected, equal_nan=True) - and expected.shape[-1] == query_ends[0] - query_starts[0] + and expected.shape[1] == query_ends[0] - query_starts[0] ) @@ -119,10 +127,10 @@ def test_get_values_from_intervals_edge_case_3(default_value) -> None: out=reserved, ) x = default_value - expected = cp.asarray([[20, 30, 30, 40, 40, x, x]]) + expected = cp.asarray([[[20, 30, 30, 40, 40, x, x]]]).transpose(0, 2, 1) assert ( cp.allclose(values, expected, equal_nan=True) - and expected.shape[-1] == query_ends[0] - query_starts[0] + and expected.shape[1] == query_ends[0] - query_starts[0] ) @@ -144,12 +152,12 @@ def test_get_values_from_intervals_edge_case_4(default_value) -> None: default_value=default_value, out=reserved, ) - expected = cp.asarray([[20, 30, 30, 40, 40]]) + expected = cp.asarray([[[20, 30, 30, 40, 40]]]).transpose(0, 2, 1) print(expected) print(values) - assert (values == expected).all() and expected.shape[-1] == query_ends[ + assert (values == expected).all() and expected.shape[1] == query_ends[ 0 ] - query_starts[0] @@ -173,14 +181,16 @@ def test_get_values_from_intervals_edge_case_5(default_value) -> None: out=reserved, ) x = default_value - expected = cp.asarray([[20, 30, 30, 40, 40, x, x, x, x, 50, 50]]) + expected = cp.asarray([[[20, 30, 30, 40, 40, x, x, x, x, 50, 50]]]).transpose( + 0, 2, 1 + ) print(expected) print(values) assert ( cp.allclose(expected, values, equal_nan=True) - and expected.shape[-1] == query_ends[0] - query_starts[0] + and expected.shape[1] == query_ends[0] - query_starts[0] ) @@ -207,17 +217,23 @@ def test_get_values_from_intervals_batch_of_2(default_value) -> None: expected = cp.asarray( [ - [20.0, 20.0, 20.0, 30.0, 30.0, 40.0, 40.0, x, x, x, x], - [20.0, 30.0, 30.0, 40.0, 40.0, x, x, x, x, 50.0, 50.0], + [ + [20.0, 20.0, 20.0, 30.0, 30.0, 40.0, 40.0, x, x, x, x], + [20.0, 30.0, 30.0, 40.0, 40.0, x, x, x, x, 50.0, 50.0], + ] ] - ) + ).transpose(1, 2, 0) + + print("expected", expected.shape) print(expected) - print(values) + print("actual", values.shape) + print(values, values.shape) assert cp.allclose(expected, values, equal_nan=True) +@pytest.mark.parametrize("dtype", ["bfloat16", "float32"]) @pytest.mark.parametrize("default_value", [0.0, cp.nan]) -def test_get_values_from_intervals_batch_multiple_tracks(default_value) -> None: +def test_get_values_from_intervals_batch_multiple_tracks(dtype, default_value) -> None: """Query end is exactly at end index before "gap".""" track_starts = cp.asarray( [5, 10, 12, 18, 8, 9, 10, 18, 25, 10, 100, 1000], dtype=cp.int32 @@ -231,7 +247,8 @@ def test_get_values_from_intervals_batch_multiple_tracks(default_value) -> None: ) query_starts = cp.asarray([7, 9, 20, 99], dtype=cp.int32) query_ends = cp.asarray([18, 20, 31, 110], dtype=cp.int32) - reserved = cp.zeros([3, 4, 11], dtype=cp.dtype(" None: query_starts, query_ends, default_value=default_value, - out=reserved, + # out=reserved, sizes=cp.asarray([4, 5, 3], dtype=cp.int32), + dtype=dtype, ) x = default_value expected = cp.asarray( @@ -289,6 +307,11 @@ def test_get_values_from_intervals_batch_multiple_tracks(default_value) -> None: ], ] ) + + expected = expected.transpose(1, 2, 0) + + print("Expected:", expected.shape) print(expected) + print("Actual Values:", values.shape) print(values) - assert cp.allclose(expected, values, equal_nan=True) + assert all_close(expected, values, dtype) diff --git a/tests/test_intervals_to_values_window_function.py b/tests/test_intervals_to_values_window_function.py index 4020fdc..f964190 100644 --- a/tests/test_intervals_to_values_window_function.py +++ b/tests/test_intervals_to_values_window_function.py @@ -4,19 +4,62 @@ import cupy as cp import numpy as np import pytest +from conftest import all_close from bigwig_loader.intervals_to_values import intervals_to_values +def reshape_expected( + expected: cp.ndarray, batch_size: int, n_tracks: int +) -> cp.ndarray: + """ + Reshape expected output to match new shape (batch_size, sequence_length, n_tracks). + + Handles cases where expected might be: + - 1D: sequence_length → reshape to (batch_size, sequence_length, n_tracks) + - 2D: (batch_size, sequence_length) or (n_tracks, sequence_length) → reshape appropriately + - 3D: already correct or needs transposing + """ + if expected.ndim == 1: + # 1D array: expand to (batch_size, sequence_length, n_tracks) + seq_length = len(expected) + expected = expected.reshape(1, seq_length, 1) + if batch_size > 1 or n_tracks > 1: + expected = cp.broadcast_to(expected, (batch_size, seq_length, n_tracks)) + elif expected.ndim == 2: + # 2D array: assume (batch_size, sequence_length), add track dimension + expected = expected.reshape(expected.shape[0], expected.shape[1], 1) + if n_tracks > 1: + expected = cp.broadcast_to( + expected, (batch_size, expected.shape[1], n_tracks) + ) + elif expected.ndim == 3: + # Already 3D: check if it needs transposing or reshaping + # Case 1: shape is (n_tracks, batch_size, sequence_length), transpose to (batch_size, sequence_length, n_tracks) + if expected.shape[0] == n_tracks and expected.shape[1] == batch_size: + expected = expected.transpose(1, 2, 0) + # Case 2: shape is (batch_size, 1, sequence_length), reshape to (batch_size, sequence_length, n_tracks) + elif expected.shape[0] == batch_size and expected.shape[1] == 1: + seq_length = expected.shape[2] + expected = expected.reshape(batch_size, seq_length, 1) + if n_tracks > 1: + expected = cp.broadcast_to(expected, (batch_size, seq_length, n_tracks)) + + return expected + + +@pytest.mark.parametrize("dtype", ["float32", "bfloat16"]) @pytest.mark.parametrize("default_value", [0.0, cp.nan]) -def test_get_values_from_intervals_window(default_value) -> None: +def test_get_values_from_intervals_window(default_value, dtype) -> None: """.""" track_starts = cp.asarray([1, 3, 10, 12, 16], dtype=cp.int32) track_ends = cp.asarray([3, 10, 12, 16, 20], dtype=cp.int32) track_values = cp.asarray([20.0, 15.0, 30.0, 40.0, 50.0], dtype=cp.dtype("f4")) query_starts = cp.asarray([2], dtype=cp.int32) query_ends = cp.asarray([17], dtype=cp.int32) - reserved = cp.zeros((1, 3), dtype=cp.float32) + batch_size = len(query_starts) + n_tracks = 1 + reserved = cp.zeros((batch_size, 3, n_tracks), dtype=cp.float32) values = intervals_to_values( track_starts, track_ends, @@ -26,26 +69,30 @@ def test_get_values_from_intervals_window(default_value) -> None: window_size=5, default_value=default_value, out=reserved, + dtype=dtype, ) expected = cp.asarray([[16.0, 21.0, 42.0]]) + expected = reshape_expected(expected, batch_size, n_tracks) print("expected:") print(expected) print("actual:") print(values) - assert (values == expected).all() + assert all_close(values, expected, dtype) -@pytest.mark.parametrize("default_value", [0.0, cp.nan, 5.6, 10.0, 7565]) -def test_get_values_from_intervals_edge_case_1(default_value) -> None: +@pytest.mark.parametrize("dtype", ["float32", "bfloat16"]) +@pytest.mark.parametrize("default_value", [0.0, cp.nan]) +def test_get_values_from_intervals_edge_case_1(default_value, dtype) -> None: """Query start is somewhere in a "gap".""" track_starts = cp.asarray([1, 10, 12, 16], dtype=cp.int32) track_ends = cp.asarray([3, 12, 16, 20], dtype=cp.int32) track_values = cp.asarray([20.0, 30.0, 40.0, 50.0], dtype=cp.dtype("f4")) query_starts = cp.asarray([6], dtype=cp.int32) query_ends = cp.asarray([18], dtype=cp.int32) - # reserved = cp.zeros((1, 4), dtype=cp.dtype(" None: query_ends, default_value=default_value, window_size=3, + dtype=dtype, ) x = default_value if isnan(default_value): @@ -63,26 +111,27 @@ def test_get_values_from_intervals_edge_case_1(default_value) -> None: else: expected = cp.asarray([[x, 20.0, 40.0, 46.666668]]) + expected = reshape_expected(expected, batch_size, n_tracks) print("expected:") print(expected) print("actual:") print(values) - assert ( - cp.allclose(values, expected, equal_nan=True) - and expected.shape[-1] == (query_ends[0] - query_starts[0]) / 3 - ) + assert all_close(values, expected, dtype) +@pytest.mark.parametrize("dtype", ["float32", "bfloat16"]) @pytest.mark.parametrize("default_value", [0.0, cp.nan]) -def test_get_values_from_intervals_edge_case_2(default_value) -> None: +def test_get_values_from_intervals_edge_case_2(default_value, dtype) -> None: """Query start is exactly at start index after "gap".""" track_starts = cp.asarray([1, 10, 12, 16], dtype=cp.int32) track_ends = cp.asarray([3, 12, 16, 20], dtype=cp.int32) track_values = cp.asarray([20.0, 30.0, 40.0, 50.0], dtype=cp.dtype("f4")) query_starts = cp.asarray([10], dtype=cp.int32) query_ends = cp.asarray([18], dtype=cp.int32) - reserved = cp.zeros((1, 2), dtype=cp.dtype(" None: window_size=4, default_value=default_value, out=reserved, + dtype=dtype, ) expected = cp.asarray([[35.0, 45.0]]) + expected = reshape_expected(expected, batch_size, n_tracks) print(expected) print(values) assert ( - cp.allclose(values, expected, equal_nan=True) - and expected.shape[-1] == (query_ends[0] - query_starts[0]) / 4 + all_close(values, expected, dtype) + and expected.shape[1] == (query_ends[0] - query_starts[0]) / 4 ) +@pytest.mark.parametrize("dtype", ["float32", "bfloat16"]) @pytest.mark.parametrize("default_value", [0.0, cp.nan]) -def test_get_values_from_intervals_edge_case_3(default_value) -> None: +def test_get_values_from_intervals_edge_case_3(default_value, dtype) -> None: """Query end is somewhere in a "gap".""" track_starts = cp.asarray([5, 10, 12, 18], dtype=cp.int32) track_ends = cp.asarray([10, 12, 14, 20], dtype=cp.int32) track_values = cp.asarray([20.0, 30.0, 40.0, 50.0], dtype=cp.dtype("f4")) query_starts = cp.asarray([8], dtype=cp.int32) query_ends = cp.asarray([16], dtype=cp.int32) - reserved = cp.zeros((1, 2), dtype=cp.dtype(" None: window_size=4, default_value=default_value, out=reserved, + dtype=dtype, ) - # expected = cp.asarray([[20, 20, 30, 30, 40, 40, 0, 0]]) if isnan(default_value): expected = cp.asarray([[25.0, 40.0]]) else: expected = cp.asarray([[25.0, 20.0]]) + expected = reshape_expected(expected, batch_size, n_tracks) print(expected) print(values) - assert ( - cp.allclose(expected, values, equal_nan=True) - and expected.shape[-1] == (query_ends[0] - query_starts[0]) / 4 - ) + assert all_close(expected, values, dtype) +@pytest.mark.parametrize("dtype", ["float32", "bfloat16"]) @pytest.mark.parametrize("default_value", [0.0, cp.nan]) -def test_get_values_from_intervals_edge_case_4(default_value) -> None: +def test_get_values_from_intervals_edge_case_4(default_value, dtype) -> None: """Query end is exactly at end index before "gap".""" track_starts = cp.asarray([5, 10, 12, 18], dtype=cp.int32) track_ends = cp.asarray([10, 12, 14, 20], dtype=cp.int32) track_values = cp.asarray([20.0, 30.0, 40.0, 50.0], dtype=cp.dtype("f4")) query_starts = cp.asarray([8], dtype=cp.int32) query_ends = cp.asarray([14], dtype=cp.int32) - reserved = cp.zeros((1, 2), dtype=cp.dtype(" None: window_size=3, default_value=default_value, out=reserved, + dtype=dtype, ) - # without window function:[[20, 20, 30, 30, 40, 40]] expected = cp.asarray([[23.333334, 36.666668]]) + expected = reshape_expected(expected, batch_size, n_tracks) print(expected) print(values) - assert ( - cp.allclose(values, expected, equal_nan=True) - and expected.shape[-1] == (query_ends[0] - query_starts[0]) / 3 - ) + assert all_close(values, expected, dtype) +@pytest.mark.parametrize("dtype", ["float32", "bfloat16"]) @pytest.mark.parametrize("default_value", [0.0, cp.nan]) -def test_get_values_from_intervals_edge_case_5(default_value) -> None: +def test_get_values_from_intervals_edge_case_5(default_value, dtype) -> None: """Query end is exactly at end index before "gap".""" track_starts = cp.asarray([5, 10, 12, 18], dtype=cp.uint32) track_ends = cp.asarray([10, 12, 14, 20], dtype=cp.uint32) track_values = cp.asarray([20.0, 30.0, 40.0, 50.0], dtype=cp.dtype("f4")) query_starts = cp.asarray([8], dtype=cp.uint32) query_ends = cp.asarray([20], dtype=cp.uint32) - reserved = cp.zeros((1, 4), dtype=cp.dtype(" None: window_size=3, default_value=default_value, out=reserved, + dtype=dtype, ) x = default_value if isnan(default_value): @@ -190,24 +247,25 @@ def test_get_values_from_intervals_edge_case_5(default_value) -> None: else: expected = cp.asarray([[23.333334, 36.666668, x, 33.333332]]) + expected = reshape_expected(expected, batch_size, n_tracks) print(expected) print(values) - assert ( - cp.allclose(values, expected, equal_nan=True) - and expected.shape[-1] == (query_ends[0] - query_starts[0]) / 3 - ) + assert all_close(values, expected, dtype) +@pytest.mark.parametrize("dtype", ["float32", "bfloat16"]) @pytest.mark.parametrize("default_value", [0.0, cp.nan]) -def test_get_values_from_intervals_batch_of_2(default_value) -> None: +def test_get_values_from_intervals_batch_of_2(default_value, dtype) -> None: """Query end is exactly at end index before "gap".""" track_starts = cp.asarray([5, 10, 12, 18], dtype=cp.int32) track_ends = cp.asarray([10, 12, 14, 20], dtype=cp.int32) track_values = cp.asarray([20.0, 30.0, 40.0, 50.0], dtype=cp.dtype("f4")) query_starts = cp.asarray([6, 8], dtype=cp.int32) query_ends = cp.asarray([18, 20], dtype=cp.int32) - reserved = cp.zeros([2, 4], dtype=cp.dtype(" None: window_size=3, default_value=default_value, out=reserved, + dtype=dtype, ) - # expected without window function: - # [20.0, 20.0, 20.0, 20.0, 30.0, 30.0, 40.0, 40.0, 0.0, 0.0, 0.0, 0.0] - # [20.0, 20.0, 30.0, 30.0, 40.0, 40.0, 0.0, 0.0, 0.0, 0.0, 50.0, 50.0] if isnan(default_value): expected = cp.asarray( - [[20.0, 26.666666, 40.0, cp.nan], [23.333334, 36.666668, cp.nan, 50.0]] + [[[20.0, 26.666666, 40.0, cp.nan]], [[23.333334, 36.666668, cp.nan, 50.0]]] ) else: expected = cp.asarray( - [[20.0, 26.666666, 26.666666, 0.0], [23.333334, 36.666668, 0.0, 33.333332]] + [ + [[20.0, 26.666666, 26.666666, 0.0]], + [[23.333334, 36.666668, 0.0, 33.333332]], + ] ) + + expected = reshape_expected(expected, batch_size, n_tracks) print("expected:") print(expected) print("actual:") print(values) - assert cp.allclose(values, expected, equal_nan=True) + assert all_close(values, expected, dtype) +@pytest.mark.parametrize("dtype", ["float32", "bfloat16"]) @pytest.mark.parametrize("default_value", [0.0, cp.nan]) -def test_one_track_one_sample(default_value) -> None: +def test_one_track_one_sample(default_value, dtype) -> None: """ This tests a specific combination of track and batch index of the larger test case below: @@ -255,7 +317,9 @@ def test_one_track_one_sample(default_value) -> None: ) query_starts = cp.asarray([9], dtype=cp.int32) query_ends = cp.asarray([20], dtype=cp.int32) - reserved = cp.zeros([1, 1, 3], dtype=cp.dtype(" None: window_size=3, default_value=default_value, out=reserved, + dtype=dtype, ) x = default_value @@ -288,16 +353,18 @@ def apply_window(full_matrix): ) expected = apply_window(expected) + expected = reshape_expected(expected, batch_size, n_tracks) print("expected:") print(expected) print("actual:") print(values) - assert cp.allclose(values, expected, equal_nan=True) + assert all_close(values, expected, dtype) +@pytest.mark.parametrize("dtype", ["float32", "bfloat16"]) @pytest.mark.parametrize("default_value", [0.0, cp.nan]) -def test_one_track_one_sample_2(default_value) -> None: +def test_one_track_one_sample_2(default_value, dtype) -> None: """ This tests a specific combination of track and batch index of the larger test case below: @@ -314,7 +381,9 @@ def test_one_track_one_sample_2(default_value) -> None: ) query_starts = cp.asarray([9], dtype=cp.int32) query_ends = cp.asarray([20], dtype=cp.int32) - reserved = cp.zeros([1, 1, 3], dtype=cp.dtype(" None: window_size=3, default_value=default_value, out=reserved, + dtype=dtype, ) x = default_value expected = cp.asarray( @@ -358,6 +428,7 @@ def apply_window(full_matrix): ) expected = apply_window(expected) + expected = reshape_expected(expected, batch_size, n_tracks) print("expected:") print(expected) @@ -365,11 +436,12 @@ def apply_window(full_matrix): print(values) print("difference") print(values - expected) - assert cp.allclose(values, expected, atol=1e-2, rtol=1e-2, equal_nan=True) + assert all_close(values, expected, dtype) +@pytest.mark.parametrize("dtype", ["float32", "bfloat16"]) @pytest.mark.parametrize("default_value", [0.0, cp.nan]) -def test_get_values_from_intervals_multiple_tracks(default_value) -> None: +def test_get_values_from_intervals_multiple_tracks(default_value, dtype) -> None: """Test interval_to_values with 3 tracks and a batch size of 1.""" track_starts = cp.asarray( [5, 10, 12, 18, 8, 9, 10, 18, 25, 10, 100, 1000], dtype=cp.int32 @@ -383,7 +455,9 @@ def test_get_values_from_intervals_multiple_tracks(default_value) -> None: ) query_starts = cp.asarray([9], dtype=cp.int32) query_ends = cp.asarray([20], dtype=cp.int32) - reserved = cp.zeros([3, 1, 3], dtype=cp.dtype(" None: window_size=3, default_value=default_value, out=reserved, + dtype=dtype, ) x = default_value @@ -434,22 +509,24 @@ def apply_window(full_matrix): ) expected = apply_window(expected) + expected = reshape_expected(expected, batch_size, n_tracks) - print("expected:") + print("expected:", expected.shape) print(expected) - print("actual:") + print("actual:", values.shape) print(values) print("difference") print(values - expected) - assert cp.allclose(values, expected, atol=1e-2, rtol=1e-2, equal_nan=True) + assert all_close(values, expected, dtype) +@pytest.mark.parametrize("dtype", ["float32", "bfloat16"]) @pytest.mark.parametrize( "sequence_length, window_size", product([8, 9, 10, 11, 13, 23], [2, 3, 4, 10, 11]) ) @pytest.mark.parametrize("default_value", [0.0, cp.nan]) def test_combinations_sequence_length_window_size( - sequence_length, window_size, default_value + sequence_length, window_size, default_value, dtype ) -> None: """Test intervals_to_values with 3 tracks and a batch size of 4.""" track_starts = cp.asarray( @@ -466,7 +543,6 @@ def test_combinations_sequence_length_window_size( query_ends = query_starts + sequence_length reduced_dim = sequence_length // window_size - reserved = cp.zeros([3, 4, reduced_dim], dtype=cp.dtype(" None: """.""" track_starts = cp.asarray([1, 3, 10, 12, 16] * n_tracks, dtype=cp.int32) @@ -531,6 +616,7 @@ def test_combinations_window_size_batch_size_n_tracks( sizes=sizes, window_size=window_size, default_value=default_value, + dtype=dtype, ) values_with_window_size_1 = intervals_to_values( @@ -542,21 +628,30 @@ def test_combinations_window_size_batch_size_n_tracks( sizes=sizes, window_size=1, default_value=default_value, + dtype=dtype, ) + # For bfloat16, we need to convert to float32 first to compute the expected values correctly + if dtype == "bfloat16": + from conftest import uint16_to_float32 + + values_for_expected = uint16_to_float32(values_with_window_size_1) + else: + values_for_expected = values_with_window_size_1 + reduced_dim = sequence_length // window_size - full_matrix = values_with_window_size_1[:, :, : reduced_dim * window_size] + full_matrix = values_for_expected[:, : reduced_dim * window_size, :] full_matrix = full_matrix.reshape( - full_matrix.shape[0], full_matrix.shape[1], reduced_dim, window_size + full_matrix.shape[0], reduced_dim, window_size, full_matrix.shape[2] ) - expected = cp.nanmean(full_matrix, axis=-1) + expected = cp.nanmean(full_matrix, axis=2) print("expected:") print(expected) print("actual:") print(values) - assert cp.allclose(values, expected, equal_nan=True) + assert all_close(values, expected, dtype) def create_random_track_data(n_tracks, min_intervals=10, max_intervals=20): @@ -582,7 +677,7 @@ def create_random_track_data(n_tracks, min_intervals=10, max_intervals=20): return ( cp.asarray(track_starts, dtype=cp.int32), cp.asarray(track_ends, dtype=cp.int32), - cp.asarray(values, dtype=cp.int32), + cp.asarray(values, dtype=cp.float32), cp.asarray(sizes, dtype=cp.int32), ) @@ -593,13 +688,14 @@ def create_random_queries(batch_size, sequence_length=200): return cp.asarray(start, dtype=cp.int32), cp.asarray(end, dtype=cp.int32) +@pytest.mark.parametrize("dtype", ["float32", "bfloat16"]) @pytest.mark.parametrize( "window_size, batch_size, n_tracks", product([1, 2, 3, 7], [1, 2, 3, 7], [1, 2, 3, 7]), ) @pytest.mark.parametrize("default_value", [0.0, cp.nan]) def test_combinations_window_size_batch_size_n_tracks_on_random_data( - window_size, batch_size, n_tracks, default_value + window_size, batch_size, n_tracks, default_value, dtype ) -> None: sequence_length = 200 track_starts, track_ends, track_values, sizes = create_random_track_data(n_tracks) @@ -616,6 +712,7 @@ def test_combinations_window_size_batch_size_n_tracks_on_random_data( sizes=sizes, window_size=window_size, default_value=default_value, + dtype=dtype, ) values_with_window_size_1 = intervals_to_values( @@ -627,23 +724,31 @@ def test_combinations_window_size_batch_size_n_tracks_on_random_data( sizes=sizes, window_size=1, default_value=cp.nan, + dtype=dtype, ) + # For bfloat16, we need to convert to float32 first to compute the expected values correctly + if dtype == "bfloat16": + from conftest import uint16_to_float32 + + values_with_window_size_1 = uint16_to_float32(values_with_window_size_1) + values = uint16_to_float32(values) + cp.nan_to_num(values_with_window_size_1, copy=False, nan=default_value) reduced_dim = sequence_length // window_size - full_matrix = values_with_window_size_1[:, :, : reduced_dim * window_size] + full_matrix = values_with_window_size_1[:, : reduced_dim * window_size, :] full_matrix = full_matrix.reshape( - full_matrix.shape[0], full_matrix.shape[1], reduced_dim, window_size + full_matrix.shape[0], reduced_dim, window_size, full_matrix.shape[2] ) - expected = cp.nanmean(full_matrix, axis=-1) + expected = cp.nanmean(full_matrix, axis=2) print("expected:") print(expected) print("actual:") print(values) - assert cp.allclose(values, expected, equal_nan=True) + assert all_close(values, expected, dtype) if __name__ == "__main__": diff --git a/tests/test_pytorch_dataset.py b/tests/test_pytorch_dataset.py index d7ca95d..cc7057f 100644 --- a/tests/test_pytorch_dataset.py +++ b/tests/test_pytorch_dataset.py @@ -28,7 +28,7 @@ def pytorch_dataset(bigwig_path, reference_genome_path, merged_intervals): def test_pytorch_dataset(pytorch_dataset): for sequence, target in pytorch_dataset: - assert target.shape == (256, 2, 1000) + assert target.shape == (256, 1000, 2) def test_input_and_target_is_torch_tensor(pytorch_dataset): @@ -37,9 +37,35 @@ def test_input_and_target_is_torch_tensor(pytorch_dataset): assert isinstance(target, torch.Tensor) -@pytest.mark.parametrize("default_value", [0.0, torch.nan, 4.0, 5.6]) -def test_pytorch_dataset_with_window_function( +@pytest.mark.parametrize("default_value", [4.0, 5.6]) +def test_pytorch_dataset_with_window_function_some_positive_values( default_value, bigwig_path, reference_genome_path, merged_intervals +): + """ + Testing window function with default values 4.0 and 5.6. + Unlikely you will ever do this,butgood as a test. + """ + _pytorch_dataset_with_window_function( + default_value, + bigwig_path, + reference_genome_path, + merged_intervals, + dtype="float32", + ) + + +@pytest.mark.parametrize("dtype", ["float32", "bfloat16"]) +@pytest.mark.parametrize("default_value", [0.0, torch.nan]) +def test_pytorch_dataset_with_window_function( + dtype, default_value, bigwig_path, reference_genome_path, merged_intervals +): + _pytorch_dataset_with_window_function( + default_value, bigwig_path, reference_genome_path, merged_intervals, dtype + ) + + +def _pytorch_dataset_with_window_function( + default_value, bigwig_path, reference_genome_path, merged_intervals, dtype ): from bigwig_loader.pytorch import PytorchBigWigDataset @@ -70,6 +96,7 @@ def test_pytorch_dataset_with_window_function( custom_position_sampler=position_sampler, default_value=default_value, return_batch_objects=True, + dtype=dtype, ) dataset_with_window = PytorchBigWigDataset( @@ -86,6 +113,7 @@ def test_pytorch_dataset_with_window_function( custom_position_sampler=position_sampler, default_value=default_value, return_batch_objects=True, + dtype=dtype, ) print(dataset_with_window._dataset.bigwig_collection.bigwig_paths) @@ -99,17 +127,31 @@ def test_pytorch_dataset_with_window_function( print(batch_with_window.starts) print(batch.ends) print(batch_with_window.ends) + # expected = batch.values.reshape( + # batch.values.shape[0], batch.values.shape[1], reduced_dim, window_size + # ) expected = batch.values.reshape( - batch.values.shape[0], batch.values.shape[1], reduced_dim, window_size + batch.values.shape[0], + reduced_dim, + window_size, + batch.values.shape[-1], ) if not isnan(default_value) or default_value == 0: expected = torch.nan_to_num(expected, nan=default_value) - expected = torch.nanmean(expected, axis=-1) + expected = torch.nanmean(expected, axis=-2) print("---") - print("expected") - print(expected) - print("batch_with_window") - print(batch_with_window.values) - assert torch.allclose(expected, batch_with_window.values, equal_nan=True) + print("expected", expected.shape) + print(expected[2, :, :]) + print("batch_with_window", batch_with_window.values.shape) + print(batch_with_window.values[2, :, :]) + # Use looser tolerances for bfloat16 due to lower precision + if dtype == "bfloat16": + assert torch.allclose( + expected, batch_with_window.values, rtol=1e-2, atol=1e-2, equal_nan=True + ) + else: + assert torch.allclose(expected, batch_with_window.values, equal_nan=True) + + # TODO: I need the bigwig file with empty intervals if isnan(default_value): assert torch.isnan(batch_with_window.values).any() diff --git a/tests/test_streamed_dataset.py b/tests/test_streamed_dataset.py index 20aa671..1ab35f1 100644 --- a/tests/test_streamed_dataset.py +++ b/tests/test_streamed_dataset.py @@ -41,7 +41,7 @@ def input_generator() -> ( if i == 2: break - assert batch.values.shape == (batch_size, len(collection), sequence_length) + assert batch.values.shape == (batch_size, sequence_length, len(collection)) assert len(batch.starts) == batch_size assert len(batch.ends) == batch_size assert len(batch.chromosomes) == batch_size @@ -132,7 +132,7 @@ def input_generator() -> ( ) with data_loader: for i, batch in enumerate(data_loader): - assert batch.values.shape == (batch_size, len(collection), sequence_length) + assert batch.values.shape == (batch_size, sequence_length, len(collection)) assert len(batch.starts) == batch_size assert len(batch.ends) == batch_size assert len(batch.chromosomes) == batch_size @@ -199,8 +199,8 @@ def input_generator() -> ( for i, batch in enumerate(data_loader): assert batch.values.shape == ( batch_size, - batch.other["n_tracks"], sequence_length, + batch.other["n_tracks"], ) assert len(batch.starts) == batch_size assert len(batch.ends) == batch_size diff --git a/tests/test_window_function.py b/tests/test_window_function.py index 7c828a3..2680981 100644 --- a/tests/test_window_function.py +++ b/tests/test_window_function.py @@ -36,11 +36,11 @@ def test_same_output(bigwig_path, window_size, default_value): else: assert not cp.isnan(full_batch).any() - full_matrix = full_batch[:, :, : reduced_dim * window_size] + full_matrix = full_batch[:, : reduced_dim * window_size, :] full_matrix = full_matrix.reshape( - full_matrix.shape[0], full_matrix.shape[1], reduced_dim, window_size + full_matrix.shape[0], reduced_dim, window_size, full_matrix.shape[-1] ) - expected = cp.nanmean(full_matrix, axis=-1) + expected = cp.nanmean(full_matrix, axis=-2) print(batch_with_window) print(expected) assert cp.allclose(expected, batch_with_window, equal_nan=True) @@ -105,15 +105,18 @@ def test_dataset_with_window_function( print(batch.ends) print(batch_with_window.ends) expected = batch.values.reshape( - batch.values.shape[0], batch.values.shape[1], reduced_dim, window_size + batch.values.shape[0], + reduced_dim, + window_size, + batch.values.shape[-1], ) if not isnan(default_value) or default_value == 0: cp.nan_to_num(expected, copy=False, nan=default_value) - expected = cp.nanmean(expected, axis=-1) + expected = cp.nanmean(expected, axis=-2) print("---") - print("expected") + print("expected", expected.shape) print(expected) - print("batch_with_window") + print("batch_with_window", batch_with_window.values.shape) print(batch_with_window.values) assert cp.allclose(expected, batch_with_window.values, equal_nan=True) if isnan(default_value):