Coverage for backend/idaes_service/solver/property_package_manager.py: 91%
36 statements
« prev ^ index » next coverage.py v7.10.7, created at 2025-11-06 23:27 +0000
« prev ^ index » next coverage.py v7.10.7, created at 2025-11-06 23:27 +0000
1from idaes.core.base.property_base import PhysicalParameterBlock
2from idaes.core import FlowsheetBlock
3from property_packages.build_package import build_package
5from common.models.idaes.flowsheet_schema import PropertyPackageType
6from .flowsheet_manager_type import FlowsheetManager
7from common.models.idaes import PropertyPackageId
10def create_property_package(
11 property_package_schema: PropertyPackageType, flowsheet: FlowsheetBlock
12) -> PhysicalParameterBlock:
13 """
14 Create a property package from a schema
15 """
16 compounds = property_package_schema.compounds
17 type = property_package_schema.type
18 phases = property_package_schema.phases
20 property_package = build_package(type, compounds)
21 property_package_id = property_package_schema.id if property_package_schema.id != -1 else "default"
23 flowsheet.add_component(f"PP_{property_package_id}", property_package)
24 return property_package
27class PropertyPackageManager:
28 """
29 Manages the property packages for a flowsheet
30 """
32 def __init__(self, flowsheet_manager: FlowsheetManager) -> None:
33 """
34 Create a new property package manager
35 """
36 self._flowsheet_manager = flowsheet_manager
37 self._property_packages: dict[PropertyPackageId, PhysicalParameterBlock] = {}
39 def load(self) -> None:
40 """
41 Load the property packages from the flowsheet definition
42 """
43 schema = self._flowsheet_manager.schema
44 property_packages_schema = schema.property_packages
45 for property_package_schema in property_packages_schema:
46 id = property_package_schema.id
47 if id in self._property_packages: 47 ↛ 48line 47 didn't jump to line 48 because the condition on line 47 was never true
48 raise Exception(f"Property package with id {id} already exists")
50 property_package = create_property_package(
51 property_package_schema, self._flowsheet_manager.model.fs
52 )
53 self._property_packages[id] = property_package
55 def get(self, id: PropertyPackageId) -> PhysicalParameterBlock:
56 """
57 Get a property package by id
58 """
59 # For backwards compatibility with other tests, use id -1 as helmholtz
60 fs = self._flowsheet_manager.model.fs
62 if id == -1:
63 if not hasattr(fs, "PP_default"):
64 create_property_package(
65 PropertyPackageType(
66 id=-1,
67 type="helmholtz",
68 compounds=["h2o"],
69 phases=["Liq"]
70 ),
71 fs,
72 )
73 return fs.PP_default
74 else:
75 # get the property package by id
76 if id not in self._property_packages: 76 ↛ 77line 76 didn't jump to line 77 because the condition on line 76 was never true
77 raise Exception(f"Property package with id {id} does not exist")
78 return self._property_packages[id]