class CountryCovariate(Form):
    country_covariate_id = IntField(display="Covariate")

    measure_id = IntField(display="Measure")
    mulcov_type = OptionField(["rate_value", "meas_value", "meas_std"],
                              display="Multiplier type")
    transformation = IntField(display="Transformation")
    age_time_specific = IntField(display="Age and Time specific")

    age_grid = StringListField(constructor=float,
                               nullable=True,
                               display="Age grid")
    time_grid = StringListField(constructor=float,
                                nullable=True,
                                display="Time grid")
    default = SmoothingPriorGroup(display="Defaults")
    mulstd = SmoothingPriorGroup(nullable=True, display="MulStd")
    detail = FormList(SmoothingPrior, nullable=True, display="Detail")

    custom_age_grid = Dummy()
    custom_time_grid = Dummy()
Ejemplo n.º 2
0
class StudyCovariate(Form):
    study_covariate_id: IntField = IntField(display="Covariate")

    measure_id: StrField = StrField(display="Measure")
    mulcov_type: OptionField = OptionField(
        ["rate_value", "meas_value", "meas_noise"], display="Multiplier type")
    transformation: IntField = IntField(display="Transformation")
    age_time_specific: IntField = IntField(display="Age and Time specific")

    age_grid: StringListField = StringListField(constructor=float,
                                                nullable=True,
                                                display="Age grid")
    time_grid: StringListField = StringListField(constructor=float,
                                                 nullable=True,
                                                 display="Time grid")
    default: SmoothingPriorGroup = SmoothingPriorGroup(display="Defaults")
    mulstd: SmoothingPriorGroup = SmoothingPriorGroup(nullable=True,
                                                      display="MulStd")
    detail: FormList = FormList(SmoothingPrior,
                                nullable=True,
                                display="Detail")

    custom_age_grid: Dummy = Dummy()
    custom_time_grid: Dummy = Dummy()
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
class Smoothing(Form):
    rate = OptionField(["pini", "iota", "rho", "chi", "omega"], "Rate")
    location = IntField(nullable=True)
    age_grid = StringListField(constructor=float,
                               nullable=True,
                               display="Age grid")
    time_grid = StringListField(constructor=float,
                                nullable=True,
                                display="Time grid")
    default = SmoothingPriorGroup(display="Defaults")
    mulstd = SmoothingPriorGroup(nullable=True, display="MulStd")
    detail = FormList(SmoothingPrior, nullable=True, display="Detail")
    age_time_specific = IntField(display="Age and Time specific",
                                 nullable=True)

    custom_age_grid = Dummy()
    custom_time_grid = Dummy()

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

        if self.rate == "pini":
            if not self.is_field_unset("age_grid") and len(self.age_grid) != 1:
                errors.append("Pini must have exactly one age point")
        else:
            age_grid = self.age_grid or root.model.default_age_grid
            if len(age_grid) > 1 and self.default.is_field_unset("dage"):
                errors.append(
                    "You must supply a default age diff prior if the "
                    "smoothing has extent over age")

        time_grid = self.time_grid or root.model.default_time_grid
        if len(time_grid) > 1 and self.default.is_field_unset("dtime"):
            errors.append(
                "You must supply a default time diff prior if the smoothing "
                "has extent over time")

        if self._container._name == "rate":
            # This validation only makes sense for Fixed Effects not
            # Random Effects
            # TODO This repeats validation logic in cascade.model.rates but I
            # don't see a good way to bring that in here
            is_negative = True
            is_positive = True
            for prior in (
                [self.default.value] +
                [p for p in self.detail or [] if p.prior_type == "value"]):
                is_negative = is_negative and prior.min == 0 and prior.max == 0
                is_positive = is_positive and prior.min > 0
                if prior.min < 0:
                    errors.append(
                        "Rates must be constrained to be >= 0 at all points. "
                        "Add or correct the lower bound")
                    break

            if self.rate in ["iota", "rho"]:
                if not (is_negative or is_positive):
                    errors.append(
                        f"Rate {self.rate} must be either fully positive or "
                        f"constrained to zero")

        return errors
Ejemplo n.º 5
0
 class MyForm(Form):
     ints_field = StringListField(separator=",", constructor=int)
Ejemplo n.º 6
0
 class MyInnerSanctum(Form):
     int_field = IntField()
     float_list_field = StringListField(separator=" ", constructor=float)
     further_in = FormList(EvenMoreInner)
Ejemplo n.º 7
0
 class EvenMoreInner(Form):
     int_list_field = StringListField(separator=" ", constructor=float)