def nest_predicate_fields(cls, values): """Move fields passed to the Fact model that really belong to the Predicate model.""" type_str = values.pop("type", "") if type_str and type_str.lower() != "fact": raise ValidationError(f"type {type_str} was passed to Fact model") if isinstance(values.get("predicate"), str): values["predicate"] = Predicate(content=values["predicate"]) if "truth" in values: values["predicate"].truth = values.pop("truth") for field_name in ["content", "truth", "sign", "expression"]: if field_name in values: values["predicate"] = values.get("predicate", {}) values["predicate"][field_name] = values.pop(field_name) if isinstance(values.get("predicate"), dict) and values["predicate"].get("content"): for sign in { **QuantityRange.opposite_comparisons, **QuantityRange.normalized_comparisons, }: if sign in values["predicate"]["content"]: content, quantity_text = values["predicate"][ "content"].split(sign) values["predicate"]["content"] = content.strip() values["predicate"]["expression"] = quantity_text.strip() values["predicate"]["sign"] = sign break return values
def move_truth_to_predicate(cls, values): if isinstance(values["predicate"], str): values["predicate"] = Predicate(content=values["predicate"]) if "truth" in values: values["predicate"].truth = values["truth"] del values["truth"] if isinstance(values.get("terms"), Mapping): values["terms"] = values[ "predicate"].template.get_term_sequence_from_mapping( values["terms"]) if not values.get("terms"): values["terms"] = [] elif isinstance(values["terms"], Term): values["terms"] = [values["terms"]] return values