Skip to content

Commit

Permalink
add accessors for range lengths, use ndarray to represent range lengths
Browse files Browse the repository at this point in the history
  • Loading branch information
jkanche committed Jan 23, 2024
1 parent f462796 commit 0c899ae
Showing 1 changed file with 23 additions and 3 deletions.
26 changes: 23 additions & 3 deletions src/genomicranges/GenomicRangesList.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

import biocutils as ut
from biocframe import BiocFrame
import numpy as np

from .GenomicRanges import GenomicRanges

Expand Down Expand Up @@ -52,6 +53,13 @@ def _validate_optional_attrs(mcols, names, num_ranges):
if any(x is None for x in names):
raise ValueError("'names' cannot contain None values.")

def _sanitize_range_lengths(x):
if not isinstance(x, np.ndarray):
return np.array(x, dtype=np.int32)

return x



class GenomicRangesListIter:
"""An iterator to a :py:class:`~GenomicRangesList` object."""
Expand Down Expand Up @@ -123,7 +131,7 @@ class GenomicRangesList:
def __init__(
self,
ranges: Union[GenomicRanges, List[GenomicRanges]],
range_lengths: Optional[List[int]] = None,
range_lengths: Optional[Sequence[int]] = None,
names: Optional[List[str]] = None,
mcols: Optional[BiocFrame] = None,
metadata: Optional[dict] = None,
Expand Down Expand Up @@ -161,8 +169,8 @@ def __init__(
if isinstance(ranges, list):
range_lengths = [len(x) for x in ranges]
else:
range_lengths = [1]
self._range_lengths = range_lengths
range_lengths = [len(ranges)]
self._range_lengths = _sanitize_range_lengths(range_lengths)

if mcols is None:
mcols = BiocFrame(number_of_rows=len(range_lengths))
Expand Down Expand Up @@ -704,6 +712,18 @@ def is_circular(self) -> Dict[str, List[int]]:
"""
return self._generic_accessor("is_circular")

def get_range_lengths(self) -> dict:
"""
Returns:
Number of ranges for each genomic element.
"""
return self._range_lengths

@property
def range_lengths(self) -> dict:
"""Alias for :py:attr:`~get_range_lengths`."""
return self.get_range_lengths()

###################################
######>> pandas interop <<#########
###################################
Expand Down

0 comments on commit 0c899ae

Please sign in to comment.