Source code for ecoli.processes.global_clock

from vivarium.core.process import Process


[docs] class GlobalClock(Process): """ Track global time for Steps that do not rely on vivarium-core's built-in time stepping (see :ref:`timesteps`). """ name = "global_clock"
[docs] def ports_schema(self): return { "global_time": {"_default": 0.0, "_updater": "accumulate"}, "next_update_time": {"*": {}}, }
[docs] def calculate_timestep(self, states): """ Subtract global time from next update times for each manually time-stepped processes to calculate time until a process updates. Use that time as the time step for this process so vivarium-core's internal simulation clock advances by the same amount of time and processes that do not rely on this manual time stepping stay in sync with the ones that do. """ return min( next_update_time - states["global_time"] for next_update_time in states["next_update_time"].values() )
[docs] def next_update(self, timestep, states): """ The timestep that we increment global_time by is the same minimum time step that we calculated in calculate_timestep. This guarantees that we never accidentally skip over a process update time. """ return {"global_time": timestep}