activitysim
activitysim copied to clipboard
Accessing global variables defined in settings.yaml
Describe the bug Hello 👋
I noticed that setting('variable') only works in *_preprocessor.csv files and not in utility specification files.
However, this trip_destination.csv has setting('cbd_threshold'), as shown here:
https://github.com/ActivitySim/activitysim/blob/4abb86f41d8ac0ce68cc8a879b127875049669b8/activitysim/examples/prototype_mtc/configs/trip_destination.csv#L6
This suggests that setting() can be used to access global variables defined in the settings.yaml file within utility specification files. In practice, though, this doesn’t raise an error because the expression is never evaluated (no coefficients are assigned).
Once this is clear to me, I’m more than happy to document the use of setting() in the documentation, as I believe this hasn’t been covered yet.
Also, if setting() was not designed to be used in utility specification files, what is the recommended way to access global variables? For example, I have max_walk_distance that I use in a few places in my configs folder, and I would like to have one variable (for maintainability) rather than defining the same value in multiple files.
To Reproduce Steps to reproduce the behavior:
Create an example
# ActivitySim v1.3
activitysim create -e prototype_mtc
cd prototype_mtc
Go into trip_destination.csv and use setting('cbd_threshold') on a line that has a coefficient.
I picked:
util_size_term,size term,"@np.log1p(size_terms.get(df.dest_taz, df.purpose)) * setting('cbd_threshold')",
Then run the model:
activitysim run -c configs -d data
Screenshots
Here is the error I got:
[00:29.93] INFO: trip_destination.trip_num_1.univ.trip_dest_simulate.interaction_sample_simulate.eval_interaction_utils sharrow_enabled is False
[00:29.93] ERROR: trip_destination.trip_num_1.univ.trip_dest_simulate.interaction_sample_simulate.eval_interaction_utils - NameError (name 'setting' is not defined) evaluating: @np.log1p(size_terms.get(df.dest_taz, df.purpose)) * setting('cbd_threshold') # sharrow: np.log1p(size_terms['sizearray'])
Traceback (most recent call last):
File "/Users/amarin/GitHub/ext/activitysim/activitysim/core/interaction_simulate.py", line 288, in eval_interaction_utilities
v = to_series(eval(expr[1:], globals(), locals_d))
File "<string>", line 1, in <module>
NameError: name 'setting' is not defined
[00:29.93] ERROR: ===== ERROR IN trip_destination =====
[00:29.93] ERROR: name 'setting' is not defined
Traceback (most recent call last):
File "/Users/amarin/GitHub/ext/activitysim/activitysim/core/workflow/steps.py", line 46, in wrapper
return func(*args, **kwargs)
File "/Users/amarin/GitHub/ext/activitysim/activitysim/abm/models/trip_destination.py", line 1641, in trip_destination
trips_df, save_sample_df = run_trip_destination(
File "/Users/amarin/GitHub/ext/activitysim/activitysim/core/workflow/steps.py", line 500, in wrapper
return function(state, *args, **kwargs)
File "/Users/amarin/GitHub/ext/activitysim/activitysim/abm/models/trip_destination.py", line 1481, in run_trip_destination
choices, destination_sample = choose_trip_destination(
File "/Users/amarin/GitHub/ext/activitysim/activitysim/core/workflow/steps.py", line 500, in wrapper
return function(state, *args, **kwargs)
File "/Users/amarin/GitHub/ext/activitysim/activitysim/abm/models/trip_destination.py", line 1123, in choose_trip_destination
destinations = trip_destination_simulate(
File "/Users/amarin/GitHub/ext/activitysim/activitysim/abm/models/trip_destination.py", line 1019, in trip_destination_simulate
destinations = interaction_sample_simulate(
File "/Users/amarin/GitHub/ext/activitysim/activitysim/core/interaction_sample_simulate.py", line 499, in interaction_sample_simulate
choices = _interaction_sample_simulate(
File "/Users/amarin/GitHub/ext/activitysim/activitysim/core/interaction_sample_simulate.py", line 211, in _interaction_sample_simulate
) = interaction_simulate.eval_interaction_utilities(
File "/Users/amarin/GitHub/ext/activitysim/activitysim/core/interaction_simulate.py", line 370, in eval_interaction_utilities
raise err
File "/Users/amarin/GitHub/ext/activitysim/activitysim/core/interaction_simulate.py", line 288, in eval_interaction_utilities
v = to_series(eval(expr[1:], globals(), locals_d))
File "<string>", line 1, in <module>
NameError: name 'setting' is not defined
[00:29.94] ERROR: ===== / =====
[00:29.94] NOTIFY: time to execute run.trip_destination UNTIL ERROR : 0.723 seconds
[00:29.94] INFO: Time to execute all models until this error : 28.8 seconds (0.5 minutes)
[00:29.94] ERROR: activitysim run encountered an unrecoverable error
Traceback (most recent call last):
File "/Users/amarin/GitHub/ext/activitysim/activitysim/cli/run.py", line 399, in run
state.run(
File "/Users/amarin/GitHub/ext/activitysim/activitysim/core/workflow/runner.py", line 170, in __call__
self.by_name(model)
File "/Users/amarin/GitHub/ext/activitysim/activitysim/core/workflow/runner.py", line 347, in by_name
self._obj._context = run_named_step(
File "/Users/amarin/GitHub/ext/activitysim/activitysim/core/workflow/steps.py", line 83, in run_named_step
step_func(context, **kwargs)
File "/Users/amarin/GitHub/ext/activitysim/activitysim/core/workflow/steps.py", line 367, in run_step
outcome = error_logging(wrapped_func)(state, *args, **kwargs)
File "/Users/amarin/GitHub/ext/activitysim/activitysim/core/workflow/steps.py", line 46, in wrapper
return func(*args, **kwargs)
File "/Users/amarin/GitHub/ext/activitysim/activitysim/abm/models/trip_destination.py", line 1641, in trip_destination
trips_df, save_sample_df = run_trip_destination(
File "/Users/amarin/GitHub/ext/activitysim/activitysim/core/workflow/steps.py", line 500, in wrapper
return function(state, *args, **kwargs)
File "/Users/amarin/GitHub/ext/activitysim/activitysim/abm/models/trip_destination.py", line 1481, in run_trip_destination
choices, destination_sample = choose_trip_destination(
File "/Users/amarin/GitHub/ext/activitysim/activitysim/core/workflow/steps.py", line 500, in wrapper
return function(state, *args, **kwargs)
File "/Users/amarin/GitHub/ext/activitysim/activitysim/abm/models/trip_destination.py", line 1123, in choose_trip_destination
destinations = trip_destination_simulate(
File "/Users/amarin/GitHub/ext/activitysim/activitysim/abm/models/trip_destination.py", line 1019, in trip_destination_simulate
destinations = interaction_sample_simulate(
File "/Users/amarin/GitHub/ext/activitysim/activitysim/core/interaction_sample_simulate.py", line 499, in interaction_sample_simulate
choices = _interaction_sample_simulate(
File "/Users/amarin/GitHub/ext/activitysim/activitysim/core/interaction_sample_simulate.py", line 211, in _interaction_sample_simulate
) = interaction_simulate.eval_interaction_utilities(
File "/Users/amarin/GitHub/ext/activitysim/activitysim/core/interaction_simulate.py", line 370, in eval_interaction_utilities
raise err
File "/Users/amarin/GitHub/ext/activitysim/activitysim/core/interaction_simulate.py", line 288, in eval_interaction_utilities
v = to_series(eval(expr[1:], globals(), locals_d))
File "<string>", line 1, in <module>
NameError: name 'setting' is not defined
[00:29.95] ERROR: name 'setting' is not defined
Traceback (most recent call last):
File "/Users/amarin/GitHub/ext/activitysim/activitysim/cli/main.py", line 72, in main
sys.exit(asim.execute())
File "/Users/amarin/GitHub/ext/activitysim/activitysim/cli/cli.py", line 39, in execute
return args.afunc(args)
File "/Users/amarin/GitHub/ext/activitysim/activitysim/cli/run.py", line 399, in run
state.run(
File "/Users/amarin/GitHub/ext/activitysim/activitysim/core/workflow/runner.py", line 170, in __call__
self.by_name(model)
File "/Users/amarin/GitHub/ext/activitysim/activitysim/core/workflow/runner.py", line 347, in by_name
self._obj._context = run_named_step(
File "/Users/amarin/GitHub/ext/activitysim/activitysim/core/workflow/steps.py", line 83, in run_named_step
step_func(context, **kwargs)
File "/Users/amarin/GitHub/ext/activitysim/activitysim/core/workflow/steps.py", line 367, in run_step
outcome = error_logging(wrapped_func)(state, *args, **kwargs)
File "/Users/amarin/GitHub/ext/activitysim/activitysim/core/workflow/steps.py", line 46, in wrapper
return func(*args, **kwargs)
File "/Users/amarin/GitHub/ext/activitysim/activitysim/abm/models/trip_destination.py", line 1641, in trip_destination
trips_df, save_sample_df = run_trip_destination(
File "/Users/amarin/GitHub/ext/activitysim/activitysim/core/workflow/steps.py", line 500, in wrapper
return function(state, *args, **kwargs)
File "/Users/amarin/GitHub/ext/activitysim/activitysim/abm/models/trip_destination.py", line 1481, in run_trip_destination
choices, destination_sample = choose_trip_destination(
File "/Users/amarin/GitHub/ext/activitysim/activitysim/core/workflow/steps.py", line 500, in wrapper
return function(state, *args, **kwargs)
File "/Users/amarin/GitHub/ext/activitysim/activitysim/abm/models/trip_destination.py", line 1123, in choose_trip_destination
destinations = trip_destination_simulate(
File "/Users/amarin/GitHub/ext/activitysim/activitysim/abm/models/trip_destination.py", line 1019, in trip_destination_simulate
destinations = interaction_sample_simulate(
File "/Users/amarin/GitHub/ext/activitysim/activitysim/core/interaction_sample_simulate.py", line 499, in interaction_sample_simulate
choices = _interaction_sample_simulate(
File "/Users/amarin/GitHub/ext/activitysim/activitysim/core/interaction_sample_simulate.py", line 211, in _interaction_sample_simulate
) = interaction_simulate.eval_interaction_utilities(
File "/Users/amarin/GitHub/ext/activitysim/activitysim/core/interaction_simulate.py", line 370, in eval_interaction_utilities
raise err
File "/Users/amarin/GitHub/ext/activitysim/activitysim/core/interaction_simulate.py", line 288, in eval_interaction_utilities
v = to_series(eval(expr[1:], globals(), locals_d))
File "<string>", line 1, in <module>
NameError: name 'setting' is not defined