From cf59fc4e5ac33c96894dcfd93862c21c1d70837c Mon Sep 17 00:00:00 2001 From: Bryan Rumsey Date: Thu, 10 Mar 2022 13:41:09 -0500 Subject: [PATCH 01/11] Commented broken tests for model in solvers. --- gillespy2/solvers/cpp/ode_c_solver.py | 4 ++-- gillespy2/solvers/cpp/ssa_c_solver.py | 4 ++-- gillespy2/solvers/cpp/tau_hybrid_c_solver.py | 4 ++-- gillespy2/solvers/cpp/tau_leaping_c_solver.py | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/gillespy2/solvers/cpp/ode_c_solver.py b/gillespy2/solvers/cpp/ode_c_solver.py index 65d9a4532..f3b7b1362 100644 --- a/gillespy2/solvers/cpp/ode_c_solver.py +++ b/gillespy2/solvers/cpp/ode_c_solver.py @@ -45,8 +45,8 @@ def run(self=None, model: Model = None, t: int = 20, number_of_trajectories: int if model is None: raise SimulationError("A model is required to run the simulation.") self._set_model(model=model) - if model is not None and model.get_json_hash() != self.model.get_json_hash(): - raise SimulationError("Model must equal ODECSolver.model.") + # if model is not None and model.get_json_hash() != self.model.get_json_hash(): + # raise SimulationError("Model must equal ODECSolver.model.") self.model.resolve_parameters() self.validate_sbml_features(model=model) diff --git a/gillespy2/solvers/cpp/ssa_c_solver.py b/gillespy2/solvers/cpp/ssa_c_solver.py index 9d647ee52..a926a5860 100644 --- a/gillespy2/solvers/cpp/ssa_c_solver.py +++ b/gillespy2/solvers/cpp/ssa_c_solver.py @@ -46,8 +46,8 @@ def run(self=None, model: Model = None, t: int = 20, number_of_trajectories: int if model is None: raise SimulationError("A model is required to run the simulation.") self._set_model(model=model) - if model is not None and model.get_json_hash() != self.model.get_json_hash(): - raise SimulationError("Model must equal SSACSolver.model.") + # if model is not None and model.get_json_hash() != self.model.get_json_hash(): + # raise SimulationError("Model must equal SSACSolver.model.") self.model.resolve_parameters() self.validate_sbml_features(model=model) diff --git a/gillespy2/solvers/cpp/tau_hybrid_c_solver.py b/gillespy2/solvers/cpp/tau_hybrid_c_solver.py index 8bec0fb8f..feb26bd96 100644 --- a/gillespy2/solvers/cpp/tau_hybrid_c_solver.py +++ b/gillespy2/solvers/cpp/tau_hybrid_c_solver.py @@ -172,8 +172,8 @@ def run(self=None, model: Model = None, t: int = 20, number_of_trajectories: int if model is None: raise SimulationError("A model is required to run the simulation.") self._set_model(model=model) - if model is not None and model.get_json_hash() != self.model.get_json_hash(): - raise SimulationError("Model must equal TauHybridCSolver.model.") + # if model is not None and model.get_json_hash() != self.model.get_json_hash(): + # raise SimulationError("Model must equal TauHybridCSolver.model.") self.model.resolve_parameters() self.validate_sbml_features(model=model) diff --git a/gillespy2/solvers/cpp/tau_leaping_c_solver.py b/gillespy2/solvers/cpp/tau_leaping_c_solver.py index 42110c2bb..01758dee0 100644 --- a/gillespy2/solvers/cpp/tau_leaping_c_solver.py +++ b/gillespy2/solvers/cpp/tau_leaping_c_solver.py @@ -45,8 +45,8 @@ def run(self=None, model: Model = None, t: int = 20, number_of_trajectories: int if model is None: raise SimulationError("A model is required to run the simulation.") self._set_model(model=model) - if model is not None and model.get_json_hash() != self.model.get_json_hash(): - raise SimulationError("Model must equal TauLeapingCSolver.model.") + # if model is not None and model.get_json_hash() != self.model.get_json_hash(): + # raise SimulationError("Model must equal TauLeapingCSolver.model.") self.model.resolve_parameters() self.validate_sbml_features(model=model) From 46090007482ecf6db32940029a3f498b735337d4 Mon Sep 17 00:00:00 2001 From: Bryan Rumsey Date: Thu, 17 Mar 2022 14:01:02 -0400 Subject: [PATCH 02/11] Fixed model checks for C solvers. --- gillespy2/solvers/cpp/ode_c_solver.py | 6 ++++-- gillespy2/solvers/cpp/ssa_c_solver.py | 6 ++++-- gillespy2/solvers/cpp/tau_hybrid_c_solver.py | 6 ++++-- gillespy2/solvers/cpp/tau_leaping_c_solver.py | 6 ++++-- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/gillespy2/solvers/cpp/ode_c_solver.py b/gillespy2/solvers/cpp/ode_c_solver.py index f3b7b1362..2324d35d9 100644 --- a/gillespy2/solvers/cpp/ode_c_solver.py +++ b/gillespy2/solvers/cpp/ode_c_solver.py @@ -45,9 +45,11 @@ def run(self=None, model: Model = None, t: int = 20, number_of_trajectories: int if model is None: raise SimulationError("A model is required to run the simulation.") self._set_model(model=model) - # if model is not None and model.get_json_hash() != self.model.get_json_hash(): - # raise SimulationError("Model must equal ODECSolver.model.") self.model.resolve_parameters() + if model is not None: + model.resolve_parameters() + if model.get_json_hash() != self.model.get_json_hash(): + raise SimulationError("Model must equal ODECSolver.model.") self.validate_sbml_features(model=model) increment = self.get_increment(increment=increment) diff --git a/gillespy2/solvers/cpp/ssa_c_solver.py b/gillespy2/solvers/cpp/ssa_c_solver.py index a926a5860..78646245f 100644 --- a/gillespy2/solvers/cpp/ssa_c_solver.py +++ b/gillespy2/solvers/cpp/ssa_c_solver.py @@ -46,9 +46,11 @@ def run(self=None, model: Model = None, t: int = 20, number_of_trajectories: int if model is None: raise SimulationError("A model is required to run the simulation.") self._set_model(model=model) - # if model is not None and model.get_json_hash() != self.model.get_json_hash(): - # raise SimulationError("Model must equal SSACSolver.model.") self.model.resolve_parameters() + if model is not None: + model.resolve_parameters() + if model.get_json_hash() != self.model.get_json_hash(): + raise SimulationError("Model must equal SSACSolver.model.") self.validate_sbml_features(model=model) increment = self.get_increment(increment=increment) diff --git a/gillespy2/solvers/cpp/tau_hybrid_c_solver.py b/gillespy2/solvers/cpp/tau_hybrid_c_solver.py index feb26bd96..9141482f9 100644 --- a/gillespy2/solvers/cpp/tau_hybrid_c_solver.py +++ b/gillespy2/solvers/cpp/tau_hybrid_c_solver.py @@ -172,9 +172,11 @@ def run(self=None, model: Model = None, t: int = 20, number_of_trajectories: int if model is None: raise SimulationError("A model is required to run the simulation.") self._set_model(model=model) - # if model is not None and model.get_json_hash() != self.model.get_json_hash(): - # raise SimulationError("Model must equal TauHybridCSolver.model.") self.model.resolve_parameters() + if model is not None: + model.resolve_parameters() + if model.get_json_hash() != self.model.get_json_hash(): + raise SimulationError("Model must equal TauHybridCSolver.model.") self.validate_sbml_features(model=model) increment = self.get_increment(increment=increment) diff --git a/gillespy2/solvers/cpp/tau_leaping_c_solver.py b/gillespy2/solvers/cpp/tau_leaping_c_solver.py index 01758dee0..ad353f7cb 100644 --- a/gillespy2/solvers/cpp/tau_leaping_c_solver.py +++ b/gillespy2/solvers/cpp/tau_leaping_c_solver.py @@ -45,9 +45,11 @@ def run(self=None, model: Model = None, t: int = 20, number_of_trajectories: int if model is None: raise SimulationError("A model is required to run the simulation.") self._set_model(model=model) - # if model is not None and model.get_json_hash() != self.model.get_json_hash(): - # raise SimulationError("Model must equal TauLeapingCSolver.model.") self.model.resolve_parameters() + if model is not None: + model.resolve_parameters() + if model.get_json_hash() != self.model.get_json_hash(): + raise SimulationError("Model must equal TauLeapingCSolver.model.") self.validate_sbml_features(model=model) increment = self.get_increment(increment=increment) From 20e479da9fb85942ad47f191ced168cf0bfd2bd5 Mon Sep 17 00:00:00 2001 From: Bryan Rumsey Date: Thu, 17 Mar 2022 14:39:00 -0400 Subject: [PATCH 03/11] Fixed gillespy2Error import error. --- gillespy2/solvers/cpp/ode_c_solver.py | 2 +- gillespy2/solvers/cpp/ssa_c_solver.py | 2 +- gillespy2/solvers/cpp/tau_hybrid_c_solver.py | 2 +- gillespy2/solvers/cpp/tau_leaping_c_solver.py | 2 +- gillespy2/solvers/numpy/ssa_solver.py | 4 ++-- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/gillespy2/solvers/cpp/ode_c_solver.py b/gillespy2/solvers/cpp/ode_c_solver.py index 2324d35d9..0bae9a435 100644 --- a/gillespy2/solvers/cpp/ode_c_solver.py +++ b/gillespy2/solvers/cpp/ode_c_solver.py @@ -104,7 +104,7 @@ def run(self=None, model: Model = None, t: int = 20, number_of_trajectories: int sim_status = self._run(sim_exec, args, decoder, timeout, display_args) if sim_status == SimulationReturnCode.FAILED: - raise gillespyError.ExecutionError("Error encountered while running simulation C++ file:\n" + raise ExecutionError("Error encountered while running simulation C++ file:\n" f"Return code: {int(sim_status)}.\n") trajectories, time_stopped = decoder.get_output() diff --git a/gillespy2/solvers/cpp/ssa_c_solver.py b/gillespy2/solvers/cpp/ssa_c_solver.py index 78646245f..f0a65e3a5 100644 --- a/gillespy2/solvers/cpp/ssa_c_solver.py +++ b/gillespy2/solvers/cpp/ssa_c_solver.py @@ -104,7 +104,7 @@ def run(self=None, model: Model = None, t: int = 20, number_of_trajectories: int sim_status = self._run(sim_exec, args, decoder, timeout, display_args) if sim_status == SimulationReturnCode.FAILED: - raise gillespyError.ExecutionError("Error encountered while running simulation C++ file:\n" + raise ExecutionError("Error encountered while running simulation C++ file:\n" f"Return code: {int(sim_status)}.\n") trajectories, time_stopped = decoder.get_output() diff --git a/gillespy2/solvers/cpp/tau_hybrid_c_solver.py b/gillespy2/solvers/cpp/tau_hybrid_c_solver.py index 9141482f9..173ccc785 100644 --- a/gillespy2/solvers/cpp/tau_hybrid_c_solver.py +++ b/gillespy2/solvers/cpp/tau_hybrid_c_solver.py @@ -233,7 +233,7 @@ def run(self=None, model: Model = None, t: int = 20, number_of_trajectories: int sim_status = self._run(sim_exec, args, decoder, timeout, display_args) if sim_status == SimulationReturnCode.FAILED: - raise gillespyError.ExecutionError("Error encountered while running simulation C++ file:\n" + raise ExecutionError("Error encountered while running simulation C++ file:\n" f"Return code: {int(sim_status)}.\n") trajectories, time_stopped = decoder.get_output() diff --git a/gillespy2/solvers/cpp/tau_leaping_c_solver.py b/gillespy2/solvers/cpp/tau_leaping_c_solver.py index ad353f7cb..c58d147fd 100644 --- a/gillespy2/solvers/cpp/tau_leaping_c_solver.py +++ b/gillespy2/solvers/cpp/tau_leaping_c_solver.py @@ -104,7 +104,7 @@ def run(self=None, model: Model = None, t: int = 20, number_of_trajectories: int sim_status = self._run(sim_exec, args, decoder, timeout, display_args) if sim_status == SimulationReturnCode.FAILED: - raise gillespyError.ExecutionError("Error encountered while running simulation C++ file:\n" + raise ExecutionError("Error encountered while running simulation C++ file:\n" f"Return code: {int(sim_status)}.\n") trajectories, time_stopped = decoder.get_output() diff --git a/gillespy2/solvers/numpy/ssa_solver.py b/gillespy2/solvers/numpy/ssa_solver.py index a25bb6e10..4e465c546 100644 --- a/gillespy2/solvers/numpy/ssa_solver.py +++ b/gillespy2/solvers/numpy/ssa_solver.py @@ -198,9 +198,9 @@ def __run(self, curr_state, total_time, timeline, trajectory_base, live_grapher, if resume is not None: if resume[0].model != self.model: - raise gillespyError.ModelError('When resuming, one must not alter the model being resumed.') + raise ModelError('When resuming, one must not alter the model being resumed.') if t < resume['time'][-1]: - raise gillespyError.ExecutionError( + raise ExecutionError( "'t' must be greater than previous simulations end time, or set in the run() method as the " "simulations next end time") From e04a92648152d99279f237ed8c82144939ed63dd Mon Sep 17 00:00:00 2001 From: Bryan Rumsey Date: Fri, 18 Mar 2022 10:01:50 -0400 Subject: [PATCH 04/11] test failed commented check for devils. --- gillespy2/solvers/cpp/tau_hybrid_c_solver.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/gillespy2/solvers/cpp/tau_hybrid_c_solver.py b/gillespy2/solvers/cpp/tau_hybrid_c_solver.py index 173ccc785..3a2a6646a 100644 --- a/gillespy2/solvers/cpp/tau_hybrid_c_solver.py +++ b/gillespy2/solvers/cpp/tau_hybrid_c_solver.py @@ -173,10 +173,10 @@ def run(self=None, model: Model = None, t: int = 20, number_of_trajectories: int raise SimulationError("A model is required to run the simulation.") self._set_model(model=model) self.model.resolve_parameters() - if model is not None: - model.resolve_parameters() - if model.get_json_hash() != self.model.get_json_hash(): - raise SimulationError("Model must equal TauHybridCSolver.model.") +# if model is not None: +# model.resolve_parameters() +# if model.get_json_hash() != self.model.get_json_hash(): +# raise SimulationError("Model must equal TauHybridCSolver.model.") self.validate_sbml_features(model=model) increment = self.get_increment(increment=increment) From 73aec6d6262610df6f08226133d3e04769de3290 Mon Sep 17 00:00:00 2001 From: Bryan Rumsey Date: Fri, 18 Mar 2022 10:50:59 -0400 Subject: [PATCH 05/11] Local test with devils singles passed. --- gillespy2/solvers/cpp/tau_hybrid_c_solver.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/gillespy2/solvers/cpp/tau_hybrid_c_solver.py b/gillespy2/solvers/cpp/tau_hybrid_c_solver.py index 3a2a6646a..173ccc785 100644 --- a/gillespy2/solvers/cpp/tau_hybrid_c_solver.py +++ b/gillespy2/solvers/cpp/tau_hybrid_c_solver.py @@ -173,10 +173,10 @@ def run(self=None, model: Model = None, t: int = 20, number_of_trajectories: int raise SimulationError("A model is required to run the simulation.") self._set_model(model=model) self.model.resolve_parameters() -# if model is not None: -# model.resolve_parameters() -# if model.get_json_hash() != self.model.get_json_hash(): -# raise SimulationError("Model must equal TauHybridCSolver.model.") + if model is not None: + model.resolve_parameters() + if model.get_json_hash() != self.model.get_json_hash(): + raise SimulationError("Model must equal TauHybridCSolver.model.") self.validate_sbml_features(model=model) increment = self.get_increment(increment=increment) From 226e01333f23dc575cf399b1bf4cd273d5ce00c3 Mon Sep 17 00:00:00 2001 From: Bryan Rumsey Date: Tue, 22 Mar 2022 10:50:29 -0400 Subject: [PATCH 06/11] Moved the model check to the solvers base class to avoid repeated code. --- gillespy2/core/gillespySolver.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/gillespy2/core/gillespySolver.py b/gillespy2/core/gillespySolver.py index 6dc19d21f..c2fe7f422 100644 --- a/gillespy2/core/gillespySolver.py +++ b/gillespy2/core/gillespySolver.py @@ -86,6 +86,13 @@ def get_increment(self, increment): def get_supported_features(cls) -> "Set[Type]": return set() + @classmethod + def validate_model(cls, sol_model, model): + if model is not None: + model.resolve_parameters() + if model.get_json_hash() != self.model.get_json_hash(): + raise SimulationError("Model must equal ODECSolver.model.") + @classmethod def validate_sbml_features(cls, model): unsupported_features = model.get_model_features() - cls.get_supported_features() From a56e82c2641a279279b00cab3c9caba1d53a1dee Mon Sep 17 00:00:00 2001 From: Bryan Rumsey Date: Tue, 22 Mar 2022 10:52:41 -0400 Subject: [PATCH 07/11] Refactored the the model check block to use the new validate model function. Refactored the numpy solvers to use the same model validation method. --- gillespy2/solvers/cpp/ode_c_solver.py | 5 +---- gillespy2/solvers/cpp/ssa_c_solver.py | 5 +---- gillespy2/solvers/cpp/tau_hybrid_c_solver.py | 5 +---- gillespy2/solvers/cpp/tau_leaping_c_solver.py | 5 +---- gillespy2/solvers/numpy/CLE_solver.py | 3 +-- gillespy2/solvers/numpy/ode_solver.py | 3 +-- gillespy2/solvers/numpy/ssa_solver.py | 3 +-- gillespy2/solvers/numpy/tau_hybrid_solver.py | 3 +-- gillespy2/solvers/numpy/tau_leaping_solver.py | 3 +-- 9 files changed, 9 insertions(+), 26 deletions(-) diff --git a/gillespy2/solvers/cpp/ode_c_solver.py b/gillespy2/solvers/cpp/ode_c_solver.py index 0bae9a435..313478f20 100644 --- a/gillespy2/solvers/cpp/ode_c_solver.py +++ b/gillespy2/solvers/cpp/ode_c_solver.py @@ -46,10 +46,7 @@ def run(self=None, model: Model = None, t: int = 20, number_of_trajectories: int raise SimulationError("A model is required to run the simulation.") self._set_model(model=model) self.model.resolve_parameters() - if model is not None: - model.resolve_parameters() - if model.get_json_hash() != self.model.get_json_hash(): - raise SimulationError("Model must equal ODECSolver.model.") + self.validate_model(self.model, model) self.validate_sbml_features(model=model) increment = self.get_increment(increment=increment) diff --git a/gillespy2/solvers/cpp/ssa_c_solver.py b/gillespy2/solvers/cpp/ssa_c_solver.py index f0a65e3a5..08a364d6a 100644 --- a/gillespy2/solvers/cpp/ssa_c_solver.py +++ b/gillespy2/solvers/cpp/ssa_c_solver.py @@ -47,10 +47,7 @@ def run(self=None, model: Model = None, t: int = 20, number_of_trajectories: int raise SimulationError("A model is required to run the simulation.") self._set_model(model=model) self.model.resolve_parameters() - if model is not None: - model.resolve_parameters() - if model.get_json_hash() != self.model.get_json_hash(): - raise SimulationError("Model must equal SSACSolver.model.") + self.validate_model(self.model, model) self.validate_sbml_features(model=model) increment = self.get_increment(increment=increment) diff --git a/gillespy2/solvers/cpp/tau_hybrid_c_solver.py b/gillespy2/solvers/cpp/tau_hybrid_c_solver.py index 173ccc785..5f0c48a3b 100644 --- a/gillespy2/solvers/cpp/tau_hybrid_c_solver.py +++ b/gillespy2/solvers/cpp/tau_hybrid_c_solver.py @@ -173,10 +173,7 @@ def run(self=None, model: Model = None, t: int = 20, number_of_trajectories: int raise SimulationError("A model is required to run the simulation.") self._set_model(model=model) self.model.resolve_parameters() - if model is not None: - model.resolve_parameters() - if model.get_json_hash() != self.model.get_json_hash(): - raise SimulationError("Model must equal TauHybridCSolver.model.") + self.validate_model(self.model, model) self.validate_sbml_features(model=model) increment = self.get_increment(increment=increment) diff --git a/gillespy2/solvers/cpp/tau_leaping_c_solver.py b/gillespy2/solvers/cpp/tau_leaping_c_solver.py index c58d147fd..74d117926 100644 --- a/gillespy2/solvers/cpp/tau_leaping_c_solver.py +++ b/gillespy2/solvers/cpp/tau_leaping_c_solver.py @@ -46,10 +46,7 @@ def run(self=None, model: Model = None, t: int = 20, number_of_trajectories: int raise SimulationError("A model is required to run the simulation.") self._set_model(model=model) self.model.resolve_parameters() - if model is not None: - model.resolve_parameters() - if model.get_json_hash() != self.model.get_json_hash(): - raise SimulationError("Model must equal TauLeapingCSolver.model.") + self.validate_model(self.model, model) self.validate_sbml_features(model=model) increment = self.get_increment(increment=increment) diff --git a/gillespy2/solvers/numpy/CLE_solver.py b/gillespy2/solvers/numpy/CLE_solver.py index 96c9876dd..8d7f0b9c5 100644 --- a/gillespy2/solvers/numpy/CLE_solver.py +++ b/gillespy2/solvers/numpy/CLE_solver.py @@ -154,9 +154,8 @@ def run(self, model=None, t=20, number_of_trajectories=1, increment=None, seed=N if model is None: raise SimulationError("A model is required to run the simulation.") self.model = model - if model is not None and model.get_json_hash() != self.model.get_json_hash(): - raise SimulationError("Model must equal CLESolver.model.") self.model.resolve_parameters() + self.validate_model(self.model, model) self.validate_sbml_features(model=model) increment = self.get_increment(increment=increment) diff --git a/gillespy2/solvers/numpy/ode_solver.py b/gillespy2/solvers/numpy/ode_solver.py index 40fb7d495..6c75a99e8 100644 --- a/gillespy2/solvers/numpy/ode_solver.py +++ b/gillespy2/solvers/numpy/ode_solver.py @@ -113,9 +113,8 @@ def run(self, model=None, t=20, number_of_trajectories=1, increment=None, show_l if model is None: raise SimulationError("A model is required to run the simulation.") self.model = model - if model is not None and model.get_json_hash() != self.model.get_json_hash(): - raise SimulationError("Model must equal OSESolver.model.") self.model.resolve_parameters() + self.validate_model(self.model, model) self.validate_sbml_features(model=model) increment = self.get_increment(increment=increment) diff --git a/gillespy2/solvers/numpy/ssa_solver.py b/gillespy2/solvers/numpy/ssa_solver.py index 4e465c546..b8ded2e21 100644 --- a/gillespy2/solvers/numpy/ssa_solver.py +++ b/gillespy2/solvers/numpy/ssa_solver.py @@ -78,9 +78,8 @@ def run(self, model=None, t=20, number_of_trajectories=1, increment=None, seed=N if model is None: raise SimulationError("A model is required to run the simulation.") self.model = model - if model is not None and model.get_json_hash() != self.model.get_json_hash(): - raise SimulationError("Model must equal NumPySSASolver.model.") self.model.resolve_parameters() + self.validate_model(self.model, model) self.validate_sbml_features(model=model) increment = self.get_increment(increment=increment) diff --git a/gillespy2/solvers/numpy/tau_hybrid_solver.py b/gillespy2/solvers/numpy/tau_hybrid_solver.py index 2559f392c..4fc04b193 100644 --- a/gillespy2/solvers/numpy/tau_hybrid_solver.py +++ b/gillespy2/solvers/numpy/tau_hybrid_solver.py @@ -833,9 +833,8 @@ def run(self, model=None, t=20, number_of_trajectories=1, increment=None, seed=N if model is None: raise SimulationError("A model is required to run the simulation.") self.model = model - if model is not None and model.get_json_hash() != self.model.get_json_hash(): - raise SimulationError("Model must equal TauHybridSolver.model.") self.model.resolve_parameters() + self.validate_model(self.model, model) self.validate_sbml_features(model=model) increment = self.get_increment(increment=increment) diff --git a/gillespy2/solvers/numpy/tau_leaping_solver.py b/gillespy2/solvers/numpy/tau_leaping_solver.py index 29d993df9..a4a50ef10 100644 --- a/gillespy2/solvers/numpy/tau_leaping_solver.py +++ b/gillespy2/solvers/numpy/tau_leaping_solver.py @@ -141,9 +141,8 @@ def run(self, model=None, t=20, number_of_trajectories=1, increment=None, seed=N if model is None: raise SimulationError("A model is required to run the simulation.") self.model = model - if model is not None and model.get_json_hash() != self.model.get_json_hash(): - raise SimulationError("Model must equal TauLeapingSolver.model.") self.model.resolve_parameters() + self.validate_model(self.model, model) self.validate_sbml_features(model=model) increment = self.get_increment(increment=increment) From 6326ebaa28e6929dee1d2471dc11ba4291145323 Mon Sep 17 00:00:00 2001 From: Bryan Rumsey Date: Tue, 22 Mar 2022 11:03:09 -0400 Subject: [PATCH 08/11] Fixed syntax error. --- gillespy2/core/gillespySolver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gillespy2/core/gillespySolver.py b/gillespy2/core/gillespySolver.py index c2fe7f422..f839090ff 100644 --- a/gillespy2/core/gillespySolver.py +++ b/gillespy2/core/gillespySolver.py @@ -90,7 +90,7 @@ def get_supported_features(cls) -> "Set[Type]": def validate_model(cls, sol_model, model): if model is not None: model.resolve_parameters() - if model.get_json_hash() != self.model.get_json_hash(): + if model.get_json_hash() != sol_model.get_json_hash(): raise SimulationError("Model must equal ODECSolver.model.") @classmethod From c05cd5beb71b6bb8fd1d8d72e6ce46e99f66630a Mon Sep 17 00:00:00 2001 From: Bryan Rumsey Date: Wed, 23 Mar 2022 10:55:08 -0400 Subject: [PATCH 09/11] Added check to solver constructor that requires a model. --- gillespy2/solvers/cpp/c_solver.py | 6 +++--- gillespy2/solvers/numpy/CLE_solver.py | 2 ++ gillespy2/solvers/numpy/ode_solver.py | 2 ++ gillespy2/solvers/numpy/ssa_solver.py | 2 ++ gillespy2/solvers/numpy/tau_hybrid_solver.py | 2 ++ gillespy2/solvers/numpy/tau_leaping_solver.py | 2 ++ 6 files changed, 13 insertions(+), 3 deletions(-) diff --git a/gillespy2/solvers/cpp/c_solver.py b/gillespy2/solvers/cpp/c_solver.py index bd33cd507..8bddff0e5 100644 --- a/gillespy2/solvers/cpp/c_solver.py +++ b/gillespy2/solvers/cpp/c_solver.py @@ -63,7 +63,6 @@ class CSolver: def __init__(self, model: Model = None, output_directory: str = None, delete_directory: bool = True, resume=None, variable: bool = False): self.delete_directory = False - self.model = model self.resume = resume self.variable = variable self.build_engine: BuildEngine = None @@ -80,8 +79,9 @@ def __init__(self, model: Model = None, output_directory: str = None, delete_dir self.output_directory = output_directory self.delete_directory = delete_directory - if self.model is not None: - self._set_model() + if model is None: + raise SimulationError("A model is required to run the simulation.") + self._set_model(model) def __del__(self): if self.build_engine is None: diff --git a/gillespy2/solvers/numpy/CLE_solver.py b/gillespy2/solvers/numpy/CLE_solver.py index 8d7f0b9c5..c6cd55d68 100644 --- a/gillespy2/solvers/numpy/CLE_solver.py +++ b/gillespy2/solvers/numpy/CLE_solver.py @@ -50,6 +50,8 @@ def __init__(self, model=None, debug=False, profile=False): stop_event = None pause_event = None result = None + if model is None: + raise SimulationError("A model is required to run the simulation.") self.model = model self.debug = debug self.profile = profile diff --git a/gillespy2/solvers/numpy/ode_solver.py b/gillespy2/solvers/numpy/ode_solver.py index 6c75a99e8..59867a906 100644 --- a/gillespy2/solvers/numpy/ode_solver.py +++ b/gillespy2/solvers/numpy/ode_solver.py @@ -43,6 +43,8 @@ def __init__(self, model=None): stop_event = None pause_event = None result = None + if model is None: + raise SimulationError("A model is required to run the simulation.") self.model = model @staticmethod diff --git a/gillespy2/solvers/numpy/ssa_solver.py b/gillespy2/solvers/numpy/ssa_solver.py index b8ded2e21..ba75434f5 100644 --- a/gillespy2/solvers/numpy/ssa_solver.py +++ b/gillespy2/solvers/numpy/ssa_solver.py @@ -40,6 +40,8 @@ def __init__(self, model=None): stop_event = None result = None pause_event = None + if model is None: + raise SimulationError("A model is required to run the simulation.") self.model = model def get_solver_settings(self): diff --git a/gillespy2/solvers/numpy/tau_hybrid_solver.py b/gillespy2/solvers/numpy/tau_hybrid_solver.py index 4fc04b193..5cdfe069e 100644 --- a/gillespy2/solvers/numpy/tau_hybrid_solver.py +++ b/gillespy2/solvers/numpy/tau_hybrid_solver.py @@ -73,6 +73,8 @@ class TauHybridSolver(GillesPySolver): def __init__(self, model=None): name = 'TauHybridSolver' rc = 0 + if model is None: + raise SimulationError("A model is required to run the simulation.") self.model = model def __toggle_reactions(self, all_compiled, deterministic_reactions, dependencies, diff --git a/gillespy2/solvers/numpy/tau_leaping_solver.py b/gillespy2/solvers/numpy/tau_leaping_solver.py index a4a50ef10..6a58a50ea 100644 --- a/gillespy2/solvers/numpy/tau_leaping_solver.py +++ b/gillespy2/solvers/numpy/tau_leaping_solver.py @@ -47,6 +47,8 @@ def __init__(self, model=None, debug=False, profile=False): stop_event = None pause_event = None result = None + if model is None: + raise SimulationError("A model is required to run the simulation.") self.model = model self.debug = debug self.profile = profile From 6db1af54b7d1b0f5ceb83c496f8744770704c173 Mon Sep 17 00:00:00 2001 From: Bryan Rumsey Date: Wed, 23 Mar 2022 11:18:14 -0400 Subject: [PATCH 10/11] Added deprecation warnings for model arg in functions. --- gillespy2/solvers/cpp/ode_c_solver.py | 4 ++++ gillespy2/solvers/cpp/ssa_c_solver.py | 4 ++++ gillespy2/solvers/cpp/tau_hybrid_c_solver.py | 4 ++++ gillespy2/solvers/cpp/tau_leaping_c_solver.py | 4 ++++ gillespy2/solvers/numpy/CLE_solver.py | 4 ++++ gillespy2/solvers/numpy/ode_solver.py | 4 ++++ gillespy2/solvers/numpy/ssa_solver.py | 4 ++++ gillespy2/solvers/numpy/tau_hybrid_solver.py | 4 ++++ gillespy2/solvers/numpy/tau_leaping_solver.py | 4 ++++ 9 files changed, 36 insertions(+) diff --git a/gillespy2/solvers/cpp/ode_c_solver.py b/gillespy2/solvers/cpp/ode_c_solver.py index 313478f20..a1ec45909 100644 --- a/gillespy2/solvers/cpp/ode_c_solver.py +++ b/gillespy2/solvers/cpp/ode_c_solver.py @@ -41,6 +41,10 @@ def run(self=None, model: Model = None, t: int = 20, number_of_trajectories: int if self is None: self = ODECSolver(model, resume=resume) + if model is not None: + from gillespy2 import log + log.warning("model = gillespy2.Model is depricated. Future releases " + "of GillesPy2 may not support this feature.") if self.model is None: if model is None: raise SimulationError("A model is required to run the simulation.") diff --git a/gillespy2/solvers/cpp/ssa_c_solver.py b/gillespy2/solvers/cpp/ssa_c_solver.py index 08a364d6a..d2c2ef7b2 100644 --- a/gillespy2/solvers/cpp/ssa_c_solver.py +++ b/gillespy2/solvers/cpp/ssa_c_solver.py @@ -42,6 +42,10 @@ def run(self=None, model: Model = None, t: int = 20, number_of_trajectories: int if self is None: self = SSACSolver(model, resume=resume) + if model is not None: + from gillespy2 import log + log.warning("model = gillespy2.Model is depricated. Future releases " + "of GillesPy2 may not support this feature.") if self.model is None: if model is None: raise SimulationError("A model is required to run the simulation.") diff --git a/gillespy2/solvers/cpp/tau_hybrid_c_solver.py b/gillespy2/solvers/cpp/tau_hybrid_c_solver.py index 5f0c48a3b..7642eef32 100644 --- a/gillespy2/solvers/cpp/tau_hybrid_c_solver.py +++ b/gillespy2/solvers/cpp/tau_hybrid_c_solver.py @@ -168,6 +168,10 @@ def run(self=None, model: Model = None, t: int = 20, number_of_trajectories: int if self is None: self = TauHybridCSolver(model, resume=resume) + if model is not None: + from gillespy2 import log + log.warning("model = gillespy2.Model is depricated. Future releases " + "of GillesPy2 may not support this feature.") if self.model is None: if model is None: raise SimulationError("A model is required to run the simulation.") diff --git a/gillespy2/solvers/cpp/tau_leaping_c_solver.py b/gillespy2/solvers/cpp/tau_leaping_c_solver.py index 74d117926..1fe99056d 100644 --- a/gillespy2/solvers/cpp/tau_leaping_c_solver.py +++ b/gillespy2/solvers/cpp/tau_leaping_c_solver.py @@ -41,6 +41,10 @@ def run(self=None, model: Model = None, t: int = 20, number_of_trajectories: int if self is None: self = TauLeapingCSolver(model, resume=resume) + if model is not None: + from gillespy2 import log + log.warning("model = gillespy2.Model is depricated. Future releases " + "of GillesPy2 may not support this feature.") if self.model is None: if model is None: raise SimulationError("A model is required to run the simulation.") diff --git a/gillespy2/solvers/numpy/CLE_solver.py b/gillespy2/solvers/numpy/CLE_solver.py index c6cd55d68..8415884e4 100644 --- a/gillespy2/solvers/numpy/CLE_solver.py +++ b/gillespy2/solvers/numpy/CLE_solver.py @@ -152,6 +152,10 @@ def run(self, model=None, t=20, number_of_trajectories=1, increment=None, seed=N if isinstance(self, type): self = CLESolver(model=model, debug=debug, profile=profile) + if model is not None: + from gillespy2 import log + log.warning("model = gillespy2.Model is depricated. Future releases " + "of GillesPy2 may not support this feature.") if self.model is None: if model is None: raise SimulationError("A model is required to run the simulation.") diff --git a/gillespy2/solvers/numpy/ode_solver.py b/gillespy2/solvers/numpy/ode_solver.py index 59867a906..54f6a8219 100644 --- a/gillespy2/solvers/numpy/ode_solver.py +++ b/gillespy2/solvers/numpy/ode_solver.py @@ -111,6 +111,10 @@ def run(self, model=None, t=20, number_of_trajectories=1, increment=None, show_l """ if isinstance(self, type): self = ODESolver(model=model) + if model is not None: + from gillespy2 import log + log.warning("model = gillespy2.Model is depricated. Future releases " + "of GillesPy2 may not support this feature.") if self.model is None: if model is None: raise SimulationError("A model is required to run the simulation.") diff --git a/gillespy2/solvers/numpy/ssa_solver.py b/gillespy2/solvers/numpy/ssa_solver.py index ba75434f5..6d71c26fa 100644 --- a/gillespy2/solvers/numpy/ssa_solver.py +++ b/gillespy2/solvers/numpy/ssa_solver.py @@ -76,6 +76,10 @@ def run(self, model=None, t=20, number_of_trajectories=1, increment=None, seed=N if isinstance(self, type): self = NumPySSASolver(model=model) + if model is not None: + from gillespy2 import log + log.warning("model = gillespy2.Model is depricated. Future releases " + "of GillesPy2 may not support this feature.") if self.model is None: if model is None: raise SimulationError("A model is required to run the simulation.") diff --git a/gillespy2/solvers/numpy/tau_hybrid_solver.py b/gillespy2/solvers/numpy/tau_hybrid_solver.py index 5cdfe069e..1edebf23b 100644 --- a/gillespy2/solvers/numpy/tau_hybrid_solver.py +++ b/gillespy2/solvers/numpy/tau_hybrid_solver.py @@ -831,6 +831,10 @@ def run(self, model=None, t=20, number_of_trajectories=1, increment=None, seed=N if isinstance(self, type): self = TauHybridSolver(model=model) + if model is not None: + from gillespy2 import log + log.warning("model = gillespy2.Model is depricated. Future releases " + "of GillesPy2 may not support this feature.") if self.model is None: if model is None: raise SimulationError("A model is required to run the simulation.") diff --git a/gillespy2/solvers/numpy/tau_leaping_solver.py b/gillespy2/solvers/numpy/tau_leaping_solver.py index 6a58a50ea..535da5728 100644 --- a/gillespy2/solvers/numpy/tau_leaping_solver.py +++ b/gillespy2/solvers/numpy/tau_leaping_solver.py @@ -139,6 +139,10 @@ def run(self, model=None, t=20, number_of_trajectories=1, increment=None, seed=N if isinstance(self, type): self = TauLeapingSolver(model=model, debug=debug, profile=profile) + if model is not None: + from gillespy2 import log + log.warning("model = gillespy2.Model is depricated. Future releases " + "of GillesPy2 may not support this feature.") if self.model is None: if model is None: raise SimulationError("A model is required to run the simulation.") From cbb6b477d5905794a0d8b6152bf93abde85acb64 Mon Sep 17 00:00:00 2001 From: Bryan Rumsey Date: Wed, 23 Mar 2022 11:40:30 -0400 Subject: [PATCH 11/11] Reverted changes from model deprecation. --- gillespy2/solvers/cpp/c_solver.py | 6 +++--- gillespy2/solvers/cpp/ode_c_solver.py | 4 ---- gillespy2/solvers/cpp/ssa_c_solver.py | 4 ---- gillespy2/solvers/cpp/tau_hybrid_c_solver.py | 4 ---- gillespy2/solvers/cpp/tau_leaping_c_solver.py | 4 ---- gillespy2/solvers/numpy/CLE_solver.py | 6 ------ gillespy2/solvers/numpy/ode_solver.py | 6 ------ gillespy2/solvers/numpy/ssa_solver.py | 6 ------ gillespy2/solvers/numpy/tau_hybrid_solver.py | 6 ------ gillespy2/solvers/numpy/tau_leaping_solver.py | 6 ------ 10 files changed, 3 insertions(+), 49 deletions(-) diff --git a/gillespy2/solvers/cpp/c_solver.py b/gillespy2/solvers/cpp/c_solver.py index 8bddff0e5..bd33cd507 100644 --- a/gillespy2/solvers/cpp/c_solver.py +++ b/gillespy2/solvers/cpp/c_solver.py @@ -63,6 +63,7 @@ class CSolver: def __init__(self, model: Model = None, output_directory: str = None, delete_directory: bool = True, resume=None, variable: bool = False): self.delete_directory = False + self.model = model self.resume = resume self.variable = variable self.build_engine: BuildEngine = None @@ -79,9 +80,8 @@ def __init__(self, model: Model = None, output_directory: str = None, delete_dir self.output_directory = output_directory self.delete_directory = delete_directory - if model is None: - raise SimulationError("A model is required to run the simulation.") - self._set_model(model) + if self.model is not None: + self._set_model() def __del__(self): if self.build_engine is None: diff --git a/gillespy2/solvers/cpp/ode_c_solver.py b/gillespy2/solvers/cpp/ode_c_solver.py index a1ec45909..313478f20 100644 --- a/gillespy2/solvers/cpp/ode_c_solver.py +++ b/gillespy2/solvers/cpp/ode_c_solver.py @@ -41,10 +41,6 @@ def run(self=None, model: Model = None, t: int = 20, number_of_trajectories: int if self is None: self = ODECSolver(model, resume=resume) - if model is not None: - from gillespy2 import log - log.warning("model = gillespy2.Model is depricated. Future releases " - "of GillesPy2 may not support this feature.") if self.model is None: if model is None: raise SimulationError("A model is required to run the simulation.") diff --git a/gillespy2/solvers/cpp/ssa_c_solver.py b/gillespy2/solvers/cpp/ssa_c_solver.py index d2c2ef7b2..08a364d6a 100644 --- a/gillespy2/solvers/cpp/ssa_c_solver.py +++ b/gillespy2/solvers/cpp/ssa_c_solver.py @@ -42,10 +42,6 @@ def run(self=None, model: Model = None, t: int = 20, number_of_trajectories: int if self is None: self = SSACSolver(model, resume=resume) - if model is not None: - from gillespy2 import log - log.warning("model = gillespy2.Model is depricated. Future releases " - "of GillesPy2 may not support this feature.") if self.model is None: if model is None: raise SimulationError("A model is required to run the simulation.") diff --git a/gillespy2/solvers/cpp/tau_hybrid_c_solver.py b/gillespy2/solvers/cpp/tau_hybrid_c_solver.py index 7642eef32..5f0c48a3b 100644 --- a/gillespy2/solvers/cpp/tau_hybrid_c_solver.py +++ b/gillespy2/solvers/cpp/tau_hybrid_c_solver.py @@ -168,10 +168,6 @@ def run(self=None, model: Model = None, t: int = 20, number_of_trajectories: int if self is None: self = TauHybridCSolver(model, resume=resume) - if model is not None: - from gillespy2 import log - log.warning("model = gillespy2.Model is depricated. Future releases " - "of GillesPy2 may not support this feature.") if self.model is None: if model is None: raise SimulationError("A model is required to run the simulation.") diff --git a/gillespy2/solvers/cpp/tau_leaping_c_solver.py b/gillespy2/solvers/cpp/tau_leaping_c_solver.py index 1fe99056d..74d117926 100644 --- a/gillespy2/solvers/cpp/tau_leaping_c_solver.py +++ b/gillespy2/solvers/cpp/tau_leaping_c_solver.py @@ -41,10 +41,6 @@ def run(self=None, model: Model = None, t: int = 20, number_of_trajectories: int if self is None: self = TauLeapingCSolver(model, resume=resume) - if model is not None: - from gillespy2 import log - log.warning("model = gillespy2.Model is depricated. Future releases " - "of GillesPy2 may not support this feature.") if self.model is None: if model is None: raise SimulationError("A model is required to run the simulation.") diff --git a/gillespy2/solvers/numpy/CLE_solver.py b/gillespy2/solvers/numpy/CLE_solver.py index 8415884e4..8d7f0b9c5 100644 --- a/gillespy2/solvers/numpy/CLE_solver.py +++ b/gillespy2/solvers/numpy/CLE_solver.py @@ -50,8 +50,6 @@ def __init__(self, model=None, debug=False, profile=False): stop_event = None pause_event = None result = None - if model is None: - raise SimulationError("A model is required to run the simulation.") self.model = model self.debug = debug self.profile = profile @@ -152,10 +150,6 @@ def run(self, model=None, t=20, number_of_trajectories=1, increment=None, seed=N if isinstance(self, type): self = CLESolver(model=model, debug=debug, profile=profile) - if model is not None: - from gillespy2 import log - log.warning("model = gillespy2.Model is depricated. Future releases " - "of GillesPy2 may not support this feature.") if self.model is None: if model is None: raise SimulationError("A model is required to run the simulation.") diff --git a/gillespy2/solvers/numpy/ode_solver.py b/gillespy2/solvers/numpy/ode_solver.py index 54f6a8219..6c75a99e8 100644 --- a/gillespy2/solvers/numpy/ode_solver.py +++ b/gillespy2/solvers/numpy/ode_solver.py @@ -43,8 +43,6 @@ def __init__(self, model=None): stop_event = None pause_event = None result = None - if model is None: - raise SimulationError("A model is required to run the simulation.") self.model = model @staticmethod @@ -111,10 +109,6 @@ def run(self, model=None, t=20, number_of_trajectories=1, increment=None, show_l """ if isinstance(self, type): self = ODESolver(model=model) - if model is not None: - from gillespy2 import log - log.warning("model = gillespy2.Model is depricated. Future releases " - "of GillesPy2 may not support this feature.") if self.model is None: if model is None: raise SimulationError("A model is required to run the simulation.") diff --git a/gillespy2/solvers/numpy/ssa_solver.py b/gillespy2/solvers/numpy/ssa_solver.py index 6d71c26fa..b8ded2e21 100644 --- a/gillespy2/solvers/numpy/ssa_solver.py +++ b/gillespy2/solvers/numpy/ssa_solver.py @@ -40,8 +40,6 @@ def __init__(self, model=None): stop_event = None result = None pause_event = None - if model is None: - raise SimulationError("A model is required to run the simulation.") self.model = model def get_solver_settings(self): @@ -76,10 +74,6 @@ def run(self, model=None, t=20, number_of_trajectories=1, increment=None, seed=N if isinstance(self, type): self = NumPySSASolver(model=model) - if model is not None: - from gillespy2 import log - log.warning("model = gillespy2.Model is depricated. Future releases " - "of GillesPy2 may not support this feature.") if self.model is None: if model is None: raise SimulationError("A model is required to run the simulation.") diff --git a/gillespy2/solvers/numpy/tau_hybrid_solver.py b/gillespy2/solvers/numpy/tau_hybrid_solver.py index 1edebf23b..4fc04b193 100644 --- a/gillespy2/solvers/numpy/tau_hybrid_solver.py +++ b/gillespy2/solvers/numpy/tau_hybrid_solver.py @@ -73,8 +73,6 @@ class TauHybridSolver(GillesPySolver): def __init__(self, model=None): name = 'TauHybridSolver' rc = 0 - if model is None: - raise SimulationError("A model is required to run the simulation.") self.model = model def __toggle_reactions(self, all_compiled, deterministic_reactions, dependencies, @@ -831,10 +829,6 @@ def run(self, model=None, t=20, number_of_trajectories=1, increment=None, seed=N if isinstance(self, type): self = TauHybridSolver(model=model) - if model is not None: - from gillespy2 import log - log.warning("model = gillespy2.Model is depricated. Future releases " - "of GillesPy2 may not support this feature.") if self.model is None: if model is None: raise SimulationError("A model is required to run the simulation.") diff --git a/gillespy2/solvers/numpy/tau_leaping_solver.py b/gillespy2/solvers/numpy/tau_leaping_solver.py index 535da5728..a4a50ef10 100644 --- a/gillespy2/solvers/numpy/tau_leaping_solver.py +++ b/gillespy2/solvers/numpy/tau_leaping_solver.py @@ -47,8 +47,6 @@ def __init__(self, model=None, debug=False, profile=False): stop_event = None pause_event = None result = None - if model is None: - raise SimulationError("A model is required to run the simulation.") self.model = model self.debug = debug self.profile = profile @@ -139,10 +137,6 @@ def run(self, model=None, t=20, number_of_trajectories=1, increment=None, seed=N if isinstance(self, type): self = TauLeapingSolver(model=model, debug=debug, profile=profile) - if model is not None: - from gillespy2 import log - log.warning("model = gillespy2.Model is depricated. Future releases " - "of GillesPy2 may not support this feature.") if self.model is None: if model is None: raise SimulationError("A model is required to run the simulation.")