Source code for compressed_lists.numpy_list

from typing import List, Optional, Sequence, Union
from warnings import warn

import biocutils as ut
import numpy as np

from .base import CompressedList
from .partition import Partitioning
from .split_generic import _generic_register_helper, splitAsCompressedList

__author__ = "Jayaram Kancherla"
__copyright__ = "Jayaram Kancherla"
__license__ = "MIT"


[docs] class CompressedNumpyList(CompressedList): """CompressedList implementation for lists of NumPy vectors."""
[docs] def __init__( self, unlist_data: np.ndarray, partitioning: Partitioning, element_metadata: Optional[dict] = None, metadata: Optional[dict] = None, **kwargs, ): """Initialize a CompressedNumpyList. Args: unlist_data: List of NumPy vectors. partitioning: Partitioning object defining element boundaries. element_metadata: Optional metadata for elements. metadata: Optional general metadata. kwargs: Additional arguments. """ if not isinstance(unlist_data, np.ndarray): try: warn("trying to concatenate/coerce 'unlist_data' to a `np.ndarray`..") unlist_data = np.concatenate(unlist_data) except Exception as e: raise TypeError("'unlist_data' must be an `np.ndarray`, provided ", type(unlist_data)) from e super().__init__( unlist_data, partitioning, element_type=np.ndarray, element_metadata=element_metadata, metadata=metadata )
[docs] @classmethod def from_list( cls, lst: List[np.ndarray], names: Optional[Sequence[str]] = None, metadata: Optional[dict] = None ) -> "CompressedNumpyList": """ Create a `CompressedNumpyList` from a list of NumPy vectors. Args: lst: List of NumPy vectors. names: Optional names for list elements. metadata: Optional metadata. Returns: A new `CompressedNumpyList`. """ partitioning = Partitioning.from_list(lst, names) if len(lst) == 0: unlist_data = np.array([]) else: unlist_data = np.concatenate(lst) return cls(unlist_data, partitioning, metadata=metadata)
@splitAsCompressedList.register def _( data: np.ndarray, groups_or_partitions: Union[list, Partitioning], names: Optional[Sequence[str]] = None, metadata: Optional[dict] = None, ) -> CompressedNumpyList: """Handle NumPy arrays.""" partitioned_data, groups_or_partitions = _generic_register_helper( data=data, groups_or_partitions=groups_or_partitions, names=names ) if not isinstance(partitioned_data, np.ndarray): partitioned_data = ut.combine_sequences(*partitioned_data) return CompressedNumpyList(unlist_data=partitioned_data, partitioning=groups_or_partitions, metadata=metadata)