diff --git a/tests/data/region_processing/overlapping_instructions/m_a.yaml b/tests/data/region_processing/overlapping_instructions/m_a.yaml new file mode 100644 index 00000000..365d62ba --- /dev/null +++ b/tests/data/region_processing/overlapping_instructions/m_a.yaml @@ -0,0 +1,4 @@ +model: m_a +native_regions: [region_A, region_B] +common_regions: + - region_C: [region_A, region_B] diff --git a/tests/test_core.py b/tests/test_core.py index 1a06cb5e..60d911f4 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -483,3 +483,66 @@ def test_region_aggregation_unknown_region(simple_df, simple_definition, caplog) text in caplog.text for text in ["not defined in the 'region' codelist", "unknown region"] ) + + +def test_region_aggregation_overlapping_instructions_case_1(): + # region-aggregation variable is provided + res = RegionProcessor.from_directory( + TEST_DATA_DIR / "region_processing" / "overlapping_instructions", + DataStructureDefinition(TEST_DATA_DIR / "region_processing" / "dsd"), + ).apply( + IamDataFrame( + pd.DataFrame( + [ + ["m_a", "s_a", "region_A", "Variable A", "EJ/yr", 1], + ["m_a", "s_a", "region_B", "Variable A", "EJ/yr", 1], + ["m_a", "s_a", "region_A", "Variable A (max)", "EJ/yr", 1], + ["m_a", "s_a", "region_B", "Variable A (max)", "EJ/yr", 1], + ], + columns=IAMC_IDX + [2020], + ) + ) + ) + assert False + + +def test_region_aggregation_overlapping_instructions_case_2(): + # region-aggregation variable is provided at base and aggregation level for + # aggregation region -> takes priority + res = RegionProcessor.from_directory( + TEST_DATA_DIR / "region_processing" / "overlapping_instructions", + DataStructureDefinition(TEST_DATA_DIR / "region_processing" / "dsd"), + ).apply( + IamDataFrame( + pd.DataFrame( + [ + ["m_a", "s_a", "region_A", "Variable A", "EJ/yr", 1], + ["m_a", "s_a", "region_B", "Variable A", "EJ/yr", 1], + ["m_a", "s_a", "region_C", "Variable A (max)", "EJ/yr", 2], + ], + columns=IAMC_IDX + [2020], + ) + ) + ) + print(res.data) + assert False + + +def test_region_aggregation_overlapping_instructions_case_3(): + # only base variable is provided -> all good + res = RegionProcessor.from_directory( + TEST_DATA_DIR / "region_processing" / "overlapping_instructions", + DataStructureDefinition(TEST_DATA_DIR / "region_processing" / "dsd"), + ).apply( + IamDataFrame( + pd.DataFrame( + [ + ["m_a", "s_a", "region_A", "Variable A", "EJ/yr", 1], + ["m_a", "s_a", "region_B", "Variable A", "EJ/yr", 2], + ], + columns=IAMC_IDX + [2020], + ) + ) + ) + print(res.data) + assert False