Coverage for backend/ahuora-builder-types/src/ahuora_builder_types/unit_model_schema.py: 100%
52 statements
« prev ^ index » next coverage.py v7.10.7, created at 2026-05-13 02:47 +0000
« prev ^ index » next coverage.py v7.10.7, created at 2026-05-13 02:47 +0000
1from __future__ import annotations
2from pydantic import BaseModel, Field
3from typing import Any, Dict, Union, Optional, Literal, NewType, Annotated
5from typing_extensions import TypeAliasType
7from .id_types import PropertyPackageId, UnitModelId, PortId, PropertyValueId
9class SolvedPropertyValueSchema(BaseModel):
10 id: PropertyValueId
11 name: str
12 value: float | list[float] # Dynamics will have a list of values, rather than a single value.
13 unit: str
14 unknown_units: bool = False
16class PropertyValueSchema(BaseModel):
17 id: PropertyValueId
18 discrete_indexes: Optional[list[str]] = None
19 value: Optional[float | list[float]] = None
20 controlled: Optional[int] = None
21 guess: bool = False
22 constraint: Optional[str] = None
24class PropertySchema(BaseModel):
25 data: list[PropertyValueSchema]
26 unit: Optional[str] = ""
29PropertiesSchema = Dict[str, "PropertySchema"]
32class PortSchema(BaseModel):
33 id: PortId
34 properties: PropertiesSchema
37PortsSchema = Dict[str, PortSchema]
39class ValueArgSchema(BaseModel):
40 type: Literal["value"] = "value"
41 value: Any
43class DictArgSchema(BaseModel):
44 type: Literal["dict"] = "dict"
45 value: Dict[str, ArgSchema]
47class PropertyPackageArgSchema(BaseModel):
48 type: Literal["property_package"] = "property_package"
49 id: PropertyPackageId
51class PowerPPArgSchema(BaseModel):
52 type: Literal["power"] = "power"
54class ACPPArgSchema(BaseModel):
55 type: Literal["AC"] = "AC"
57class ReactionPPArgSchema(BaseModel):
58 type: Literal["reaction"] = "reaction"
61class ReactorPPArgSchema(BaseModel):
62 type: Literal["reactor"] = "reactor"
64ArgSchema = Annotated[Union[
65 ValueArgSchema,
66 DictArgSchema,
67 PropertyPackageArgSchema,
68 PowerPPArgSchema,
69 ACPPArgSchema,
70 ReactionPPArgSchema,
71 ReactorPPArgSchema,
72], Field(discriminator="type")]
76class UnitModelSchema(BaseModel):
77 id: UnitModelId
78 type: str # eg. "pump", "heater", "mixer"
79 name: str
80 args: dict[str, ArgSchema]
81 properties: PropertiesSchema
82 ports: PortsSchema
83 initial_values: Optional[dict[str, dict]] = Field(default_factory=dict) # IDAES initial values from their to_json method