Environment Context#
UPSTAGE uses Python’s [context variable](https://docs.python.org/3/library/contextvars.html) capabilities to safely manage “global” state information while not polluting the module level data with run-specific information.
The context manager accepts three arguments:
Simulation start time (passes through to
simpy.Environment)A random seed for
random.RandomA random number generator object, if different than
random.Random
For more about the random numbers, see Random Numbers.
Note
If you get a warning or error about not finding an environment, you have likely tried to instantiate an actor, task, or other UPSTAGE object outside of an environment context.
Creating Contexts#
Use the EnvironmentContext context manager:
impoprt upstage_des.api as UP
with UP.EnvironmentContext() as env:
...
# everything in here can find that environment
...
env.run()
Or, create a context at the current scope:
from upstage_des.base import create_top_context, clear_top_context
ctx = create_top_context()
env = ctx.env_ctx.get()
...
env.run()
clear_top_context(ctx)
This way is friendlier to Jupyter notebooks, where you might run a simulation and want to explore the data without needing to remain in the context manager.