Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HOTFIX: Model Check in C Solvers #742

Merged
merged 11 commits into from
Mar 23, 2022
7 changes: 7 additions & 0 deletions gillespy2/core/gillespySolver.py
Original file line number Diff line number Diff line change
Expand Up @@ -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() != sol_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()
Expand Down
5 changes: 2 additions & 3 deletions gillespy2/solvers/cpp/ode_c_solver.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +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.")
self.model.resolve_parameters()
self.validate_model(self.model, model)
self.validate_sbml_features(model=model)

increment = self.get_increment(increment=increment)
Expand Down Expand Up @@ -102,7 +101,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()
Expand Down
5 changes: 2 additions & 3 deletions gillespy2/solvers/cpp/ssa_c_solver.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +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.")
self.model.resolve_parameters()
self.validate_model(self.model, model)
self.validate_sbml_features(model=model)

increment = self.get_increment(increment=increment)
Expand Down Expand Up @@ -102,7 +101,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()
Expand Down
5 changes: 2 additions & 3 deletions gillespy2/solvers/cpp/tau_hybrid_c_solver.py
Original file line number Diff line number Diff line change
Expand Up @@ -172,9 +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.")
self.model.resolve_parameters()
self.validate_model(self.model, model)
self.validate_sbml_features(model=model)

increment = self.get_increment(increment=increment)
Expand Down Expand Up @@ -231,7 +230,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()
Expand Down
5 changes: 2 additions & 3 deletions gillespy2/solvers/cpp/tau_leaping_c_solver.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +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.")
self.model.resolve_parameters()
self.validate_model(self.model, model)
self.validate_sbml_features(model=model)

increment = self.get_increment(increment=increment)
Expand Down Expand Up @@ -102,7 +101,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()
Expand Down
3 changes: 1 addition & 2 deletions gillespy2/solvers/numpy/CLE_solver.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
3 changes: 1 addition & 2 deletions gillespy2/solvers/numpy/ode_solver.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
7 changes: 3 additions & 4 deletions gillespy2/solvers/numpy/ssa_solver.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -198,9 +197,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")

Expand Down
3 changes: 1 addition & 2 deletions gillespy2/solvers/numpy/tau_hybrid_solver.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
3 changes: 1 addition & 2 deletions gillespy2/solvers/numpy/tau_leaping_solver.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down