From 904b369f19e8399da65d5515a87efd4a27d27f6b Mon Sep 17 00:00:00 2001 From: HMNS19 Date: Sat, 22 Feb 2025 16:44:52 +0530 Subject: [PATCH 1/2] stop running when running.value is false --- mesa/experimental/devs/simulator.py | 4 ++-- mesa/visualization/solara_viz.py | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/mesa/experimental/devs/simulator.py b/mesa/experimental/devs/simulator.py index 0b9a45eeb2b..bf3211dd101 100644 --- a/mesa/experimental/devs/simulator.py +++ b/mesa/experimental/devs/simulator.py @@ -110,7 +110,7 @@ def run_until(self, end_time: int | float) -> None: "simulator has not been setup, call simulator.setup(model) first" ) - while True: + while True and self.model.running: try: event = self.event_list.pop_event() except IndexError: # event list is empty @@ -348,7 +348,7 @@ def run_until(self, end_time: int) -> None: "simulator has not been setup, call simulator.setup(model) first" ) - while True: + while True and self.model.running: try: event = self.event_list.pop_event() except IndexError: diff --git a/mesa/visualization/solara_viz.py b/mesa/visualization/solara_viz.py index a180d290be2..c3ff81b9658 100644 --- a/mesa/visualization/solara_viz.py +++ b/mesa/visualization/solara_viz.py @@ -239,9 +239,10 @@ async def step(): def do_step(): """Advance the model by the number of steps specified by the render_interval slider.""" for _ in range(render_interval.value): + if not running.value: + break model.value.step() - - running.value = model.value.running + running.value = model.value.running force_update() From fb33c2498c1804b65648576e5164f5b2ec2753a3 Mon Sep 17 00:00:00 2001 From: HMNS19 Date: Sun, 30 Mar 2025 23:38:00 +0530 Subject: [PATCH 2/2] changes focusing only on stopping model --- mesa/experimental/devs/simulator.py | 4 ++-- mesa/visualization/solara_viz.py | 7 ++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/mesa/experimental/devs/simulator.py b/mesa/experimental/devs/simulator.py index bf3211dd101..0b9a45eeb2b 100644 --- a/mesa/experimental/devs/simulator.py +++ b/mesa/experimental/devs/simulator.py @@ -110,7 +110,7 @@ def run_until(self, end_time: int | float) -> None: "simulator has not been setup, call simulator.setup(model) first" ) - while True and self.model.running: + while True: try: event = self.event_list.pop_event() except IndexError: # event list is empty @@ -348,7 +348,7 @@ def run_until(self, end_time: int) -> None: "simulator has not been setup, call simulator.setup(model) first" ) - while True and self.model.running: + while True: try: event = self.event_list.pop_event() except IndexError: diff --git a/mesa/visualization/solara_viz.py b/mesa/visualization/solara_viz.py index 5c2b94877d9..8839d7b730a 100644 --- a/mesa/visualization/solara_viz.py +++ b/mesa/visualization/solara_viz.py @@ -300,6 +300,8 @@ def do_step(): """Advance the model by the number of steps specified by the render_interval slider.""" if playing.value: for _ in range(render_interval.value): + if not running.value: + break model.value.step() running.value = model.value.running if not playing.value: @@ -311,7 +313,6 @@ def do_step(): for _ in range(render_interval.value): if not running.value: break - print(running.value) model.value.step() running.value = model.value.running force_update() @@ -418,6 +419,8 @@ def do_step(): """Advance the model by the number of steps specified by the render_interval slider.""" if playing.value: for _ in range(render_interval.value): + if not running.value: + break simulator.run_for(1) running.value = model.value.running if not playing.value: @@ -427,6 +430,8 @@ def do_step(): else: for _ in range(render_interval.value): + if not running.value: + break simulator.run_for(1) running.value = model.value.running force_update()