Source code for compressed_lists.integer_list

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

import biocutils as ut

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 CompressedIntegerList(CompressedList): """CompressedList implementation for lists of integers."""
[docs] def __init__( self, unlist_data: ut.IntegerList, partitioning: Partitioning, element_metadata: Optional[dict] = None, metadata: Optional[dict] = None, **kwargs, ): """Initialize a CompressedIntegerList. Args: unlist_data: List of integers. partitioning: Partitioning object defining element boundaries. element_metadata: Optional metadata for elements. metadata: Optional general metadata. kwargs: Additional arguments. """ if not isinstance(unlist_data, ut.IntegerList): try: warn("trying to coerce 'unlist_data' to `IntegerList`..") unlist_data = ut.IntegerList(unlist_data) except Exception as e: raise TypeError("'unlist_data' must be an `IntegerList`, provided ", type(unlist_data)) from e super().__init__( unlist_data, partitioning, element_type=ut.IntegerList, element_metadata=element_metadata, metadata=metadata )
@splitAsCompressedList.register def _( data: ut.IntegerList, groups_or_partitions: Union[list, Partitioning], names: Optional[Sequence[str]] = None, metadata: Optional[dict] = None, ) -> CompressedIntegerList: """Handle lists of integers.""" partitioned_data, groups_or_partitions = _generic_register_helper( data=data, groups_or_partitions=groups_or_partitions, names=names ) if not isinstance(partitioned_data, ut.IntegerList): partitioned_data = ut.combine_sequences(*partitioned_data) return CompressedIntegerList(unlist_data=partitioned_data, partitioning=groups_or_partitions, metadata=metadata)