class RandomEffectBound(Form):
    location = IntField(nullable=True)
    value = FloatField(nullable=True)
class StudentsDOF(Form):
    priors = FloatField(nullable=True, default=5)
    data = FloatField(nullable=True, default=5)
class FixedRandomFloat(Form):
    fixed = FloatField(nullable=True)
    random = FloatField(nullable=True)
class SmoothingPrior(Form):
    """Priors for smoothing."""
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.prior_object = None

    prior_type = OptionField(["dage", "dtime", "value"])
    age_lower = FloatField(nullable=True, display="Age lower")
    age_upper = FloatField(nullable=True, display="Age upper")
    time_lower = FloatField(nullable=True, display="Time lower")
    time_upper = FloatField(nullable=True, display="Time upper")
    born_lower = FloatField(nullable=True, display="Born lower")
    born_upper = FloatField(nullable=True, display="Born upper")
    density = OptionField([
        "uniform", "gaussian", "laplace", "students", "log_gaussian",
        "log_laplace", "log_students"
    ],
                          display="Density")
    min = FloatField(nullable=True, default=float("-inf"), display="Min")
    mean = FloatField(nullable=True, display="Mean")
    max = FloatField(nullable=True, default=float("inf"), display="Max")
    std = FloatField(nullable=True, display="Std")
    nu = FloatField(nullable=True)
    eta = FloatField(nullable=True)

    def _full_form_validation(self, root):
        errors = []

        if not self.is_field_unset("age_lower") and not self.is_field_unset(
                "age_lower"):
            if self.age_lower > self.age_upper:
                errors.append(
                    "age_lower must be less than or equal to age_upper")
        if not self.is_field_unset("time_lower") and not self.is_field_unset(
                "time_lower"):
            if self.time_lower > self.time_upper:
                errors.append(
                    "time_lower must be less than or equal to time_upper")

        try:
            lower = self.min
            upper = self.max
            mean = self.mean
            if mean is None and (np.isinf(lower) or np.isinf(upper)):
                mean = max(lower, 0)
            std = self.std

            if self.nu is None:
                if self.density == "students" and not root.is_field_unset(
                        "students_dof"):
                    nu = root.students_dof.priors
                elif self.density == "log_students" and not root.is_field_unset(
                        "log_students_dof"):
                    nu = root.log_students_dof.priors
                else:
                    nu = None
            else:
                nu = self.nu

            if self.eta is None:
                if not root.is_field_unset("eta"):
                    eta = root.eta.priors
                else:
                    eta = None
            else:
                eta = self.eta

            if self.density == "uniform":
                self.prior_object = priors.Uniform(lower, upper, mean)
            elif self.density == "gaussian":
                self.prior_object = priors.Gaussian(mean, std, lower, upper)
            elif self.density == "laplace":
                self.prior_object = priors.Laplace(mean, std, lower, upper)
            elif self.density == "students":
                self.prior_object = priors.StudentsT(mean, std, nu, lower,
                                                     upper)
            elif self.density == "log_gaussian":
                self.prior_object = priors.LogGaussian(mean, std, eta, lower,
                                                       upper)
            elif self.density == "log_laplace":
                self.prior_object = priors.LogLaplace(mean, std, eta, lower,
                                                      upper)
            elif self.density == "log_students":
                self.prior_object = priors.LogStudentsT(
                    mean, std, nu, eta, lower, upper)
            else:
                errors.append(f"Unknown density '{self.density}'")
        except priors.PriorError as e:
            errors.append(f"Parameters incompatible with density '"
                          f"{self.density}': {str(e)}")

        return errors
class DataEta(Form):
    integrand_measure_id = IntField(nullable=True)
    value = FloatField(nullable=True)
class Eta(Form):
    priors = FloatField(nullable=True)
    data = FloatField(nullable=True)
class Model(Form):
    modelable_entity_id = IntField()
    decomp_step_id = IntField()
    model_version_id = IntField(nullable=True)
    random_seed = IntField()
    minimum_meas_cv = FloatField(nullable=True, display="Data CV floor")
    add_csmr_cause = IntField(nullable=True, display="CSMR cause")
    title = StrField(nullable=True, display="Title")
    description = StrField(nullable=True, display="Description")
    crosswalk_version_id = IntField(nullable=False,
                                    display="Crosswalk version ID")
    bundle_id = IntField(nullable=True, display="Data bundle")
    drill = OptionField(["cascade", "drill"], display="Drill")
    drill_location = IntField(display="Drill location", nullable=True)
    drill_location_start = IntField(display="Drill location start",
                                    nullable=True)
    drill_location_end = NativeListField(display="Drill location end",
                                         nullable=True)
    drill_sex = OptionField([1, 2],
                            constructor=int,
                            nullable=True,
                            display="Drill sex")
    birth_prev = OptionField([0, 1],
                             constructor=int,
                             nullable=True,
                             default=0,
                             display="Prevalence at birth")
    default_age_grid = StringListField(constructor=float,
                                       display="(Cascade) Age grid")
    default_time_grid = StringListField(constructor=float,
                                        display="(Cascade) Time grid")
    constrain_omega = OptionField([0, 1],
                                  constructor=int,
                                  nullable=False,
                                  display="Constrain other cause mortality")
    exclude_data_for_param = ListField(constructor=int,
                                       nullable=True,
                                       display="Exclude data for parameter")
    ode_step_size = FloatField(display="ODE step size")
    addl_ode_stpes = StringListField(constructor=float,
                                     nullable=True,
                                     display="Advanced additional ODE steps")
    split_sex = OptionField(["most_detailed", "1", "2", "3", "4", "5"],
                            display="Split sex (Being used as Drill Start)")
    quasi_fixed = OptionField([0, 1],
                              default=0,
                              constructor=int,
                              nullable=True)
    zero_sum_random = ListField(nullable=True,
                                display="Zero-sum random effects")
    bound_frac_fixed = FloatField(
        default=1e-2,
        nullable=True,
        display="allowed modification to point to move it within bounds")
    bound_random = FloatField(
        nullable=True,
        display="allowed modification to point to move it within bounds")
    rate_case = StrField(nullable=False, display="The rate case")
    data_density = StrField(nullable=True, display="Data density")
    relabel_incidence = IntField(nullable=False, display="Relabel incidence")

    def _full_form_validation(self, root):
        errors = []

        if self.drill == "drill":
            if self.is_field_unset("drill_sex"):
                errors.append("For a drill, please specify Drill sex.")

        return errors
Esempio n. 8
0
class MinCVRate(Form):
    cascade_level_id: StrField = StrField(nullable=True)
    rate_measure_id: StrField = StrField(nullable=True)
    value: FloatField = FloatField(nullable=True)
Esempio n. 9
0
class MinCV(Form):
    cascade_level_id: StrField = StrField(nullable=True)
    value: FloatField = FloatField(nullable=True)
Esempio n. 10
0
class DataCV(Form):
    integrand_measure_id: IntField = IntField(nullable=True)
    value: FloatField = FloatField(nullable=True)