diff --git a/epi_inference/reconstruction/recon_stochastic_wf.py b/epi_inference/reconstruction/recon_stochastic_wf.py index 7483041..254b34b 100644 --- a/epi_inference/reconstruction/recon_stochastic_wf.py +++ b/epi_inference/reconstruction/recon_stochastic_wf.py @@ -2,7 +2,7 @@ import sys import datetime -#import pandas as pd +import pandas as pd from pyutilib.misc import timing from ..engine.task import Task @@ -11,11 +11,11 @@ from ..util import load_population, save_results from ..collect.misc import load_collect -from ..reconstruction.stochastic import stochastic_reconstruction +from ..reconstruction.stochastic import stochastic_reconstruction, stochastic_reconstruction_from_daily_transmissions from ..reconstruction.common import reported_cases_from_cumulative -def run_county(county, df, population, CONFIG, warnings): +def run_county(county, reported_cases_df, population, CONFIG, warnings, alternate_transmissions_df=None): # # Initialize results dictionary # @@ -26,23 +26,60 @@ def run_county(county, df, population, CONFIG, warnings): # # Get the cumulative cases # - cumulative_reported_cases = df[county].to_list() + cumulative_reported_cases = reported_cases_df[county].to_list() - # reconstruct the states - Cdates = [datetime.date.fromisoformat(day) for day in df.index.to_list()] + # + # Get the reported cases per day from the cumulative reported cases + Cdates = [datetime.date.fromisoformat(day) for day in reported_cases_df.index.to_list()] reported_cases_per_day = \ reported_cases_from_cumulative(dates=Cdates, cumulative_reported_cases=cumulative_reported_cases) + # # Setup arguments for stochastic_reconstruction - args = {'dates':reported_cases_per_day.dates, - 'reported_cases_per_day':reported_cases_per_day.values, - 'population':population, - 'n_steps_per_day':CONFIG['n_steps_per_day']} - for option in ['reporting_delay_mean', 'reporting_delay_dev', 'reporting_multiplier', 'fixed_incubation', 'infectious_lower', 'infectious_upper', 'seed']: - if option in CONFIG: - args[option] = CONFIG[option] - res = stochastic_reconstruction(**args) + # + if 'alternate_transmissions_file' in CONFIG: + assert alternate_transmissions_df is not None + # merge the reported cases for the county in with the transmissions + + dates = [datetime.date.fromisoformat(day) for day in alternate_transmissions_df.index.to_list()] + args = {'dates':dates, + 'transmissions': alternate_transmissions_df[county].to_list(), + 'population':population, + 'n_steps_per_day':CONFIG['n_steps_per_day']} + for option in ['fixed_incubation', 'infectious_lower', 'infectious_upper', 'seed']: + if option in CONFIG: + args[option] = CONFIG[option] + res = stochastic_reconstruction_from_daily_transmissions(**args) + + # add the reported cases to the results (need to match the dates - this could be done more efficiently + date_set = set(dates) + # get the reported cases for each day in dates + reported_cases_dict = {d:v for d,v in zip(reported_cases_per_day.dates, reported_cases_per_day.values) if d in date_set} + original_reported_cases_for_dates = list() + found_first = False + for d in dates: + # check that all the transmission dates are in reported cases dict + if d not in reported_cases_dict: + # reported cases may start later than transmissions + # we allow this and put zeros on the front, but + # throw an error if a date is missing after the first + # coinciding dates + assert found_first is False + print(d, 'in dates, but not in reported_cases_dict') + original_reported_cases_for_dates.append(0) + else: + original_reported_cases_for_dates.append(reported_cases_dict[d]) + res.orig_rep_cases = original_reported_cases_for_dates + else: + args = {'dates':reported_cases_per_day.dates, + 'reported_cases_per_day':reported_cases_per_day.values, + 'population':population, + 'n_steps_per_day':CONFIG['n_steps_per_day']} + for option in ['reporting_delay_mean', 'reporting_delay_dev', 'reporting_multiplier', 'fixed_incubation', 'infectious_lower', 'infectious_upper', 'seed']: + if option in CONFIG: + args[option] = CONFIG[option] + res = stochastic_reconstruction(**args) results['dates'] = res.dates results['transmissions'] = res.transmissions @@ -65,7 +102,15 @@ def run(CONFIG, warnings): # # Load the case data # - df = load_collect(CONFIG['input_csv']) + reported_df = load_collect(CONFIG['input_csv']) + # + # Load transmissions file if it exists + # + transmissions_file = CONFIG.get('alternate_transmissions_file', None) + transmissions_df = None + if transmissions_file is not None: + transmissions_df = pd.read_csv(transmissions_file, index_col='Date') + # # Perform construction # @@ -73,7 +118,7 @@ def run(CONFIG, warnings): if 'county' in CONFIG: counties = [CONFIG['county']] else: - counties = df.keys() + counties = reported_df.keys() if CONFIG['verbose']: timing.tic() @@ -81,7 +126,8 @@ def run(CONFIG, warnings): if t not in population_df[CONFIG['population_csv']['population']]: warnings.append("WARNING: county %s does not have population data available" % str(t)) continue - results[t] = run_county(t, df, population_df[CONFIG['population_csv']['population']][t], CONFIG, warnings) + results[t] = run_county(t, reported_df, population_df[CONFIG['population_csv']['population']][t], + CONFIG, warnings, alternate_transmissions_df=transmissions_df) if CONFIG['verbose']: timing.toc("Serial Execution") # diff --git a/epi_inference/reconstruction/stochastic.py b/epi_inference/reconstruction/stochastic.py index e10fafb..dbf835f 100644 --- a/epi_inference/reconstruction/stochastic.py +++ b/epi_inference/reconstruction/stochastic.py @@ -159,7 +159,7 @@ def stochastic_reconstruction(*, dates, reported_cases_per_day, population, n_st # for the population value specified # Todo: flag a warning Stout = S[t] - + S[t+1] = S[t] - Stout Etout = np.random.binomial(E[t], prob_E[t]) E[t+1] = E[t] + Stout - Etout @@ -195,6 +195,136 @@ def stochastic_reconstruction(*, dates, reported_cases_per_day, population, n_st # compartments on the dates in tdates return Bunch(dates=t_daily_dates, S=S, E=E, I1=I1, I2=I2, I3=I3, R=R, transmissions=T, orig_rep_cases=output_reported_cases) +def stochastic_reconstruction_from_daily_transmissions(*, dates, transmissions, population, n_steps_per_day, + fixed_incubation=5.2, + infectious_lower=2.6, infectious_upper=6, + seed=0): + """ + This function computes a reconstruction of the SEIIIR compartments based on the transmissions provided. + The transmissions in time cause movement from S->E, and then a discrete-time SEIIIR model is used + to populate the compartments. + + Parameters + ---------- + dates : list + list of datetime objects corresponding to the dates of the transmissions + transmissions : list + list of the transmissions per day + population : float + population of this node (county) + n_steps_per_day : int + the number of timesteps to take in one day (e.g., value of 4 means the delta_t = 0.25 days) + fixed_incubation : float + the incubation period in days + infectious_lower : float + the infectious period is drawn from a uniform distribution between infectious_lower and infectious_upper + infectious_upper : float + the infectious period is drawn from a uniform distribution between infectious_lower and infectious_upper + seed: int + the seed for the random number generator + + Returns + ------- + dict : a dict of the dates and the compartments + """ + if seed: + np.random.seed(seed) + + n_r_days = len(dates) + assert len(dates) == len(transmissions) + + # create a vector representing the transmissions by timestep instead of by day + tcases_timestep = [0]*n_r_days*n_steps_per_day + # allocate cases "evenly" to the timesteps per day + for day_idx in range(len(transmissions)): + step_in_day = 0 + for i in range(transmissions[day_idx]): + tcases_timestep[day_idx*n_steps_per_day + step_in_day] += 1 + step_in_day += 1 + if step_in_day >= n_steps_per_day: + step_in_day = 0 + + # todo: add this back in - needed for downstream + #output_reported_cases = [0]*padding_days + #output_reported_cases.extend(reported_cases_per_day[: -int_delay]) + + # use these transmissions to generate a single stochastic reconstruction + # of each of the compartments (SEIIIR) + S = np.zeros(len(tcases_timestep)) + S[0] = population + E = np.zeros(len(tcases_timestep)) + I1 = np.zeros(len(tcases_timestep)) + I2 = np.zeros(len(tcases_timestep)) + I3 = np.zeros(len(tcases_timestep)) + R = np.zeros(len(tcases_timestep)) + + # Approach 1: + # - sigma is fixed at 1/5.2 days + # - serial interval is drawn from uniform 6.5-8.2, and used + # to compute gamma + # It might be better to just draw sigma and gamma from separate + # distributions here. + # Here, the serial interval is drawn once and that value is used + # for the entire simulation, however, it could be drawn for each day + # as well. + # Note: These are drawn for every day, but they are the same for each day + # - this is done so the code is ready for different values on each day if + # we decide to do that. + sigma = 1.0/fixed_incubation*np.ones(len(tcases_timestep)) # days + infectious_period = np.random.uniform(infectious_lower, infectious_upper)*np.ones(len(tcases_timestep)) # CDL , size=len(tcases_timestep)) + gamma = np.reciprocal(infectious_period) + + prob_E = 1-np.exp(-1.0/n_steps_per_day*sigma) + prob_III = 1-np.exp(-1.0/n_steps_per_day*3*gamma) + + # loop through all of the days and compute the compartments + # with the stochastic simulations + for t in range(len(tcases_timestep)-1): + Stout = tcases_timestep[t] + if Stout >= S[t]: + # reconstruction indicates the number of infections + # exceed the population - flag this for error reporting + # means the reported cases or reporting factor are too large + # for the population value specified + # Todo: flag a warning + Stout = S[t] + + S[t+1] = S[t] - Stout + Etout = np.random.binomial(E[t], prob_E[t]) + E[t+1] = E[t] + Stout - Etout + I1tout = np.random.binomial(I1[t], prob_III[t]) + I1[t+1] = I1[t] + Etout - I1tout + I2tout = np.random.binomial(I2[t], prob_III[t]) + I2[t+1] = I2[t] + I1tout - I2tout + I3tout = np.random.binomial(I3[t], prob_III[t]) + I3[t+1] = I3[t] + I2tout - I3tout + R[t+1] = R[t] + I3tout + + # now bring these vectors back to days + S = [S[t] for t in range(len(S)) if t % n_steps_per_day == 0] + E = [E[t] for t in range(len(E)) if t % n_steps_per_day == 0] + I1 = [I1[t] for t in range(len(I1)) if t % n_steps_per_day == 0] + I2 = [I2[t] for t in range(len(I2)) if t % n_steps_per_day == 0] + I3 = [I3[t] for t in range(len(I3)) if t % n_steps_per_day == 0] + R = [R[t] for t in range(len(R)) if t % n_steps_per_day == 0] + T = [None]*len(S) + for day_idx in range(len(T)): + T[day_idx] = 0 + for t in range(n_steps_per_day): + T[day_idx] += tcases_timestep[t+day_idx*n_steps_per_day] + assert len(dates) == len(T) + assert len(dates) == len(S) + + # return the output + # - dates: dates for all the other compartments + # - transmissions: transmissions (reportable cases at the time + # of the initial transmission + # - S,E,I1,I2,I3,R: numbers of individuals in each of the + # compartments on the dates in tdates + # orig_rep_cases added in the workflow + return Bunch(dates=dates, S=S, E=E, I1=I1, I2=I2, I3=I3, R=R, transmissions=T) #, orig_rep_cases=output_reported_cases) + + def np_stochastic_reconstruction(*, dates, reported_cases_per_day, counties, diff --git a/epi_inference/reconstruction/tests/baseline/recon_stoch_deconvolutions_all_38479387.json b/epi_inference/reconstruction/tests/baseline/recon_stoch_deconvolutions_all_38479387.json new file mode 100644 index 0000000..9c02542 --- /dev/null +++ b/epi_inference/reconstruction/tests/baseline/recon_stoch_deconvolutions_all_38479387.json @@ -0,0 +1,4958 @@ +{ + "12001": { + "FIPS": "12001", + "seed": "38479387", + "test_factor": "factor_value", + "dates": [ + "2020-01-15", + "2020-01-16", + "2020-01-17", + "2020-01-18", + "2020-01-19", + "2020-01-20", + "2020-01-21", + "2020-01-22", + "2020-01-23", + "2020-01-24", + "2020-01-25", + "2020-01-26", + "2020-01-27", + "2020-01-28", + "2020-01-29", + "2020-01-30", + "2020-01-31", + "2020-02-01", + "2020-02-02", + "2020-02-03", + "2020-02-04", + "2020-02-05", + "2020-02-06", + "2020-02-07", + "2020-02-08", + "2020-02-09", + "2020-02-10", + "2020-02-11", + "2020-02-12", + "2020-02-13", + "2020-02-14", + "2020-02-15", + "2020-02-16", + "2020-02-17", + "2020-02-18", + "2020-02-19", + "2020-02-20", + "2020-02-21", + "2020-02-22", + "2020-02-23", + "2020-02-24", + "2020-02-25", + "2020-02-26", + "2020-02-27", + "2020-02-28", + "2020-02-29", + "2020-03-01", + "2020-03-02", + "2020-03-03", + "2020-03-04", + "2020-03-05", + "2020-03-06", + "2020-03-07", + "2020-03-08", + "2020-03-09", + "2020-03-10", + "2020-03-11", + "2020-03-12", + "2020-03-13", + "2020-03-14", + "2020-03-15", + "2020-03-16", + "2020-03-17", + "2020-03-18", + "2020-03-19", + "2020-03-20", + "2020-03-21", + "2020-03-22", + "2020-03-23", + "2020-03-24", + "2020-03-25", + "2020-03-26", + "2020-03-27", + "2020-03-28", + "2020-03-29", + "2020-03-30" + ], + "transmissions": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 2, + 3, + 3, + 8, + 11, + 13, + 24, + 32, + 37, + 46, + 32, + 37, + 50, + 61, + 52, + 67, + 71, + 73, + 78, + 91, + 72, + 58, + 66, + 71, + 61, + 63, + 77, + 82, + 107 + ], + "S": [ + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269043.0, + 269042.0, + 269042.0, + 269042.0, + 269041.0, + 269040.0, + 269038.0, + 269035.0, + 269032.0, + 269024.0, + 269013.0, + 269000.0, + 268976.0, + 268944.0, + 268907.0, + 268861.0, + 268829.0, + 268792.0, + 268742.0, + 268681.0, + 268629.0, + 268562.0, + 268491.0, + 268418.0, + 268340.0, + 268249.0, + 268177.0, + 268119.0, + 268053.0, + 267982.0, + 267921.0, + 267858.0, + 267781.0, + 267699.0 + ], + "E": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 1.0, + 2.0, + 3.0, + 5.0, + 6.0, + 8.0, + 16.0, + 25.0, + 37.0, + 53.0, + 72.0, + 92.0, + 116.0, + 122.0, + 130.0, + 157.0, + 193.0, + 199.0, + 238.0, + 256.0, + 276.0, + 307.0, + 328.0, + 346.0, + 341.0, + 333.0, + 348.0, + 345.0, + 339.0, + 357.0, + 373.0 + ], + "I1": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 2.0, + 1.0, + 0.0, + 1.0, + 1.0, + 6.0, + 9.0, + 12.0, + 17.0, + 22.0, + 29.0, + 29.0, + 38.0, + 49.0, + 35.0, + 58.0, + 54.0, + 47.0, + 73.0, + 57.0, + 67.0, + 81.0, + 68.0, + 65.0, + 69.0, + 65.0, + 64.0 + ], + "I2": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 2.0, + 1.0, + 2.0, + 1.0, + 4.0, + 5.0, + 15.0, + 20.0, + 22.0, + 22.0, + 20.0, + 19.0, + 37.0, + 44.0, + 32.0, + 58.0, + 61.0, + 46.0, + 67.0, + 58.0, + 66.0, + 75.0, + 78.0, + 68.0, + 67.0, + 74.0 + ], + "I3": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 2.0, + 1.0, + 1.0, + 1.0, + 8.0, + 8.0, + 11.0, + 18.0, + 20.0, + 22.0, + 20.0, + 21.0, + 26.0, + 44.0, + 35.0, + 60.0, + 62.0, + 52.0, + 70.0, + 66.0, + 67.0, + 70.0, + 71.0, + 64.0, + 70.0 + ], + "R": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 3.0, + 3.0, + 5.0, + 9.0, + 18.0, + 30.0, + 50.0, + 73.0, + 92.0, + 108.0, + 138.0, + 162.0, + 202.0, + 228.0, + 285.0, + 344.0, + 388.0, + 444.0, + 503.0, + 564.0, + 638.0, + 709.0, + 763.0 + ], + "population": 269043, + "orig_rep_cases": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 4, + 1, + 4, + 10, + 4, + 10, + 1, + 1, + 9, + 7, + 7, + 8, + 4, + 8 + ] + }, + "12003": { + "FIPS": "12003", + "seed": "38479387", + "test_factor": "factor_value", + "dates": [ + "2020-01-15", + "2020-01-16", + "2020-01-17", + "2020-01-18", + "2020-01-19", + "2020-01-20", + "2020-01-21", + "2020-01-22", + "2020-01-23", + "2020-01-24", + "2020-01-25", + "2020-01-26", + "2020-01-27", + "2020-01-28", + "2020-01-29", + "2020-01-30", + "2020-01-31", + "2020-02-01", + "2020-02-02", + "2020-02-03", + "2020-02-04", + "2020-02-05", + "2020-02-06", + "2020-02-07", + "2020-02-08", + "2020-02-09", + "2020-02-10", + "2020-02-11", + "2020-02-12", + "2020-02-13", + "2020-02-14", + "2020-02-15", + "2020-02-16", + "2020-02-17", + "2020-02-18", + "2020-02-19", + "2020-02-20", + "2020-02-21", + "2020-02-22", + "2020-02-23", + "2020-02-24", + "2020-02-25", + "2020-02-26", + "2020-02-27", + "2020-02-28", + "2020-02-29", + "2020-03-01", + "2020-03-02", + "2020-03-03", + "2020-03-04", + "2020-03-05", + "2020-03-06", + "2020-03-07", + "2020-03-08", + "2020-03-09", + "2020-03-10", + "2020-03-11", + "2020-03-12", + "2020-03-13", + "2020-03-14", + "2020-03-15", + "2020-03-16", + "2020-03-17", + "2020-03-18", + "2020-03-19", + "2020-03-20", + "2020-03-21", + "2020-03-22", + "2020-03-23", + "2020-03-24", + "2020-03-25", + "2020-03-26", + "2020-03-27", + "2020-03-28", + "2020-03-29", + "2020-03-30" + ], + "transmissions": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 3, + 4, + 6, + 3, + 3, + 11, + 4, + 9, + 6, + 8, + 8, + 1, + 6, + 8, + 4, + 6, + 8, + 5, + 3 + ], + "S": [ + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29210.0, + 29209.0, + 29209.0, + 29209.0, + 29209.0, + 29206.0, + 29202.0, + 29196.0, + 29193.0, + 29190.0, + 29179.0, + 29175.0, + 29166.0, + 29160.0, + 29152.0, + 29144.0, + 29143.0, + 29137.0, + 29129.0, + 29125.0, + 29119.0, + 29111.0, + 29106.0 + ], + "E": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 3.0, + 5.0, + 11.0, + 13.0, + 11.0, + 21.0, + 19.0, + 24.0, + 28.0, + 28.0, + 33.0, + 29.0, + 27.0, + 32.0, + 30.0, + 30.0, + 34.0, + 34.0 + ], + "I1": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 2.0, + 6.0, + 2.0, + 6.0, + 3.0, + 2.0, + 8.0, + 3.0, + 5.0, + 8.0, + 5.0, + 5.0, + 5.0, + 5.0, + 3.0 + ], + "I2": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 5.0, + 1.0, + 6.0, + 5.0, + 1.0, + 6.0, + 3.0, + 5.0, + 6.0, + 8.0, + 5.0, + 4.0, + 7.0 + ], + "I3": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 6.0, + 2.0, + 6.0, + 6.0, + 3.0, + 7.0, + 6.0, + 6.0, + 5.0, + 6.0, + 4.0, + 5.0 + ], + "R": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 1.0, + 1.0, + 2.0, + 2.0, + 2.0, + 3.0, + 3.0, + 9.0, + 9.0, + 15.0, + 21.0, + 23.0, + 27.0, + 32.0, + 37.0, + 45.0, + 52.0, + 55.0 + ], + "population": 29210, + "orig_rep_cases": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 1, + 1, + 1, + 0, + 2, + 0, + 1, + 0 + ] + }, + "12005": { + "FIPS": "12005", + "seed": "38479387", + "test_factor": "factor_value", + "dates": [ + "2020-01-15", + "2020-01-16", + "2020-01-17", + "2020-01-18", + "2020-01-19", + "2020-01-20", + "2020-01-21", + "2020-01-22", + "2020-01-23", + "2020-01-24", + "2020-01-25", + "2020-01-26", + "2020-01-27", + "2020-01-28", + "2020-01-29", + "2020-01-30", + "2020-01-31", + "2020-02-01", + "2020-02-02", + "2020-02-03", + "2020-02-04", + "2020-02-05", + "2020-02-06", + "2020-02-07", + "2020-02-08", + "2020-02-09", + "2020-02-10", + "2020-02-11", + "2020-02-12", + "2020-02-13", + "2020-02-14", + "2020-02-15", + "2020-02-16", + "2020-02-17", + "2020-02-18", + "2020-02-19", + "2020-02-20", + "2020-02-21", + "2020-02-22", + "2020-02-23", + "2020-02-24", + "2020-02-25", + "2020-02-26", + "2020-02-27", + "2020-02-28", + "2020-02-29", + "2020-03-01", + "2020-03-02", + "2020-03-03", + "2020-03-04", + "2020-03-05", + "2020-03-06", + "2020-03-07", + "2020-03-08", + "2020-03-09", + "2020-03-10", + "2020-03-11", + "2020-03-12", + "2020-03-13", + "2020-03-14", + "2020-03-15", + "2020-03-16", + "2020-03-17", + "2020-03-18", + "2020-03-19", + "2020-03-20", + "2020-03-21", + "2020-03-22", + "2020-03-23", + "2020-03-24", + "2020-03-25", + "2020-03-26", + "2020-03-27", + "2020-03-28", + "2020-03-29", + "2020-03-30" + ], + "transmissions": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 2, + 2, + 2, + 3, + 7, + 4, + 8, + 9, + 12, + 19, + 12, + 23, + 36, + 31, + 32, + 41, + 34, + 19, + 20 + ], + "S": [ + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174705.0, + 174704.0, + 174702.0, + 174700.0, + 174698.0, + 174695.0, + 174688.0, + 174684.0, + 174676.0, + 174667.0, + 174655.0, + 174636.0, + 174624.0, + 174601.0, + 174565.0, + 174534.0, + 174502.0, + 174461.0, + 174427.0, + 174408.0 + ], + "E": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 3.0, + 3.0, + 5.0, + 8.0, + 11.0, + 14.0, + 17.0, + 22.0, + 32.0, + 41.0, + 49.0, + 62.0, + 81.0, + 100.0, + 112.0, + 128.0, + 140.0, + 135.0 + ], + "I1": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 1.0, + 4.0, + 1.0, + 5.0, + 3.0, + 2.0, + 9.0, + 4.0, + 9.0, + 17.0, + 14.0, + 17.0, + 22.0, + 22.0, + 21.0 + ], + "I2": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 4.0, + 1.0, + 6.0, + 5.0, + 1.0, + 7.0, + 5.0, + 9.0, + 15.0, + 19.0, + 18.0, + 21.0, + 26.0 + ], + "I3": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 4.0, + 1.0, + 5.0, + 7.0, + 3.0, + 8.0, + 7.0, + 9.0, + 13.0, + 16.0, + 16.0, + 22.0 + ], + "R": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 1.0, + 2.0, + 2.0, + 6.0, + 6.0, + 11.0, + 18.0, + 20.0, + 26.0, + 33.0, + 42.0, + 60.0, + 79.0, + 93.0 + ], + "population": 174705, + "orig_rep_cases": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 2, + 0, + 1, + 1, + 1, + 0 + ] + }, + "12007": { + "FIPS": "12007", + "seed": "38479387", + "test_factor": "factor_value", + "dates": [ + "2020-01-15", + "2020-01-16", + "2020-01-17", + "2020-01-18", + "2020-01-19", + "2020-01-20", + "2020-01-21", + "2020-01-22", + "2020-01-23", + "2020-01-24", + "2020-01-25", + "2020-01-26", + "2020-01-27", + "2020-01-28", + "2020-01-29", + "2020-01-30", + "2020-01-31", + "2020-02-01", + "2020-02-02", + "2020-02-03", + "2020-02-04", + "2020-02-05", + "2020-02-06", + "2020-02-07", + "2020-02-08", + "2020-02-09", + "2020-02-10", + "2020-02-11", + "2020-02-12", + "2020-02-13", + "2020-02-14", + "2020-02-15", + "2020-02-16", + "2020-02-17", + "2020-02-18", + "2020-02-19", + "2020-02-20", + "2020-02-21", + "2020-02-22", + "2020-02-23", + "2020-02-24", + "2020-02-25", + "2020-02-26", + "2020-02-27", + "2020-02-28", + "2020-02-29", + "2020-03-01", + "2020-03-02", + "2020-03-03", + "2020-03-04", + "2020-03-05", + "2020-03-06", + "2020-03-07", + "2020-03-08", + "2020-03-09", + "2020-03-10", + "2020-03-11", + "2020-03-12", + "2020-03-13", + "2020-03-14", + "2020-03-15", + "2020-03-16", + "2020-03-17", + "2020-03-18", + "2020-03-19", + "2020-03-20", + "2020-03-21", + "2020-03-22", + "2020-03-23", + "2020-03-24", + "2020-03-25", + "2020-03-26", + "2020-03-27", + "2020-03-28", + "2020-03-29", + "2020-03-30" + ], + "transmissions": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 1, + 0, + 2, + 0, + 2, + 3, + 5, + 5, + 7, + 14, + 10, + 25, + 22, + 17 + ], + "S": [ + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28201.0, + 28199.0, + 28199.0, + 28198.0, + 28198.0, + 28196.0, + 28196.0, + 28194.0, + 28191.0, + 28186.0, + 28181.0, + 28174.0, + 28160.0, + 28150.0, + 28125.0, + 28103.0 + ], + "E": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 2.0, + 1.0, + 2.0, + 0.0, + 2.0, + 2.0, + 2.0, + 5.0, + 9.0, + 11.0, + 17.0, + 28.0, + 32.0, + 50.0, + 64.0 + ], + "I1": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 2.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 3.0, + 2.0, + 2.0, + 4.0, + 6.0, + 6.0 + ], + "I2": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 2.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 2.0, + 4.0, + 3.0, + 4.0, + 8.0 + ], + "I3": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 1.0, + 1.0, + 0.0, + 0.0, + 1.0, + 2.0, + 3.0, + 2.0, + 4.0 + ], + "R": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 3.0, + 4.0, + 5.0, + 5.0, + 5.0, + 5.0, + 9.0, + 14.0, + 16.0 + ], + "population": 28201, + "orig_rep_cases": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ] + }, + "12009": { + "FIPS": "12009", + "seed": "38479387", + "test_factor": "factor_value", + "dates": [ + "2020-01-15", + "2020-01-16", + "2020-01-17", + "2020-01-18", + "2020-01-19", + "2020-01-20", + "2020-01-21", + "2020-01-22", + "2020-01-23", + "2020-01-24", + "2020-01-25", + "2020-01-26", + "2020-01-27", + "2020-01-28", + "2020-01-29", + "2020-01-30", + "2020-01-31", + "2020-02-01", + "2020-02-02", + "2020-02-03", + "2020-02-04", + "2020-02-05", + "2020-02-06", + "2020-02-07", + "2020-02-08", + "2020-02-09", + "2020-02-10", + "2020-02-11", + "2020-02-12", + "2020-02-13", + "2020-02-14", + "2020-02-15", + "2020-02-16", + "2020-02-17", + "2020-02-18", + "2020-02-19", + "2020-02-20", + "2020-02-21", + "2020-02-22", + "2020-02-23", + "2020-02-24", + "2020-02-25", + "2020-02-26", + "2020-02-27", + "2020-02-28", + "2020-02-29", + "2020-03-01", + "2020-03-02", + "2020-03-03", + "2020-03-04", + "2020-03-05", + "2020-03-06", + "2020-03-07", + "2020-03-08", + "2020-03-09", + "2020-03-10", + "2020-03-11", + "2020-03-12", + "2020-03-13", + "2020-03-14", + "2020-03-15", + "2020-03-16", + "2020-03-17", + "2020-03-18", + "2020-03-19", + "2020-03-20", + "2020-03-21", + "2020-03-22", + "2020-03-23", + "2020-03-24", + "2020-03-25", + "2020-03-26", + "2020-03-27", + "2020-03-28", + "2020-03-29", + "2020-03-30" + ], + "transmissions": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 1, + 2, + 5, + 7, + 3, + 5, + 17, + 19, + 23, + 27, + 28, + 42, + 50, + 44, + 68, + 67, + 67, + 71, + 77, + 101, + 96, + 107, + 89, + 68 + ], + "S": [ + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601942.0, + 601941.0, + 601941.0, + 601940.0, + 601939.0, + 601937.0, + 601932.0, + 601925.0, + 601922.0, + 601917.0, + 601900.0, + 601881.0, + 601858.0, + 601831.0, + 601803.0, + 601761.0, + 601711.0, + 601667.0, + 601599.0, + 601532.0, + 601465.0, + 601394.0, + 601317.0, + 601216.0, + 601120.0, + 601013.0, + 600924.0 + ], + "E": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 2.0, + 3.0, + 5.0, + 9.0, + 14.0, + 13.0, + 14.0, + 25.0, + 40.0, + 57.0, + 67.0, + 87.0, + 106.0, + 132.0, + 154.0, + 184.0, + 220.0, + 244.0, + 259.0, + 291.0, + 335.0, + 362.0, + 403.0, + 418.0 + ], + "I1": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 2.0, + 3.0, + 6.0, + 6.0, + 11.0, + 18.0, + 11.0, + 24.0, + 23.0, + 21.0, + 39.0, + 30.0, + 43.0, + 60.0, + 52.0, + 56.0, + 66.0, + 69.0, + 69.0 + ], + "I2": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 3.0, + 3.0, + 3.0, + 3.0, + 1.0, + 9.0, + 14.0, + 9.0, + 24.0, + 27.0, + 19.0, + 36.0, + 31.0, + 41.0, + 55.0, + 61.0, + 59.0, + 64.0, + 78.0 + ], + "I3": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 3.0, + 2.0, + 3.0, + 3.0, + 3.0, + 6.0, + 16.0, + 12.0, + 27.0, + 28.0, + 23.0, + 38.0, + 37.0, + 42.0, + 49.0, + 54.0, + 54.0, + 66.0 + ], + "R": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 2.0, + 6.0, + 9.0, + 12.0, + 14.0, + 21.0, + 26.0, + 40.0, + 46.0, + 73.0, + 101.0, + 121.0, + 151.0, + 185.0, + 225.0, + 281.0, + 339.0, + 387.0 + ], + "population": 601942, + "orig_rep_cases": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 2, + 0, + 2, + 3, + 2, + 6, + 7, + 3, + 2 + ] + }, + "12011": { + "FIPS": "12011", + "seed": "38479387", + "test_factor": "factor_value", + "dates": [ + "2020-01-15", + "2020-01-16", + "2020-01-17", + "2020-01-18", + "2020-01-19", + "2020-01-20", + "2020-01-21", + "2020-01-22", + "2020-01-23", + "2020-01-24", + "2020-01-25", + "2020-01-26", + "2020-01-27", + "2020-01-28", + "2020-01-29", + "2020-01-30", + "2020-01-31", + "2020-02-01", + "2020-02-02", + "2020-02-03", + "2020-02-04", + "2020-02-05", + "2020-02-06", + "2020-02-07", + "2020-02-08", + "2020-02-09", + "2020-02-10", + "2020-02-11", + "2020-02-12", + "2020-02-13", + "2020-02-14", + "2020-02-15", + "2020-02-16", + "2020-02-17", + "2020-02-18", + "2020-02-19", + "2020-02-20", + "2020-02-21", + "2020-02-22", + "2020-02-23", + "2020-02-24", + "2020-02-25", + "2020-02-26", + "2020-02-27", + "2020-02-28", + "2020-02-29", + "2020-03-01", + "2020-03-02", + "2020-03-03", + "2020-03-04", + "2020-03-05", + "2020-03-06", + "2020-03-07", + "2020-03-08", + "2020-03-09", + "2020-03-10", + "2020-03-11", + "2020-03-12", + "2020-03-13", + "2020-03-14", + "2020-03-15", + "2020-03-16", + "2020-03-17", + "2020-03-18", + "2020-03-19", + "2020-03-20", + "2020-03-21", + "2020-03-22", + "2020-03-23", + "2020-03-24", + "2020-03-25", + "2020-03-26", + "2020-03-27", + "2020-03-28", + "2020-03-29", + "2020-03-30" + ], + "transmissions": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 2, + 0, + 0, + 2, + 3, + 5, + 12, + 11, + 20, + 27, + 45, + 53, + 98, + 113, + 138, + 170, + 183, + 228, + 268, + 343, + 396, + 453, + 567, + 675, + 753, + 912, + 1091, + 1217, + 1361, + 1461, + 1464, + 1361, + 1319, + 1367, + 1438, + 1436, + 1508, + 1446, + 1430 + ], + "S": [ + 1952778.0, + 1952778.0, + 1952778.0, + 1952778.0, + 1952778.0, + 1952778.0, + 1952778.0, + 1952778.0, + 1952778.0, + 1952778.0, + 1952778.0, + 1952778.0, + 1952778.0, + 1952778.0, + 1952778.0, + 1952778.0, + 1952778.0, + 1952778.0, + 1952778.0, + 1952778.0, + 1952778.0, + 1952778.0, + 1952778.0, + 1952778.0, + 1952778.0, + 1952778.0, + 1952778.0, + 1952778.0, + 1952778.0, + 1952778.0, + 1952778.0, + 1952778.0, + 1952778.0, + 1952778.0, + 1952778.0, + 1952778.0, + 1952778.0, + 1952776.0, + 1952774.0, + 1952774.0, + 1952774.0, + 1952772.0, + 1952769.0, + 1952764.0, + 1952752.0, + 1952741.0, + 1952721.0, + 1952694.0, + 1952649.0, + 1952596.0, + 1952498.0, + 1952385.0, + 1952247.0, + 1952077.0, + 1951894.0, + 1951666.0, + 1951398.0, + 1951055.0, + 1950659.0, + 1950206.0, + 1949639.0, + 1948964.0, + 1948211.0, + 1947299.0, + 1946208.0, + 1944991.0, + 1943630.0, + 1942169.0, + 1940705.0, + 1939344.0, + 1938025.0, + 1936658.0, + 1935220.0, + 1933784.0, + 1932276.0, + 1930830.0 + ], + "E": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 3.0, + 3.0, + 1.0, + 3.0, + 5.0, + 9.0, + 19.0, + 28.0, + 44.0, + 60.0, + 91.0, + 120.0, + 192.0, + 273.0, + 360.0, + 471.0, + 554.0, + 679.0, + 815.0, + 988.0, + 1179.0, + 1402.0, + 1670.0, + 2015.0, + 2402.0, + 2827.0, + 3399.0, + 3929.0, + 4521.0, + 5105.0, + 5582.0, + 5907.0, + 6094.0, + 6306.0, + 6506.0, + 6737.0, + 6982.0, + 7091.0 + ], + "I1": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 2.0, + 0.0, + 1.0, + 1.0, + 3.0, + 3.0, + 6.0, + 11.0, + 14.0, + 29.0, + 29.0, + 29.0, + 46.0, + 58.0, + 90.0, + 101.0, + 117.0, + 157.0, + 202.0, + 244.0, + 311.0, + 373.0, + 400.0, + 500.0, + 577.0, + 703.0, + 822.0, + 929.0, + 1040.0, + 1128.0, + 1184.0, + 1227.0, + 1324.0, + 1321.0, + 1373.0, + 1450.0 + ], + "I2": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 2.0, + 1.0, + 1.0, + 0.0, + 2.0, + 2.0, + 3.0, + 7.0, + 10.0, + 25.0, + 30.0, + 43.0, + 47.0, + 79.0, + 80.0, + 110.0, + 142.0, + 169.0, + 194.0, + 242.0, + 284.0, + 362.0, + 404.0, + 441.0, + 552.0, + 671.0, + 792.0, + 893.0, + 1038.0, + 1131.0, + 1219.0, + 1254.0, + 1324.0, + 1345.0, + 1402.0 + ], + "I3": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 1.0, + 2.0, + 1.0, + 1.0, + 2.0, + 5.0, + 5.0, + 7.0, + 9.0, + 27.0, + 26.0, + 38.0, + 43.0, + 83.0, + 88.0, + 104.0, + 132.0, + 149.0, + 208.0, + 242.0, + 265.0, + 338.0, + 427.0, + 473.0, + 573.0, + 698.0, + 796.0, + 867.0, + 1030.0, + 1111.0, + 1146.0, + 1266.0, + 1272.0, + 1337.0 + ], + "R": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 1.0, + 3.0, + 3.0, + 3.0, + 5.0, + 12.0, + 16.0, + 25.0, + 34.0, + 56.0, + 87.0, + 118.0, + 169.0, + 250.0, + 332.0, + 437.0, + 583.0, + 708.0, + 900.0, + 1138.0, + 1410.0, + 1726.0, + 2130.0, + 2561.0, + 3085.0, + 3762.0, + 4494.0, + 5314.0, + 6257.0, + 7328.0, + 8346.0, + 9530.0, + 10668.0 + ], + "population": 1952778, + "orig_rep_cases": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 2, + 0, + 3, + 4, + 9, + 16, + 0, + 3, + 16, + 25, + 16, + 55, + 13, + 53, + 46, + 48, + 101, + 93, + 126, + 189, + 192, + 125 + ] + }, + "12013": { + "FIPS": "12013", + "seed": "38479387", + "test_factor": "factor_value", + "dates": [ + "2020-01-15", + "2020-01-16", + "2020-01-17", + "2020-01-18", + "2020-01-19", + "2020-01-20", + "2020-01-21", + "2020-01-22", + "2020-01-23", + "2020-01-24", + "2020-01-25", + "2020-01-26", + "2020-01-27", + "2020-01-28", + "2020-01-29", + "2020-01-30", + "2020-01-31", + "2020-02-01", + "2020-02-02", + "2020-02-03", + "2020-02-04", + "2020-02-05", + "2020-02-06", + "2020-02-07", + "2020-02-08", + "2020-02-09", + "2020-02-10", + "2020-02-11", + "2020-02-12", + "2020-02-13", + "2020-02-14", + "2020-02-15", + "2020-02-16", + "2020-02-17", + "2020-02-18", + "2020-02-19", + "2020-02-20", + "2020-02-21", + "2020-02-22", + "2020-02-23", + "2020-02-24", + "2020-02-25", + "2020-02-26", + "2020-02-27", + "2020-02-28", + "2020-02-29", + "2020-03-01", + "2020-03-02", + "2020-03-03", + "2020-03-04", + "2020-03-05", + "2020-03-06", + "2020-03-07", + "2020-03-08", + "2020-03-09", + "2020-03-10", + "2020-03-11", + "2020-03-12", + "2020-03-13", + "2020-03-14", + "2020-03-15", + "2020-03-16", + "2020-03-17", + "2020-03-18", + "2020-03-19", + "2020-03-20", + "2020-03-21", + "2020-03-22", + "2020-03-23", + "2020-03-24", + "2020-03-25", + "2020-03-26", + "2020-03-27", + "2020-03-28", + "2020-03-29", + "2020-03-30" + ], + "transmissions": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 2, + 1, + 4, + 0, + 3, + 2, + 4 + ], + "S": [ + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14105.0, + 14104.0, + 14104.0, + 14104.0, + 14104.0, + 14102.0, + 14101.0, + 14097.0, + 14097.0, + 14094.0, + 14092.0 + ], + "E": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 1.0, + 1.0, + 2.0, + 3.0, + 7.0, + 5.0, + 7.0, + 8.0 + ], + "I1": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0 + ], + "I2": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 2.0 + ], + "I3": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0 + ], + "R": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 2.0, + 3.0 + ], + "population": 14105, + "orig_rep_cases": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } +} \ No newline at end of file diff --git a/epi_inference/reconstruction/tests/baseline/recon_stoch_deconvolutions_all_38479387_meta.yml b/epi_inference/reconstruction/tests/baseline/recon_stoch_deconvolutions_all_38479387_meta.yml new file mode 100644 index 0000000..2ba0136 --- /dev/null +++ b/epi_inference/reconstruction/tests/baseline/recon_stoch_deconvolutions_all_38479387_meta.yml @@ -0,0 +1,24 @@ +configuration: + alternate_transmissions_file: ./input/transmissions_countydata1_all_38479387.csv + factor_levels: + seed: '38479387' + test_factor: factor_value + factors: null + input_csv: ../../collect/tests/baseline/countydata1_FL.csv + n_steps_per_day: 4 + output_json: output/recon_stoch_deconvolutions_all_38479387.json + population_csv: !!python/object/new:pyutilib.misc.misc.Options + dictitems: + file: ../../../examples/countydata/FL_county_population.csv + index: FIPS + population: pop_2019 + state: + _name_: Options + file: ../../../examples/countydata/FL_county_population.csv + index: FIPS + population: pop_2019 + reporting_multiplier: 10 + seed: 38479387 + verbose: true + workflow: reconstruction_stochastic +timestamp: '2020-08-02 14:44:41.359894' diff --git a/epi_inference/reconstruction/tests/bin/make_transmissions_file_from_recon_flatten.py b/epi_inference/reconstruction/tests/bin/make_transmissions_file_from_recon_flatten.py new file mode 100644 index 0000000..22af745 --- /dev/null +++ b/epi_inference/reconstruction/tests/bin/make_transmissions_file_from_recon_flatten.py @@ -0,0 +1,14 @@ +import sys +import pandas as pd +import csv + +df = pd.read_csv(sys.argv[1], encoding="ISO-8859-1", dtype={'FIPS':str}) +print(df) + +df = df.rename(columns={'dates':'Date'}) +print(df) + +df = pd.pivot_table(df, index='Date', columns='FIPS', values='transmissions') +print(df) + +df.to_csv('foo.csv', quoting=csv.QUOTE_NONNUMERIC, date_format="%Y-%m-%d") diff --git a/epi_inference/reconstruction/tests/config_files/reconstruct_case.yml b/epi_inference/reconstruction/tests/config_files/reconstruct_case.yml index 482164b..97c1b60 100644 --- a/epi_inference/reconstruction/tests/config_files/reconstruct_case.yml +++ b/epi_inference/reconstruction/tests/config_files/reconstruct_case.yml @@ -49,6 +49,22 @@ stochastic: index: 'FIPS' output_json: "output/recon_stoch_countydata1_12011.json" +deconvolution_stochastic: +- workflow: reconstruction_stochastic + factors: + test_factor: ["factor_value"] + seed: [38479387] + seed: ${seed} + reporting_multiplier: 10 + n_steps_per_day: 4 + input_csv: "../../collect/tests/baseline/countydata1_FL.csv" + alternate_transmissions_file: './input/transmissions_countydata1_all_${seed}.csv' + population_csv: + file: "../../../examples/countydata/FL_county_population.csv" + population: 'pop_2019' + index: 'FIPS' + output_json: "output/recon_stoch_deconvolutions_all_${seed}.json" + json2csv: - workflow: recon_json2csv input_json: 'baseline/recon_stoch_countydata1_all_38479387.json' diff --git a/epi_inference/reconstruction/tests/input/transmissions_countydata1_all_38479387.csv b/epi_inference/reconstruction/tests/input/transmissions_countydata1_all_38479387.csv new file mode 100644 index 0000000..bc980b4 --- /dev/null +++ b/epi_inference/reconstruction/tests/input/transmissions_countydata1_all_38479387.csv @@ -0,0 +1,77 @@ +"Date","12001","12003","12005","12007","12009","12011","12013" +"2020-01-15",0,0,0,0,0,0,0 +"2020-01-16",0,0,0,0,0,0,0 +"2020-01-17",0,0,0,0,0,0,0 +"2020-01-18",0,0,0,0,0,0,0 +"2020-01-19",0,0,0,0,0,0,0 +"2020-01-20",0,0,0,0,0,0,0 +"2020-01-21",0,0,0,0,0,0,0 +"2020-01-22",0,0,0,0,0,0,0 +"2020-01-23",0,0,0,0,0,0,0 +"2020-01-24",0,0,0,0,0,0,0 +"2020-01-25",0,0,0,0,0,0,0 +"2020-01-26",0,0,0,0,0,0,0 +"2020-01-27",0,0,0,0,0,0,0 +"2020-01-28",0,0,0,0,0,0,0 +"2020-01-29",0,0,0,0,0,0,0 +"2020-01-30",0,0,0,0,0,0,0 +"2020-01-31",0,0,0,0,0,0,0 +"2020-02-01",0,0,0,0,0,0,0 +"2020-02-02",0,0,0,0,0,0,0 +"2020-02-03",0,0,0,0,0,0,0 +"2020-02-04",0,0,0,0,0,0,0 +"2020-02-05",0,0,0,0,0,0,0 +"2020-02-06",0,0,0,0,0,0,0 +"2020-02-07",0,0,0,0,0,0,0 +"2020-02-08",0,0,0,0,0,0,0 +"2020-02-09",0,0,0,0,0,0,0 +"2020-02-10",0,0,0,0,0,0,0 +"2020-02-11",0,0,0,0,0,0,0 +"2020-02-12",0,0,0,0,0,0,0 +"2020-02-13",0,0,0,0,0,0,0 +"2020-02-14",0,0,0,0,0,0,0 +"2020-02-15",0,0,0,0,0,0,0 +"2020-02-16",0,0,0,0,0,0,0 +"2020-02-17",0,0,0,0,0,0,0 +"2020-02-18",0,0,0,0,0,0,0 +"2020-02-19",0,0,0,0,0,0,0 +"2020-02-20",0,0,0,0,0,2,0 +"2020-02-21",0,0,0,0,0,2,0 +"2020-02-22",0,0,0,0,0,0,0 +"2020-02-23",0,0,0,0,0,0,0 +"2020-02-24",0,0,0,0,0,2,0 +"2020-02-25",0,0,0,0,0,3,0 +"2020-02-26",1,0,0,0,0,5,0 +"2020-02-27",0,0,0,0,0,12,0 +"2020-02-28",0,0,0,0,0,11,0 +"2020-02-29",1,0,0,0,0,20,0 +"2020-03-01",1,0,0,0,0,27,0 +"2020-03-02",2,0,0,0,0,45,0 +"2020-03-03",3,0,0,0,0,53,0 +"2020-03-04",3,0,0,0,1,98,0 +"2020-03-05",8,0,0,0,0,113,0 +"2020-03-06",11,0,0,0,1,138,0 +"2020-03-07",13,0,0,0,1,170,0 +"2020-03-08",24,1,0,0,2,183,0 +"2020-03-09",32,0,0,0,5,228,0 +"2020-03-10",37,0,0,0,7,268,0 +"2020-03-11",46,0,1,0,3,343,0 +"2020-03-12",32,3,2,0,5,396,0 +"2020-03-13",37,4,2,0,17,453,0 +"2020-03-14",50,6,2,0,19,567,0 +"2020-03-15",61,3,3,2,23,675,0 +"2020-03-16",52,3,7,0,27,753,0 +"2020-03-17",67,11,4,1,28,912,0 +"2020-03-18",71,4,8,0,42,1091,0 +"2020-03-19",73,9,9,2,50,1217,0 +"2020-03-20",78,6,12,0,44,1361,1 +"2020-03-21",91,8,19,2,68,1461,0 +"2020-03-22",72,8,12,3,67,1464,0 +"2020-03-23",58,1,23,5,67,1361,0 +"2020-03-24",66,6,36,5,71,1319,2 +"2020-03-25",71,8,31,7,77,1367,1 +"2020-03-26",61,4,32,14,101,1438,4 +"2020-03-27",63,6,41,10,96,1436,0 +"2020-03-28",77,8,34,25,107,1508,3 +"2020-03-29",82,5,19,22,89,1446,2 +"2020-03-30",107,3,20,17,68,1430,4 diff --git a/epi_inference/reconstruction/tests/test_recon_workflows.py b/epi_inference/reconstruction/tests/test_recon_workflows.py index 5d980eb..f27e3e2 100644 --- a/epi_inference/reconstruction/tests/test_recon_workflows.py +++ b/epi_inference/reconstruction/tests/test_recon_workflows.py @@ -32,7 +32,7 @@ def test_reconstruct_deterministic(self): # check that the json files load into dataframes that have the correct numbers and shapes outputdf, golddf = compare_json('./output/recon_countydata1_all.json', './baseline/recon_countydata1_all.json') outputdf, golddf = compare_json('./output/recon_countydata1_12011.json', './baseline/recon_countydata1_12011.json') - + # cleanup the files we created if not keepfiles: os.remove('./output/recon_countydata1_all.json') @@ -46,12 +46,12 @@ def test_reconstruct_stochastic(self): args.config_file = './config_files/reconstruct_case.yml' args.verbose = True driver.run(args) - + # check that the json files load into dataframes that have the correct numbers and shapes outputdf, golddf = compare_json('./output/recon_stoch_countydata1_all_38479387.json', './baseline/recon_stoch_countydata1_all_38479387.json') outputdf, golddf = compare_json('./output/recon_stoch_countydata1_all_39847938.json', './baseline/recon_stoch_countydata1_all_39847938.json') outputdf, golddf = compare_json('./output/recon_stoch_countydata1_12011.json', './baseline/recon_stoch_countydata1_12011.json') - + # cleanup the files we created if not keepfiles: os.remove('./output/recon_stoch_countydata1_all_38479387.json') @@ -61,19 +61,34 @@ def test_reconstruct_stochastic(self): os.remove('./output/recon_stoch_countydata1_12011.json') os.remove('./output/recon_stoch_countydata1_12011_meta.yml') + def test_reconstruct_from_deconvolution_transmissions(self): + args = Options() + args.block = 'deconvolution_stochastic' + args.config_file = './config_files/reconstruct_case.yml' + args.verbose = True + driver.run(args) + + # check that the json files load into dataframes that have the correct numbers and shapes + outputdf, golddf = compare_json('./output/recon_stoch_deconvolutions_all_38479387.json', './baseline/recon_stoch_deconvolutions_all_38479387.json') + + # cleanup the files we created + if not keepfiles: + os.remove('./output/recon_stoch_deconvolutions_all_38479387.json') + os.remove('./output/recon_stoch_deconvolutions_all_38479387_meta.yml') + def test_recon_json2csv(self): args = Options() args.block = 'json2csv' args.config_file = './config_files/reconstruct_case.yml' args.verbose = True driver.run(args) - + # check that the json files load into dataframes that have the correct numbers and shapes outputdf, golddf = compare_csv('./output/recon_stoch_countydata1_all_38479387_flatten.csv', './baseline/recon_stoch_countydata1_all_38479387_flatten.csv') outputdf, golddf = compare_csv('./output/recon_stoch_countydata1_all_flatten.csv', './baseline/recon_stoch_countydata1_all_flatten.csv') outputdf, golddf = compare_csv('./output/recon_stoch_countydata1_all_38479387_narrow.csv', './baseline/recon_stoch_countydata1_all_38479387_narrow.csv') outputdf, golddf = compare_csv('./output/recon_stoch_countydata1_all_narrow.csv', './baseline/recon_stoch_countydata1_all_narrow.csv') - + df_flatten = pd.read_csv('./output/recon_stoch_countydata1_all_38479387_flatten.csv') df_narrow = pd.read_csv('./output/recon_stoch_countydata1_all_38479387_narrow.csv') @@ -94,10 +109,10 @@ def test_recon_summary(self): args.config_file = './config_files/reconstruct_case.yml' args.verbose = True driver.run(args) - + # check that the json files load into dataframes that have the correct numbers and shapes outputdf, golddf = compare_csv('./output/recon_stoch_countydata1_all_summary.csv', './baseline/recon_stoch_countydata1_all_summary.csv') - + # cleanup the files we created if not keepfiles: os.remove('./output/recon_stoch_countydata1_all_summary.csv') diff --git a/epi_inference/reconstruction/tests/test_reconstruction.py b/epi_inference/reconstruction/tests/test_reconstruction.py index 86fd3b4..3b1c6dd 100644 --- a/epi_inference/reconstruction/tests/test_reconstruction.py +++ b/epi_inference/reconstruction/tests/test_reconstruction.py @@ -509,6 +509,40 @@ def test_np_stochastic_reconstruction(): _special_tolerance_check(dfsimI3, recon_df, 'I3', abstol, 0.2) dfsimR = pd.DataFrame(index=dates, columns=counties, data=simR) _special_tolerance_check(dfsimR, recon_df, 'R', abstol, 0.2) + +def test_stochastic_reconstruction_from_daily_transmissions(): + np.random.seed(1975) + population=1000 + n_days = 30 + dates = pd.date_range(end=datetime(year=2020, month=4, day=12), periods=n_days).to_pydatetime().tolist() + assert dates[0] == datetime(year=2020, month=3, day=14) + transmissions = [0]*n_days + for t in range(5,11): + transmissions[t] = 1 + + results = recons.stochastic_reconstruction_from_daily_transmissions( + dates=dates, + transmissions=transmissions, + population=population, + n_steps_per_day=4, + fixed_incubation=5.2, + infectious_lower=2.6, + infectious_upper=6) + + expS = [1000.0, 1000.0, 1000.0, 1000.0, 1000.0, 1000.0, 999.0, 998.0, 997.0, 996.0, 995.0, 994.0, 994.0, 994.0, 994.0, 994.0, 994.0, 994.0, 994.0, 994.0, 994.0, 994.0, 994.0, 994.0, 994.0, 994.0, 994.0, 994.0, 994.0, 994.0] + expE = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 2.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 2.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + expI1 = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0] + expI2 = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 2.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0] + expI3 = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 2.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0] + expR = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 3.0, 3.0, 3.0, 3.0, 3.0, 4.0, 4.0, 4.0, 4.0, 5.0, 5.0, 5.0, 5.0, 5.0, 6.0, 6.0, 6.0] + expT = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + np.testing.assert_equal(np.asarray(results.S), np.asarray(expS)) + np.testing.assert_equal(np.asarray(results.E), np.asarray(expE)) + np.testing.assert_equal(np.asarray(results.I1), np.asarray(expI1)) + np.testing.assert_equal(np.asarray(results.I2), np.asarray(expI2)) + np.testing.assert_equal(np.asarray(results.I3), np.asarray(expI3)) + np.testing.assert_equal(np.asarray(results.R), np.asarray(expR)) + np.testing.assert_equal(np.asarray(results.transmissions), np.asarray(expT)) def assert_if_mean_significantly_different(df1, df2, abstol, reltol): mean = df1.mean(axis=1) @@ -609,3 +643,4 @@ def _long_dataframe_from_recon(recon): else: df = pd.concat([df, S, E, I1, I2, I3, R]) return df +