Coverage for backend/django/core/auxiliary/models/Solution.py: 100%

14 statements  

« prev     ^ index     » next       coverage.py v7.10.7, created at 2026-07-22 05:22 +0000

1from django.contrib.postgres.fields import ArrayField 

2from django.db import models 

3 

4from core.managers import AccessControlManager, AllFlowsheetStatesManager 

5 

6class Solution(models.Model): 

7 """Persist property results produced by multi-solves. 

8 

9 Each instance captures values for a specific `solve_index` and property 

10 within a scenario. Steady-state runs typically contribute a single float, 

11 while dynamic solves (standalone or nested inside an MSS iteration) store a 

12 sequence of time-step values. Records are populated following any MSS solve 

13 and later surfaced through serializers, viewsets, and summary tooling. 

14 """ 

15 flowsheet_state = models.ForeignKey("FlowsheetState", on_delete=models.CASCADE, related_name="solutions") 

16 property = models.ForeignKey("PropertyValue", on_delete=models.CASCADE, related_name="solutions", null=True) 

17 scenario = models.ForeignKey("Scenario", on_delete=models.CASCADE, related_name="solutions") 

18 solve_index = models.IntegerField(null=True, default=None) 

19 values = ArrayField( 

20 models.FloatField() 

21 ) 

22 

23 created_at = models.DateTimeField(auto_now_add=True) 

24 objects = AccessControlManager() 

25 all_states = AllFlowsheetStatesManager() 

26 

27 class Meta: 

28 indexes = [ 

29 models.Index( 

30 fields=["scenario", "property", "solve_index"], 

31 name="solution_scenario_prop_row_idx", 

32 ), 

33 models.Index( 

34 fields=["scenario", "solve_index", "created_at"], 

35 name="sol_scenario_row_created_idx", 

36 ), 

37 models.Index( 

38 fields=["scenario", "solve_index", "property"], 

39 name="sol_scenario_row_prop_idx", 

40 ), 

41 ]