def _get_valid_data_inputs( initialization_params: YAMLDict) -> Dict[str, Any]: """Helper to retrieve data_inputs for get_model_params""" given_data_inputs = initialization_params.pop_dict("data_inputs") if len(given_data_inputs) != 1: raise ValueError( f"Only one data input can be set in the yaml file, not {len(given_data_inputs)}" ) data_inputs: Dict[str, Any] = dict() if "big_query_inputs" in given_data_inputs.keys(): big_query_inputs_yaml_dict = given_data_inputs.pop_dict( "big_query_inputs") big_query_inputs_keys = big_query_inputs_yaml_dict.keys() big_query_inputs_dict: Dict[str, str] = dict() for k in big_query_inputs_keys: big_query_inputs_dict[k] = big_query_inputs_yaml_dict.pop( k, str) data_inputs["big_query_inputs"] = big_query_inputs_dict elif "big_query_simulation_tag" in given_data_inputs.keys(): data_inputs["big_query_simulation_tag"] = given_data_inputs.pop( "big_query_simulation_tag", str) else: raise ValueError( f"Received unexpected key in data_inputs: {given_data_inputs.keys()[0]}" ) return data_inputs
def _get_user_inputs( initialization_params: YAMLDict, model_params: Dict[str, Any] ) -> Dict[str, Any]: """Helper to retrieve user_inputs for get_model_params""" user_inputs: Dict[str, Any] = dict() user_inputs_yaml_dict = initialization_params.pop_dict("user_inputs") if "big_query_simulation_tag" in model_params["data_inputs_raw"].keys(): user_inputs = { "policy_year": user_inputs_yaml_dict.pop("policy_year", float), "start_year": user_inputs_yaml_dict.pop("start_year", float), "projection_years": user_inputs_yaml_dict.pop( "projection_years", float ), } if "big_query_inputs" in model_params["data_inputs_raw"].keys(): user_inputs = { "start_year": user_inputs_yaml_dict.pop("start_year", float), "projection_years": user_inputs_yaml_dict.pop( "projection_years", float ), "run_date": user_inputs_yaml_dict.pop("run_date", str), } # Check for optional arguments if user_inputs_yaml_dict: user_inputs_keys = user_inputs_yaml_dict.keys() for k in user_inputs_keys: if k not in {"constant_admissions", "speed_run"}: raise ValueError(f"Received unexpected key in user_inputs: {k}") user_inputs[k] = user_inputs_yaml_dict.pop(k, bool) return user_inputs
def _get_valid_compartments( initialization_params: YAMLDict, ) -> Tuple[Dict[str, str], Dict[str, float]]: """Helper to retrieve model_architecture and compartment costs for get_model_params""" compartments_architecture_yaml_key = "compartments_architecture" compartments_architecture_raw = initialization_params.pop_dict( compartments_architecture_yaml_key ) compartments_architecture_keys = compartments_architecture_raw.keys() compartments_architecture_dict: Dict[str, Any] = dict() for k in compartments_architecture_keys: compartments_architecture_dict[ k ] = compartments_architecture_raw.pop_optional(k, str) compartment_costs_key = "per_year_costs" compartment_costs_raw = initialization_params.pop_dict(compartment_costs_key) compartment_costs_keys = compartment_costs_raw.keys() compartment_costs_dict: Dict[str, float] = dict() for k in compartment_costs_keys: compartment_costs_dict[k] = compartment_costs_raw.pop(k, float) # Ensure there are compartment costs for every compartment in the model architecture model_compartments = set( c for c in compartments_architecture_keys if compartments_architecture_dict[c] != "shell" ) compartment_costs = set(compartment_costs_keys) if compartment_costs != model_compartments: raise ValueError( f"Compartments do not match in the YAML '{compartment_costs_key}' " f"and '{compartments_architecture_yaml_key}'\n" f"Mismatched values: {compartment_costs ^ model_compartments}" ) return compartments_architecture_dict, compartment_costs_dict