diff --git a/.gitignore b/.gitignore index 76429cb..48ee6f3 100644 --- a/.gitignore +++ b/.gitignore @@ -132,3 +132,4 @@ bigwig_loader/_version.py /example_data/bigwig /deleted .pfau.yml +scratch/ diff --git a/bigwig_loader/__init__.py b/bigwig_loader/__init__.py index 5300278..7e2ac57 100644 --- a/bigwig_loader/__init__.py +++ b/bigwig_loader/__init__.py @@ -14,12 +14,6 @@ __email__ = ["joren.retel@pfizer.com"] logger = logging.getLogger("bigwig_loader") -if not logger.hasHandlers(): - handler = logging.StreamHandler() - formatter = logging.Formatter("[%(levelname)s] %(name)s: %(message)s") - handler.setFormatter(formatter) - logger.addHandler(handler) -logger.setLevel(logging.WARNING) logger.warning( diff --git a/bigwig_loader/bigwig.py b/bigwig_loader/bigwig.py index f65ad75..55b6256 100644 --- a/bigwig_loader/bigwig.py +++ b/bigwig_loader/bigwig.py @@ -1,7 +1,5 @@ -import zlib +import logging from pathlib import Path -from random import sample -from typing import BinaryIO from typing import Iterable from typing import Literal from typing import Optional @@ -22,13 +20,15 @@ from bigwig_loader.parser import ChromosomeTreeNode from bigwig_loader.parser import RTreeIndexHeader from bigwig_loader.parser import TotalSummary -from bigwig_loader.parser import WIGSectionHeader from bigwig_loader.parser import ZoomHeader from bigwig_loader.parser import collect_leaf_nodes from bigwig_loader.store import BigWigStore from bigwig_loader.subtract_intervals import subtract_interval_dataframe from bigwig_loader.util import get_standard_chromosomes +logger = logging.getLogger(__name__) +logger.setLevel(logging.INFO) + class BigWig: def __init__( @@ -50,6 +50,24 @@ def __init__( self.id = id self.scale = scale self.bbi_header = BBIHeader.from_file(bigwig) + + # Endianness check using BBI header magic + # UCSC BigWig spec: magic is 0x888FFC26 + # Parser uses little-endian unpacking, so valid BigWig files will read as 0x888FFC26 + # (the bytes in file are 26 FC 8F 88, which when read little-endian gives 0x888FFC26) + magic = self.bbi_header.magic + if magic == 0x888FFC26: + logger.debug(f"BBI header magic: {magic:#x} (valid BigWig file)") + elif magic == 0x26FC8F88: + # This would mean the file has bytes 88 8F FC 26, which is byte-swapped + logger.warning( + f"BBI header magic: {magic:#x} (byte-swapped BigWig - may need big-endian parsing)" + ) + else: + logger.warning( + f"BBI header magic: {magic:#x} (unexpected value - not a valid BigWig file?)" + ) + self.zoom_headers = ZoomHeader.all( bigwig, first_offset=64, n_zoom_levels=self.bbi_header.zoom_levels ) @@ -73,7 +91,7 @@ def __init__( ) self.rtree_leaf_nodes = collect_leaf_nodes(file_object=bigwig, offset=None) - self.max_rows_per_chunk = self._guess_max_rows_per_chunk(bigwig) + self.max_rows_per_chunk = self.get_max_rows_per_chunk() self.chrom_to_chrom_id: dict[str, int] = { item.key: item.chrom_id for item in self.chromosome_head_node.items # type: ignore @@ -90,13 +108,28 @@ def run_indexing(self, chromosome_offsets: npt.NDArray[np.int64]) -> None: an index itself as well. But we prefer to recalculate an index here. """ - self.chromosome_offsets = chromosome_offsets - self.ncls_index, self.reference_data = self.build_ncls_index() + sorted_data = prepare_index_for_bigwig( + chromosome_offsets=chromosome_offsets, + rtree_leaf_nodes=self.rtree_leaf_nodes, + ) + self.finalize_indexing(sorted_data) + + def finalize_indexing(self, sorted_data: npt.NDArray[np.void]) -> None: + """ + Finalize indexing by building NCLS from prepared data. + This should be called in the main thread/process. + """ + self.reference_data = sorted_data + self.ncls_index = NCLS( + sorted_data["start_abs"], + sorted_data["end_abs"], + np.arange(len(sorted_data)), + ) self.store = BigWigStore( self.path, - chunk_sizes=self.reference_data["data_size"], # type: ignore - chunk_offsets=self.reference_data["data_offset"], # type: ignore + chunk_sizes=sorted_data["data_size"], + chunk_offsets=sorted_data["data_offset"], ) def chromosomes( @@ -275,44 +308,6 @@ def get_batch_offsets_and_sizes_with_global_positions( ) return self.store.get_offsets_and_sizes(np.sort(np.unique(right_index))) - def build_ncls_index(self) -> tuple[NCLS, npt.NDArray[np.void]]: - dtype = np.dtype( - [ - ("start_chrom_ix", "u4"), - ("start_base", "u4"), - ("end_chrom_ix", "u4"), - ("end_base", "u4"), - ("data_offset", "u8"), - ("data_size", "u8"), - ("start_abs", "i8"), - ("end_abs", "i8"), - ] - ) - - data = np.empty(self.rtree_leaf_nodes.shape, dtype=dtype) - data["start_chrom_ix"] = self.rtree_leaf_nodes["start_chrom_ix"] # type: ignore - data["start_base"] = self.rtree_leaf_nodes["start_base"] # type: ignore - data["end_chrom_ix"] = self.rtree_leaf_nodes["end_chrom_ix"] # type: ignore - data["end_base"] = self.rtree_leaf_nodes["end_base"] # type: ignore - data["data_offset"] = self.rtree_leaf_nodes["data_offset"] # type: ignore - data["data_size"] = self.rtree_leaf_nodes["data_size"] # type: ignore - data["start_abs"] = self.make_positions_global( - self.rtree_leaf_nodes["start_chrom_ix"], self.rtree_leaf_nodes["start_base"] # type: ignore - ).astype(np.int64) - data["end_abs"] = self.make_positions_global( - self.rtree_leaf_nodes["end_chrom_ix"], self.rtree_leaf_nodes["end_base"] # type: ignore - ).astype(np.int64) - - sort_indices = np.argsort(data["start_abs"]) - sorted_data = data[sort_indices] - - ncls = NCLS( - sorted_data["start_abs"], - sorted_data["end_abs"], - np.arange(len(sorted_data)), - ) - return ncls, sorted_data - def search_ncls( self, query_df: pd.DataFrame, use_key: bool = False ) -> tuple[npt.NDArray[np.int64], npt.NDArray[np.int64]]: @@ -404,33 +399,75 @@ def _create_chrom_id_to_chrom_key(self) -> npt.NDArray[np.generic]: mapping[chrom_id] = key return mapping # type: ignore - def _guess_max_rows_per_chunk( - self, file_object: BinaryIO, sample_size: int = 100 - ) -> int: + def get_max_rows_per_chunk(self) -> int: """ - Randomly samples some chunks and looks in the header - to see if in these chunks, the number of rows in the - decompressed data is always the same. This helps with - the ReferenceFileSystem. + Determines the maximum number of rows in any chunk. + + Uses the BBI header's uncompress_buff_size as the authoritative source, + since this is the buffer size the file was created with and guarantees + all chunks can be decompressed into this space. Args: file_object: BigWig file opened as bytes. + sample_size: Number of chunks to sample for verification. Returns: - Number of rows in a chunk + Maximum number of rows that could fit in the uncompressed buffer. """ - - rows_for_chunks = [] - - 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) # nosec - data_offsets = data_offsets[sample_indices] - data_sizes = data_sizes[sample_indices] - - for data_offset, data_size in zip(data_offsets, data_sizes): - file_object.seek(data_offset, 0) # type: ignore - decoded = zlib.decompress(file_object.read(data_size)) # type: ignore - header = WIGSectionHeader.from_bytes(decoded[:24]) - rows_for_chunks.append(header.item_count) - return max(rows_for_chunks) + # The BBI header's uncompress_buff_size is the authoritative value + # It defines the maximum uncompressed size for any chunk in the file + # Each row is 12 bytes, plus 24-byte header + return (self.bbi_header.uncompress_buff_size - 24) // 12 + + +def prepare_index_for_bigwig( + chromosome_offsets: npt.NDArray[np.int64], + rtree_leaf_nodes: npt.NDArray[np.void], +) -> npt.NDArray[np.generic]: + """ + Standalone function for preparing index data in a separate process. + This can be pickled and run with ProcessPoolExecutor. + + Args: + path: Path to bigwig file (for identification) + bigwig_id: ID of the bigwig file + chromosome_offsets: Offsets for converting local to global positions + rtree_leaf_nodes: The rtree leaf nodes from the bigwig file + + Returns: + sorted data + """ + dtype = np.dtype( + [ + ("start_chrom_ix", "u4"), + ("start_base", "u4"), + ("end_chrom_ix", "u4"), + ("end_base", "u4"), + ("data_offset", "u8"), + ("data_size", "u8"), + ("start_abs", "i8"), + ("end_abs", "i8"), + ] + ) + + data = np.empty(rtree_leaf_nodes.shape, dtype=dtype) + data["start_chrom_ix"] = rtree_leaf_nodes["start_chrom_ix"] + data["start_base"] = rtree_leaf_nodes["start_base"] + data["end_chrom_ix"] = rtree_leaf_nodes["end_chrom_ix"] + data["end_base"] = rtree_leaf_nodes["end_base"] + data["data_offset"] = rtree_leaf_nodes["data_offset"] + data["data_size"] = rtree_leaf_nodes["data_size"] + + # make_positions_global inline + data["start_abs"] = ( + rtree_leaf_nodes["start_base"] + + chromosome_offsets[rtree_leaf_nodes["start_chrom_ix"]] + ).astype(np.int64) + data["end_abs"] = ( + rtree_leaf_nodes["end_base"] + + chromosome_offsets[rtree_leaf_nodes["end_chrom_ix"]] + ).astype(np.int64) + + sort_indices = np.argsort(data["start_abs"]) + sorted_data = data[sort_indices] + + return sorted_data diff --git a/bigwig_loader/collection.py b/bigwig_loader/collection.py index f117412..04192c4 100644 --- a/bigwig_loader/collection.py +++ b/bigwig_loader/collection.py @@ -1,4 +1,7 @@ import logging +import os +from concurrent.futures import ProcessPoolExecutor +from concurrent.futures import as_completed from functools import cached_property from pathlib import Path from typing import Any @@ -14,6 +17,7 @@ from bigwig_loader.batch_processor import BatchProcessor from bigwig_loader.bigwig import BigWig +from bigwig_loader.bigwig import prepare_index_for_bigwig from bigwig_loader.decompressor import Decoder from bigwig_loader.memory_bank import MemoryBank from bigwig_loader.merge_intervals import merge_interval_dataframe @@ -22,6 +26,8 @@ from bigwig_loader.subtract_intervals import subtract_interval_dataframe from bigwig_loader.util import chromosome_sort +logger = logging.getLogger(__name__) + class BigWigCollection: """ @@ -47,7 +53,7 @@ def __init__( bigwig_path: Union[str, Sequence[str], Path, Sequence[Path]], 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, first_n_files: Optional[int] = None, pinned_memory_size: int = 10000, ): @@ -81,11 +87,49 @@ def __init__( self.run_indexing() self._batch_processor = None - def run_indexing(self) -> None: - for bigwig in self.bigwigs: - bigwig.run_indexing( - chromosome_offsets=self.local_chrom_ids_to_offset_matrix[bigwig.id] - ) + def run_indexing(self, max_workers: Optional[int] = None) -> None: + """ + Run indexing for all bigwig files in parallel using multiple CPUs. + """ + n_bigwigs = len(self.bigwigs) + if n_bigwigs == 0: + return + + if n_bigwigs <= 4 or max_workers == 1: + for bigwig in self.bigwigs: + bigwig.run_indexing( + chromosome_offsets=self.local_chrom_ids_to_offset_matrix[bigwig.id] + ) + return + + if max_workers is None: + max_workers = min(os.cpu_count() or 4, n_bigwigs) + + verbose = True # logger.isEnabledFor(logging.INFO) + + with ProcessPoolExecutor(max_workers=max_workers) as executor: + futures = { + executor.submit( + prepare_index_for_bigwig, + self.local_chrom_ids_to_offset_matrix[bigwig.id], + bigwig.rtree_leaf_nodes, + ): bigwig + for bigwig in self.bigwigs + } + + for i, future in enumerate(as_completed(futures), 1): + bigwig = futures[future] + sorted_data = future.result() + bigwig.chromosome_offsets = self.local_chrom_ids_to_offset_matrix[ + bigwig.id + ] + bigwig.finalize_indexing(sorted_data) + + if verbose and (i % 100 == 0 or i == n_bigwigs): + print(f"\rIndexed {i}/{n_bigwigs}", end="", flush=True) + + if verbose: + print() def __len__(self) -> int: return len(self.bigwigs) @@ -217,13 +261,11 @@ def intervals( Returns: pandas dataframe of intervals (chrom, start, end, value) """ - logging.info("Collecting intervals from BigWig files.") + logger.info("Collecting intervals from BigWig files.") interval_for_all_bigwigs = [] n_bigwigs = len(self.bigwigs) for i, bw in enumerate(self.bigwigs): - logging.info( - f"Getting intervals for BigWig file {i}/{n_bigwigs}: {bw.path}" - ) + logger.info(f"Getting intervals for BigWig file {i}/{n_bigwigs}: {bw.path}") interval_for_all_bigwigs.append( bw.intervals( include_chromosomes=include_chromosomes, @@ -244,14 +286,14 @@ def intervals( intervals["start"] = intervals["start"].values.clip(padding) - padding # type: ignore intervals["end"] = intervals["end"].values + padding # type: ignore if merge: - logging.info( + logger.info( "Merging intervals from different BigWig Files into one interval list." ) intervals = merge_interval_dataframe( intervals, is_sorted=False, allow_gap=merge_allow_gap ) if blacklist is not None: - logging.info("Subtracting blacklisted regions.") + logger.info("Subtracting blacklisted regions.") intervals = subtract_interval_dataframe( intervals=intervals, blacklist=blacklist, buffer=blacklist_buffer ) @@ -375,7 +417,7 @@ def create_global_position_system( # exceeding this would be a problem as all the positions # in bigwig files are encoded in 32 bits. Making a global # base position that exceeds this number would be a problem. - logging.warning( + logger.warning( "The sum of sizes of the chromosomes exceeds the size of uint32" ) for bigwig in self.bigwigs: diff --git a/bigwig_loader/decompressor.py b/bigwig_loader/decompressor.py index 372048c..a09f3fe 100644 --- a/bigwig_loader/decompressor.py +++ b/bigwig_loader/decompressor.py @@ -8,6 +8,9 @@ import numpy as np import numpy.typing as npt +logger = logging.getLogger(__name__) +logger.setLevel(logging.INFO) + codec = numcodecs.registry.get_codec( { "id": "nvcomp_batch", @@ -16,6 +19,20 @@ ) +class DecompressionError(Exception): + """Raised when nvcomp decompression fails for one or more chunks.""" + + def __init__( + self, + message: str, + failed_bigwig_ids: Optional[np.ndarray] = None, + status_codes: Optional[np.ndarray] = None, + ): + super().__init__(message) + self.failed_bigwig_ids = failed_bigwig_ids + self.status_codes = status_codes + + class Decoder: # based on: `kvikio.nvcomp_codec.NvCompBatchCodec` @@ -51,7 +68,7 @@ def reserve_memory(self, num_chunks: int, generocity: float = 1.2) -> None: num_chunks = int(num_chunks * generocity) - logging.debug(f"Reserving memory for {num_chunks} chunks") + logger.debug(f"Reserving memory for {num_chunks} chunks") self.uncomp_chunks = [ cp.empty(self.max_uncompressed_chunk_size, dtype=cp.uint8) @@ -151,6 +168,27 @@ def decode( stream, ) + failed_mask = statuses != 0 + if failed_mask.any(): + failed_statuses = statuses[failed_mask].get() + failed_bigwig_ids = ( + bigwig_ids[failed_mask].get() if bigwig_ids is not None else None + ) + unique_failed_bigwigs = ( + np.unique(failed_bigwig_ids) if failed_bigwig_ids is not None else None + ) + + message = ( + f"nvcomp decompression failed for {failed_mask.sum()} chunks. " + f"Status codes: {np.unique(failed_statuses).tolist()}" + ) + + raise DecompressionError( + message=message, + failed_bigwig_ids=unique_failed_bigwigs, + status_codes=failed_statuses, + ) + chrom_ids, start, end, value, n_rows_for_chunks = self.post_process( cp.concatenate(uncomp_chunks), bigwig_ids ) diff --git a/bigwig_loader/functional.py b/bigwig_loader/functional.py index 4378f94..c9668ce 100644 --- a/bigwig_loader/functional.py +++ b/bigwig_loader/functional.py @@ -100,6 +100,11 @@ def load_and_decode( local_to_global=local_to_global, ) + if stream is not None: + stream.synchronize() + else: + cp.cuda.Device().synchronize() + start_data, end_data, value_data, bigwig_start_indices = decoder.decode_batch( bigwig_ids=bigwig_ids, comp_chunk_pointers=comp_chunk_pointers, diff --git a/bigwig_loader/intervals_to_values.py b/bigwig_loader/intervals_to_values.py index 72e5808..a8e958c 100644 --- a/bigwig_loader/intervals_to_values.py +++ b/bigwig_loader/intervals_to_values.py @@ -9,6 +9,8 @@ from bigwig_loader.default_value import replace_out_tensor_if_needed from bigwig_loader.searchsorted import interval_searchsorted +logger = logging.getLogger(__name__) + CUDA_KERNEL_DIR = Path(__file__).parent.parent / "cuda_kernels" @@ -153,9 +155,13 @@ def intervals_to_values( # Handle scaling factors - convert to float32 if provided if scaling_factors is not None: - scaling_factors = cp.ascontiguousarray(scaling_factors, dtype=cp.float32) + scaling_factors_arr = cp.ascontiguousarray(scaling_factors, dtype=cp.float32) + use_scaling_factors = True else: - scaling_factors = cp.asarray([], dtype=cp.float32) + scaling_factors_arr = cp.empty( + 0, dtype=cp.float32 + ) # Empty array, won't be accessed + use_scaling_factors = False cuda_kernel( (grid_size,), @@ -170,16 +176,18 @@ def intervals_to_values( array_value, num_tracks, batch_size, - sequence_length, # should really sequence length, not reduced sequence length + sequence_length, max_number_intervals, window_size, cp.float32(default_value), default_value_isnan, - scaling_factors, + scaling_factors_arr, + use_scaling_factors, out, ), dtype=dtype, ) + return out diff --git a/bigwig_loader/memory_bank.py b/bigwig_loader/memory_bank.py index bd484f6..729cb5a 100644 --- a/bigwig_loader/memory_bank.py +++ b/bigwig_loader/memory_bank.py @@ -5,6 +5,8 @@ from kvikio.cufile import CuFile from kvikio.cufile import IOFuture +logger = logging.getLogger(__name__) + class MemoryBank: def __init__(self, nbytes: int = 10000, elastic: bool = True): @@ -58,7 +60,7 @@ def increase_memory_size(self, new_size: int, generosity: float = 1.2) -> None: if new_size > self._gpu_byte_array.size: self.await_all_promises() new_size = int(new_size * generosity) - logging.debug( + logger.debug( f"CuFileMemoryBank: Increasing size of cupy byte from {self._gpu_byte_array.size} to {new_size}" ) new_mem = cp.empty(new_size, dtype=cp.uint8) @@ -117,9 +119,6 @@ def add_many( offsets: byte offsets to starts of compressed chunks sizes: sizes of compressed chunks skip_bytes: skips this number of bytes from offset - increase_memory_size: whether to elastically increase the - size of the pinned memory if the new chunks don't - fit in anymore. (default: True) """ new_size = self.compressed_chunk_offsets[-1] + sum(sizes) diff --git a/bigwig_loader/searchsorted.py b/bigwig_loader/searchsorted.py index 7151ed5..991109d 100644 --- a/bigwig_loader/searchsorted.py +++ b/bigwig_loader/searchsorted.py @@ -1,8 +1,12 @@ +import logging from typing import Literal import cupy as cp from cupy._sorting.search import _searchsorted_code +logger = logging.getLogger(__name__) + + _preamble = """ template __device__ bool _isnan(T val) { @@ -65,22 +69,55 @@ def searchsorted( absolute_indices: whether to give the indices with respect to the entire array (True) or for the subarrays (False). Returns: - And array of size n_subarrays x n_queries with insertion indices. + An array of size n_subarrays x n_queries with insertion indices. """ start_indices, sizes = starts_and_sizes(start_indices, sizes) n_subarrays = len(sizes) n_queries = len(queries) + + # If the array is empty, just return zeros + if len(array) == 0: + return cp.zeros((n_subarrays, n_queries), dtype=cp.uint32) + + # The kernel has undefined behavior when n_bins=0 (accesses bins[-1]) + # We mask empty subarrays, run the kernel with safe values, then fix results + empty_mask = sizes == 0 + has_empty = bool(empty_mask.any()) + + if has_empty: + n_empty = int(empty_mask.sum()) + logger.debug(f"searchsorted: {n_empty} empty subarrays detected, applying fix") + # Set empty subarrays to size=1 pointing to index 0 + # This prevents the kernel from accessing bins[-1] (undefined behavior) + sizes = sizes.copy() + sizes[empty_mask] = 1 + idx = cp.arange(n_subarrays, dtype=queries.dtype)[:, cp.newaxis] - queries = queries[cp.newaxis, :] + queries_broadcast = queries[cp.newaxis, :] output = cp.zeros((n_subarrays, n_queries), dtype=cp.uint32) result = _searchsorted_kernel( - queries, idx, start_indices, sizes, array, side == "right", True, output + queries_broadcast, + idx, + start_indices, + sizes, + array, + side == "right", + True, + output, ) + if absolute_indices: - return result + start_indices[:, cp.newaxis] + result = result + start_indices[:, cp.newaxis] + + # For empty subarrays, set result to 0 + # This ensures found_starts == found_ends == 0 for empty tracks, + # so the interval processing loop does nothing (no intervals to process) + if has_empty: + result[empty_mask, :] = 0 + return result @@ -96,7 +133,6 @@ def interval_searchsorted( """This is a convenience function that does searchsorted on both the start and end arrays and returns the results. """ - start_indices, sizes = starts_and_sizes(start_indices, sizes) # n_tracks x n_queries @@ -107,6 +143,7 @@ def interval_searchsorted( side="right", absolute_indices=absolute_indices, ) + found_ends = searchsorted( array_start, queries=query_ends, diff --git a/bigwig_loader/streamed_dataset.py b/bigwig_loader/streamed_dataset.py index 1ddbb33..0113aff 100644 --- a/bigwig_loader/streamed_dataset.py +++ b/bigwig_loader/streamed_dataset.py @@ -1,5 +1,7 @@ +import logging import queue import threading +import traceback from types import TracebackType from typing import Generator from typing import Iterable @@ -13,9 +15,12 @@ from bigwig_loader.batch_processor import BatchProcessor from bigwig_loader.batch_processor import PreprocessedReturnType from bigwig_loader.collection import BigWigCollection +from bigwig_loader.decompressor import DecompressionError from bigwig_loader.default_value import replace_out_tensor_if_needed from bigwig_loader.intervals_to_values import intervals_to_values +logger = logging.getLogger(__name__) + InputBatchType = Batch | IntervalType @@ -53,6 +58,8 @@ def batch_processor(self) -> BatchProcessor: def _worker(self) -> None: while self._wait_until_ready(): + query_received = False + output_produced = False try: # necessary because some other thread # (for instance pytorch-lightning) @@ -61,6 +68,7 @@ def _worker(self) -> None: with cp.cuda.Device(self.stream.device_id): with self.stream as stream: query = self.input_queue.get(timeout=1) + query_received = True query = Batch.from_args(query) result = self.batch_processor.preprocess( chromosomes=query.chromosomes, @@ -71,18 +79,43 @@ def _worker(self) -> None: ) self.stream.synchronize() self._put_output_queue(query, result) - self.input_queue.task_done() + output_produced = True except queue.Empty: + logger.debug(f"Queue Empty, batch_count: {self._batch_count}") + except DecompressionError as e: + if e.failed_bigwig_ids is None: + logger.error( + f"Decompression failed for some chunks. " + f"Status codes: {set(e.status_codes.tolist()) if e.status_codes is not None else 'unknown'}" + ) + + else: + failed_paths = [ + str(self._collection.bigwigs[i].path) + for i in e.failed_bigwig_ids + ] + logger.error( + f"Decompression failed for {len(failed_paths)} file(s): {failed_paths}. " + f"Status codes: {set(e.status_codes.tolist()) if e.status_codes is not None else 'unknown'}" + ) + except Exception as e: + logger.error( + f"Worker {self.worker_id} encountered error processing batch: {e}\n" + f"Traceback:\n{traceback.format_exc()}" + ) + finally: + if query_received: + self.input_queue.task_done() + if not output_produced: self.ready.set() - continue - self._batch_count += 1 + + if output_produced: + self._batch_count += 1 def _wait_until_ready(self) -> bool: while True: if self.stop_event.is_set(): return False - # returns True when ready event is set - # and false when the timeout is reached if self.ready.wait(timeout=1): self.ready.clear() return True diff --git a/cuda_kernels/intervals_to_values_contiguous.cu b/cuda_kernels/intervals_to_values_contiguous.cu index c4e699f..74caf72 100644 --- a/cuda_kernels/intervals_to_values_contiguous.cu +++ b/cuda_kernels/intervals_to_values_contiguous.cu @@ -31,12 +31,12 @@ void intervals_to_values_kernel( 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 + const float* scaling_factors, + const bool use_scaling_factors, 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; @@ -44,23 +44,25 @@ void intervals_to_values_kernel( 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]; + unsigned int found_start_index = found_starts[i]; + unsigned int found_end_index = found_ends[i]; + unsigned int query_start = query_starts[batch_index]; + unsigned int query_end = query_ends[batch_index]; - int cursor = found_start_index + j; + unsigned 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; + unsigned int interval_start = track_starts[cursor]; + unsigned int interval_end = track_ends[cursor]; + + // Calculate indices - these are relative to query_start, so they fit in int + // Use signed arithmetic for the comparison with 0 + int start_index = (interval_start > query_start) ? (int)(interval_start - query_start) : 0; + int end_index = (int)(min(interval_end, query_end) - query_start); float value = track_values[cursor]; - // Apply scaling factor here - if (scaling_factors != nullptr) { + if (use_scaling_factors) { value *= scaling_factors[track_index]; } @@ -73,12 +75,12 @@ void intervals_to_values_kernel( } } } 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]; + unsigned int found_start_index = found_starts[i]; + unsigned int found_end_index = found_ends[i]; + unsigned int query_start = query_starts[batch_index]; + unsigned int query_end = query_ends[batch_index]; - int cursor = found_start_index; + unsigned int cursor = found_start_index; int window_index = 0; float summation = 0.0f; int valid_count = 0; @@ -89,11 +91,12 @@ void intervals_to_values_kernel( 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]; + unsigned int interval_start = track_starts[cursor]; + unsigned 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; + // Calculate indices relative to query_start + int start_index = (interval_start > query_start) ? (int)(interval_start - query_start) : 0; + int end_index = (int)(min(interval_end, query_end) - query_start); if (start_index >= window_end) { float final_value; @@ -104,8 +107,7 @@ void intervals_to_values_kernel( final_value = summation / window_size; } - // Apply scaling factor - if (scaling_factors != nullptr) { + if (use_scaling_factors) { final_value *= scaling_factors[track_index]; } @@ -135,8 +137,7 @@ void intervals_to_values_kernel( final_value = summation / window_size; } - // Apply scaling factor - if (scaling_factors != nullptr) { + if (use_scaling_factors) { final_value *= scaling_factors[track_index]; } @@ -156,8 +157,6 @@ void intervals_to_values_kernel( } } -// Update wrapper functions to include scaling_factors - extern "C" __global__ void intervals_to_values_float32( const unsigned int* query_starts, @@ -175,6 +174,7 @@ void intervals_to_values_float32( const float default_value, const bool default_value_isnan, const float* scaling_factors, + const bool use_scaling_factors, float* out ) { intervals_to_values_kernel( @@ -182,7 +182,7 @@ void intervals_to_values_float32( 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 + scaling_factors, use_scaling_factors, out ); } @@ -203,6 +203,7 @@ void intervals_to_values_bfloat16( const float default_value, const bool default_value_isnan, const float* scaling_factors, + const bool use_scaling_factors, __nv_bfloat16* out ) { intervals_to_values_kernel<__nv_bfloat16>( @@ -210,6 +211,6 @@ void intervals_to_values_bfloat16( 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 + scaling_factors, use_scaling_factors, out ); } diff --git a/pixi.lock b/pixi.lock index c69d9da..1b32325 100644 --- a/pixi.lock +++ b/pixi.lock @@ -11,78 +11,182 @@ environments: - 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/_openmp_mutex-4.5-7_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.3.1-py311h9bf148f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45-default_hfdba357_104.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.45-default_h4852527_104.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/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.2-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.12.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-14.3.0-h442bea5_14.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-14.3.0-h298d278_14.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/google-crc32c-1.7.1-py311h2702b87_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-14.3.0-h2185e75_14.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-14.3.0-he6f32d1_14.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/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.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.45-default_hbd61a6d_104.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.77-h3ff7636_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/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 + - 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-hf649bbc_114.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/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/libopenblas-0.3.30-pthreads_h94d23a6_3.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_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-14.3.0-h8f1669f_14.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-h9f08a49_114.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-hd0affe5_2.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-hd0affe5_2.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.7-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_1.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/linux-64/numpy-2.3.4-py311h2e04523_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numcodecs-0.16.5-py311hed34c8f_0.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.18.0-py311hdf67eae_0.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.5-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.41.5-py311h902ca64_1.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_1.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.7-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.5-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.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/44/8c/04797ebb53748b4d594d4c334b2d9a99f2d2e06e19ad505f1313ca5d56eb/s3fs-2025.12.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/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 @@ -788,7 +892,7 @@ environments: - 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: + test-released: channels: - url: https://conda.anaconda.org/rapidsai/ - url: https://conda.anaconda.org/conda-forge/ @@ -799,17 +903,16 @@ environments: - 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/_openmp_mutex-4.5-7_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/dataloading/linux-64/bigwig-loader-0.3.1-py311h9bf148f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45-default_hfdba357_104.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.45-default_h4852527_104.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/ca-certificates-2025.11.12-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 @@ -837,28 +940,29 @@ environments: - 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/linux-64/cython-3.2.2-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/noarch/fsspec-2025.12.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-14.3.0-h442bea5_14.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-14.3.0-h298d278_14.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/linux-64/gmpy2-2.2.1-py311h92a432a_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/google-crc32c-1.7.1-py311h2702b87_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-14.3.0-h2185e75_14.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-14.3.0-he6f32d1_14.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/jinja2-3.1.6-pyhcf101f3_1.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/ld_impl_linux-64-2.45-default_hbd61a6d_104.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/libcap-2.77-h3ff7636_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/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 - 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 @@ -870,10 +974,10 @@ environments: - 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/libgcc-15.2.0-he0feb66_14.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-14.3.0-hf649bbc_114.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_14.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_14.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 @@ -886,21 +990,21 @@ environments: - 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/libprotobuf-5.29.3-h7460b1f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-14.3.0-h8f1669f_14.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.1-h0c1763c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_14.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-14.3.0-h9f08a49_114.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_14.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.10-hd0affe5_2.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/libudev1-257.10-hd0affe5_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.2-h5347b49_1.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/libxml2-16-2.15.1-hf2a90c1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.1-h031cc0b_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/llvm-openmp-21.1.7-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 @@ -908,22 +1012,22 @@ environments: - 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/conda-forge/linux-64/nccl-2.28.9.1-h4d09622_1.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/noarch/networkx-3.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numcodecs-0.16.5-py311hed34c8f_0.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/linux-64/optree-0.18.0-py311hdf67eae_0.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/linux-64/pandas-2.3.3-py311hed34c8f_2.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-2.12.5-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.41.5-py311h902ca64_1.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 @@ -944,58 +1048,108 @@ environments: - 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/tk-8.6.13-noxft_ha0e22de_103.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-inspection-0.4.2-pyhd8ed1ab_1.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/universal_pathlib-0.3.7-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 + - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.1.5-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.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/b7/58/3bf0b7d474607dc7fd67dd1365c4e0f392c8177eaf4054e5ddee3ebd53b5/aiobotocore-2.26.0-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/ba/88/6237e97e3385b57b5f1528647addea5cc03d4d65d5979ab24327d41fb00d/alembic-1.17.2-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/7f/9c/36c5c37947ebfb8c7f22e0eb6e4d188ee2d53aa3880f3f2744fb894f0cb1/anyio-4.12.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/55/d2/507fd0ee4dd574d2bdbdeac5df83f39d2cae1ffe97d4622cca6f6bab39f1/botocore-1.40.70-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/3c/56/f47a80254ed4991cce9a2f6d8ae8aafbc8df1c3270e966b2927289e5a12f/boto3-1.41.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4e/4e/21cd0b8f365449f1576f93de1ec8718ed18a7a3bc086dfbdeb79437bba7a/botocore-1.41.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e6/46/eb6eca305c77a4489affe1c5d8f4cae82f285d9addd8de4ec084a7184221/cachetools-6.2.2-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/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f4/36/2d93fbf6a04670f3874aed397d5a5371948a076e3249244a9e84fb0e02d6/coverage-7.12.0-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/c2/dc/faa52fe784892bb057934248ded02705d26ca3aca562876e61c239947036/fastapi-0.123.5-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/76/a1/d25af61958c2c7eb978164aeba0350719f615179ba3f428b682b9a5fdace/librt-0.6.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.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/99/db/d217815705987d2cbace2edd9100926196d6f85bcb9b5af05058d6e3c8ad/mypy-1.19.0-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/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/2d/fc/56cba14af8ad8fd020c85b6e44328520ac55939bb1f9d01444ad470504cb/s3fs-2025.10.0-py3-none-any.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/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/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/44/8c/04797ebb53748b4d594d4c334b2d9a99f2d2e06e19ad505f1313ca5d56eb/s3fs-2025.12.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/e1/5ef25f52973aa12a19cf4e1375d00932d7fb354ffd310487ba7d44225c1a/s3transfer-0.15.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/d9/52/1064f510b141bd54025f9b55105e26d1fa970b9be67ad766380a3c9b74b0/starlette-0.50.0-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/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 osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda - 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/noarch/ca-certificates-2025.11.12-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-3_h51639a9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.11.0-3_hb0561ab_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-21.1.7-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/libgcc-15.2.0-hcbb3090_14.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_14.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_14.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.11.0-3_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/libsqlite-3.51.1-h9a5124b_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/llvm-openmp-21.1.7-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/numpy-2.3.5-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/osx-arm64/pandas-2.3.3-py311hdb8e4fa_2.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 @@ -1005,63 +1159,93 @@ environments: - 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/osx-arm64/tk-8.6.13-h892fb3f_3.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/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/b7/58/3bf0b7d474607dc7fd67dd1365c4e0f392c8177eaf4054e5ddee3ebd53b5/aiobotocore-2.26.0-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/ba/88/6237e97e3385b57b5f1528647addea5cc03d4d65d5979ab24327d41fb00d/alembic-1.17.2-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/7f/9c/36c5c37947ebfb8c7f22e0eb6e4d188ee2d53aa3880f3f2744fb894f0cb1/anyio-4.12.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/55/d2/507fd0ee4dd574d2bdbdeac5df83f39d2cae1ffe97d4622cca6f6bab39f1/botocore-1.40.70-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/3c/56/f47a80254ed4991cce9a2f6d8ae8aafbc8df1c3270e966b2927289e5a12f/boto3-1.41.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4e/4e/21cd0b8f365449f1576f93de1ec8718ed18a7a3bc086dfbdeb79437bba7a/botocore-1.41.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e6/46/eb6eca305c77a4489affe1c5d8f4cae82f285d9addd8de4ec084a7184221/cachetools-6.2.2-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/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/f5/f9a4a053a5bbff023d3bec259faac8f11a1e5a6479c2ccf586f910d8dac7/coverage-7.12.0-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/c2/dc/faa52fe784892bb057934248ded02705d26ca3aca562876e61c239947036/fastapi-0.123.5-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/51/c7/b64cae5dba3a1b138d7123ec36bb5ccd39d39939f18454407e5468f4763f/fsspec-2025.12.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/88/3c/26335536ed9ba097c79cffcee148393592e55758fe76d99015af3e47a6d0/librt-0.6.3-cp311-cp311-macosx_11_0_arm64.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/3b/6a/64c25a089e8537441fe67c09ecb7f3f7fb5d98cd04faf01f605d43aca41c/numcodecs-0.16.3-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/41/6b/63f095c9f1ce584fdeb595d663d49e0980c735a1d2004720ccec252c5d47/mypy-1.19.0-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/0e/cc/0d97ef55dda48cb0f93d7b92d761208e7a99bd2eea6b0e859426e6a99a21/numcodecs-0.16.5-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/82/2f/e68750da9b04856e2a7ec56fc6f034a5a79775e9b9a81882252789873798/pydantic-2.12.4-py3-none-any.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/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-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/2d/fc/56cba14af8ad8fd020c85b6e44328520ac55939bb1f9d01444ad470504cb/s3fs-2025.10.0-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/44/8c/04797ebb53748b4d594d4c334b2d9a99f2d2e06e19ad505f1313ca5d56eb/s3fs-2025.12.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/e1/5ef25f52973aa12a19cf4e1375d00932d7fb354ffd310487ba7d44225c1a/s3transfer-0.15.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/d9/52/1064f510b141bd54025f9b55105e26d1fa970b9be67ad766380a3c9b74b0/starlette-0.50.0-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/79/77/53c2d3a0413bc55b4c91067a0c41e55451be9b0784d204e4e46ce5abf668/universal_pathlib-0.3.7-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 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 @@ -1072,6 +1256,28 @@ packages: purls: [] size: 8298 timestamp: 1762822449517 +- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-7_kmp_llvm.conda + build_number: 7 + sha256: c0cddb66070dd6355311f7667ce2acccf70d1013edaa6e97f22859502fefdb22 + md5: 887b70e1d607fba7957aa02f9ee0d939 + depends: + - llvm-openmp >=9.0.1 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 8244 + timestamp: 1764092331208 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda + build_number: 7 + sha256: 7acaa2e0782cad032bdaf756b536874346ac1375745fb250e9bdd6a48a7ab3cd + md5: a44032f282e7d2acdeb1c240308052dd + depends: + - llvm-openmp >=9.0.1 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 8325 + timestamp: 1764092507920 - 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 @@ -1167,6 +1373,22 @@ packages: - 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/b7/58/3bf0b7d474607dc7fd67dd1365c4e0f392c8177eaf4054e5ddee3ebd53b5/aiobotocore-2.26.0-py3-none-any.whl + name: aiobotocore + version: 2.26.0 + sha256: a793db51c07930513b74ea7a95bd79aaa42f545bdb0f011779646eafa216abec + requires_dist: + - aiohttp>=3.9.2,<4.0.0 + - aioitertools>=0.5.1,<1.0.0 + - botocore>=1.41.0,<1.41.6 + - 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.43.0,<1.43.6 ; extra == 'awscli' + - boto3>=1.41.0,<1.41.6 ; 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 @@ -1239,6 +1461,17 @@ packages: - tomli ; python_full_version < '3.11' - tzdata ; extra == 'tz' requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/ba/88/6237e97e3385b57b5f1528647addea5cc03d4d65d5979ab24327d41fb00d/alembic-1.17.2-py3-none-any.whl + name: alembic + version: 1.17.2 + sha256: f483dd1fe93f6c5d49217055e4d15b905b425b6af906746abb35b69c1996c4e6 + 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 @@ -1274,6 +1507,17 @@ packages: - 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/7f/9c/36c5c37947ebfb8c7f22e0eb6e4d188ee2d53aa3880f3f2744fb894f0cb1/anyio-4.12.0-py3-none-any.whl + name: anyio + version: 4.12.0 + sha256: dad2376a628f98eeca4881fc56cd06affd18f659b17a747d3ff0307ced94b1bb + requires_dist: + - exceptiongroup>=1.0.2 ; python_full_version < '3.11' + - idna>=2.8 + - typing-extensions>=4.5 ; python_full_version < '3.13' + - trio>=0.32.0 ; python_full_version >= '3.10' and extra == 'trio' + - trio>=0.31.0 ; python_full_version < '3.10' and 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 @@ -1330,9 +1574,9 @@ packages: - 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 +- conda: https://conda.anaconda.org/dataloading/linux-64/bigwig-loader-0.3.1-py311h9bf148f_0.conda + sha256: bc8d417a6cd2038f2c839d8bc37d9eb87ab468b7db0bb71f853c07e9013472f2 + md5: 26691cae44c8b09d0fd4079d33d0047e depends: - cupy >=12.0.0 - cython @@ -1350,8 +1594,8 @@ packages: - python_abi 3.11.* *_cp311 - universal_pathlib license: Apache-2.0 - size: 295306 - timestamp: 1761230326189 + size: 301183 + timestamp: 1762959267651 - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.44-h9d8b0ac_5.conda sha256: 62cd59d8e63a7d564e0c1be6864d1a57360c76ed5c813d8d178c88d79a989fc3 md5: 071454f683b847f604f85b5284555dbf @@ -1364,6 +1608,19 @@ packages: - pkg:pypi/binutils-impl-linux-64 size: 3663196 timestamp: 1762674679053 +- conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45-default_hfdba357_104.conda + sha256: 054a77ccab631071a803737ea8e5d04b5b18e57db5b0826a04495bd3fdf39a7c + md5: a7a67bf132a4a2dea92a7cb498cdc5b1 + depends: + - ld_impl_linux-64 2.45 default_hbd61a6d_104 + - sysroot_linux-64 + - zstd >=1.5.7,<1.6.0a0 + license: GPL-3.0-only + license_family: GPL + purls: + - pkg:pypi/binutils-impl-linux-64 + size: 3747046 + timestamp: 1764007847963 - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.44-h4852527_5.conda sha256: 3423a6a3b14daf86bb3590a44c94c2f0415dffa4f0c3855acaa2ac52fb57515b md5: 49bfee16b8ccbbe72aee2c806d49d34b @@ -1374,6 +1631,17 @@ packages: - pkg:pypi/binutils-linux-64 size: 36189 timestamp: 1762674702264 +- conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.45-default_h4852527_104.conda + sha256: ed23fee4db69ad82320cca400fc77404c3874cd866606651a20bf743acd1a9b1 + md5: e30e71d685e23cc1e5ac1c1990ba1f81 + depends: + - binutils_impl_linux-64 2.45 default_hfdba357_104 + license: GPL-3.0-only + license_family: GPL + purls: + - pkg:pypi/binutils-linux-64 + size: 36180 + timestamp: 1764007883258 - conda: https://conda.anaconda.org/conda-forge/linux-64/biopython-1.86-py311h49ec1c0_0.conda sha256: edb6339d4714f642d7d97649b4e379cc513a15f1e666a4a3d19fec4a883c2296 md5: e52878a5c94017b6f7c033ba7d26bc6b @@ -1398,6 +1666,16 @@ packages: - 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/3c/56/f47a80254ed4991cce9a2f6d8ae8aafbc8df1c3270e966b2927289e5a12f/boto3-1.41.5-py3-none-any.whl + name: boto3 + version: 1.41.5 + sha256: bb278111bfb4c33dca8342bda49c9db7685e43debbfa00cc2a5eb854dd54b745 + requires_dist: + - botocore>=1.41.5,<1.42.0 + - jmespath>=0.7.1,<2.0.0 + - s3transfer>=0.15.0,<0.16.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 @@ -1407,7 +1685,18 @@ packages: - 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' + - awscrt==0.27.6 ; extra == 'crt' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/4e/4e/21cd0b8f365449f1576f93de1ec8718ed18a7a3bc086dfbdeb79437bba7a/botocore-1.41.5-py3-none-any.whl + name: botocore + version: 1.41.5 + sha256: 3fef7fcda30c82c27202d232cfdbd6782cb27f20f8e7e21b20606483e66ee73a + 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.29.0 ; extra == 'crt' requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_8.conda sha256: c30daba32ddebbb7ded490f0e371eae90f51e72db620554089103b4a6934b0d5 @@ -1442,11 +1731,26 @@ packages: - pkg:pypi/ca-certificates size: 155907 timestamp: 1759649036195 +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.11.12-hbd8a1cb_0.conda + sha256: b986ba796d42c9d3265602bc038f6f5264095702dd546c14bc684e60c385e773 + md5: f0991f0f84902f6b6009b4d2350a83aa + depends: + - __unix + license: ISC + purls: + - pkg:pypi/ca-certificates + size: 152432 + timestamp: 1762967197890 - 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/e6/46/eb6eca305c77a4489affe1c5d8f4cae82f285d9addd8de4ec084a7184221/cachetools-6.2.2-py3-none-any.whl + name: cachetools + version: 6.2.2 + sha256: 6c09c98183bf58560c97b2abfcedcbaf6a896a490f534b031b661d3723b45ace + 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 @@ -1483,6 +1787,13 @@ packages: requires_dist: - colorama ; sys_platform == 'win32' requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + name: click + version: 8.3.1 + sha256: 981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6 + 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 @@ -1497,6 +1808,20 @@ packages: requires_dist: - tomli ; python_full_version <= '3.11' and extra == 'toml' requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/9b/f5/f9a4a053a5bbff023d3bec259faac8f11a1e5a6479c2ccf586f910d8dac7/coverage-7.12.0-cp311-cp311-macosx_11_0_arm64.whl + name: coverage + version: 7.12.0 + sha256: d93fbf446c31c0140208dcd07c5d882029832e8ed7891a39d6d44bd65f2316c3 + requires_dist: + - tomli ; python_full_version <= '3.11' and extra == 'toml' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/f4/36/2d93fbf6a04670f3874aed397d5a5371948a076e3249244a9e84fb0e02d6/coverage-7.12.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + name: coverage + version: 7.12.0 + sha256: f3433ffd541380f3a0e423cff0f4926d55b0cc8c1d160fdc3be24a4c03aa65f7 + 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 @@ -1962,9 +2287,9 @@ packages: 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 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cython-3.2.2-py311h0daaf2c_0.conda + sha256: d904ae35e067fc770b57098f6598ce188993deb77292cce4fddb7926cf5bb777 + md5: 93f275715239f0ad95343a75fb15dbd7 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 @@ -1975,8 +2300,8 @@ packages: license_family: APACHE purls: - pkg:pypi/cython - size: 3743822 - timestamp: 1762342554163 + size: 3746405 + timestamp: 1764543729712 - conda: https://conda.anaconda.org/conda-forge/noarch/deprecated-1.3.1-pyhd8ed1ab_0.conda sha256: c994a70449d548dd388768090c71c1da81e1e128a281547ab9022908d46878c5 md5: bf74a83f7a0f2a21b5d709997402cac4 @@ -2035,6 +2360,40 @@ packages: - pydantic-settings>=2.0.0 ; extra == 'all' - pydantic-extra-types>=2.0.0 ; extra == 'all' requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/c2/dc/faa52fe784892bb057934248ded02705d26ca3aca562876e61c239947036/fastapi-0.123.5-py3-none-any.whl + name: fastapi + version: 0.123.5 + sha256: a9c708e47c0fa424139cddb8601d0f92d3111b77843c22e9c8d0164d65fe3c97 + requires_dist: + - starlette>=0.40.0,<0.51.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 @@ -2183,6 +2542,113 @@ packages: - zstandard ; python_full_version < '3.14' and extra == 'test-full' - tqdm ; extra == 'tqdm' requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/51/c7/b64cae5dba3a1b138d7123ec36bb5ccd39d39939f18454407e5468f4763f/fsspec-2025.12.0-py3-none-any.whl + name: fsspec + version: 2025.12.0 + sha256: 8bf1fe301b7d8acfa6e8571e3b1c3d158f909666642431cc78a1b7b4dbc5ec5b + 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.10' - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.10.0-pyhd8ed1ab_0.conda sha256: df5cb57bb668cd5b2072d8bd66380ff7acb12e8c337f47dd4b9a75a6a6496a6d md5: d18004c37182f83b9818b714825a7627 @@ -2194,6 +2660,34 @@ packages: - pkg:pypi/fsspec size: 146592 timestamp: 1761840236679 +- conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.12.0-pyhd8ed1ab_0.conda + sha256: 64a4ed910e39d96cd590d297982b229c57a08e70450d489faa34fd2bec36dbcc + md5: a3b9510e2491c20c7fc0f5e730227fbb + depends: + - python >=3.10 + license: BSD-3-Clause + purls: + - pkg:pypi/fsspec + size: 147391 + timestamp: 1764784920938 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-14.3.0-h442bea5_14.conda + sha256: f0d7031d4bd6fea9a0abd01454972f06c02c9ee6b425ab45b1aad3d9d107e88d + md5: e6b9e795d27f9f524c67ad8803157056 + depends: + - binutils_impl_linux-64 >=2.45 + - libgcc >=14.3.0 + - libgcc-devel_linux-64 14.3.0 hf649bbc_114 + - libgomp >=14.3.0 + - libsanitizer 14.3.0 h8f1669f_14 + - libstdcxx >=14.3.0 + - libstdcxx-devel_linux-64 14.3.0 h9f08a49_114 + - sysroot_linux-64 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: + - pkg:pypi/gcc-impl-linux-64 + size: 75290862 + timestamp: 1764276418162 - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-14.3.0-hd9e9e21_7.conda sha256: bddd2b13469334fdd474281753cf0b347ac16c3e123ecfdce556ba16fbda9454 md5: 54876317578ad4bf695aad97ff8398d9 @@ -2224,6 +2718,19 @@ packages: - pkg:pypi/gcc-linux-64 size: 27952 timestamp: 1759866571695 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-14.3.0-h298d278_14.conda + sha256: 4e99d5903113dfbb36a0a1510450c6a6e3ffc4a4c69d2d1e03c3efa1f1ba4e8f + md5: fe0c2ac970a0b10835f3432a3dfd4542 + 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: 27980 + timestamp: 1763757768300 - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda sha256: 309cf4f04fec0c31b6771a5809a1909b4b3154a2208f52351e1ada006f4c750c md5: c94a5994ef49749880a8139cf9afcbe1 @@ -2275,6 +2782,7 @@ packages: - 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: 202878 @@ -2295,6 +2803,21 @@ packages: - pkg:pypi/gmpy2 size: 156570 timestamp: 1762947542958 +- conda: https://conda.anaconda.org/conda-forge/linux-64/google-crc32c-1.7.1-py311h2702b87_1.conda + sha256: edd0dd67a6e7e7a76a70fc45b58e604a0b4a171d38b8a9b5f31218d590d63bf3 + md5: 7bf171dd64094e39fa6b508979680c8f + depends: + - __glibc >=2.17,<3.0.a0 + - libcrc32c >=1.1.2,<1.2.0a0 + - libgcc >=14 + - python >=3.11,<3.12.0a0 + - python_abi 3.11.* *_cp311 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/google-crc32c + size: 25050 + timestamp: 1755850341602 - 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 @@ -2306,6 +2829,20 @@ packages: - 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-h2185e75_14.conda + sha256: b7143edcd71ad48b8cb73083a03e874e36bff4defc034397772b361cb0ac3691 + md5: 54ae44a161f3e492c654582c5fc47537 + depends: + - gcc_impl_linux-64 14.3.0 h442bea5_14 + - libstdcxx-devel_linux-64 14.3.0 h9f08a49_114 + - 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: 14548897 + timestamp: 1764276675761 - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-14.3.0-he663afc_7.conda sha256: 597579f6ce995c2a53dcb290c75d94819ca92f898687162f992a208a5ea1b65b md5: 2700e7aad63bca8c26c2042a6a7214d6 @@ -2334,6 +2871,19 @@ packages: - pkg:pypi/gxx-linux-64 size: 27050 timestamp: 1759866571696 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-14.3.0-he6f32d1_14.conda + sha256: ae338fa6e156a79cf69db2e296ec862fd41e09ed42ab6c1cbab5fbf50a750307 + md5: 9c792be16fc0c2b5ed6d1f3b768876e8 + depends: + - gxx_impl_linux-64 14.3.0.* + - gcc_linux-64 ==14.3.0 h298d278_14 + - binutils_linux-64 + - sysroot_linux-64 + license: BSD-3-Clause + purls: + - pkg:pypi/gxx-linux-64 + size: 27404 + timestamp: 1764713544855 - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl name: h11 version: 0.16.0 @@ -2399,6 +2949,19 @@ packages: - markupsafe>=2.0 - babel>=2.7 ; extra == 'i18n' requires_python: '>=3.7' +- conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + sha256: fc9ca7348a4f25fed2079f2153ecdcf5f9cf2a0bc36c4172420ca09e1849df7b + md5: 04558c96691bed63104678757beb4f8d + depends: + - markupsafe >=2.0 + - python >=3.10 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jinja2 + size: 120685 + timestamp: 1764517220861 - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda sha256: f1ac18b11637ddadc05642e8185a851c7fab5998c6f5470d716812fae943b2af md5: 446bd6c8cb26050d528881df495ce646 @@ -2462,6 +3025,20 @@ packages: - pkg:pypi/ld-impl-linux-64 size: 741516 timestamp: 1762674665675 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45-default_hbd61a6d_104.conda + sha256: 9e191baf2426a19507f1d0a17be0fdb7aa155cdf0f61d5a09c808e0a69464312 + md5: a6abd2796fc332536735f68ba23f7901 + depends: + - __glibc >=2.17,<3.0.a0 + - zstd >=1.5.7,<1.6.0a0 + constrains: + - binutils_impl_linux-64 2.45 + license: GPL-3.0-only + license_family: GPL + purls: + - pkg:pypi/ld-impl-linux-64 + size: 725545 + timestamp: 1764007826689 - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250127.1-cxx17_hbbce691_0.conda sha256: 65d5ca837c3ee67b9d769125c21dc857194d7f6181bb0e7bd98ae58597b457d0 md5: 00290e549c5c8a32cc271020acc9ec6b @@ -2529,25 +3106,6 @@ packages: - 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 @@ -2568,6 +3126,24 @@ packages: - pkg:pypi/libblas size: 17918 timestamp: 1761680169865 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-3_h51639a9_openblas.conda + build_number: 3 + sha256: 02d014ea45d42032dc2a3997f9222ea3ff39c9b688b73567f5868c9b804fe8df + md5: 59778a2e7faa7335a1cb6a9a613049c4 + depends: + - libopenblas >=0.3.30,<0.3.31.0a0 + - libopenblas >=0.3.30,<1.0a0 + constrains: + - liblapacke 3.11.0 3*_openblas + - mkl <2026 + - blas 2.303 openblas + - liblapack 3.11.0 3*_openblas + - libcblas 3.11.0 3*_openblas + license: BSD-3-Clause + purls: + - pkg:pypi/libblas + size: 18736 + timestamp: 1764721196532 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-38_h51639a9_openblas.conda build_number: 38 sha256: 1850e189ca9b623497b857cf905bb2c8d57c8a42de5aed63a9b0bd857a1af2ae @@ -2600,6 +3176,19 @@ packages: - pkg:pypi/libcap size: 121852 timestamp: 1744577167992 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.77-h3ff7636_0.conda + sha256: 9517cce5193144af0fcbf19b7bd67db0a329c2cc2618f28ffecaa921a1cbe9d3 + md5: 09c264d40c67b82b49a3f3b89037bd2e + depends: + - __glibc >=2.17,<3.0.a0 + - attr >=2.5.2,<2.6.0a0 + - libgcc >=14 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/libcap + size: 121429 + timestamp: 1762349484074 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-37_hfef963f_mkl.conda build_number: 37 sha256: d3d3bf31803396001e74de27f266781cd9d5f9e34b288762b9e6e1183a7815a4 @@ -2617,23 +3206,7 @@ packages: 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 + timestamp: 1760212763579 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-38_hfef963f_mkl.conda build_number: 38 sha256: 94e0599d062a892e5ca3c2240feb7cb754779d68075f301bcb1fb5f290b6a6fd @@ -2652,6 +3225,21 @@ packages: - pkg:pypi/libcblas size: 17535 timestamp: 1761680182631 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.11.0-3_hb0561ab_openblas.conda + build_number: 3 + sha256: 668b0b97543acf342340ea9212be1690862811cf69d618b5fa0b56356dfca5cd + md5: b64e2eef5ae8020c62974106d3167610 + depends: + - libblas 3.11.0 3_h51639a9_openblas + constrains: + - liblapacke 3.11.0 3*_openblas + - blas 2.303 openblas + - liblapack 3.11.0 3*_openblas + license: BSD-3-Clause + purls: + - pkg:pypi/libcblas + size: 18715 + timestamp: 1764721212740 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-38_hb0561ab_openblas.conda build_number: 38 sha256: 5ab5a9aa350a5838d91f0e4feed30f765cbea461ee9515bf214d459c3378a531 @@ -2668,6 +3256,18 @@ packages: - pkg:pypi/libcblas size: 17685 timestamp: 1761680563279 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 + sha256: fd1d153962764433fe6233f34a72cdeed5dcf8a883a85769e8295ce940b5b0c5 + md5: c965a5aa0d5c1c37ffc62dff36e28400 + depends: + - libgcc-ng >=9.4.0 + - libstdcxx-ng >=9.4.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/libcrc32c + size: 20440 + timestamp: 1633683576494 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcublas-12.8.4.1-h9ab20c4_1.conda sha256: 3d3f7344db000feced2f9154cf0b3f3d245a1d317a1981e43b8b15f7baaaf6f1 md5: 3ba4fd8bef181c020173d29ac67cae68 @@ -2832,6 +3432,17 @@ packages: - pkg:pypi/libcxx size: 569449 timestamp: 1762258167196 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-21.1.7-hf598326_0.conda + sha256: 4bdbef0241b52e7a8552e8af7425f0b56d5621dd69df46c816546fefa17d77ab + md5: 0de94f39727c31c0447e408c5a210a56 + depends: + - __osx >=11.0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: + - pkg:pypi/libcxx + size: 568715 + timestamp: 1764676451068 - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h9ec8514_0.conda sha256: 25cbdfa65580cfab1b8d15ee90b4c9f1e0d72128f1661449c9a999d341377d54 md5: 35f29eec58405aaf55e01cb470d8c26a @@ -2870,6 +3481,35 @@ packages: - pkg:pypi/libgcc size: 822552 timestamp: 1759968052178 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_14.conda + sha256: 947bfbe5e47cd5d0cbdb0926d4baadb3e9be25caca7c6c6ef516f7ef85052cec + md5: 550dceb769d23bcf0e2f97fd4062d720 + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + constrains: + - libgomp 15.2.0 he0feb66_14 + - libgcc-ng ==15.2.0=*_14 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: + - pkg:pypi/libgcc + size: 1041047 + timestamp: 1764277103389 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgcc-15.2.0-hcbb3090_14.conda + sha256: 6ff7172e6102ed87faa5478b9c828afd79aeca33e91038ab6b6bd6f8581e63f9 + md5: 1b3fb17dd26afdafe0bf30fafcb900a2 + depends: + - _openmp_mutex + constrains: + - libgcc-ng ==15.2.0=*_14 + - libgomp 15.2.0 14 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: + - pkg:pypi/libgcc + size: 402289 + timestamp: 1764279453305 - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-14.3.0-h85bb3a7_107.conda sha256: 57a1e792e9cffb3e641c84d3830eb637a81c85f33bdc3d45ac7b653c701f9d68 md5: 84915638a998fae4d495fa038683a73e @@ -2881,6 +3521,28 @@ packages: - pkg:pypi/libgcc-devel-linux-64 size: 2731390 timestamp: 1759965626607 +- conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-14.3.0-hf649bbc_114.conda + sha256: 2629250c8c6ac036dc21f9ec2ede901f60f1f63c70b26aa45d86cf60031f90c1 + md5: 5addcb22be964dc0df75bbd4649fee59 + depends: + - __unix + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: + - pkg:pypi/libgcc-devel-linux-64 + size: 3090640 + timestamp: 1764276123176 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_14.conda + sha256: 48a77fde940b4b877c0ed24efd562c135170a46d100c07cd2d7b67e842e30642 + md5: 6c13aaae36d7514f28bd5544da1a7bb8 + depends: + - libgcc 15.2.0 he0feb66_14 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: + - pkg:pypi/libgcc-ng + size: 27157 + timestamp: 1764277114484 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_7.conda sha256: 2045066dd8e6e58aaf5ae2b722fb6dfdbb57c862b5f34ac7bfb58c40ef39b6ad md5: 280ea6eee9e2ddefde25ff799c4f0363 @@ -2892,19 +3554,19 @@ packages: - 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 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_14.conda + sha256: 1864a3639b46c625ecc6fe1acd0da8962e7db15d898576156147caa796b22fdd + md5: 3187356c87594c3ebc3b8c0bd72a7e9f depends: - - libgfortran5 15.2.0 hcd61629_7 + - libgfortran5 15.2.0 hdae7583_14 constrains: - - libgfortran-ng ==15.2.0=*_7 + - libgfortran-ng ==15.2.0=*_14 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: - pkg:pypi/libgfortran - size: 29275 - timestamp: 1759968110483 + size: 138906 + timestamp: 1764279720039 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-hfcf01ff_1.conda sha256: e9a5d1208b9dc0b576b35a484d527d9b746c4e65620e0d77c44636033b2245f0 md5: f699348e3f4f924728e33551b1920f79 @@ -2916,33 +3578,32 @@ packages: - 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 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-h742603c_1.conda + sha256: 18808697013a625ca876eeee3d86ee5b656f17c391eca4a4bc70867717cc5246 + md5: afccf412b03ce2f309f875ff88419173 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=15.2.0 + - 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: 1572758 - timestamp: 1759968082504 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-h742603c_1.conda - sha256: 18808697013a625ca876eeee3d86ee5b656f17c391eca4a4bc70867717cc5246 - md5: afccf412b03ce2f309f875ff88419173 + size: 764028 + timestamp: 1759712189275 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_14.conda + sha256: e40c74862b0f1496b1014472e13dc08a9d156f45a8d434f3513ba741fb03f052 + md5: 4fa9de90ec33234997aed5871d20f14e depends: - - llvm-openmp >=8.0.0 + - 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: 764028 - timestamp: 1759712189275 + size: 598642 + timestamp: 1764279461200 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-h767d61c_7.conda sha256: e9fb1c258c8e66ee278397b5822692527c5f5786d372fe7a869b900853f3f5ca md5: f7b4d76975aac7e5d9e6ad13845f92fe @@ -2954,6 +3615,17 @@ packages: - pkg:pypi/libgomp size: 447919 timestamp: 1759967942498 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_14.conda + sha256: 2017cbc0f0f3b1d15df9ca681960eef015f9f58ba0d6e841694277a9f7eae0fc + md5: 91349c276f84f590487e4c7f6e90e077 + 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: 604220 + timestamp: 1764277020855 - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.12.1-default_h7f8ec31_1002.conda sha256: f7fbc792dbcd04bf27219c765c10c239937b34c6c1a1f77a5827724753e02da1 md5: c01021ae525a76fe62720c7346212d74 @@ -3013,22 +3685,6 @@ packages: - 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 @@ -3047,6 +3703,21 @@ packages: - pkg:pypi/liblapack size: 17563 timestamp: 1761680194101 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.11.0-3_hd9741b5_openblas.conda + build_number: 3 + sha256: 67c8ca4fc3047162a45be2929b0e78b7b32c5d222a5a3c814de1402c26ced172 + md5: 623733acf510c4f2138d4bf7215db2c9 + depends: + - libblas 3.11.0 3_h51639a9_openblas + constrains: + - liblapacke 3.11.0 3*_openblas + - blas 2.303 openblas + - libcblas 3.11.0 3*_openblas + license: BSD-3-Clause + purls: + - pkg:pypi/liblapack + size: 18720 + timestamp: 1764721233316 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-38_hd9741b5_openblas.conda build_number: 38 sha256: df4f43d2ba45b7b80a45e8c0e51d3d7675a00047089beea7dc54e685825df9f6 @@ -3192,22 +3863,6 @@ packages: - 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 @@ -3240,6 +3895,22 @@ packages: - pkg:pypi/libprotobuf size: 3475015 timestamp: 1753801238063 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h7460b1f_3.conda + sha256: 14450a1cd316fe639dd0a5e040f6f31c374537141b7b931bf8afbfd5a04d9843 + md5: 63c1256f51815217d296afa24af6c754 + 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: 3558270 + timestamp: 1764617272253 - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-6.31.1-h49aed37_2.conda sha256: 1679f16c593d769f3dab219adb1117cbaaddb019080c5a59f79393dc9f45b84f md5: 94cb88daa0892171457d9fdc69f43eca @@ -3271,6 +3942,29 @@ packages: - pkg:pypi/libprotobuf size: 2982875 timestamp: 1760550241203 +- pypi: https://files.pythonhosted.org/packages/76/a1/d25af61958c2c7eb978164aeba0350719f615179ba3f428b682b9a5fdace/librt-0.6.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: librt + version: 0.6.3 + sha256: e18875e17ef69ba7dfa9623f2f95f3eda6f70b536079ee6d5763ecdfe6cc9040 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/88/3c/26335536ed9ba097c79cffcee148393592e55758fe76d99015af3e47a6d0/librt-0.6.3-cp311-cp311-macosx_11_0_arm64.whl + name: librt + version: 0.6.3 + sha256: 64645b757d617ad5f98c08e07620bc488d4bced9ced91c6279cec418f16056fa + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-14.3.0-h8f1669f_14.conda + sha256: 420774e6ebef5a49dbac755db6ecc6c695ae5222cd39c043c23abd8b637e6506 + md5: b1b15da9757caaa0814d7dc3112b3e06 + 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: 7569795 + timestamp: 1764276337284 - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-14.3.0-hd08acf3_7.conda sha256: 73eb65f58ed086cf73fb9af3be4a9b288f630e9c2e1caacc75aff5f265d2dda2 md5: 716f4c96e07207d74e635c915b8b3f8b @@ -3297,6 +3991,18 @@ packages: - pkg:pypi/libsqlite size: 945576 timestamp: 1762299687230 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.1-h0c1763c_0.conda + sha256: 6f0e8a812e8e33a4d8b7a0e595efe28373080d27b78ee4828aa4f6649a088454 + md5: 2e1b84d273b01835256e53fd938de355 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libzlib >=1.3.1,<2.0a0 + license: blessing + purls: + - pkg:pypi/libsqlite + size: 938979 + timestamp: 1764359444435 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.0-h8adb53f_0.conda sha256: b43d198f147f46866e5336c4a6b91668beef698bfba69d1706158460eadb2c1b md5: 5fb1945dbc6380e6fe7e939a62267772 @@ -3309,6 +4015,17 @@ packages: - pkg:pypi/libsqlite size: 909508 timestamp: 1762300078624 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.1-h9a5124b_0.conda + sha256: a46b167447e2a9e38586320c30b29e3b68b6f7e6b873c18d6b1aa2efd2626917 + md5: 67e50e5bd4e5e2310d66b88c4da50096 + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: blessing + purls: + - pkg:pypi/libsqlite + size: 906292 + timestamp: 1764359907797 - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h8f9b012_7.conda sha256: 1b981647d9775e1cdeb2fab0a4dd9cd75a6b0de2963f6c3953dbd712f78334b3 md5: 5b767048b1b3ee9a954b06f4084f93dc @@ -3323,6 +4040,20 @@ packages: - pkg:pypi/libstdcxx size: 3898269 timestamp: 1759968103436 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_14.conda + sha256: bbeb7cf8b7eff000b2cb5ffb9a40d98fbb8f39c94768afaec38408c3097cde0d + md5: 8e96fe9b17d5871b5cf9d312cab832f6 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc 15.2.0 he0feb66_14 + constrains: + - libstdcxx-ng ==15.2.0=*_14 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: + - pkg:pypi/libstdcxx + size: 5856715 + timestamp: 1764277148231 - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-14.3.0-h85bb3a7_107.conda sha256: 54ba5632d93faebbec3899d9df84c6e71c4574d70a2f3babfc5aac4247874038 md5: eaf0f047b048c4d86a4b8c60c0e95f38 @@ -3334,6 +4065,17 @@ packages: - pkg:pypi/libstdcxx-devel-linux-64 size: 13244605 timestamp: 1759965656146 +- conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-14.3.0-h9f08a49_114.conda + sha256: 229b17ecf0014cc92deef6b2abd76e089e969336de04ed7674f0491be9b6e053 + md5: c88929e13f56dac9233cdf615502e5f3 + depends: + - __unix + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: + - pkg:pypi/libstdcxx-devel-linux-64 + size: 20199758 + timestamp: 1764276167178 - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-h4852527_7.conda sha256: 024fd46ac3ea8032a5ec3ea7b91c4c235701a8bf0e6520fe5e6539992a6bd05f md5: f627678cf829bd70bccf141a19c3ad3e @@ -3345,6 +4087,17 @@ packages: - pkg:pypi/libstdcxx-ng size: 29343 timestamp: 1759968157195 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_14.conda + sha256: 63336f51b88029a9557a430aecbb08a11365aa03ec47ec8d14e542fec5dc80fb + md5: 9531f671a13eec0597941fa19e489b96 + depends: + - libstdcxx 15.2.0 h934c35e_14 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: + - pkg:pypi/libstdcxx-ng + size: 27200 + timestamp: 1764277193585 - conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.10-h085a93f_1.conda sha256: a57cdd2eec34c49fe748412c1f3cf26f54dc9f346cd1f6f691b90d592ae25660 md5: fbe2f90c5e1a2c3affbda77807883dca @@ -3357,6 +4110,18 @@ packages: - pkg:pypi/libsystemd0 size: 491334 timestamp: 1762460699434 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.10-hd0affe5_2.conda + sha256: b30c06f60f03c2cf101afeb3452f48f12a2553b4cb631c9460c8a8ccf0813ae5 + md5: b04e0a2163a72588a40cde1afd6f2d18 + depends: + - __glibc >=2.17,<3.0.a0 + - libcap >=2.77,<2.78.0a0 + - libgcc >=14 + license: LGPL-2.1-or-later + purls: + - pkg:pypi/libsystemd0 + size: 491211 + timestamp: 1763011323224 - conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.7.1-cuda126_mkl_hc2b21a2_300.conda sha256: 6bfd89503205a68fb9be5f41b180fc81f7a898ead35d796f01f6b5417d8735f8 md5: 14a196b86d4a2f95393143136d3a2cb7 @@ -3475,6 +4240,29 @@ packages: - pkg:pypi/libudev1 size: 145067 timestamp: 1762460712193 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-257.10-hd0affe5_2.conda + sha256: 751cf346f0f56cc9bfa43f7b5c9c30df2fcec8d84d164ac0cd74a27a3af79f30 + md5: 2f6b30acaa0d6e231d01166549108e2c + depends: + - __glibc >=2.17,<3.0.a0 + - libcap >=2.77,<2.78.0a0 + - libgcc >=14 + license: LGPL-2.1-or-later + purls: + - pkg:pypi/libudev1 + size: 144395 + timestamp: 1763011330153 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.2-h5347b49_1.conda + sha256: 030447cf827c471abd37092ab9714fde82b8222106f22fde94bc7a64e2704c40 + md5: 41f5c09a211985c3ce642d60721e7c3e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: BSD-3-Clause + purls: + - pkg:pypi/libuuid + size: 40235 + timestamp: 1764790744114 - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.2-he9a06e4_0.conda sha256: e5ec6d2ad7eef538ddcb9ea62ad4346fde70a4736342c4ad87bd713641eb9808 md5: 80c07c68d2f6870250959dcc95b209d1 @@ -3510,6 +4298,24 @@ packages: - pkg:pypi/libuv size: 421195 timestamp: 1753948426421 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.1-h031cc0b_0.conda + sha256: ee64e507b37b073e0bdad739e35330933dd5be7c639600a096551a6968f1035d + md5: a67cd8f7b0369bbf2c40411f05a62f3b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.1,<6.0a0 + - libxml2-16 2.15.1 hf2a90c1_0 + - libzlib >=1.3.1,<2.0a0 + constrains: + - icu <0.0a0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/libxml2 + size: 45292 + timestamp: 1761015784683 - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.1-h26afc86_0.conda sha256: ec0735ae56c3549149eebd7dc22c0bed91fd50c02eaa77ff418613ddda190aa8 md5: e512be7dc1f84966d50959e900ca121f @@ -3545,6 +4351,24 @@ packages: - pkg:pypi/libxml2-16 size: 556302 timestamp: 1761015637262 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.1-hf2a90c1_0.conda + sha256: f5220ff49efc31431279859049199b9250e79f98c1dee1da12feb74bda2d9cf1 + md5: 23720d17346b21efb08d68c2255c8431 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.1,<6.0a0 + - libzlib >=1.3.1,<2.0a0 + constrains: + - libxml2 2.15.1 + - icu <0.0a0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/libxml2-16 + size: 554734 + timestamp: 1761015772672 - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 md5: edb0dca6bc32e4f4789199455a1dbeb8 @@ -3586,6 +4410,19 @@ packages: - pkg:pypi/llvm-openmp size: 3226046 timestamp: 1762315432827 +- conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-21.1.7-h4922eb0_0.conda + sha256: 6579325669ba27344be66f319c316396f09d9f1a054178df257009591b7d7f43 + md5: ec29f865968a81e1961b3c2f2765eebb + depends: + - __glibc >=2.17,<3.0.a0 + constrains: + - intel-openmp <0.0a0 + - openmp 21.1.7|21.1.7.* + license: Apache-2.0 WITH LLVM-exception + purls: + - pkg:pypi/llvm-openmp + size: 6115936 + timestamp: 1764721254857 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-21.1.5-h4a912ad_0.conda sha256: a9707045db6a1b9dc2b196f02c3e31d72fe3dbab4ebc4976f3b913c26394dca0 md5: 9ae7847a3bef5e050f3921260032033c @@ -3600,6 +4437,19 @@ packages: - pkg:pypi/llvm-openmp size: 285516 timestamp: 1762315951771 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-21.1.7-h4a912ad_0.conda + sha256: 002695e79b0e4c2d117a8bd190ffd62ef3d74a4cae002afa580bd1f98f9560a3 + md5: 05d475f50ddcc2173a6beece9960c6cb + depends: + - __osx >=11.0 + constrains: + - openmp 21.1.7|21.1.7.* + - intel-openmp <0.0a0 + license: Apache-2.0 WITH LLVM-exception + purls: + - pkg:pypi/llvm-openmp + size: 286129 + timestamp: 1764721670250 - pypi: https://files.pythonhosted.org/packages/87/fb/99f81ac72ae23375f22b7afdb7642aba97c00a713c217124420147681a2f/mako-1.3.10-py3-none-any.whl name: mako version: 1.3.10 @@ -3800,6 +4650,38 @@ packages: - pip ; extra == 'install-types' - orjson ; extra == 'faster-cache' requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/41/6b/63f095c9f1ce584fdeb595d663d49e0980c735a1d2004720ccec252c5d47/mypy-1.19.0-cp311-cp311-macosx_11_0_arm64.whl + name: mypy + version: 1.19.0 + sha256: 34ec1ac66d31644f194b7c163d7f8b8434f1b49719d403a5d26c87fff7e913f7 + 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' + - librt>=0.6.2 + - 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/99/db/d217815705987d2cbace2edd9100926196d6f85bcb9b5af05058d6e3c8ad/mypy-1.19.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: mypy + version: 1.19.0 + sha256: 120cffe120cca5c23c03c77f84abc0c14c5d2e03736f6c312480020082f1994b + 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' + - librt>=0.6.2 + - 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 @@ -3839,6 +4721,20 @@ packages: - pkg:pypi/nccl size: 193073223 timestamp: 1762821007597 +- conda: https://conda.anaconda.org/conda-forge/linux-64/nccl-2.28.9.1-h4d09622_1.conda + sha256: a132df4a0b4c36932cfd5e931b4c88e83991ad77de9adf13c206caefdaf3b8b0 + md5: af3e8d72000a10bd8159d7e28daf4bfc + depends: + - __glibc >=2.28,<3.0.a0 + - cuda-version >=12,<13.0a0 + - libgcc >=14 + - libstdcxx >=14 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/nccl + size: 193067371 + timestamp: 1764718168355 - 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 @@ -3903,6 +4799,23 @@ packages: - pkg:pypi/networkx size: 1564462 timestamp: 1749078300258 +- conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6-pyhcf101f3_0.conda + sha256: 57b0bbb72ed5647438a81e7caf4890075390f80030c1333434467f9366762db7 + md5: 6725bfdf8ea7a8bf6415f096f3f1ffa5 + depends: + - python >=3.11 + - python + constrains: + - numpy >=1.25 + - scipy >=1.11.2 + - matplotlib-base >=3.8 + - pandas >=2.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/networkx + size: 1584885 + timestamp: 1763962034867 - conda: https://conda.anaconda.org/conda-forge/noarch/nomkl-1.0-h5ca1d4c_0.tar.bz2 sha256: d38542a151a90417065c1a234866f97fd1ea82a81de75ecb725955ab78f88b4b md5: 9a66894dfd07c4510beb6b3f9672ccc0 @@ -3917,7 +4830,28 @@ packages: - 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 + 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 @@ -3935,13 +4869,18 @@ packages: - 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 +- pypi: https://files.pythonhosted.org/packages/0e/cc/0d97ef55dda48cb0f93d7b92d761208e7a99bd2eea6b0e859426e6a99a21/numcodecs-0.16.5-cp311-cp311-macosx_11_0_arm64.whl name: numcodecs - version: 0.16.3 - sha256: 85a7f1cae9eb18b85709af46570bf9c60056e7155c4c8f610e8080c68124d0e5 + version: 0.16.5 + sha256: e2d04a19cb57a3c519b4127ac377cca6471aee1990d7c18f5b1e3a4fe1306689 requires_dist: - numpy>=1.24 - typing-extensions + - msgpack ; extra == 'msgpack' + - zfpy>=1.0.0 ; extra == 'zfpy' + - pcodec>=0.3,<0.4 ; extra == 'pcodec' + - crc32c>=2.7 ; extra == 'crc32c' + - google-crc32c>=1.5 ; extra == 'google-crc32c' - sphinx ; extra == 'docs' - sphinx-issues ; extra == 'docs' - pydata-sphinx-theme ; extra == 'docs' @@ -3951,10 +4890,7 @@ packages: - 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' + - crc32c ; extra == 'test-extras' requires_python: '>=3.11' - conda: https://conda.anaconda.org/conda-forge/linux-64/numcodecs-0.16.1-py311hed34c8f_2.conda sha256: 005214a1ff35cd3fabf83d05e93c6d6bd6a6545173e1f1e9fd1248650d97b5b1 @@ -3976,6 +4912,25 @@ packages: - pkg:pypi/numcodecs size: 821684 timestamp: 1759814235116 +- conda: https://conda.anaconda.org/conda-forge/linux-64/numcodecs-0.16.5-py311hed34c8f_0.conda + sha256: 4966f599ce228b4111322e1e3a93a594d4f75484fdfebb0b40fd2ab3bcc6c354 + md5: 8096e6b9a5caf339c473be92e3dd23e5 + 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 + purls: + - pkg:pypi/numcodecs + size: 814188 + timestamp: 1764782553524 - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py311h64a7726_0.conda sha256: 3f4365e11b28e244c95ba8579942b0802761ba7bb31c026f50d1a9ea9c728149 md5: a502d7aad449a1206efb366d6a12c52d @@ -4035,6 +4990,26 @@ packages: - pkg:pypi/numpy size: 7278993 timestamp: 1761161589274 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.3.5-py311h8685306_0.conda + sha256: 0d1e143adbaca3c8c7698434c09e0656f65677b579d0f8f41778abff9089f81a + md5: 1c90d71be9d263f263ae14e7552a6293 + depends: + - python + - libcxx >=19 + - python 3.11.* *_cpython + - __osx >=11.0 + - 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: 7321322 + timestamp: 1763350912784 - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.0-h26f9b46_0.conda sha256: a47271202f4518a484956968335b2521409c8173e123ab381e775c358c67fe6d md5: 9ee58d5c534af06558933af3c845a780 @@ -4076,6 +5051,22 @@ packages: - pkg:pypi/optree size: 444433 timestamp: 1762488011091 +- conda: https://conda.anaconda.org/conda-forge/linux-64/optree-0.18.0-py311hdf67eae_0.conda + sha256: 04b3dcf0a10c536eb952ac95b40314a54062f0e90690053323a58ffd19184c1f + md5: 7eb0268142bf6bea29a2573b10ae4d32 + 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.12 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/optree + size: 441668 + timestamp: 1763124461030 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/optree-0.17.0-py311h5a5e7c7_2.conda sha256: ca7c98662259c8e8cce66fda3cf971e339b853acb4ccc892d9fdc60e967ebb3c md5: 389b08d3b05381acd15f8851f0d43914 @@ -4161,6 +5152,58 @@ packages: - pkg:pypi/pandas size: 15337715 timestamp: 1759266002530 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.3.3-py311hed34c8f_2.conda + sha256: a2af9dbc4827db418a73127d4001bb3c2ee19adcd2d4387d6bc049c3780d2a62 + md5: 2366b5470cf61614c131e356efe9f74c + 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: + - matplotlib >=3.6.3 + - fsspec >=2022.11.0 + - zstandard >=0.19.0 + - xarray >=2022.12.0 + - lxml >=4.9.2 + - pyqt5 >=5.15.9 + - sqlalchemy >=2.0.0 + - pandas-gbq >=0.19.0 + - psycopg2 >=2.9.6 + - odfpy >=1.4.1 + - gcsfs >=2022.11.0 + - pyxlsb >=1.0.10 + - qtpy >=2.3.0 + - openpyxl >=3.1.0 + - fastparquet >=2022.12.0 + - beautifulsoup4 >=4.11.2 + - html5lib >=1.1 + - pytables >=3.8.0 + - tabulate >=0.9.0 + - pyarrow >=10.0.1 + - blosc >=1.21.3 + - pyreadstat >=1.2.0 + - xlrd >=2.0.1 + - numexpr >=2.8.4 + - bottleneck >=1.3.6 + - scipy >=1.10.0 + - tzdata >=2022.7 + - s3fs >=2022.11.0 + - python-calamine >=0.1.7 + - xlsxwriter >=3.0.5 + - numba >=0.56.4 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pandas + size: 15180047 + timestamp: 1764615050121 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.3.3-py311hdb8e4fa_1.conda sha256: 2d9350d3d16d3626fe30930026d527e3d3af4fa1ec3e6b9d4791cbb49bb186f3 md5: ea737715ac61b431bfd5adbcd9ea0cae @@ -4213,6 +5256,58 @@ packages: - pkg:pypi/pandas size: 14389534 timestamp: 1759266253108 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.3.3-py311hdb8e4fa_2.conda + sha256: dd0c4ade846921acbf6ded79b7589e72f58689129dabc8290deec455539e9235 + md5: da2e5c7c0a3061398c8a1e225f2e339e + 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: + - sqlalchemy >=2.0.0 + - xarray >=2022.12.0 + - bottleneck >=1.3.6 + - tzdata >=2022.7 + - pyarrow >=10.0.1 + - lxml >=4.9.2 + - tabulate >=0.9.0 + - matplotlib >=3.6.3 + - qtpy >=2.3.0 + - pytables >=3.8.0 + - odfpy >=1.4.1 + - html5lib >=1.1 + - openpyxl >=3.1.0 + - psycopg2 >=2.9.6 + - numba >=0.56.4 + - s3fs >=2022.11.0 + - fastparquet >=2022.12.0 + - gcsfs >=2022.11.0 + - python-calamine >=0.1.7 + - fsspec >=2022.11.0 + - pandas-gbq >=0.19.0 + - beautifulsoup4 >=4.11.2 + - xlsxwriter >=3.0.5 + - numexpr >=2.8.4 + - pyxlsb >=1.0.10 + - pyreadstat >=1.2.0 + - xlrd >=2.0.1 + - blosc >=1.21.3 + - zstandard >=0.19.0 + - pyqt5 >=5.15.9 + - scipy >=1.10.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pandas + size: 14124254 + timestamp: 1764615503256 - 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 @@ -4514,22 +5609,35 @@ packages: - 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 +- pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl + name: pydantic + version: 2.12.5 + sha256: e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d + 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.5-pyhcf101f3_1.conda + sha256: 868569d9505b7fe246c880c11e2c44924d7613a8cdcc1f6ef85d5375e892f13d + md5: c3946ed24acdb28db1b5d63321dbca7d 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 + - python >=3.10 + - typing-extensions >=4.6.1 + - annotated-types >=0.6.0 + - pydantic-core ==2.41.5 + - python license: MIT license_family: MIT purls: - pkg:pypi/pydantic - size: 320446 - timestamp: 1762379584494 + size: 340482 + timestamp: 1764434463101 - 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 @@ -4544,9 +5652,9 @@ packages: 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 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.41.5-py311h902ca64_1.conda + sha256: da6e2060a91de065031214f9ca56e24906785ea412cd274d1f32128992dc0d43 + md5: 08d407f0331ff8e871db23bec7eef83c depends: - python - typing-extensions >=4.6.0,!=4.7.0 @@ -4559,8 +5667,8 @@ packages: license_family: MIT purls: - pkg:pypi/pydantic-core - size: 1952130 - timestamp: 1762358856501 + size: 1938184 + timestamp: 1762988992467 - 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 @@ -4586,6 +5694,7 @@ packages: - python-dotenv >=0.21.0 - typing-inspection >=0.4.0 license: MIT + license_family: MIT purls: - pkg:pypi/pydantic-settings size: 43752 @@ -5094,6 +6203,15 @@ packages: - 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/44/8c/04797ebb53748b4d594d4c334b2d9a99f2d2e06e19ad505f1313ca5d56eb/s3fs-2025.12.0-py3-none-any.whl + name: s3fs + version: 2025.12.0 + sha256: 89d51e0744256baad7ae5410304a368ca195affd93a07795bc8ba9c00c9effbb + requires_dist: + - aiobotocore>=2.5.4,<3.0.0 + - fsspec==2025.12.0 + - aiohttp!=4.0.0a0,!=4.0.0a1 + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/48/f0/ae7ca09223a81a1d890b2557186ea015f6e0502e9b8cb8e1813f1d8cfa4e/s3transfer-0.14.0-py3-none-any.whl name: s3transfer version: 0.14.0 @@ -5102,6 +6220,14 @@ packages: - botocore>=1.37.4,<2.0a0 - botocore[crt]>=1.37.4,<2.0a0 ; extra == 'crt' requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/5f/e1/5ef25f52973aa12a19cf4e1375d00932d7fb354ffd310487ba7d44225c1a/s3transfer-0.15.0-py3-none-any.whl + name: s3transfer + version: 0.15.0 + sha256: 6f8bf5caa31a0865c4081186689db1b2534cef721d104eb26101de4b9d6a5852 + 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 @@ -5244,6 +6370,19 @@ packages: - python-multipart>=0.0.18 ; extra == 'full' - pyyaml ; extra == 'full' requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/d9/52/1064f510b141bd54025f9b55105e26d1fa970b9be67ad766380a3c9b74b0/starlette-0.50.0-py3-none-any.whl + name: starlette + version: 0.50.0 + sha256: 9e5391843ec9b6e472eed1365a78c8098cfceb7a74bfd4d6b1c0c0095efb3bca + 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.10' - conda: https://conda.anaconda.org/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda sha256: 09d3b6ac51d437bc996ad006d9f749ca5c645c1900a854a6c8f193cbd13f03a8 md5: 8c09fac3785696e1c477156192d64b91 @@ -5281,6 +6420,7 @@ packages: - libhwloc >=2.12.1,<2.12.2.0a0 - libstdcxx >=14 license: Apache-2.0 + license_family: APACHE purls: - pkg:pypi/tbb size: 171868 @@ -5306,6 +6446,21 @@ packages: - 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_ha0e22de_103.conda + sha256: 1544760538a40bcd8ace2b1d8ebe3eb5807ac268641f8acdc18c69c5ebfeaf64 + md5: 86bc20552bf46075e3d92b67f089172d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + constrains: + - xorg-libx11 >=1.8.12,<2.0a0 + license: TCL + license_family: BSD + purls: + - pkg:pypi/tk + size: 3284905 + timestamp: 1763054914403 - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda sha256: a84ff687119e6d8752346d1d408d5cf360dee0badd487a472aa8ddedfdc219e1 md5: a0116df4f4ed05c303811a837d5b39d8 @@ -5331,6 +6486,18 @@ packages: - pkg:pypi/tk size: 3125538 timestamp: 1748388189063 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h892fb3f_3.conda + sha256: ad0c67cb03c163a109820dc9ecf77faf6ec7150e942d1e8bb13e5d39dc058ab7 + md5: a73d54a5abba6543cb2f0af1bfbd6851 + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: TCL + license_family: BSD + purls: + - pkg:pypi/tk + size: 3125484 + timestamp: 1763055028377 - 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 @@ -5404,9 +6571,9 @@ packages: 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 +- conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhd8ed1ab_1.conda + sha256: 70db27de58a97aeb7ba7448366c9853f91b21137492e0b4430251a1870aa8ff4 + md5: a0a4a3035667fc34f29bfbd5c190baa6 depends: - python >=3.10 - typing_extensions >=4.12.0 @@ -5414,8 +6581,8 @@ packages: license_family: MIT purls: - pkg:pypi/typing-inspection - size: 18799 - timestamp: 1759301271883 + size: 18923 + timestamp: 1764158430324 - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda sha256: 032271135bca55aeb156cee361c81350c6f3fb203f57d024d7e5a1fc9ef18731 md5: 0caa1af407ecff61170c9437a808404d @@ -5467,9 +6634,41 @@ packages: - 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 +- pypi: https://files.pythonhosted.org/packages/79/77/53c2d3a0413bc55b4c91067a0c41e55451be9b0784d204e4e46ce5abf668/universal_pathlib-0.3.7-py3-none-any.whl + name: universal-pathlib + version: 0.3.7 + sha256: fb95117b20b5981f86ef9d887fddbf9c61d3596634ba42cccea444931d87c201 + 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' + - pyftpdlib ; 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.7-pyhd8ed1ab_0.conda + sha256: c714a07cf0d559f0e1dfebff7804a39c3efa056c3edccc752e663d518fb1bad4 + md5: a1e92d38a18ce0a2ab1f094fbbe3d3a0 depends: - fsspec >=2024.5.0 - pathlib-abc >=0.5.1,<0.6.0 @@ -5478,8 +6677,8 @@ packages: license_family: MIT purls: - pkg:pypi/universal-pathlib - size: 62292 - timestamp: 1762676897088 + size: 64604 + timestamp: 1764747444832 - pypi: https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl name: urllib3 version: 2.5.0 @@ -5686,17 +6885,50 @@ packages: - 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 +- conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.1.5-pyhcf101f3_0.conda + sha256: c36bec7d02d2f227409fcc4cf586cf3a658af068b58374de7f8f2d0b5c1c84f9 + md5: c1844a94b2be61bb03bbb71574a0abfc depends: - - python >=3.9 + - python >=3.11 + - packaging >=22.0 + - numpy >=1.26 + - numcodecs >=0.14 + - typing_extensions >=4.9 + - donfig >=0.8 + - google-crc32c >=1.5 + - python + constrains: + - fsspec >=2023.10.0 + - obstore >=0.5.1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/zarr + size: 305998 + timestamp: 1763742695201 +- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + sha256: b4533f7d9efc976511a73ef7d4a2473406d7f4c750884be8e8620b0ce70f4dae + md5: 30cd29cb87d819caead4d55184c1d115 + depends: + - python >=3.10 + - python license: MIT license_family: MIT purls: - pkg:pypi/zipp - size: 22963 - timestamp: 1749421737203 + size: 24194 + timestamp: 1764460141901 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + sha256: 68f0206ca6e98fea941e5717cec780ed2873ffabc0e1ed34428c061e2c6268c7 + md5: 4a13eeac0b5c8e5b8ab496e6c4ddd829 + depends: + - __glibc >=2.17,<3.0.a0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + purls: + - pkg:pypi/zstd + size: 601375 + timestamp: 1764777111296 - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda sha256: a4166e3d8ff4e35932510aaff7aa90772f84b4d07e9f6f83c614cba7ceefe0eb md5: 6432cb5d4ac0046c3ac0a8a0f95842f9 diff --git a/tests/test_searchsorted.py b/tests/test_searchsorted.py index 619ca21..860025a 100644 --- a/tests/test_searchsorted.py +++ b/tests/test_searchsorted.py @@ -1,6 +1,7 @@ import cupy as cp import pytest +from bigwig_loader.searchsorted import interval_searchsorted from bigwig_loader.searchsorted import searchsorted @@ -86,3 +87,298 @@ def test_searchsorted_right_absolute(test_data) -> None: ) expected = cp.asarray([[1, 1, 2], [8, 9, 10], [17, 19, 21], [25, 25, 25]]) assert (output == expected).all() + + +# ========== Tests for empty subarrays ========== + + +@pytest.fixture +def test_data_with_empty_subarrays(): + """Test data where some subarrays are empty (size=0).""" + intervals_track1 = [5, 10, 12, 18] + # track2 is empty + intervals_track3 = [1, 2, 3, 4, 5] + # track4 is empty + intervals_track5 = [100, 200] + + array = cp.asarray( + intervals_track1 + intervals_track3 + intervals_track5, + dtype=cp.uint32, + ) + queries = cp.asarray([7, 9, 11], dtype=cp.uint32) + sizes = cp.asarray( + [ + len(intervals_track1), # 4 + 0, # empty + len(intervals_track3), # 5 + 0, # empty + len(intervals_track5), # 2 + ], + dtype=cp.uint32, + ) + return array, queries, sizes + + +def test_searchsorted_with_empty_subarrays_left_absolute( + test_data_with_empty_subarrays, +) -> None: + """Empty subarrays should return 0 (no valid indices).""" + array, queries, sizes = test_data_with_empty_subarrays + output = searchsorted( + array=array, queries=queries, sizes=sizes, side="left", absolute_indices=True + ) + + # Track 0: [5, 10, 12, 18], queries [7, 9, 11] -> left indices [1, 1, 2] + start 0 = [1, 1, 2] + # Track 1: empty -> [0, 0, 0] + # Track 2: [1, 2, 3, 4, 5], queries [7, 9, 11] -> all past end -> [5, 5, 5] + start 4 = [9, 9, 9] + # Track 3: empty -> [0, 0, 0] + # Track 4: [100, 200], queries [7, 9, 11] -> all before start -> [0, 0, 0] + start 9 = [9, 9, 9] + + expected = cp.asarray( + [ + [1, 1, 2], # track 0 + [0, 0, 0], # track 1 (empty) + [9, 9, 9], # track 2 + [0, 0, 0], # track 3 (empty) + [9, 9, 9], # track 4 + ], + dtype=cp.uint32, + ) + + assert ( + output == expected + ).all(), f"Expected:\n{expected.get()}\nGot:\n{output.get()}" + + +def test_searchsorted_with_empty_subarrays_right_absolute( + test_data_with_empty_subarrays, +) -> None: + """Empty subarrays should return 0 (no valid indices).""" + array, queries, sizes = test_data_with_empty_subarrays + output = searchsorted( + array=array, queries=queries, sizes=sizes, side="right", absolute_indices=True + ) + + # Track 0: [5, 10, 12, 18], queries [7, 9, 11] -> right indices [1, 1, 2] + start 0 = [1, 1, 2] + # Track 1: empty -> [0, 0, 0] + # Track 2: [1, 2, 3, 4, 5], queries [7, 9, 11] -> all past end -> [5, 5, 5] + start 4 = [9, 9, 9] + # Track 3: empty -> [0, 0, 0] + # Track 4: [100, 200], queries [7, 9, 11] -> all before start -> [0, 0, 0] + start 9 = [9, 9, 9] + + expected = cp.asarray( + [ + [1, 1, 2], # track 0 + [0, 0, 0], # track 1 (empty) + [9, 9, 9], # track 2 + [0, 0, 0], # track 3 (empty) + [9, 9, 9], # track 4 + ], + dtype=cp.uint32, + ) + + assert ( + output == expected + ).all(), f"Expected:\n{expected.get()}\nGot:\n{output.get()}" + + +def test_searchsorted_with_empty_subarrays_relative( + test_data_with_empty_subarrays, +) -> None: + """Empty subarrays should return 0 in relative indices too.""" + array, queries, sizes = test_data_with_empty_subarrays + output = searchsorted( + array=array, queries=queries, sizes=sizes, side="left", absolute_indices=False + ) + + # Track 1 and 3 are empty, should return 0 + assert ( + output[1, :] == 0 + ).all(), f"Empty track 1 should have all zeros, got {output[1].get()}" + assert ( + output[3, :] == 0 + ).all(), f"Empty track 3 should have all zeros, got {output[3].get()}" + + +def test_searchsorted_all_empty_subarrays() -> None: + """Test when ALL subarrays are empty.""" + array = cp.asarray([], dtype=cp.uint32) + queries = cp.asarray([7, 9, 11], dtype=cp.uint32) + sizes = cp.asarray([0, 0, 0], dtype=cp.uint32) + + output = searchsorted( + array=array, queries=queries, sizes=sizes, side="left", absolute_indices=True + ) + + expected = cp.zeros((3, 3), dtype=cp.uint32) + assert (output == expected).all(), f"Expected all zeros, got:\n{output.get()}" + + +def test_searchsorted_single_empty_subarray() -> None: + """Test with a single empty subarray.""" + array = cp.asarray([], dtype=cp.uint32) + queries = cp.asarray([1, 2, 3], dtype=cp.uint32) + sizes = cp.asarray([0], dtype=cp.uint32) + + output = searchsorted( + array=array, queries=queries, sizes=sizes, side="right", absolute_indices=True + ) + + expected = cp.zeros((1, 3), dtype=cp.uint32) + assert (output == expected).all() + + +def test_searchsorted_empty_subarray_at_start() -> None: + """Test with empty subarray at the beginning.""" + array = cp.asarray([10, 20, 30], dtype=cp.uint32) + queries = cp.asarray([15, 25], dtype=cp.uint32) + sizes = cp.asarray([0, 3], dtype=cp.uint32) # First empty, second has 3 elements + + output = searchsorted( + array=array, queries=queries, sizes=sizes, side="left", absolute_indices=True + ) + + # Track 0: empty -> [0, 0] + # Track 1: [10, 20, 30], queries [15, 25] -> [1, 2] + start 0 = [1, 2] + expected = cp.asarray( + [ + [0, 0], # empty track + [1, 2], # normal track + ], + dtype=cp.uint32, + ) + + assert ( + output == expected + ).all(), f"Expected:\n{expected.get()}\nGot:\n{output.get()}" + + +def test_searchsorted_empty_subarray_at_end() -> None: + """Test with empty subarray at the end.""" + array = cp.asarray([10, 20, 30], dtype=cp.uint32) + queries = cp.asarray([15, 25], dtype=cp.uint32) + sizes = cp.asarray([3, 0], dtype=cp.uint32) # First has 3 elements, second empty + + output = searchsorted( + array=array, queries=queries, sizes=sizes, side="left", absolute_indices=True + ) + + # Track 0: [10, 20, 30], queries [15, 25] -> [1, 2] + start 0 = [1, 2] + # Track 1: empty -> [0, 0] + expected = cp.asarray( + [ + [1, 2], # normal track + [0, 0], # empty track + ], + dtype=cp.uint32, + ) + + assert ( + output == expected + ).all(), f"Expected:\n{expected.get()}\nGot:\n{output.get()}" + + +# ========== Tests for interval_searchsorted with empty subarrays ========== + + +def test_interval_searchsorted_with_empty_subarrays() -> None: + """Test interval_searchsorted with some empty tracks.""" + # Intervals: track 0 has data, track 1 is empty, track 2 has data + # Track 0: intervals [10-20], [30-40], [50-60] + # Track 1: empty + # Track 2: intervals [100-110], [120-130] + + array_start = cp.asarray([10, 30, 50, 100, 120], dtype=cp.uint32) + array_end = cp.asarray([20, 40, 60, 110, 130], dtype=cp.uint32) + + query_starts = cp.asarray([35], dtype=cp.uint32) # Query region 35-45 + query_ends = cp.asarray([45], dtype=cp.uint32) + + sizes = cp.asarray([3, 0, 2], dtype=cp.uint32) # Track 1 is empty + + found_starts, found_ends = interval_searchsorted( + array_start, array_end, query_starts, query_ends, sizes=sizes + ) + + # For track 1 (empty), found_starts and found_ends should both be 0 + # This ensures the interval loop does nothing + assert ( + found_starts[1, 0] == 0 + ), f"Empty track found_starts should be 0, got {found_starts[1, 0]}" + assert ( + found_ends[1, 0] == 0 + ), f"Empty track found_ends should be 0, got {found_ends[1, 0]}" + + # For empty tracks, found_starts should equal found_ends (empty range) + assert ( + found_starts[1, 0] == found_ends[1, 0] + ), "Empty track should have found_starts == found_ends" + + +def test_interval_searchsorted_empty_tracks_no_intervals_to_process() -> None: + """Verify that empty tracks result in no intervals being selected.""" + # All empty tracks + array_start = cp.asarray([], dtype=cp.uint32) + array_end = cp.asarray([], dtype=cp.uint32) + + query_starts = cp.asarray([100, 200], dtype=cp.uint32) + query_ends = cp.asarray([150, 250], dtype=cp.uint32) + + sizes = cp.asarray([0, 0, 0], dtype=cp.uint32) # 3 empty tracks + + found_starts, found_ends = interval_searchsorted( + array_start, array_end, query_starts, query_ends, sizes=sizes + ) + + # All should be zero + assert ( + found_starts == 0 + ).all(), f"All found_starts should be 0, got:\n{found_starts.get()}" + assert ( + found_ends == 0 + ).all(), f"All found_ends should be 0, got:\n{found_ends.get()}" + + # Verify shape is correct + assert found_starts.shape == ( + 3, + 2, + ), f"Expected shape (3, 2), got {found_starts.shape}" + assert found_ends.shape == (3, 2), f"Expected shape (3, 2), got {found_ends.shape}" + + +def test_interval_searchsorted_mixed_empty_and_nonempty() -> None: + """Test with a realistic mix of empty and non-empty tracks.""" + # Simulating 5 tracks where tracks 1 and 3 have no data for this chromosome + # Track 0: 2 intervals + # Track 1: empty + # Track 2: 3 intervals + # Track 3: empty + # Track 4: 1 interval + + array_start = cp.asarray([10, 50, 100, 150, 200, 300], dtype=cp.uint32) + array_end = cp.asarray([20, 60, 120, 180, 220, 350], dtype=cp.uint32) + + query_starts = cp.asarray([15], dtype=cp.uint32) + query_ends = cp.asarray([160], dtype=cp.uint32) + + sizes = cp.asarray([2, 0, 3, 0, 1], dtype=cp.uint32) + + found_starts, found_ends = interval_searchsorted( + array_start, array_end, query_starts, query_ends, sizes=sizes + ) + + # Verify empty tracks have found_starts == found_ends == 0 + assert ( + found_starts[1, 0] == 0 and found_ends[1, 0] == 0 + ), "Track 1 (empty) should have zeros" + assert ( + found_starts[3, 0] == 0 and found_ends[3, 0] == 0 + ), "Track 3 (empty) should have zeros" + + # Verify non-empty tracks have valid ranges (found_starts <= found_ends for non-empty results) + # or found_starts > found_ends for regions with no overlapping intervals + for i in [0, 2, 4]: + start = int(found_starts[i, 0]) + end = int(found_ends[i, 0]) + # Either valid range or empty range, but not garbage values + assert start < 1000000, f"Track {i} found_starts looks like garbage: {start}" + assert end < 1000000, f"Track {i} found_ends looks like garbage: {end}"