def test_convert_unit(): df = IamDataFrame( pd.DataFrame( [ ['model', 'scen', 'SST', 'test_1', 'A', 1, 5], ['model', 'scen', 'SDN', 'test_2', 'unit', 2, 6], ['model', 'scen', 'SST', 'test_3', 'C', 3, 7], ], columns=[ 'model', 'scenario', 'region', 'variable', 'unit', 2005, 2010 ], )) unit_conv = {'A': ['B', 5], 'C': ['D', 3]} obs = df.convert_unit(unit_conv).data.reset_index(drop=True) exp = IamDataFrame( pd.DataFrame( [ ['model', 'scen', 'SST', 'test_1', 'B', 5, 25], ['model', 'scen', 'SDN', 'test_2', 'unit', 2, 6], ['model', 'scen', 'SST', 'test_3', 'D', 9, 21], ], columns=[ 'model', 'scenario', 'region', 'variable', 'unit', 2005, 2010 ], )).data.reset_index(drop=True) pd.testing.assert_frame_equal(obs, exp, check_index_type=False)
def test_convert_unit_bad_args(test_pd_df): idf = IamDataFrame(test_pd_df) # Conversion fails with both *factor* and *registry* with pytest.raises(ValueError, match='use either `factor` or `pint...'): idf.convert_unit('Mt CH4', 'CO2e', factor=1.0, registry=object()) # Conversion fails with an invalid registry with pytest.raises(TypeError, match='must be `pint.UnitRegistry`'): idf.convert_unit('Mt CH4', 'CO2e', registry=object()) # Conversion fails without context; exception provides a usage hint match = 'Must provide IamDataFrame.convert_unit' with pytest.raises(pint.UndefinedUnitError, match=match): idf.convert_unit('Mt CH4', 'CO2e')
def test_convert_unit_bad_args(test_pd_df): """Unit conversion with bad arguments raises errors.""" idf = IamDataFrame(test_pd_df).rename(unit={'EJ/yr': 'Mt CH4'}) # Conversion fails with both *factor* and *registry* with pytest.raises(ValueError, match='use either `factor` or `pint...'): idf.convert_unit('Mt CH4', 'CO2e', factor=1.0, registry=object()) # Conversion fails with an invalid registry with pytest.raises(TypeError, match='must be `pint.UnitRegistry`'): idf.convert_unit('Mt CH4', 'CO2e', registry=object()) # Conversion fails without context; exception provides a usage hint match = r'GWP conversion with IamDataFrame.convert_unit\(\) requires...' with pytest.raises(pint.UndefinedUnitError, match=match): idf.convert_unit('Mt CH4', 'CO2e')