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.Random
A 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.