def testMosquitoBite(self): r_pop = parasite.ParasitePop(count=200000) s_pop = parasite.ParasitePop(count=800000) infection = infx.Infection({'R': r_pop, 'S': s_pop}, max_size=10000000) host = hs.Host(infection=infection) host.mosquito_bite(blood_dilution=1e-2) self.assertTrue(host.infection.parasite_pops['R'].count > 1500 and host.infection.parasite_pops['R'].count < 2500) self.assertTrue(host.infection.parasite_pops['S'].count > 7500 and host.infection.parasite_pops['S'].count < 8500) r_pop = parasite.ParasitePop(count=20) s_pop = parasite.ParasitePop(count=80) infection = infx.Infection({'R': r_pop, 'S': s_pop}, max_size=10000) host = hs.Host(infection=infection) xpass = False try: host.mosquito_bite(blood_dilution=1.1) except: xpass = True self.assertTrue(xpass) host.mosquito_bite(blood_dilution=1e-9) self.assertEqual(0, host.infection.get_total_count()) self.assertEqual('MOSQUITO_BITE', host.history[-2]) self.assertEqual(host.history[-1].parasite_pops['R'].count, host.infection.parasite_pops['R'].count)
def testHistoryToDataFrame(self): r_pop = parasite.ParasitePop(count=200000, resistance=0.9) s_pop = parasite.ParasitePop(count=800000, resistance=0.2) infection = infx.Infection({'R': r_pop, 'S': s_pop}, max_size=10000000) host = hs.Host(infection=infection) host.mosquito_bite(blood_dilution=1e-4) host.reproduce_parasites(times=8) host.apply_treatment() df = host.to_dataframe() self.assertEqual([ 'count', 'event', 'pop_name', 'repr_rate', 'resistance', 'time_point', 'transmissibility' ], sorted(df.columns)) self.assertEqual(22, df.shape[0]) self.assertEqual(['R', 'S'] * int(df.shape[0] / 2), list(df['pop_name'])) self.assertEqual([0.9, 0.2] * int(df.shape[0] / 2), list(df['resistance'])) self.assertEqual([200000, 800000], list(df['count'][0:2])) self.assertTrue(df['count'][2] < 1000) self.assertTrue(df['count'][20] > 1000) self.assertEqual('MOSQUITO_BITE', df['event'][2]) self.assertEqual('TREATMENT', df['event'][20]) tp = [x for x in range(0, 11) for i in range(2)] self.assertEqual(tp, list(df['time_point']))
def testHostCanReplicateOnePopParasites(self): pop = parasite.ParasitePop(count=100, repr_rate=2.5) infection = infx.Infection({'pop': pop}, max_size=100000) host = hs.Host(infection=infection) host.reproduce_parasites(times=30) last_pop = host.get_infection_history()[-1] self.assertTrue(last_pop.parasite_pops['pop'].count > 55000 and last_pop.parasite_pops['pop'].count < 65000) # repr_rate < 1: Pop does not support itself start = 100 pop = parasite.ParasitePop(count=start, repr_rate=0.7) infection = infx.Infection({'pop': pop}, max_size=100000) host = hs.Host(infection=infection) host.reproduce_parasites(times=30) last_pop = host.get_infection_history()[-1] self.assertTrue(last_pop.parasite_pops['pop'].count < start)
def testTryReproduceZeroParasites(self): s_pop = parasite.ParasitePop(count=10) infection = infx.Infection({'S': s_pop}, max_size=1000000) host = hs.Host(infection=infection) host.apply_treatment() host.apply_treatment() self.assertEqual(0, host.infection.parasite_pops['S'].count) host.reproduce_parasites(times=10) self.assertEqual(0, host.infection.parasite_pops['S'].count)
def testCanCreateInfectedHost(self): r_pop = parasite.ParasitePop(count=10) s_pop = parasite.ParasitePop(count=100) infection = infx.Infection({'R': r_pop, 'S': s_pop}, max_size=1000) self.assertEqual(2, len(infection.parasite_pops)) self.assertEqual(10, infection.parasite_pops['R'].count) self.assertEqual(100, infection.parasite_pops['S'].count) self.assertEqual(110, infection.get_total_count()) self.assertAlmostEqual(0.09, infection.get_percentages()['R'], places=2) host = hs.Host(infection=infection)
def testCanSetTransmissibility(self): r_pop = parasite.ParasitePop(count=10000, transmissibility=1) infection = infx.Infection({'R': r_pop}, max_size=1000000) host = hs.Host(infection=infection) host.mosquito_bite(blood_dilution=0.1) self.assertAlmostEqual(1000, host.infection.parasite_pops['R'].count, delta=200) r_pop = parasite.ParasitePop(count=10000, transmissibility=0) infection = infx.Infection({'R': r_pop}, max_size=1000000) host = hs.Host(infection=infection) host.mosquito_bite(blood_dilution=0.1) self.assertEqual(0, host.infection.parasite_pops['R'].count) r_pop = parasite.ParasitePop(count=10000, transmissibility=0.1) infection = infx.Infection({'R': r_pop}, max_size=1000000) host = hs.Host(infection=infection) host.mosquito_bite(blood_dilution=0.1) self.assertAlmostEqual(100, host.infection.parasite_pops['R'].count, delta=50)
def testHostTreatement(self): r_pop = parasite.ParasitePop(count=100, resistance=1) s_pop = parasite.ParasitePop(count=100, resistance=0.01) infection = infx.Infection({'R': r_pop, 'S': s_pop}, max_size=1000000) host = hs.Host(infection=infection) host.apply_treatment() self.assertTrue(host.infection.parasite_pops['R'].count > 10 and host.infection.parasite_pops['R'].count < 1000) self.assertTrue(host.infection.parasite_pops['S'].count < 10) # Treatment has been recorded in history: self.assertEqual('TREATMENT', host.history[-2]) self.assertEqual(host.history[-1].parasite_pops['R'].count, host.infection.parasite_pops['R'].count)
def testHostCanReplicateTwoEqualPops(self): pop1 = parasite.ParasitePop(count=100, repr_rate=1.5) pop2 = parasite.ParasitePop(count=100, repr_rate=1.5) infection = infx.Infection({ 'pop1': pop1, 'pop2': pop2 }, max_size=1000000) host = hs.Host(infection=infection) host.reproduce_parasites(times=20) last_pop = host.get_infection_history()[-1] df = host.to_dataframe() x = list(df[df.pop_name == 'pop1']['count']) y = list(df[df.pop_name == 'pop2']['count']) diff = [x[i] - y[i] for i in range(len(x))] self.assertAlmostEqual(0, max(diff), delta=100000)
def testHostCanReplicateParasites(self): s_pop = parasite.ParasitePop(count=100, repr_rate=1.5) f_pop = parasite.ParasitePop(count=100, repr_rate=2) infection = infx.Infection({ 'slow': s_pop, 'fast': f_pop }, max_size=10000000) host = hs.Host(infection=infection) host.reproduce_parasites(times=10) ih = host.get_infection_history() self.assertEqual(11, len(ih)) last_pop = ih[-1] self.assertTrue(last_pop.parasite_pops['slow'].count > 1000 and last_pop.parasite_pops['slow'].count < 8000) self.assertTrue(last_pop.parasite_pops['fast'].count > 60000 and last_pop.parasite_pops['fast'].count < 150000) self.assertEqual(last_pop.__str__(), host.infection.__str__())