Coverage for backend/idaes_service/solver/solver.py: 93%

25 statements  

« prev     ^ index     » next       coverage.py v7.10.7, created at 2025-11-06 23:27 +0000

1from typing import Optional 

2from pydantic import BaseModel 

3from common.models.idaes import FlowsheetSchema 

4from common.models.idaes.flowsheet_schema import SolvedFlowsheetSchema 

5from common.models.idaes.payloads.solve_request_schema import IdaesSolveRequestPayload 

6from .flowsheet_manager import FlowsheetManager 

7 

8 

9class SolveModelResult(BaseModel): 

10 input_flowsheet: FlowsheetSchema 

11 output_flowsheet: SolvedFlowsheetSchema 

12 solve_index: Optional[int] = None 

13 scenario_id: Optional[int] = None 

14 task_id: int 

15 timing: dict 

16 

17def solve_model(solve_request: IdaesSolveRequestPayload) -> SolveModelResult: 

18 """Solves the model and returns the results""" 

19 flowsheet = FlowsheetManager(solve_request.flowsheet) 

20 #print(solve_request.flowsheet.model_dump_json()) 

21 flowsheet.load() 

22 flowsheet.initialise() 

23 flowsheet.report_statistics() 

24 if solve_request.perform_diagnostics: 24 ↛ 25line 24 didn't jump to line 25 because the condition on line 24 was never true

25 flowsheet.diagnose_problems() 

26 flowsheet.check_model_valid() 

27 flowsheet.solve() 

28 flowsheet.optimize() 

29 result = flowsheet.serialise() 

30 

31 return SolveModelResult( 

32 input_flowsheet=solve_request.flowsheet, 

33 output_flowsheet=result, 

34 solve_index=solve_request.solve_index, 

35 scenario_id=solve_request.scenario_id, 

36 task_id=solve_request.task_id, 

37 timing=flowsheet.timing.close() 

38 )