defrestore_classes(params:dict)->dict:"""Converts a dictionary of parameters into a dictionary of classes since datajoint cannot handle classes"""continuous_state_transition_types={"RandomWalk":RandomWalk,"RandomWalkDirection1":RandomWalkDirection1,"RandomWalkDirection2":RandomWalkDirection2,"Uniform":Uniform,"Identity":Identity,}discrete_state_transition_types={"DiagonalDiscrete":DiagonalDiscrete,"UniformDiscrete":UniformDiscrete,"RandomDiscrete":RandomDiscrete,"UserDefinedDiscrete":UserDefinedDiscrete,}initial_conditions_types={"UniformInitialConditions":UniformInitialConditions,"UniformOneEnvironmentInitialConditions":UniformOneEnvironmentInitialConditions,}params["classifier_params"]["continuous_transition_types"]=[[_convert_dict_to_class(st,continuous_state_transition_types)forstinsts]forstsinparams["classifier_params"]["continuous_transition_types"]]params["classifier_params"]["environments"]=[_convert_env_dict(env_params)forenv_paramsinparams["classifier_params"]["environments"]]params["classifier_params"]["discrete_transition_type"]=(_convert_dict_to_class(params["classifier_params"]["discrete_transition_type"],discrete_state_transition_types,))params["classifier_params"]["initial_conditions_type"]=(_convert_dict_to_class(params["classifier_params"]["initial_conditions_type"],initial_conditions_types,))ifparams["classifier_params"].get("observation_models"):params["classifier_params"]["observation_models"]=[ObservationModel(obs)forobsinparams["classifier_params"]["observation_models"]]returnparams
defconvert_classes_to_dict(key:dict)->dict:"""Converts the classifier parameters into a dictionary so that datajoint can store it."""try:key["classifier_params"]["environments"]=[_convert_environment_to_dict(env)forenvinkey["classifier_params"]["environments"]]exceptTypeError:key["classifier_params"]["environments"]=[_convert_environment_to_dict(key["classifier_params"]["environments"])]key["classifier_params"]["continuous_transition_types"]=(_convert_transitions_to_dict(key["classifier_params"]["continuous_transition_types"]))key["classifier_params"]["discrete_transition_type"]=_to_dict(key["classifier_params"]["discrete_transition_type"])key["classifier_params"]["initial_conditions_type"]=_to_dict(key["classifier_params"]["initial_conditions_type"])ifkey["classifier_params"]["observation_models"]isnotNone:key["classifier_params"]["observation_models"]=[vars(obs)forobsinkey["classifier_params"]["observation_models"]]try:key["classifier_params"]["clusterless_algorithm_params"]=(_convert_algorithm_params(key["classifier_params"]["clusterless_algorithm_params"]))exceptKeyError:passreturnkey