def test_assert_qty_attrs(): # tests *with* `attr` property, in which case direct pd.Series and # xr.DataArray comparisons *not* are possible a = xr.DataArray([0.8, 0.2], coords=[['oil', 'water']], dims=['p']) attrs = {'foo': 'bar'} a.attrs = attrs b = Quantity(a) # make sure it has the correct property assert a.attrs == attrs assert b.attrs == attrs assert_qty_equal(a, b) assert_qty_equal(b, a) assert_qty_allclose(a, b) assert_qty_allclose(b, a) a.attrs = {'bar': 'foo'} assert_qty_equal(a, b, check_attrs=False)
def test_assert_qty(): # tests without `attr` property, in which case direct pd.Series and # xr.DataArray comparisons are possible a = xr.DataArray([0.8, 0.2], coords=[['oil', 'water']], dims=['p']) b = a.to_series() assert_qty_equal(a, b) assert_qty_equal(b, a) assert_qty_allclose(a, b) assert_qty_allclose(b, a) c = Quantity(a) assert_qty_equal(a, c) assert_qty_equal(c, a) assert_qty_allclose(a, c) assert_qty_allclose(c, a)
def test_assert_with_attrs(self, a): """Test assertions about Quantity with attrs. Here direct pd.Series and xr.DataArray comparisons are *not* possible. """ attrs = {'foo': 'bar'} a.attrs = attrs b = Quantity(a) # make sure it has the correct property assert a.attrs == attrs assert b.attrs == attrs assert_qty_equal(a, b) assert_qty_equal(b, a) assert_qty_allclose(a, b) assert_qty_allclose(b, a) # check_attrs=False allows a successful equals assertion even when the # attrs are different a.attrs = {'bar': 'foo'} assert_qty_equal(a, b, check_attrs=False)
def test_assert(self, a): """Test assertions about Quantity. These are tests without `attr` property, in which case direct pd.Series and xr.DataArray comparisons are possible. """ # Convert to pd.Series b = a.to_series() assert_qty_equal(a, b) assert_qty_equal(b, a) assert_qty_allclose(a, b) assert_qty_allclose(b, a) c = Quantity(a) assert_qty_equal(a, c) assert_qty_equal(c, a) assert_qty_allclose(a, c) assert_qty_allclose(c, a)
def test_reporting_aggregate(test_mp): scen = ixmp.Scenario(test_mp, 'Group reporting', 'group reporting', 'new') t, t_foo, t_bar, x = add_test_data(scen) # Reporter rep = Reporter.from_scenario(scen) # Define some groups t_groups = {'foo': t_foo, 'bar': t_bar, 'baz': ['foo1', 'bar5', 'bar6']} # Add aggregates key1 = rep.aggregate('x:t-y', 'agg1', {'t': t_groups}, keep=True) # Group has expected key and contents assert key1 == 'x:t-y:agg1' # Aggregate is computed without error agg1 = rep.get(key1) # Expected set of keys along the aggregated dimension assert set(agg1.coords['t'].values) == set(t) | set(t_groups.keys()) # Sums are as expected # TODO: the check_dtype arg assumes Quantity backend is a AttrSeries, # should that be made default in assert_qty_allclose? assert_qty_allclose(agg1.sel(t='foo', drop=True), x.sel(t=t_foo).sum('t'), check_dtype=False) assert_qty_allclose(agg1.sel(t='bar', drop=True), x.sel(t=t_bar).sum('t'), check_dtype=False) assert_qty_allclose(agg1.sel(t='baz', drop=True), x.sel(t=['foo1', 'bar5', 'bar6']).sum('t'), check_dtype=False) # Add aggregates, without keeping originals key2 = rep.aggregate('x:t-y', 'agg2', {'t': t_groups}, keep=False) # Distinct keys assert key2 != key1 # Only the aggregated and no original keys along the aggregated dimension agg2 = rep.get(key2) assert set(agg2.coords['t'].values) == set(t_groups.keys()) with pytest.raises(NotImplementedError): # Not yet supported; requires two separate operations rep.aggregate('x:t-y', 'agg3', {'t': t_groups, 'y': [2000, 2010]})
def test_aggregate(test_mp): scen = ixmp.Scenario(test_mp, 'Group reporting', 'group reporting', 'new') t, t_foo, t_bar, x = add_test_data(scen) # Reporter rep = Reporter.from_scenario(scen) # Define some groups t_groups = {'foo': t_foo, 'bar': t_bar, 'baz': ['foo1', 'bar5', 'bar6']} # Use the computation directly agg1 = computations.aggregate(as_quantity(x), {'t': t_groups}, True) # Expected set of keys along the aggregated dimension assert set(agg1.coords['t'].values) == set(t) | set(t_groups.keys()) # Sums are as expected assert_qty_allclose(agg1.sel(t='foo', drop=True), x.sel(t=t_foo).sum('t')) assert_qty_allclose(agg1.sel(t='bar', drop=True), x.sel(t=t_bar).sum('t')) assert_qty_allclose(agg1.sel(t='baz', drop=True), x.sel(t=['foo1', 'bar5', 'bar6']).sum('t')) # Use Reporter convenience method key2 = rep.aggregate('x:t-y', 'agg2', {'t': t_groups}, keep=True) # Group has expected key and contents assert key2 == 'x:t-y:agg2' # Aggregate is computed without error agg2 = rep.get(key2) assert_qty_equal(agg1, agg2) # Add aggregates, without keeping originals key3 = rep.aggregate('x:t-y', 'agg3', {'t': t_groups}, keep=False) # Distinct keys assert key3 != key2 # Only the aggregated and no original keys along the aggregated dimension agg3 = rep.get(key3) assert set(agg3.coords['t'].values) == set(t_groups.keys()) with pytest.raises(NotImplementedError): # Not yet supported; requires two separate operations rep.aggregate('x:t-y', 'agg3', {'t': t_groups, 'y': [2000, 2010]})