Building models (model.build
)¶
apply_spec()
can be used to be build (compose, assemble, construct, …) models given three pieces of information:
A scenario to be used as a basis.
A specification, or spec, which is a
dict
ofScenarioInfo
objects; see below.An optional function that adds or produces data to add to the scenario.
The spec is applied as follows:
For each set that exists in scenario:
Required elements from
spec['require']
, if any, are checked.If they are missing,
apply_spec()
raisesValueError
. This indicates that spec is not compatible with the given scenario.Elements from
spec['remove']
, if any, are removed.Any parameter values which reference these set elements are also removed, using
strip_par_data()
.New set elements from
spec['add']
are added.
Elements in
spec['add'].set['unit']
are added to the Platform on which scenario is stored.The data argument, a function, is called with scenario as the first argument, and a keyword argument dry_run from
apply_spec()
. data may either add to scenario directly (by callingScenario.add_par()
and similar methods); or it can return adict
that can be passed toapply_par_data()
.
The following modules use this workflow and can be examples for developing similar code:
model.disutility
message_data.model.transport