Source code for message_ix_models.tests.model.test_bare

import message_ix
import pytest

from message_ix_models import testing
from message_ix_models.model.bare import Config

#: Number of items in the respective YAML files.
SET_SIZE = dict(
    commodity=18,
    level=7,
    node=14 + 1,  # R14 is default, and 'World' exists automatically
    relation=20,
    technology=390,
    year=28,  # YB is default: 1950, ..., 2020, 2025, ..., 2055, 2060, ..., 2110
)


[docs]@pytest.mark.parametrize( "settings, expected", [ # Defaults per bare.SETTINGS (dict(), dict()), # # Different regional aggregations (dict(regions="R11"), dict(node=11 + 1)), (dict(regions="RCP"), dict(node=5 + 1)), # MESSAGE-IL (dict(regions="ISR"), dict(node=1 + 1)), # # Different time periods (dict(years="A"), dict(year=16)), # ..., 2010, 2020, ..., 2110 # # Option to add a dummy technology/commodity so the model solves ( dict(res_with_dummies=True), dict( commodity=SET_SIZE["commodity"] + 1, technology=SET_SIZE["technology"] + 2, ), ), ], ) def test_create_res(request, test_context, settings, expected): # Apply settings to the temporary context test_context.model = Config(**settings) # Call bare.create_res() via testing.bare_res(). This ensures the slow step of # creating the scenario occurs only once per test session. If it fails, it will # either fail within this test, or in some other test function that calls # testing.bare_res() with the same arguments. scenario = testing.bare_res(request, test_context, solved=False) # Returns a Scenario object assert isinstance(scenario, message_ix.Scenario) # Sets contain the expected number of elements sets = SET_SIZE.copy() sets.update(expected) for name, size in sets.items(): values = scenario.set(name) assert size == len(values), (name, values)
[docs]class TestConfig: def test_init(self): c = Config() c.regions = "R999"
# TODO expand