Low-level utilities (util
)¶
Submodules:
Command-line utilities. |
|
Context and settings for |
|
Load model and project code from |
|
Logging utilities. |
|
|
Commonly used:
|
Adapt data from R11 to R14 node list. |
|
Convert data to a |
|
Fill missing data in df by broadcasting. |
|
For use with |
|
Forward-fill df on dim to cover values. |
|
Return the ID of a node codelist given the contents of scenario. |
|
Load a |
|
Load a private data file from |
|
Return input and output data frames for a 1-to-1 technology. |
|
Return data frames derived from base for multiple parameters. |
|
Return parameter data for a ‘source’ technology. |
|
Merge dictionaries of DataFrames together into base. |
|
Construct a path to a file under |
|
Construct a path to a file under |
|
Fill ‘node_origin’/’node_dest’ in df from ‘node_loc’. |
|
Context and settings for |
|
Information about a |
- message_ix_models.util.adapt_R11_R14(data: Dict[str, Union[pandas.core.frame.DataFrame, genno.core.quantity.Quantity]])[source]¶
- message_ix_models.util.adapt_R11_R14(df: pandas.core.frame.DataFrame) → pandas.core.frame.DataFrame
- message_ix_models.util.adapt_R11_R14(qty: genno.core.quantity.Quantity) → genno.core.quantity.Quantity
Adapt data from R11 to R14 node list.
The data is adapted by:
Renaming regions such as R11_NAM to R14_NAM.
Copying the data for R11_FSU to R14_CAS, R14_RUS, R14_SCS, and R14_UBM.
…wherever these appear in a column/dimension named ‘node’, ‘node_*’, or ‘n’.
The function may be called with:
genno.Quantity
, ordict
mappingstr
parameter names to values (either of the above types).
- message_ix_models.util.identify_nodes(scenario: message_ix.core.Scenario) → str[source]¶
Return the ID of a node codelist given the contents of scenario.
- Returns
The ID of the Node code lists containing the regions of scenario.
- Return type
- Raises
ValueError – if no codelist can be identified, or the nodes in the scenario do not match the children of the “World” node in the codelist.
util.click
¶
Command-line utilities.
These are used for building CLIs using click
.
- message_ix_models.util.click.PARAMS = {'dest': <Option dest>, 'dry_run': <Option dry_run>, 'force': <Option force>, 'output_model': <Option output_model>, 'platform_dest': <Option platform_dest>, 'policy_path': <Option policy_path>, 'quiet': <Option quiet>, 'regions': <Option regions>, 'rep_out_path': <Option rep_out_path>, 'rep_template': <Option rep_template>, 'run_reporting_only': <Option run_reporting_only>, 'ssp': <Argument ssp>, 'verbose': <Option verbose>}¶
Common command-line parameters (arguments and options). See
common_params()
.
- message_ix_models.util.click.common_params(param_names: str)[source]¶
Decorate a click.command with common parameters param_names.
param_names must be a space-separated string of names appearing in
PARAMS
, e.g."ssp force output_model"
. The decorated function receives keyword arguments with these names:@click.command() @common_params("ssp force output_model") def mycmd(ssp, force, output_model) # ...
- message_ix_models.util.click.default_path_cb(*default_parts)[source]¶
Return a callback function for click.Option handling.
If no option value is given, the callback uses
Context.get_local_path()
and default_parts to provide a path that is relative to local data directory, e.g. the current working directory (see Data, metadata, and configuration).
util.context
¶
Context and settings for message_ix_models
code.
- class message_ix_models.util.context.Context(*args, **kwargs)[source]¶
Context and settings for
message_ix_models
code.Context is a subclass of
dict
, so common methods likecopy()
andsetdefault()
may be used to handle settings. To be forgiving, it also provides attribute access;context.foo
is equivalent tocontext["foo"]
.Context provides additional methods to do common tasks that depend on configurable settings:
Return a scenario based on the
--dest
command-line option.close_db
()delete
()Hide the current Context from future
get_instance()
calls.get_cache_path
(*parts)Return a path to a local cache file.
get_local_path
(*parts[, suffix])Return a path under
local_data
.get_platform
([reload])Return a
ixmp.Platform
fromplatform_info
.Return a
message_ix.Scenario
fromscenario_info
.handle_cli_args
([url, platform, model_name, …])Handle command-line arguments.
only
()Return the only
Context
instance.use_defaults
(settings)Update from settings.
The following Context methods and attribute are deprecated:
get_config_file
(*parts[, ext])Return a path under
metadata_path
.get_path
(*parts)Return a path under
message_data_path
by joining parts.load_config
(*parts[, suffix])Load configuration from
message_ix_models
.Access the unit registry.
- clone_to_dest() → Tuple[message_ix.core.Scenario, ixmp.core.Platform][source]¶
Return a scenario based on the
--dest
command-line option.- Returns
To prevent the scenario from being garbage collected. Keep a reference to its Platform:
- Return type
Scenario
See also
create_res
To use this method, either decorate a command with
common_params()
:from message_data.tools.cli import common_params @click.command() @common_params("dest") @click.pass_obj def foo(context, dest): scenario, mp = context.clone_to_dest()
or, store the settings
dest_scenario
anddest_platform
on context:c = Context.get_instance() c.dest_scenario = dict(model="foo model", scenario="foo scenario") scenario_mp = context.clone_to_dest()
The resulting scenario has the indicated model- and scenario names.
If
--url
(or--platform
,--model
,--scenario
, and optionally--version
) are given, the identified scenario is used as a ‘base’ scenario, and is cloned. If--url
/--platform
and--dest
refer to different Platform instances, then this is a two-platform clone.If no base scenario can be loaded,
bare.create_res()
is called to generate a base scenario.
- delete()[source]¶
Hide the current Context from future
get_instance()
calls.
- get_cache_path(*parts) → pathlib.Path[source]¶
Return a path to a local cache file.
- get_config_file(*parts, ext='yaml') → pathlib.Path[source]¶
Return a path under
metadata_path
.The suffix “.{ext}” is added; defaulting to “.yaml”.
Deprecated since version 2021.2.28: Use
package_data_path()
instead. Will be removed on or after 2021-05-28.
- classmethod get_instance(index=0) → message_ix_models.util.context.Context[source]¶
Return a Context instance; by default, the first created.
- Parameters
index (int, optional) – Index of the Context instance to return, e.g.
-1
for the most recently created.
- get_path(*parts) → pathlib.Path[source]¶
Return a path under
message_data_path
by joining parts.parts may include directory names, or a filename with extension.
Deprecated since version 2021.2.28: Use
private_data_path()
instead. Will be removed on or after 2021-05-28.
- get_platform(reload=False) → ixmp.core.Platform[source]¶
Return a
ixmp.Platform
fromplatform_info
.When used through the CLI,
platform_info
is a ‘base’ platform as indicated by the –url or –platform options.If a Platform has previously been instantiated with
get_platform()
, the same object is returned unless reload=True.
- get_scenario() → message_ix.core.Scenario[source]¶
Return a
message_ix.Scenario
fromscenario_info
.When used through the CLI,
scenario_info
is a ‘base’ scenario for an operation, indicated by the--url
or--platform/--model/--scenario
options.
- handle_cli_args(url=None, platform=None, model_name=None, scenario_name=None, version=None, local_data=None, _store_as=('platform_info', 'scenario_info'))[source]¶
Handle command-line arguments.
May update the
data_path
,platform_info
,scenario_info
, and/orurl
settings.
- load_config(*parts, suffix=None)[source]¶
Load configuration from
message_ix_models
.Deprecated since version 2021.2.28: Use
load_package_data()
instead. Will be removed on or after 2021-05-28.
- classmethod only() → message_ix_models.util.context.Context[source]¶
Return the only
Context
instance.- Raises
IndexError – If there is more than one instance.
- property units¶
Access the unit registry.
Deprecated since version 2021.2.28: Instead, use:
from iam_units import registry
Will be removed on or after 2021-05-28.
util.importlib
¶
Load model and project code from message_data
.
util._logging
¶
Logging utilities.
- class message_ix_models.util._logging.Formatter(colorama)[source]¶
Formatter for log records.
- Parameters
colorama (module) – If provided,
colorama
is used to colour log messages printed to stdout.
- message_ix_models.util._logging.make_formatter()[source]¶
Return a
Formatter
instance for themessage_ix_models
logger.See also
util.scenarioinfo
¶
ScenarioInfo
class.
- class message_ix_models.util.scenarioinfo.ScenarioInfo(scenario=None)[source]¶
Information about a
Scenario
object.Code that prepares data for a target Scenario can accept a ScenarioInfo instance. This avoids the need to load a Scenario, which can be slow under some conditions.
ScenarioInfo objects can also be used (e.g. by
apply_spec()
) to describe the contents of a Scenario before it is created.ScenarioInfo objects have the following convenience attributes:
Elements of
ixmp
/message_ix
sets.True
if a MESSAGE-MACRO scenario.Elements of the set ‘node’.
Elements of the set ‘year’ that are >= the first model year.
First model year, if set, else
Y[0]
.pandas.DataFrame
with validyear_vtg
,year_act
pairs.- Parameters
scenario (message_ix.Scenario) – If given,
set
is initialized from this existing scenario.
- property N¶
Elements of the set ‘node’.
- property Y¶
Elements of the set ‘year’ that are >= the first model year.
- year_from_codes(codes: List[sdmx.model.Code])[source]¶
Update using a list of codes.
The following are updated:
Any existing values are discarded.
After this, the attributes
y0
andY
give the first model year and model years, respectively.Examples
Get a particular code list, create a ScenarioInfo instance, and update using the codes:
>>> years = get_codes("year/A") >>> info = ScenarioInfo() >>> info.year_from_codes(years)
Use populated values:
>>> info.y0 2020 >>> info.Y[:3] [2020, 2030, 2040] >>> info.Y[-3:] [2090, 2100, 2110]
- property yv_ya¶
pandas.DataFrame
with validyear_vtg
,year_act
pairs.