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

1from __future__ import annotations 

2from pydantic import BaseModel, Field 

3from typing import Any, Dict, Union, Optional, Literal, NewType, Annotated 

4 

5from typing_extensions import TypeAliasType 

6 

7from .id_types import PropertyPackageId, UnitModelId, PortId, PropertyValueId 

8 

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 

15 

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 

23 

24class PropertySchema(BaseModel): 

25 data: list[PropertyValueSchema] 

26 unit: Optional[str] = "" 

27 

28 

29PropertiesSchema = Dict[str, "PropertySchema"] 

30 

31 

32class PortSchema(BaseModel): 

33 id: PortId 

34 properties: PropertiesSchema 

35 

36 

37PortsSchema = Dict[str, PortSchema] 

38 

39class ValueArgSchema(BaseModel): 

40 type: Literal["value"] = "value" 

41 value: Any 

42 

43class DictArgSchema(BaseModel): 

44 type: Literal["dict"] = "dict" 

45 value: Dict[str, ArgSchema] 

46 

47class PropertyPackageArgSchema(BaseModel): 

48 type: Literal["property_package"] = "property_package" 

49 id: PropertyPackageId 

50 

51class PowerPPArgSchema(BaseModel): 

52 type: Literal["power"] = "power" 

53 

54class ACPPArgSchema(BaseModel): 

55 type: Literal["AC"] = "AC" 

56 

57class ReactionPPArgSchema(BaseModel): 

58 type: Literal["reaction"] = "reaction" 

59 

60 

61class ReactorPPArgSchema(BaseModel): 

62 type: Literal["reactor"] = "reactor" 

63 

64ArgSchema = Annotated[Union[ 

65 ValueArgSchema, 

66 DictArgSchema, 

67 PropertyPackageArgSchema, 

68 PowerPPArgSchema, 

69 ACPPArgSchema, 

70 ReactionPPArgSchema, 

71 ReactorPPArgSchema, 

72], Field(discriminator="type")] 

73 

74 

75 

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