Skip to content

Commit e8699b8

Browse files
committed
add tests for HTM scale-up
1 parent 15d63bc commit e8699b8

File tree

5 files changed

+134
-23
lines changed

5 files changed

+134
-23
lines changed

resources/ResourceFile_HIV.xlsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
version https://git-lfs.github.com/spec/v1
2-
oid sha256:4374824d53560c242209c1bc9de234ef5f1558b7274652efe1781167e44ad0ba
3-
size 161921
2+
oid sha256:e2e350ab8e94335c48220455cd573386b67064675ec4ebe126a345234aeb70d5
3+
size 161944
+2-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
version https://git-lfs.github.com/spec/v1
2-
oid sha256:924528f79e315c390b940881944e4756bbbba60ad05f6bbc925b0c1a10977d9b
3-
size 67588
2+
oid sha256:d9cb6ef00e472cf0951585fdbc2d6b3398ef7ef7f16b126cc435d67df42189f2
3+
size 68529

src/tlo/methods/hiv.py

+15-6
Original file line numberDiff line numberDiff line change
@@ -1226,26 +1226,35 @@ def update_parameters(self):
12261226
scaled_params.loc[
12271227
scaled_params.parameter == "rdt_testing_rates", "scaleup_value"].values[0]
12281228

1229-
12301229
# treatment reaches XX
12311230
# no default between testing and treatment, governed by tx availability
12321231

12331232
# coverage IPTp reaches XX
1233+
# given during ANC visits and MalariaIPTp Event which selects ALL eligible women
12341234

1235-
# treatment success reaches 1
1235+
# treatment success reaches 1 - default is currently 1 also
12361236
self.sim.modules["Malaria"].parameters["prob_of_treatment_success"] = scaled_params.loc[
12371237
scaled_params.parameter == "prob_of_treatment_success", "scaleup_value"].values[0]
12381238

12391239
# bednet and ITN coverage
1240-
# set IRS for all districts
1240+
# set IRS for 4 high-risk districts
12411241
# lookup table created in malaria read_parameters
12421242
# produces self.itn_irs called by malaria poll to draw incidence
12431243
# need to overwrite this
1244-
self.sim.modules["Malaria"].itn_irs['irs_rate'] = scaled_params.loc[
1244+
highrisk_distr_num = self.sim.modules["Malaria"].parameters["highrisk_districts"]["district_num"]
1245+
1246+
# Find indices where District_Num is in highrisk_distr_num
1247+
mask = self.sim.modules["Malaria"].itn_irs['irs_rate'].index.get_level_values('District_Num').isin(
1248+
highrisk_distr_num)
1249+
1250+
# IRS values can be 0 or 0.8 - no other value in lookup table
1251+
self.sim.modules["Malaria"].itn_irs['irs_rate'].loc[mask] = scaled_params.loc[
12451252
scaled_params.parameter == "irs_district", "scaleup_value"].values[0]
12461253

1247-
# set ITN or all districts
1248-
# itn_district
1254+
# set ITN for all districts
1255+
# Set these values to 0.7 - this is the max value possible in lookup table
1256+
# equivalent to 0.7 of all pop sleeping under bednet
1257+
# household coverage could be 100%, but not everyone in household sleeping under bednet
12491258
self.sim.modules["Malaria"].itn_irs['itn_rate'] = scaled_params.loc[
12501259
scaled_params.parameter == "itn_district", "scaleup_value"].values[0]
12511260

src/tlo/methods/malaria.py

+3
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,8 @@ def __init__(self, name=None, resourcefilepath=None):
180180
"prob_of_treatment_success": Parameter(
181181
Types.REAL, "probability malaria treatment cures and clears parasitaemia"
182182
),
183+
"highrisk_districts": Parameter(Types.LIST, "list of four malaria high-risk districts"
184+
),
183185
}
184186

185187
PROPERTIES = {
@@ -234,6 +236,7 @@ def read_parameters(self, data_folder):
234236

235237
p["sev_symp_prob"] = workbook["severe_symptoms"]
236238
p["rdt_testing_rates"] = workbook["WHO_TestData2023"]
239+
p["highrisk_districts"] = workbook["highrisk_districts"]
237240

238241
p["inf_inc"] = pd.read_csv(self.resourcefilepath / "malaria" / "ResourceFile_malaria_InfInc_expanded.csv")
239242
p["clin_inc"] = pd.read_csv(self.resourcefilepath / "malaria" / "ResourceFile_malaria_ClinInc_expanded.csv")

tests/test_HTMscaleup.py

+112-13
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
from pathlib import Path
55

66
import pandas as pd
7-
import pytest
87

98
from tlo import Date, Simulation
109
from tlo.methods import (
@@ -67,6 +66,27 @@ def get_sim(seed, scaleup_hiv=False, scaleup_tb=False, scaleup_malaria=False, sc
6766
return sim
6867

6968

69+
def check_initial_params(sim):
70+
71+
original_params = pd.read_excel(
72+
os.path.join(resourcefilepath, "ResourceFile_HIV.xlsx"),
73+
sheet_name="parameters",
74+
)
75+
76+
# todo do we need to be exhaustive and check every parameter here?
77+
# check initial parameters
78+
assert sim.modules["Hiv"].parameters["beta"] == \
79+
original_params.loc[original_params.parameter_name == "beta", "value"].values[0]
80+
assert sim.modules["Hiv"].parameters["prob_prep_for_fsw_after_hiv_test"] == original_params.loc[
81+
original_params.parameter_name == "prob_prep_for_fsw_after_hiv_test", "value"].values[0]
82+
assert sim.modules["Hiv"].parameters["prob_prep_for_agyw"] == original_params.loc[
83+
original_params.parameter_name == "prob_prep_for_agyw", "value"].values[0]
84+
assert sim.modules["Hiv"].parameters["probability_of_being_retained_on_prep_every_3_months"] == original_params.loc[
85+
original_params.parameter_name == "probability_of_being_retained_on_prep_every_3_months", "value"].values[0]
86+
assert sim.modules["Hiv"].parameters["prob_circ_after_hiv_test"] == original_params.loc[
87+
original_params.parameter_name == "prob_circ_after_hiv_test", "value"].values[0]
88+
89+
7090
def test_hiv_scale_up(seed):
7191
""" test hiv program scale-up changes parameters correctly
7292
and on correct date """
@@ -86,17 +106,7 @@ def test_hiv_scale_up(seed):
86106
sim = get_sim(seed=seed, scaleup_hiv=True, scaleup_start_date=scaleup_start_date)
87107

88108
# check initial parameters
89-
# todo do we need to be exhaustive and check every parameter here?
90-
assert sim.modules["Hiv"].parameters["beta"] == \
91-
original_params.loc[original_params.parameter_name == "beta", "value"].values[0]
92-
assert sim.modules["Hiv"].parameters["prob_prep_for_fsw_after_hiv_test"] == original_params.loc[
93-
original_params.parameter_name == "prob_prep_for_fsw_after_hiv_test", "value"].values[0]
94-
assert sim.modules["Hiv"].parameters["prob_prep_for_agyw"] == original_params.loc[
95-
original_params.parameter_name == "prob_prep_for_agyw", "value"].values[0]
96-
assert sim.modules["Hiv"].parameters["probability_of_being_retained_on_prep_every_3_months"] == original_params.loc[
97-
original_params.parameter_name == "probability_of_being_retained_on_prep_every_3_months", "value"].values[0]
98-
assert sim.modules["Hiv"].parameters["prob_circ_after_hiv_test"] == original_params.loc[
99-
original_params.parameter_name == "prob_circ_after_hiv_test", "value"].values[0]
109+
check_initial_params(sim)
100110

101111
# Make the population
102112
sim.make_initial_population(n=popsize)
@@ -113,7 +123,7 @@ def test_hiv_scale_up(seed):
113123
assert sim.modules["Hiv"].parameters["prob_circ_after_hiv_test"] == new_params.loc[
114124
new_params.parameter == "prob_circ_after_hiv_test", "scaleup_value"].values[0]
115125

116-
# check TB and malaria parameters unchanged
126+
# check malaria parameters unchanged
117127
mal_workbook = pd.read_excel(
118128
os.path.join(resourcefilepath, "malaria/ResourceFile_Malaria.xlsx"),
119129
sheet_name=None,
@@ -126,5 +136,94 @@ def test_hiv_scale_up(seed):
126136
pd.testing.assert_series_equal(sim.modules["Malaria"].parameters["rdt_testing_rates"]["Rate_rdt_testing"],
127137
mal_rdt_testing["Rate_rdt_testing"])
128138

139+
# all irs coverage levels should be < 1.0
140+
assert sim.modules["Malaria"].itn_irs['irs_rate'].all() < 1.0
141+
# itn rates for 2019 onwards
142+
assert sim.modules["Malaria"].parameters["itn"] == mal_original_params.loc[
143+
mal_original_params.parameter_name == "itn", "value"].values[0]
144+
145+
# check tb parameters unchanged
146+
tb_workbook = pd.read_excel(
147+
os.path.join(resourcefilepath, "ResourceFile_TB.xlsx"),
148+
sheet_name=None,
149+
)
150+
tb_original_params = tb_workbook["parameters"]
151+
tb_testing = tb_workbook["NTP2019"]
152+
153+
pd.testing.assert_series_equal(sim.modules["Tb"].parameters["rate_testing_active_tb"]["treatment_coverage"],
154+
tb_testing["treatment_coverage"])
155+
assert sim.modules["Tb"].parameters["prob_tx_success_ds"] == tb_original_params.loc[
156+
tb_original_params.parameter_name == "prob_tx_success_ds", "value"].values[0]
157+
assert sim.modules["Tb"].parameters["prob_tx_success_mdr"] == tb_original_params.loc[
158+
tb_original_params.parameter_name == "prob_tx_success_mdr", "value"].values[0]
159+
assert sim.modules["Tb"].parameters["prob_tx_success_0_4"] == tb_original_params.loc[
160+
tb_original_params.parameter_name == "prob_tx_success_0_4", "value"].values[0]
161+
assert sim.modules["Tb"].parameters["prob_tx_success_5_14"] == tb_original_params.loc[
162+
tb_original_params.parameter_name == "prob_tx_success_5_14", "value"].values[0]
163+
assert sim.modules["Tb"].parameters["first_line_test"] == tb_original_params.loc[
164+
tb_original_params.parameter_name == "first_line_test", "value"].values[0]
165+
166+
167+
def test_htm_scale_up(seed):
168+
""" test hiv/tb/malaria program scale-up changes parameters correctly
169+
and on correct date """
170+
171+
workbook = pd.read_excel(
172+
os.path.join(resourcefilepath, "ResourceFile_HIV.xlsx"),
173+
sheet_name=None,
174+
)
175+
176+
# Load data on HIV prevalence
177+
original_params = workbook["parameters"]
178+
new_params = workbook["scaleup_parameters"]
179+
scaleup_start_date = Date(2011, 1, 1)
180+
181+
popsize = 100
182+
183+
sim = get_sim(seed=seed, scaleup_hiv=True, scaleup_tb=True, scaleup_malaria=True,
184+
scaleup_start_date=scaleup_start_date)
185+
186+
# check initial parameters
187+
check_initial_params(sim)
188+
189+
# Make the population
190+
sim.make_initial_population(n=popsize)
191+
sim.simulate(end_date=scaleup_start_date + pd.DateOffset(days=1))
192+
193+
# check HIV parameters changed
194+
assert sim.modules["Hiv"].parameters["beta"] < original_params.loc[original_params.parameter_name == "beta", "value"].values[0]
195+
assert sim.modules["Hiv"].parameters["prob_prep_for_fsw_after_hiv_test"] == new_params.loc[
196+
new_params.parameter == "prob_prep_for_fsw_after_hiv_test", "scaleup_value"].values[0]
197+
assert sim.modules["Hiv"].parameters["prob_prep_for_agyw"] == new_params.loc[
198+
new_params.parameter == "prob_prep_for_agyw", "scaleup_value"].values[0]
199+
assert sim.modules["Hiv"].parameters["probability_of_being_retained_on_prep_every_3_months"] == new_params.loc[
200+
new_params.parameter == "probability_of_being_retained_on_prep_every_3_months", "scaleup_value"].values[0]
201+
assert sim.modules["Hiv"].parameters["prob_circ_after_hiv_test"] == new_params.loc[
202+
new_params.parameter == "prob_circ_after_hiv_test", "scaleup_value"].values[0]
129203

204+
# check malaria parameters changed
205+
assert sim.modules["Malaria"].parameters["prob_malaria_case_tests"] == new_params.loc[
206+
new_params.parameter == "prob_malaria_case_tests", "scaleup_value"].values[0]
207+
assert sim.modules["Malaria"].parameters["rdt_testing_rates"]["Rate_rdt_testing"].eq(new_params.loc[
208+
new_params.parameter == "rdt_testing_rates", "scaleup_value"].values[0]).all()
209+
210+
# some irs coverage levels should now = 1.0
211+
assert sim.modules["Malaria"].itn_irs['irs_rate'].any() == 1.0
212+
# itn rates for 2019 onwards
213+
assert sim.modules["Malaria"].parameters["itn"] == new_params.loc[
214+
new_params.parameter == "itn", "scaleup_value"].values[0]
215+
216+
# check tb parameters changed
217+
assert sim.modules["Tb"].parameters["rate_testing_active_tb"]["treatment_coverage"].eq(new_params.loc[
218+
new_params.parameter == "tb_treatment_coverage", "scaleup_value"].values[0]).all()
219+
assert sim.modules["Tb"].parameters["prob_tx_success_ds"] == new_params.loc[
220+
new_params.parameter == "tb_prob_tx_success_ds", "scaleup_value"].values[0]
221+
assert sim.modules["Tb"].parameters["prob_tx_success_mdr"] == new_params.loc[
222+
new_params.parameter == "tb_prob_tx_success_mdr", "scaleup_value"].values[0]
223+
assert sim.modules["Tb"].parameters["prob_tx_success_0_4"] == new_params.loc[
224+
new_params.parameter == "tb_prob_tx_success_0_4", "scaleup_value"].values[0]
225+
assert sim.modules["Tb"].parameters["prob_tx_success_5_14"] == new_params.loc[
226+
new_params.parameter == "tb_prob_tx_success_5_14", "scaleup_value"].values[0]
227+
assert sim.modules["Tb"].parameters["first_line_test"] == new_params.loc[
228+
new_params.parameter == "first_line_test", "scaleup_value"].values[0]
130229

0 commit comments

Comments
 (0)