11"""Define the schemas for the simulator"""
22
3- from typing import Literal
43
54from pydantic import BaseModel , Field , field_validator , model_validator
65
7- from app .config .constants import TimeDefaults
6+ from app .config .constants import Distribution , TimeDefaults
87
98
109class RVConfig (BaseModel ):
1110 """class to configure random variables"""
1211
1312 mean : float
14- distribution : Literal [ "poisson" , "normal" , "gaussian" ] = "poisson"
13+ distribution : Distribution = Distribution . POISSON
1514 variance : float | None = None
1615
1716 @field_validator ("mean" , mode = "before" )
18- def check_mean_is_number (
17+ def ensure_mean_is_numeric (
1918 cls , # noqa: N805
2019 v : object ,
2120 ) -> float :
@@ -28,7 +27,10 @@ def check_mean_is_number(
2827 @model_validator (mode = "after" ) # type: ignore[arg-type]
2928 def default_variance (cls , model : "RVConfig" ) -> "RVConfig" : # noqa: N805
3029 """Set variance = mean when distribution == 'normal' and variance is missing."""
31- if model .variance is None and model .distribution in {"normal" , "gaussian" }:
30+ if model .variance is None and model .distribution in {
31+ Distribution .NORMAL ,
32+ Distribution .GAUSSIAN ,
33+ }:
3234 model .variance = model .mean
3335 return model
3436
@@ -38,21 +40,21 @@ class SimulationInput(BaseModel):
3840 avg_active_users : RVConfig
3941 avg_request_per_minute_per_user : RVConfig
4042 total_simulation_time : int = Field (
41- default = TimeDefaults .SIMULATION_TIME . value ,
42- ge = TimeDefaults .MIN_SIMULATION_TIME . value , # minimum simulation time in seconds
43+ default = TimeDefaults .SIMULATION_TIME ,
44+ ge = TimeDefaults .MIN_SIMULATION_TIME , # minimum simulation time in seconds
4345 description = (
44- f"Simulation time in seconds (>= { TimeDefaults .MIN_SIMULATION_TIME . value } )."
46+ f"Simulation time in seconds (>= { TimeDefaults .MIN_SIMULATION_TIME } )."
4547 ),
4648 )
4749
4850 user_sampling_window : int = Field (
49- default = TimeDefaults .USER_SAMPLING_WINDOW . value ,
50- ge = TimeDefaults .MIN_USER_SAMPLING_WINDOW . value ,
51- le = TimeDefaults .MAX_USER_SAMPLING_WINDOW . value ,
51+ default = TimeDefaults .USER_SAMPLING_WINDOW ,
52+ ge = TimeDefaults .MIN_USER_SAMPLING_WINDOW ,
53+ le = TimeDefaults .MAX_USER_SAMPLING_WINDOW ,
5254 description = (
5355 "Sampling window in seconds "
54- f"({ TimeDefaults .MIN_USER_SAMPLING_WINDOW . value } -"
55- f"{ TimeDefaults .MAX_USER_SAMPLING_WINDOW . value } )."
56+ f"({ TimeDefaults .MIN_USER_SAMPLING_WINDOW } -"
57+ f"{ TimeDefaults .MAX_USER_SAMPLING_WINDOW } )."
5658 ),
5759 )
5860
0 commit comments