Skip to content

Commit 839b0fe

Browse files
committed
Use IntegerList and BooleanList for seqinfo's attributes
1 parent 3ac7356 commit 839b0fe

File tree

2 files changed

+21
-14
lines changed

2 files changed

+21
-14
lines changed

src/genomicranges/SeqInfo.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def _validate_seqnames(seqnames):
2020

2121

2222
def _validate_seqlengths(seqlengths, num_seqs):
23-
if not ut.is_list_of_type(seqlengths, int, ignore_none=True):
23+
if not (isinstance(seqlengths, ut.IntegerList) or ut.is_list_of_type(seqlengths, int, ignore_none=True)):
2424
raise ValueError("'seqlengths' should be a list of integers.")
2525

2626
if num_seqs != len(seqlengths):
@@ -32,7 +32,7 @@ def _validate_seqlengths(seqlengths, num_seqs):
3232

3333

3434
def _validate_is_circular(is_circular, num_seqs):
35-
if not ut.is_list_of_type(is_circular, bool, ignore_none=True):
35+
if not (isinstance(is_circular, ut.BooleanList) or ut.is_list_of_type(is_circular, bool, ignore_none=True)):
3636
raise ValueError("'is_circular' should be a list of booleans.")
3737

3838
if num_seqs != len(is_circular):
@@ -141,8 +141,8 @@ def __init__(
141141
"""
142142
self._seqnames = list(seqnames)
143143
self._reverse_seqnames = None
144-
self._seqlengths = self._flatten_incoming(seqlengths, int)
145-
self._is_circular = self._flatten_incoming(is_circular, bool)
144+
self._seqlengths = ut.IntegerList(self._flatten_incoming(seqlengths, int))
145+
self._is_circular = ut.BooleanList(self._flatten_incoming(is_circular, bool))
146146
self._genome = self._flatten_incoming(genome, str)
147147

148148
if validate:
@@ -359,7 +359,7 @@ def seqnames(self, seqnames: Sequence[str]):
359359
######>> seqlengths <<######
360360
############################
361361

362-
def get_seqlengths(self) -> List[int]:
362+
def get_seqlengths(self) -> ut.IntegerList:
363363
"""
364364
Returns:
365365
A list of integers is returned containing the lengths of all
@@ -399,7 +399,7 @@ def set_seqlengths(
399399
return output
400400

401401
@property
402-
def seqlengths(self) -> List[int]:
402+
def seqlengths(self) -> ut.IntegerList:
403403
warn(
404404
"'seqlengths' is deprecated, use 'get_seqlengths' instead",
405405
UserWarning,
@@ -419,7 +419,7 @@ def seqlengths(self, seqlengths: Optional[Union[int, Sequence[int], Dict[str, in
419419
######>> is-circular <<######
420420
#############################
421421

422-
def get_is_circular(self) -> List[bool]:
422+
def get_is_circular(self) -> ut.BooleanList:
423423
"""
424424
Returns:
425425
A list of booleans is returned specifying whether each sequence
@@ -459,7 +459,7 @@ def set_is_circular(
459459
return output
460460

461461
@property
462-
def is_circular(self) -> List[bool]:
462+
def is_circular(self) -> ut.BooleanList:
463463
warn(
464464
"'is_circular' is deprecated, use 'get_is_circular' instead",
465465
UserWarning,

tests/test_SeqInfo.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@ def test_create_SeqInfo():
2020
)
2121

2222
assert len(seq) == 3
23-
assert seq.get_is_circular() == circ
23+
assert list(seq.get_is_circular()) == circ
2424
assert seq.get_genome() == ["hg19"] * 3
25-
assert seq.get_seqlengths() == [100, 101, 102]
25+
assert list(seq.get_seqlengths()) == [100, 101, 102]
2626

2727
assert seq.get_seqnames() == ["chr1", "chr2", "chr3"]
2828
seq2 = seq.set_seqlengths({"chr2": 500, "chr1": 123, "chr3": 99})
29-
assert seq2.get_seqlengths() == [123, 500, 99]
29+
assert list(seq2.get_seqlengths()) == [123, 500, 99]
3030

3131
seq2 = seq.set_is_circular(False)
3232
assert seq2.get_is_circular() == [False] * 3
@@ -113,7 +113,7 @@ def test_subset_seqinfo():
113113

114114
assert isinstance(subset, SeqInfo)
115115
assert subset.seqnames == ["chr2", "chr3"]
116-
assert subset.seqlengths == [101, 102]
116+
assert list(subset.seqlengths) == [101, 102]
117117

118118

119119
def test_merge_SeqInfo():
@@ -139,8 +139,8 @@ def test_merge_SeqInfo():
139139

140140
combined = merge_SeqInfo([seq, seq2])
141141
assert combined.get_seqnames() == ["chr1", "chr2", "chr3", "chr4", "chr5"]
142-
assert combined.get_seqlengths() == [100, 101, None, 101, 102]
143-
assert combined.get_is_circular() == [False, True, False, True, False]
142+
assert list(combined.get_seqlengths()) == [100, 101, None, 101, 102]
143+
assert list(combined.get_is_circular()) == [False, True, False, True, False]
144144
assert combined.get_genome() == ["hg19", "hg19", None, "hg38", "hg38"]
145145

146146

@@ -160,3 +160,10 @@ def test_copy_SeqInfo():
160160

161161
deepcopy_seq = deepcopy(seq)
162162
assert seq.seqnames == deepcopy_seq.seqnames
163+
164+
165+
def test_seqlength_types():
166+
s = SeqInfo(["A"], seqlengths=[np.uint64(100)])
167+
168+
assert isinstance(s, SeqInfo)
169+
assert list(s._seqlengths) == [100]

0 commit comments

Comments
 (0)