Source code for message_ix_models.model.config

from dataclasses import dataclass, field, fields

from message_ix_models.model.structure import codelists
from message_ix_models.util.config import ConfigHelper
from message_ix_models.util.context import _ALIAS


[docs]@dataclass class Config(ConfigHelper): """Settings and valid values for :mod:`message_ix_models.model` and submodules. For backwards compatibility, it is possible to access these on a :class:`Context` using: .. code-block:: python c = Context() c.regions = "R14" …however, it is best to access them explicitly as: .. code-block:: python c.model.regions = "R14" """ #: The 'node' codelist (regional aggregation) to use. Must be one of the lists of #: nodes described at :doc:`/pkg-data/node`. regions: str = "R14" #: The 'relations' codelist to use. Must be one of the lists of relations described #: at :doc:`/pkg-data/relation`. relations: str = "A" #: The 'year' codelist (time periods) to use, Must be one of the lists of periods #: described at :doc:`/pkg-data/year`. years: str = "B" #: Create the reference energy system with dummy commodities and technologies. See #: :func:`.bare.get_spec`. res_with_dummies: bool = False #: Default or preferred units for model quantities and reporting. units: dict = field( default_factory=lambda: {"energy": "GWa", "CO2 emissions": "Mt / a"} )
[docs] def check(self): """Check the validity of :attr:`regions`, :attr:`relations`, :attr:`years`.""" for attr, name in [ ("regions", "node"), ("relations", "relation"), ("years", "year"), ]: if getattr(self, attr) not in codelists(name): raise ValueError( f"{attr}={getattr(self, attr)!r} not among {codelists(name)}" )
# Extend the list of settings that can be set directly on a Context instance. _ALIAS.update({f.name: "model" for f in fields(Config)})