diff --git a/spatialpy/core/result.py b/spatialpy/core/result.py index 10357b39..46703636 100644 --- a/spatialpy/core/result.py +++ b/spatialpy/core/result.py @@ -156,6 +156,19 @@ def __init__(self, model=None, result_dir=None): self.timeout = False self.official_vtk = False self.result_dir = result_dir + self.listOfResultObjects = [self] + + def __len__(self): + return len(self.listOfResultObjects) + + def __getitem__(self, index): + return self.listOfResultObjects[index] + + def __setitem__(self, index, item): + self.listOfResultObjects[index] = item + + def append(self, item): + self.listOfResultObjects.append(item) def __eq__(self, other): if isinstance(other, Result) and self.result_dir and other.result_dir: diff --git a/spatialpy/solvers/solver.py b/spatialpy/solvers/solver.py index 34c3edb3..5332b2a4 100644 --- a/spatialpy/solvers/solver.py +++ b/spatialpy/solvers/solver.py @@ -534,13 +534,11 @@ def run(self, number_of_trajectories=1, seed=None, timeout=None, :type verbose: bool :returns: A SpatialPy Result object containing spatial and time series data from simulation. - :rtype: spatialpy.Result.Result | list(spatialpy.Result.Result) + :rtype: spatialpy.Result.Result :raises SimulationError: Simulation execution failed. """ from spatialpy.core.result import Result # pylint: disable=import-outside-toplevel - if number_of_trajectories > 1: - result_list = [] # Check if compiled, call compile() if not. if not self.is_compiled: self.compile(debug=debug, profile=profile) @@ -586,6 +584,7 @@ def run(self, number_of_trajectories=1, seed=None, timeout=None, result.timeout = True # send signal to the process group os.killpg(process.pid, signal.SIGINT) + except OSError as err: print(f"Error, execution of solver raised an exception: {err}") print(f"cmd = {solver_cmd}") @@ -600,9 +599,9 @@ def run(self, number_of_trajectories=1, seed=None, timeout=None, result.success = True if profile: self.__read_profile_info(result) - if number_of_trajectories > 1: - result_list.append(result) - else: - return result + if run_ndx == 0: + first_result = result + elif number_of_trajectories > 1: + first_result.append(result) - return result_list + return first_result