Пример #1
0
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)
Пример #2
0
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')
Пример #3
0
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')