예제 #1
0
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,
    )
예제 #2
0
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)