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