def get_chime_model(parameters): ''' instantiates and returns CHIME model using parameters ''' if not isinstance(parameters, Parameters): t = type(parameters) raise TypeError(f'parameters must be a Parameters object not {t}') return Sir(parameters)
def test_model_first_hosp_fit(param): param.date_first_hospitalized = param.current_date - timedelta(days=43) param.doubling_time = None my_model = Sir(param) assert abs(my_model.intrinsic_growth_rate - 0.123) / 0.123 < 0.01 assert abs(my_model.beta - 4.21501347256401e-07) < EPSILON assert abs(my_model.r_t - 2.32) / 2.32 < 0.01 assert abs(my_model.r_naught - 2.72) / 2.72 < 0.01 assert abs(my_model.doubling_time_t - 7.71) / 7.71 < 0.01
def fixture_penn_chime_setup() -> Tuple[Parameters, Sir]: """Initializes penn_chime parameters and SIR model """ p = Parameters( current_hospitalized=69, date_first_hospitalized=date(2020, 3, 7), doubling_time=None, hospitalized=Disposition.create(days=7, rate=0.025), icu=Disposition.create(days=9, rate=0.0075), infectious_days=14, market_share=0.15, n_days=100, population=3600000, recovered=0, relative_contact_rate=0.3, ventilated=Disposition.create(days=10, rate=0.005), ) return p, Sir(p)
def handle_model_change(i, sidebar_data, lock_zoom_clicks, graphs_relayout_data): model = {} pars = None result = [] viz_kwargs = {} if sidebar_data: pars = parameters_deserializer(sidebar_data["parameters"]) model = Sir(pars) vis = i.components.get("visualizations", None) if i else None vis_content = vis.content if vis else None viz_kwargs = dict(labels=pars.labels, table_mod=7, content=vis_content) result.extend(i.components["intro"].build(model, pars)) for df_key in ["admits_df", "census_df", "sim_sir_w_date_df"]: df = None if model: df = model.__dict__.get(df_key, None) result.extend(prepare_visualization_group(df, **viz_kwargs)) figures = [result[1], result[4], result[7]] for n_clicks, relayout_data, figure in zip(lock_zoom_clicks, graphs_relayout_data, figures): if relayout_data: if n_clicks == None or n_clicks % 2 == 0: # Set plot_data figure coordinates if "xaxis.range[0]" in relayout_data: figure["layout"]["xaxis"]["range"] = [ relayout_data["xaxis.range[0]"], relayout_data["xaxis.range[1]"] ] if "yaxis.range[0]" in relayout_data: figure["layout"]["yaxis"]["range"] = [ relayout_data["yaxis.range[0]"], relayout_data["yaxis.range[1]"] ] return result
def handle_model_change(i, sidebar_data): model = {} pars = None result = [] viz_kwargs = {} if sidebar_data: pars = parameters_deserializer(sidebar_data["parameters"]) model = Sir(pars) vis = i.components.get("visualizations", None) if i else None vis_content = vis.content if vis else None viz_kwargs = dict(labels=pars.labels, table_mod=7, max_y_axis=pars.max_y_axis, content=vis_content) result.extend(i.components["intro"].build(model, pars)) for df_key in ["admits_df", "census_df", "sim_sir_w_date_df"]: df = None if model: df = model.__dict__.get(df_key, None) result.extend(prepare_visualization_group(df, **viz_kwargs)) return result
def sim_chime(scenario: str, p: Parameters, intrinsic_growth_rate: float = None, initial_doubling_time: float = None, admits_df: Optional = None, rcr_policies_df: Optional = None): """ Run one CHIME simulation :param scenario: identifier for scenario :param p: CHIME parameters :param intrinsic_growth_rate: Can optionally specify to override CHIME fitting/estimation :param initial_doubling_time: Can optionally specify to override CHIME fitting/estimation :param admits_df: Experimental - not currently using :param rcr_policies_df: Dataframe of dates and rcr values :return: """ # Run the model if rcr_policies_df is None: is_dynamic_rcr = False # Just call penn_chime version of Sir m = Sir(p) else: # Using dynamic rcrs, need to call customized version of Sir is_dynamic_rcr = True m = SirPlus(p, intrinsic_growth_rate, initial_doubling_time, admits_df, rcr_policies_df) # Gather results input_params_dict = vars(p) results = gather_sim_results(m, scenario, input_params_dict, is_dynamic_rcr) # Return model object and results return m, results
def halving_model(halving_param): return Sir(halving_param)
def model(param): return Sir(param)