From 71ceefb49a4d55da5f45e6ccfaa85a696e4d823a Mon Sep 17 00:00:00 2001 From: Tom Szendrey Date: Mon, 29 Jul 2024 11:21:57 -0400 Subject: [PATCH 1/7] minor changes to API calls --- service/models/operations/calibrate.py | 25 ++++++++++++++++--------- service/models/operations/simulate.py | 13 +++++++++++-- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/service/models/operations/calibrate.py b/service/models/operations/calibrate.py index bb9ddd6..0fd5289 100644 --- a/service/models/operations/calibrate.py +++ b/service/models/operations/calibrate.py @@ -2,7 +2,7 @@ import socket import logging -from typing import ClassVar, Optional +from typing import ClassVar, Optional, Any, Dict from pydantic import BaseModel, Field, Extra from pika.exceptions import AMQPConnectionError @@ -25,19 +25,12 @@ class CalibrateExtra(BaseModel): num_iterations: int = Field( 1000, description="Optional field for CIEMSS calibration", example=1000 ) - lr: float = Field( - 0.03, description="Optional field for CIEMSS calibration", example=0.03 - ) verbose: bool = Field( False, description="Optional field for CIEMSS calibration", example=False ) num_particles: int = Field( 1, description="Optional field for CIEMSS calibration", example=1 ) - # autoguide: pyro.infer.autoguide.AutoLowRankMultivariateNormal - solver_method: str = Field( - "dopri5", description="Optional field for CIEMSS calibration", example="dopri5" - ) class Calibrate(OperationRequest): @@ -46,6 +39,15 @@ class Calibrate(OperationRequest): dataset: Dataset = None timespan: Optional[Timespan] = None policy_intervention_id: str = Field(None, example="ba8da8d4-047d-11ee-be56") + learning_rate: float = 0.03 + solver_method: str = ( + Field( + "dopri5", + description="Optional field for CIEMSS calibration", + example="dopri5", + ), + ) + solver_options: Dict[str, Any] = ({},) extra: CalibrateExtra = Field( None, description="optional extra system specific arguments for advanced use cases", @@ -74,6 +76,8 @@ def hook(progress, _loss): logging.info(f"Calibration is {progress}% complete") return None + extra_options = self.extra.dict() + return { "model_path_or_json": amr_path, "start_time": self.timespan.start, @@ -82,8 +86,11 @@ def hook(progress, _loss): "data_path": dataset_path, "static_parameter_interventions": static_interventions, "progress_hook": hook, + "lr": self.learning_rate, + "solver_method": self.solver_method, + "solver_options": self.solver_options, # "visual_options": True, - **self.extra.dict(), + **extra_options, } class Config: diff --git a/service/models/operations/simulate.py b/service/models/operations/simulate.py index 2aeeebb..7ea7b53 100644 --- a/service/models/operations/simulate.py +++ b/service/models/operations/simulate.py @@ -2,8 +2,7 @@ from typing import ClassVar, Optional from pydantic import BaseModel, Field, Extra - - +from typing import Dict, Any from models.base import OperationRequest, Timespan from models.converters import ( fetch_and_convert_static_interventions, @@ -28,6 +27,14 @@ class Simulate(OperationRequest): model_config_id: str = Field(..., example="ba8da8d4-047d-11ee-be56") timespan: Timespan = Timespan(start=0, end=90) policy_intervention_id: str = Field(None, example="ba8da8d4-047d-11ee-be56") + solver_method: str = ( + Field( + "dopri5", + description="Optional field for CIEMSS calibration", + example="dopri5", + ), + ) + solver_options: Dict[str, Any] = ({},) step_size: float = 1.0 extra: SimulateExtra = Field( None, @@ -59,6 +66,8 @@ def gen_pyciemss_args(self, job_id): "static_parameter_interventions": static_interventions, "dynamic_parameter_interventions": dynamic_interventions, "inferred_parameters": inferred_parameters, + "solver_method": self.solver_method, + "solver_options": self.solver_options, **extra_options, } From 348e3953d85bd58f2d69e1650865f6e9bd5f18e4 Mon Sep 17 00:00:00 2001 From: Tom Szendrey Date: Mon, 29 Jul 2024 11:24:08 -0400 Subject: [PATCH 2/7] add solver_options link --- service/models/operations/calibrate.py | 1 + service/models/operations/simulate.py | 1 + 2 files changed, 2 insertions(+) diff --git a/service/models/operations/calibrate.py b/service/models/operations/calibrate.py index 0fd5289..b2760d8 100644 --- a/service/models/operations/calibrate.py +++ b/service/models/operations/calibrate.py @@ -47,6 +47,7 @@ class Calibrate(OperationRequest): example="dopri5", ), ) + # https://github.com/ciemss/pyciemss/blob/main/pyciemss/integration_utils/interface_checks.py solver_options: Dict[str, Any] = ({},) extra: CalibrateExtra = Field( None, diff --git a/service/models/operations/simulate.py b/service/models/operations/simulate.py index 7ea7b53..70e7f24 100644 --- a/service/models/operations/simulate.py +++ b/service/models/operations/simulate.py @@ -34,6 +34,7 @@ class Simulate(OperationRequest): example="dopri5", ), ) + # https://github.com/ciemss/pyciemss/blob/main/pyciemss/integration_utils/interface_checks.py solver_options: Dict[str, Any] = ({},) step_size: float = 1.0 extra: SimulateExtra = Field( From a7ce85cede73ef6ec08db29e89ed48ec0c93bbec Mon Sep 17 00:00:00 2001 From: Tom Szendrey Date: Mon, 29 Jul 2024 11:24:52 -0400 Subject: [PATCH 3/7] updating learning_rate details --- service/models/operations/calibrate.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/service/models/operations/calibrate.py b/service/models/operations/calibrate.py index b2760d8..1186a9c 100644 --- a/service/models/operations/calibrate.py +++ b/service/models/operations/calibrate.py @@ -39,7 +39,9 @@ class Calibrate(OperationRequest): dataset: Dataset = None timespan: Optional[Timespan] = None policy_intervention_id: str = Field(None, example="ba8da8d4-047d-11ee-be56") - learning_rate: float = 0.03 + learning_rate: float = Field( + 0.03, description="Optional field for CIEMSS calibration", example=0.03 + ) solver_method: str = ( Field( "dopri5", From 1706bd4316e3a70a3b23fc61f592e10b7db59c37 Mon Sep 17 00:00:00 2001 From: Tom Szendrey Date: Mon, 29 Jul 2024 11:35:36 -0400 Subject: [PATCH 4/7] updating calibrate test --- tests/examples/calibrate/input/request.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/examples/calibrate/input/request.json b/tests/examples/calibrate/input/request.json index 3229711..e4f3d0f 100644 --- a/tests/examples/calibrate/input/request.json +++ b/tests/examples/calibrate/input/request.json @@ -14,13 +14,13 @@ "start": 0, "end": 90 }, + "learning_rate": 0.3, + "solver_method": "dopri5", "extra": { "num_samples": 100, "start_time": -1e-10, "num_iterations": 1000, - "lr": 0.03, "verbose": false, - "num_particles": 1, - "method": "dopri5" + "num_particles": 1 } } From 8a9329096a9cfaedd12d7378272e3f70d6cd3dcb Mon Sep 17 00:00:00 2001 From: Tom Szendrey Date: Mon, 29 Jul 2024 13:21:43 -0400 Subject: [PATCH 5/7] minor changes: solver_options --- service/models/operations/calibrate.py | 13 ++++++++++--- service/models/operations/simulate.py | 15 +++++++++++---- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/service/models/operations/calibrate.py b/service/models/operations/calibrate.py index 1186a9c..7e946a8 100644 --- a/service/models/operations/calibrate.py +++ b/service/models/operations/calibrate.py @@ -2,7 +2,7 @@ import socket import logging -from typing import ClassVar, Optional, Any, Dict +from typing import ClassVar, Optional from pydantic import BaseModel, Field, Extra from pika.exceptions import AMQPConnectionError @@ -50,7 +50,11 @@ class Calibrate(OperationRequest): ), ) # https://github.com/ciemss/pyciemss/blob/main/pyciemss/integration_utils/interface_checks.py - solver_options: Dict[str, Any] = ({},) + solver_step_size: Optional[float] = Field( + None, + description="id from a previous calibration", + example=None, + ) extra: CalibrateExtra = Field( None, description="optional extra system specific arguments for advanced use cases", @@ -80,6 +84,9 @@ def hook(progress, _loss): return None extra_options = self.extra.dict() + solver_options = {} + if self.solver_step_size is not None: + solver_options = {"step_size": self.solver_step_size} return { "model_path_or_json": amr_path, @@ -91,7 +98,7 @@ def hook(progress, _loss): "progress_hook": hook, "lr": self.learning_rate, "solver_method": self.solver_method, - "solver_options": self.solver_options, + "solver_options": solver_options, # "visual_options": True, **extra_options, } diff --git a/service/models/operations/simulate.py b/service/models/operations/simulate.py index 70e7f24..5e21f93 100644 --- a/service/models/operations/simulate.py +++ b/service/models/operations/simulate.py @@ -2,7 +2,6 @@ from typing import ClassVar, Optional from pydantic import BaseModel, Field, Extra -from typing import Dict, Any from models.base import OperationRequest, Timespan from models.converters import ( fetch_and_convert_static_interventions, @@ -34,9 +33,13 @@ class Simulate(OperationRequest): example="dopri5", ), ) + logging_step_size: float = 1.0 # https://github.com/ciemss/pyciemss/blob/main/pyciemss/integration_utils/interface_checks.py - solver_options: Dict[str, Any] = ({},) - step_size: float = 1.0 + solver_step_size: Optional[float] = Field( + None, + description="id from a previous calibration", + example=None, + ) extra: SimulateExtra = Field( None, description="optional extra system specific arguments for advanced use cases", @@ -59,6 +62,10 @@ def gen_pyciemss_args(self, job_id): extra_options.pop("inferred_parameters"), job_id ) + solver_options = {} + if self.solver_step_size is not None: + solver_options = {"step_size": self.solver_step_size} + return { "model_path_or_json": amr_path, "logging_step_size": self.step_size, @@ -68,7 +75,7 @@ def gen_pyciemss_args(self, job_id): "dynamic_parameter_interventions": dynamic_interventions, "inferred_parameters": inferred_parameters, "solver_method": self.solver_method, - "solver_options": self.solver_options, + "solver_options": solver_options, **extra_options, } From b03f4bea702bce77250bb5d5c806ac0f7f37aea4 Mon Sep 17 00:00:00 2001 From: Tom Szendrey Date: Mon, 29 Jul 2024 14:09:13 -0400 Subject: [PATCH 6/7] correcting typos --- service/models/operations/calibrate.py | 15 +++++++-------- service/models/operations/simulate.py | 14 ++++++-------- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/service/models/operations/calibrate.py b/service/models/operations/calibrate.py index 7e946a8..062c3a6 100644 --- a/service/models/operations/calibrate.py +++ b/service/models/operations/calibrate.py @@ -42,18 +42,17 @@ class Calibrate(OperationRequest): learning_rate: float = Field( 0.03, description="Optional field for CIEMSS calibration", example=0.03 ) - solver_method: str = ( - Field( - "dopri5", - description="Optional field for CIEMSS calibration", - example="dopri5", - ), + solver_method: str = Field( + "dopri5", + description="Optional field for CIEMSS calibration", + example="dopri5", ) + # https://github.com/ciemss/pyciemss/blob/main/pyciemss/integration_utils/interface_checks.py - solver_step_size: Optional[float] = Field( + solver_step_size: float = Field( None, description="id from a previous calibration", - example=None, + example=1.0, ) extra: CalibrateExtra = Field( None, diff --git a/service/models/operations/simulate.py b/service/models/operations/simulate.py index 5e21f93..309a1ec 100644 --- a/service/models/operations/simulate.py +++ b/service/models/operations/simulate.py @@ -26,19 +26,17 @@ class Simulate(OperationRequest): model_config_id: str = Field(..., example="ba8da8d4-047d-11ee-be56") timespan: Timespan = Timespan(start=0, end=90) policy_intervention_id: str = Field(None, example="ba8da8d4-047d-11ee-be56") - solver_method: str = ( - Field( - "dopri5", - description="Optional field for CIEMSS calibration", - example="dopri5", - ), + solver_method: str = Field( + "dopri5", + description="Optional field for CIEMSS calibration", + example="dopri5", ) logging_step_size: float = 1.0 # https://github.com/ciemss/pyciemss/blob/main/pyciemss/integration_utils/interface_checks.py - solver_step_size: Optional[float] = Field( + solver_step_size: float = Field( None, description="id from a previous calibration", - example=None, + example=1.0, ) extra: SimulateExtra = Field( None, From 85915c3843f06d27c85b6e14358827dd4ffde490 Mon Sep 17 00:00:00 2001 From: Tom Szendrey Date: Mon, 29 Jul 2024 14:24:19 -0400 Subject: [PATCH 7/7] logging_step_size --- service/models/operations/simulate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service/models/operations/simulate.py b/service/models/operations/simulate.py index 309a1ec..45da154 100644 --- a/service/models/operations/simulate.py +++ b/service/models/operations/simulate.py @@ -66,7 +66,7 @@ def gen_pyciemss_args(self, job_id): return { "model_path_or_json": amr_path, - "logging_step_size": self.step_size, + "logging_step_size": self.logging_step_size, "start_time": self.timespan.start, "end_time": self.timespan.end, "static_parameter_interventions": static_interventions,