Skip to content

Commit e07f14a

Browse files
authored
Merge pull request #1150 from khushthecoder/GH1108-plasmodium-truthiness-bug
Fix #1108: Replace truthiness checks with explicit None checks in gen…
2 parents 0b58f9e + 9acc59f commit e07f14a

5 files changed

Lines changed: 36 additions & 13 deletions

File tree

malariagen_data/anoph/genome_sequence.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,13 @@ def genome_sequence(
117117

118118
# Deal with region start and stop.
119119
slice_start = slice_stop = None
120-
if resolved_region.start:
120+
if resolved_region.start is not None:
121+
if resolved_region.start < 1:
122+
raise ValueError("Region start must be >= 1 or None.")
121123
slice_start = resolved_region.start - 1
122-
if resolved_region.end:
124+
if resolved_region.end is not None:
125+
if resolved_region.end < 1:
126+
raise ValueError("Region end must be >= 1 or None.")
123127
slice_stop = resolved_region.end
124128
loc_region = slice(slice_start, slice_stop)
125129

malariagen_data/anoph/snp_data.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1719,7 +1719,7 @@ def is_accessible(
17191719

17201720
# Access SNP site positions.
17211721
pos = self.snp_sites(region=resolved_region, field="POS").compute()
1722-
if resolved_region.start:
1722+
if resolved_region.start is not None:
17231723
offset = resolved_region.start
17241724
else:
17251725
offset = 1

malariagen_data/anoph/snp_frq.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -671,8 +671,10 @@ def snp_allele_frequencies_advanced(
671671

672672
# Check for no SNPs remaining after applying variant query.
673673
if np.count_nonzero(loc_variants) == 0:
674-
raise ValueError(
675-
f"No SNPs remaining after applying variant query {variant_query!r}."
674+
warnings.warn(
675+
f"No SNPs remaining after applying variant query {variant_query!r}. "
676+
"Returning dataset with zero variants.",
677+
stacklevel=2,
676678
)
677679

678680
# Convert boolean mask to integer indices for NumPy 2.x compatibility
@@ -813,8 +815,10 @@ def aa_allele_frequencies_advanced(
813815

814816
# Check for no SNPs remaining after applying variant query.
815817
if np.count_nonzero(loc_variants) == 0:
816-
raise ValueError(
817-
f"No SNPs remaining after applying variant query {variant_query!r}."
818+
warnings.warn(
819+
f"No SNPs remaining after applying variant query {variant_query!r}. "
820+
"Returning dataset with zero variants.",
821+
stacklevel=2,
818822
)
819823

820824
# Convert boolean mask to integer indices for NumPy 2.x compatibility

tests/anoph/test_genome_sequence.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from malariagen_data import af1 as _af1
1010
from malariagen_data import ag3 as _ag3
1111
from malariagen_data.anoph.genome_sequence import AnophelesGenomeSequenceData
12+
from malariagen_data.util import Region
1213

1314

1415
@pytest.fixture
@@ -123,5 +124,14 @@ def test_genome_sequence_virtual_contigs(ag3_sim_api, chrom):
123124
seq_region = api.genome_sequence(region=region)
124125
assert isinstance(seq_region, da.Array)
125126
assert seq_region.ndim == 1
126-
assert seq_region.dtype == seq.dtype
127127
assert seq_region.shape[0] == stop - start + 1
128+
129+
130+
@parametrize_with_cases("fixture,api", cases=".")
131+
def test_genome_sequence_invalid_region(fixture, api):
132+
for contig in fixture.contigs:
133+
with pytest.raises(ValueError, match="Region start must be >= 1 or None."):
134+
api.genome_sequence(region=Region(contig, start=0, end=100))
135+
136+
with pytest.raises(ValueError, match="Region end must be >= 1 or None."):
137+
api.genome_sequence(region=Region(contig, start=1, end=0))

tests/anoph/test_snp_frq.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1520,24 +1520,29 @@ def test_allele_frequencies_advanced_with_variant_query(
15201520
variant_query=variant_query,
15211521
)
15221522

1523-
# Test a query that should fail.
1523+
# Test a query that should warn and return empty.
15241524
variant_query = "effect == 'foobar'"
1525-
with pytest.raises(ValueError):
1526-
api.snp_allele_frequencies_advanced(
1525+
with pytest.warns(UserWarning):
1526+
ds_snp = api.snp_allele_frequencies_advanced(
15271527
transcript=transcript,
15281528
sample_sets=all_sample_sets,
15291529
area_by=area_by,
15301530
period_by=period_by,
15311531
variant_query=variant_query,
1532+
min_cohort_size=0,
15321533
)
1533-
with pytest.raises(ValueError):
1534-
api.aa_allele_frequencies_advanced(
1534+
assert ds_snp.sizes["variants"] == 0
1535+
1536+
with pytest.warns(UserWarning):
1537+
ds_aa = api.aa_allele_frequencies_advanced(
15351538
transcript=transcript,
15361539
sample_sets=all_sample_sets,
15371540
area_by=area_by,
15381541
period_by=period_by,
15391542
variant_query=variant_query,
1543+
min_cohort_size=0,
15401544
)
1545+
assert ds_aa.sizes["variants"] == 0
15411546

15421547

15431548
@pytest.mark.parametrize("nobs_mode", ["called", "fixed"])

0 commit comments

Comments
 (0)