def create_update( *, db: Session = Depends(get_db), update: js.UpdateIn, ) -> js.UpdateOut: ensemble = db.query( ds.Ensemble).filter_by(id=update.ensemble_reference_id).one() update_obj = ds.Update( algorithm=update.algorithm, ensemble_reference_pk=ensemble.pk, ) db.add(update_obj) if update.observation_transformations: transformations = { t.name: t for t in update.observation_transformations } observation_ids = [t.observation_id for t in transformations.values()] observations = (db.query(ds.Observation).filter( ds.Observation.id.in_(observation_ids)).all()) observation_transformations = [ ds.ObservationTransformation( active_list=transformations[observation.name].active, scale_list=transformations[observation.name].scale, observation=observation, update=update_obj, ) for observation in observations ] db.add_all(observation_transformations) db.commit() return js.UpdateOut( id=update_obj.id, experiment_id=ensemble.experiment.id, algorithm=update_obj.algorithm, ensemble_reference_id=ensemble.id, )
def post_experiments( *, db: Session = Depends(get_db), ens_in: js.ExperimentIn, ) -> js.ExperimentOut: experiment = ds.Experiment(name=ens_in.name) if ens_in.priors: db.add_all( ds.Prior( function=ds.PriorFunction.__members__[prior.function], experiment=experiment, name=name, argument_names=[ x[0] for x in prior if isinstance(x[1], (float, int)) ], argument_values=[ x[1] for x in prior if isinstance(x[1], (float, int)) ], ) for name, prior in ens_in.priors.items()) db.add(experiment) db.commit() return _experiment_from_db(experiment)