entities: List[EntityModel] = Field(description="entities in the story")
    # TODO: root validate each `entity.depends_on` using system's entity names
[docs]class EntitySettingModel(BaseModel):
    """
    Initial conditions for an entity
    {"name": "bud", "attribute": "pet_count", "value": 12}
    """
    name: str = Field(description="name of the entity")
    attribute: str = Field(description="name of the attribute to be calculated")
    value: float = Field(description="entity's attribute value (calculated)")
    @validator("name")
    def lower_case_transform(cls, v: str) -> str:
        v = v.lower()
        return v
[docs]class SystemSettingModel(BaseModel):
    """
    Initial global conditions for the system.
    {"parameter": "interest_rate", "value": .05}
    """
    parameter: str
    value: float
[docs]class InterventionModel(BaseModel):
    """
    aka initial conditions
    >>> intervention.dict()
    {
        entity_settings: [
            {"name": "bud", "attribute": "pet_count", "value": 12},
            {"name": "pat", "attribute": "pet_count", "value": 0},
        ],
        system_settings: None,
    }
    """
    entity_settings: List[EntitySettingModel]
    system_settings: Optional[List[SystemSettingModel]] = None
    @validator("system_settings")
    def lower_case_name(cls, v: str) -> Union[str, None]:
        if v is not None:
            raise NotImplementedError("system_setting is not implemented yet")
        return v
[docs]class QueryModel(BaseModel):