Coverage for backend/idaes_service/solver/diagnostics/infeasibilities.py: 96%
18 statements
« prev ^ index » next coverage.py v7.10.7, created at 2026-02-11 21:43 +0000
« prev ^ index » next coverage.py v7.10.7, created at 2026-02-11 21:43 +0000
1from ..properties_manager import PropertiesManager
2from typing import Iterator, TextIO
3import sys
4import pyomo.environ as pyo
5from pyomo.core.base.constraint import ScalarConstraint
7def compute_infeasibilities(properties_map: PropertiesManager) -> Iterator[tuple[any,float]]:
8 """
9 Compute how far each constrained property is from its target value.
11 :param properties_map: PropertiesManager instance containing property components
12 :type properties_map: PropertiesManager
13 :return: A tuple list of property IDs and their infeasibility magnitudes
14 :rtype: list[tuple[Any, float]]
15 """
17 for id, property_component in properties_map.items():
18 if property_component.corresponding_constraint is not None and type(next(iter(property_component.corresponding_constraint))) is ScalarConstraint: 18 ↛ 17line 18 didn't jump to line 17 because the condition on line 18 was always true
19 # Assuming the component is a Pyomo Var or Expression
20 current_value :float = pyo.value(next(iter(property_component.corresponding_constraint)))
21 target_value :float = pyo.value(next(iter(property_component.corresponding_constraint)).upper)
22 infeasibility = abs(current_value - target_value)
23 yield (id, infeasibility)
25def print_infeasibilities(properties_map: PropertiesManager):
26 """
27 Print the infeasibilities of constrained properties, sorted by magnitude.
29 :param properties_map: PropertiesManager instance containing property components
30 :type properties_map: PropertiesManager
31 """
34 # Sort from most to least infeasible
35 infeasibilities = list(compute_infeasibilities(properties_map))
36 infeasibilities.sort(key=lambda x: x[1], reverse=True)
38 print("Property Infeasibilities:")
39 for id, infeasibility in infeasibilities:
40 print(f"Property: {properties_map.get(id).name}, Infeasibility: {infeasibility}")