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

1from idaes.core.base.property_base import PhysicalParameterBlock 

2from idaes.core import FlowsheetBlock 

3from property_packages.build_package import build_package 

4 

5from common.models.idaes.flowsheet_schema import PropertyPackageType 

6from .flowsheet_manager_type import FlowsheetManager 

7from common.models.idaes import PropertyPackageId 

8 

9 

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 

19 

20 property_package = build_package(type, compounds) 

21 property_package_id = property_package_schema.id if property_package_schema.id != -1 else "default" 

22 

23 flowsheet.add_component(f"PP_{property_package_id}", property_package) 

24 return property_package 

25 

26 

27class PropertyPackageManager: 

28 """ 

29 Manages the property packages for a flowsheet 

30 """ 

31 

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] = {} 

38 

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") 

49 

50 property_package = create_property_package( 

51 property_package_schema, self._flowsheet_manager.model.fs 

52 ) 

53 self._property_packages[id] = property_package 

54 

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 

61 

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]