Skip to content

Commit f4308ed

Browse files
authored
Merge branch 'master' into fix/veff-replace-asserts-with-exceptions
2 parents d946f3f + 14c2ab5 commit f4308ed

6 files changed

Lines changed: 58 additions & 21 deletions

File tree

malariagen_data/anoph/cnv_data.py

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import warnings
12
from typing import Dict, List, Optional, Tuple, Union
23

34
import dask.array as da
@@ -602,7 +603,9 @@ def _cnv_discordant_read_calls_dataset(
602603
)
603604
def cnv_discordant_read_calls(
604605
self,
605-
contig: base_params.contigs,
606+
contigs: Optional[base_params.contigs] = None,
607+
*,
608+
contig: Optional[base_params.contigs] = None,
606609
sample_sets: Optional[base_params.sample_sets] = None,
607610
sample_query: Optional[base_params.sample_query] = None,
608611
sample_query_options: Optional[base_params.sample_query_options] = None,
@@ -615,18 +618,29 @@ def cnv_discordant_read_calls(
615618
# CNV alleles have unknown start or end coordinates.
616619

617620
debug("normalise parameters")
621+
if contigs is not None and contig is not None:
622+
raise TypeError("Please provide only one of 'contigs' or 'contig'.")
623+
if contigs is None:
624+
if contig is None:
625+
raise TypeError("Missing required parameter 'contigs'.")
626+
warnings.warn(
627+
"Parameter 'contig' is deprecated; use 'contigs' instead.",
628+
DeprecationWarning,
629+
)
630+
contigs = contig
631+
618632
prepared_sample_sets = self._prep_sample_sets_param(sample_sets=sample_sets)
619633
prepared_sample_query = self._prep_sample_query_param(sample_query=sample_query)
620-
if isinstance(contig, str):
621-
contig = [contig]
634+
if isinstance(contigs, str):
635+
contigs = [contigs]
622636

623637
# Delete original parameters to prevent accidental use.
624638
del sample_sets
625639
del sample_query
626640

627641
debug("access data and concatenate as needed")
628642
lx = []
629-
for c in contig:
643+
for c in contigs:
630644
ly = []
631645
for s in prepared_sample_sets:
632646
y = self._cnv_discordant_read_calls_dataset(

malariagen_data/anoph/cnv_frq.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -586,7 +586,7 @@ def _gene_cnv_frequencies_advanced(
586586
nobs[:, cohort_index] = np.repeat(cohort_n_called, 2)
587587
else:
588588
assert nobs_mode == "fixed"
589-
nobs[:, cohort_index] = cohort.size * 2
589+
nobs[:, cohort_index] = cohort.size
590590

591591
debug("compute frequency")
592592
with np.errstate(divide="ignore", invalid="ignore"):

malariagen_data/anoph/frq_base.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,9 @@ def _add_frequency_ci(*, ds, ci_method):
140140
frq_ci_low, frq_ci_upp = proportion_confint(
141141
count=count, nobs=nobs, method=ci_method
142142
)
143+
loc_zero = nobs == 0
144+
frq_ci_low[loc_zero] = np.nan
145+
frq_ci_upp[loc_zero] = np.nan
143146
ds["event_frequency_ci_low"] = ("variants", "cohorts"), frq_ci_low
144147
ds["event_frequency_ci_upp"] = ("variants", "cohorts"), frq_ci_upp
145148

poetry.lock

Lines changed: 6 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,10 @@ BioPython = "*"
3636
scikit-allel = ">=1.3.13"
3737
xarray = "*"
3838
plotly = "*"
39-
# Bokeh 3.7.x causes type checking issues.
40-
# https://github.com/bokeh/bokeh/issues/14412
39+
# https://github.com/malariagen/malariagen-data-python/issues/845
4140
# https://github.com/malariagen/malariagen-data-python/issues/734
42-
bokeh = "<3.7.0"
41+
# https://github.com/malariagen/malariagen-data-python/issues/743
42+
bokeh = ">=3.7.0"
4343
statsmodels = ">=0.14.2"
4444
ipyleaflet = ">=0.17.0"
4545
ipywidgets = "*"
@@ -107,3 +107,10 @@ line-length = 88
107107

108108
[tool.ruff.lint]
109109
extend-select = []
110+
111+
[tool.mypy]
112+
ignore_missing_imports = true
113+
114+
[[tool.mypy.overrides]]
115+
module = ["bokeh", "bokeh.*"]
116+
follow_imports = "skip"

tests/anoph/test_cnv_data.py

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -564,7 +564,7 @@ def test_cnv_discordant_read_calls(fixture, api: AnophelesCnvData):
564564

565565
for sample_sets in parametrize_sample_sets:
566566
for contig in parametrize_contig:
567-
ds = api.cnv_discordant_read_calls(contig=contig, sample_sets=sample_sets)
567+
ds = api.cnv_discordant_read_calls(contigs=contig, sample_sets=sample_sets)
568568
assert isinstance(ds, xr.Dataset)
569569

570570
# check fields
@@ -631,18 +631,30 @@ def test_cnv_discordant_read_calls(fixture, api: AnophelesCnvData):
631631
match="No CNV discordant read calls data found|no CNVs available for contig",
632632
):
633633
api.cnv_discordant_read_calls(
634-
contig="foobar", sample_sets=random.choice(all_sample_sets)
634+
contigs="foobar", sample_sets=random.choice(all_sample_sets)
635635
)
636636

637637
# Check with a sample set that should not exist
638638
with pytest.raises(ValueError):
639639
api.cnv_discordant_read_calls(
640-
contig=random.choice(api.contigs), sample_sets="foobar"
640+
contigs=random.choice(api.contigs), sample_sets="foobar"
641641
)
642642

643643
# Check with a contig and sample set that should not exist
644644
with pytest.raises(ValueError):
645-
api.cnv_discordant_read_calls(contig="foobar", sample_sets="bazqux")
645+
api.cnv_discordant_read_calls(contigs="foobar", sample_sets="bazqux")
646+
647+
648+
@parametrize_with_cases("fixture,api", cases=".")
649+
def test_cnv_discordant_read_calls_deprecated_contig_alias(
650+
fixture, api: AnophelesCnvData
651+
):
652+
sample_set = random.choice(api.sample_sets()["sample_set"].to_list())
653+
contig = random.choice(api.contigs)
654+
ds_contigs = api.cnv_discordant_read_calls(contigs=contig, sample_sets=sample_set)
655+
with pytest.warns(DeprecationWarning, match="deprecated"):
656+
ds_contig = api.cnv_discordant_read_calls(contig=contig, sample_sets=sample_set)
657+
xr.testing.assert_identical(ds_contig, ds_contigs)
646658

647659

648660
def test_cnv_discordant_read_calls__sample_query(
@@ -670,13 +682,13 @@ def test_cnv_discordant_read_calls__sample_query(
670682
if len(df_samples) == 0:
671683
with pytest.raises(ValueError):
672684
ds = api.cnv_discordant_read_calls(
673-
contig=contig,
685+
contigs=contig,
674686
sample_sets=sample_sets,
675687
sample_query=sample_query,
676688
)
677689
else:
678690
ds = api.cnv_discordant_read_calls(
679-
contig=contig,
691+
contigs=contig,
680692
sample_sets=sample_sets,
681693
sample_query=sample_query,
682694
)
@@ -755,14 +767,14 @@ def test_cnv_discordant_read_calls__sample_query_options(
755767
if len(df_samples) == 0:
756768
with pytest.raises(ValueError):
757769
ds = api.cnv_discordant_read_calls(
758-
contig=contig,
770+
contigs=contig,
759771
sample_sets=sample_sets,
760772
sample_query=sample_query,
761773
sample_query_options=sample_query_options,
762774
)
763775
else:
764776
ds = api.cnv_discordant_read_calls(
765-
contig=contig,
777+
contigs=contig,
766778
sample_sets=sample_sets,
767779
sample_query=sample_query,
768780
sample_query_options=sample_query_options,

0 commit comments

Comments
 (0)