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

1"""Utilities for constructing state_args dictionaries from IDAES state blocks.""" 

2 

3 

4def extract_state_args(state, use_state_vars=True): 

5 """ 

6 Extract numeric state arguments from a StateBlockData object. 

7 

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. 

12 

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

23 

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 ) 

28 

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