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
dictofScenarioInfoobjects; 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 adictthat can be passed toapply_par_data().
The following modules use this workflow and can be examples for developing similar code:
message_data.model.transport
Code reference¶
-
message_ix_models.model.build.apply_spec(scenario: message_ix.core.Scenario, spec: Mapping[str, message_ix_models.util.scenarioinfo.ScenarioInfo], data: Optional[Callable] = None, **options)[source]¶ Apply spec to scenario.
- Parameters
spec – A ‘specification’:
dictwith ‘require’, ‘remove’, and ‘add’ keys andScenarioInfoobjects as values.data (callable, optional) – Function to add data to scenario. data can either manipulate the scenario directly, or return a
dictcompatible withadd_par_data().
- Other Parameters
dry_run (bool) – Don’t modify scenario; only show what would be done. Default
False. Exceptions will still be raised if the elements fromspec['required']are missing; this serves as a check that the scenario has the required features for applying the spec.fast (bool) – Do not remove existing parameter data; increases speed on large scenarios.
quiet (bool) – Only show log messages at level
ERRORand higher. IfFalse(default), show log messages at levelDEBUGand higher.message (str) – Commit message.
See also
add_par_data,strip_par_data,Code,ScenarioInfo