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

41 statements  

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

1from django.db import models 

2from .PropertyInfo import PropertyInfo 

3from .PropertyValue import PropertyValue 

4from flowsheetInternals.unitops.models.SimulationObject import SimulationObject 

5 

6from core.managers import AccessControlManager 

7 

8class ScenarioTabTypeEnum(models.TextChoices): 

9 

10 SteadyState = "steady state" 

11 MultiSteadyState = "mss" 

12 Dynamic = "dynamic" 

13 

14class SolverOptionEnum(models.TextChoices): 

15 Ipopt= "ipopt" 

16 Ipopt_v2 = "ipopt_v2" 

17 Bomin = "bonmin" 

18 Conopt = "conopt" 

19 

20 

21 

22class Scenario(models.Model): 

23 """ 

24 Stores all relevant information about an optimization 

25 """ 

26 flowsheet = models.ForeignKey("Flowsheet", on_delete=models.CASCADE, related_name="Optimizations") 

27 # owner of the optimization 

28 simulationObject = models.ForeignKey(SimulationObject, on_delete=models.CASCADE, related_name="optimizations", null=True) 

29 displayName = models.CharField(max_length=64, blank=True, default="Scenario") 

30 enable_optimization = models.BooleanField(default=False) 

31 enable_dynamics = models.BooleanField(default=False) 

32 state_name = models.CharField(max_length=64, blank=True, choices=ScenarioTabTypeEnum.choices, default=ScenarioTabTypeEnum.SteadyState) 

33 num_time_steps = models.IntegerField(default=1) 

34 simulation_length = models.FloatField(default=1.0) 

35 simulation_length_units = models.CharField(max_length=32, blank=True) 

36 Uploaded_fileName = models.CharField(max_length=64, blank=True, default="No file Chosen") 

37 enable_rating = models.BooleanField(default=False) 

38 solver_option = models.CharField(max_length=64, blank=True, choices=SolverOptionEnum.choices, default=SolverOptionEnum.Ipopt) 

39 is_LiveData = models.BooleanField(default=False) 

40 disable_initialization = models.BooleanField(default=False) 

41 

42 # expression to minimize or maximize 

43 objective = models.ForeignKey(PropertyInfo, on_delete=models.SET_NULL, null=True) 

44 # boolean to find minimum or maximum or the objective 

45 minimize = models.BooleanField(default=True) 

46 

47 created_at = models.DateTimeField(auto_now_add=True) 

48 

49 objects = AccessControlManager() 

50 

51 

52 

53 

54 

55class OptimizationDegreesOfFreedom(models.Model): 

56 flowsheet = models.ForeignKey("Flowsheet", on_delete=models.CASCADE, related_name="OptimizationDegreesOfFreedoms") 

57 scenario = models.ForeignKey(Scenario, on_delete=models.CASCADE, related_name="degreesOfFreedom", null=True) 

58 propertyValue = models.ForeignKey(PropertyValue, on_delete=models.CASCADE, null=True) 

59 upper_bound = models.FloatField(null=True, blank=True) 

60 lower_bound = models.FloatField(null=True, blank=True) 

61 created_at = models.DateTimeField(auto_now_add=True) 

62 objects = AccessControlManager() 

63 

64