Coverage for backend/ahuora-builder/src/ahuora_builder/state_args.py: 75%
16 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
1"""Utilities for constructing state_args dictionaries from IDAES state blocks."""
4def extract_state_args(state, use_state_vars=True):
5 """
6 Extract numeric state arguments from a StateBlockData object.
8 Args:
9 state: StateBlockData object.
10 use_state_vars: If True, prefer ``define_state_vars()`` when available.
11 If False, use ``define_port_members()`` when available.
13 Returns:
14 Dictionary suitable for ``state_args`` in IDAES initialize methods.
15 """
16 members = None
17 if use_state_vars and hasattr(state, "define_state_vars"):
18 members = state.define_state_vars()
19 elif hasattr(state, "define_port_members"): 19 ↛ 21line 19 didn't jump to line 21 because the condition on line 19 was always true
20 members = state.define_port_members()
21 elif hasattr(state, "define_state_vars"):
22 members = state.define_state_vars()
24 if members is None: 24 ↛ 25line 24 didn't jump to line 25 because the condition on line 24 was never true
25 raise AttributeError(
26 f"State block {state.name} does not define state or port members."
27 )
29 state_args = {}
30 for name, obj in members.items():
31 if obj.is_indexed():
32 state_args[name] = {idx: obj[idx].value for idx in obj.keys()}
33 else:
34 state_args[name] = obj.value
35 return state_args