Skip to content

Commit

Permalink
Release candidate 2.1 (#805)
Browse files Browse the repository at this point in the history
  • Loading branch information
danielhuppmann authored Dec 15, 2023
1 parent ba3069e commit bbab81f
Show file tree
Hide file tree
Showing 6 changed files with 31 additions and 58 deletions.
10 changes: 9 additions & 1 deletion RELEASE_NOTES.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,12 @@
# Next Release
# Release v2.1.0

## Highlights

- More flexible and intuitive signature for data validation
- Improved support for region-aggregation with inconsistent data/weight index
- Fix wrong color codes for AR6 Illustrative Pathways

## Individual updates

- [#804](https://github.com/IAMconsortium/pyam/pull/804) Support filters as direct keyword arguments for `validate()` method
- [#801](https://github.com/IAMconsortium/pyam/pull/801) Support initializing with `meta` dataframe in long format
Expand Down
16 changes: 2 additions & 14 deletions pyam/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -814,12 +814,6 @@ def timeseries(self, iamc_index=False):

return s.unstack(level=self.time_col).rename_axis(None, axis=1)

def reset_exclude(self):
"""Reset exclusion assignment for all scenarios to :attr:`exclude` = *False*"""
# TODO: deprecated, remove for release >= 2.1
deprecation_warning("Use `IamDataFrame.exclude = False` instead.")
self.exclude = False

def set_meta(self, meta, name=None, index=None):
"""Add meta indicators as pandas.Series, list or value (int/float/str)
Expand Down Expand Up @@ -1044,7 +1038,7 @@ def require_data(

def require_variable(self, *args, **kwargs):
"""This method is deprecated, use `df.require_data()` instead."""
# TODO: deprecated, remove for release >= 2.1
# TODO: deprecated, remove for release >= 3.0
raise DeprecationWarning("Use `df.require_data()` instead.")

def validate(
Expand Down Expand Up @@ -2534,12 +2528,6 @@ def load_meta(self, path, sheet_name="meta", ignore_conflict=False, **kwargs):
# merge imported meta indicators
self.meta = merge_meta(meta, self.meta, ignore_conflict=ignore_conflict)

def map_regions(self, map_col, **kwargs):
# TODO: deprecated, remove for release >= 2.1
raise DeprecationWarning(
"This method was removed. Please use `aggregate_region()` instead."
)


def _meta_idx(data):
"""Return the 'META_IDX' from data by index"""
Expand All @@ -2564,7 +2552,7 @@ def validate(df, criteria={}, exclude_on_fail=False, **kwargs):

def require_variable(*args, **kwargs):
"""This method is deprecated, use `df.require_data()` instead."""
# TODO: deprecated, remove for release >= 2.1
# TODO: deprecated, remove for release >= 3.0
raise DeprecationWarning("Use `df.require_data()` instead.")


Expand Down
11 changes: 5 additions & 6 deletions pyam/iiasa.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ def _read_config(file):
with open(file, "r") as stream:
creds = yaml.safe_load(stream)

return ManagerAuth(**creds, url=settings.manager_url)
return ManagerAuth(**creds, url=str(settings.manager_url))


def _check_response(r, msg="Error connecting to IIASA database", error=RuntimeError):
Expand Down Expand Up @@ -569,11 +569,10 @@ def query(self, default_only=True, meta=True, **kwargs):


def _new_default_api(kwargs):
"""Change kwargs from `default` to `default_only`"""
# TODO: argument `default` is deprecated, change to for release >= 2.0
v = kwargs.pop("default")
deprecation_warning(f"Use `default_only={v}`.", "The argument `default`")
return v
# TODO: argument `default` is deprecated, remove this warning for release >= 3.0
raise DeprecationWarning(
"The argument `default` is deprecated, use `default_only` instead."
)


def read_iiasa(
Expand Down
2 changes: 1 addition & 1 deletion pyam/str.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ def concat_with_pipe(x, *args, cols=None):
"""Concatenate a list or pandas.Series using ``|``, drop None or numpy.nan"""
if args:
# Guard against legacy-errors when adding `*args` (#778)
# TODO: deprecated, remove for release >= 2.1
# TODO: deprecated, remove for release >= 3.0
for i in args:
if is_list_like(i):
raise DeprecationWarning(f"Please use `cols={i}`.")
Expand Down
22 changes: 0 additions & 22 deletions pyam/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,28 +51,6 @@
}


def isstr(x):
# TODO deprecated, remove for release >= 2.1
deprecation_warning("Please use `pyam.str.is_str()`.", "The function `isstr()`")
return is_str(x)


def isscalar(x):
# TODO deprecated, remove for release >= 2.1
deprecation_warning(
"Please use `pandas.api.types.is_float()`.", "The function `isscalar()`"
)
return is_float(x)


def islistable(x):
# TODO deprecated, remove for release >= 2.1
deprecation_warning(
"Please use `pyam.utils.is_list_like()`.", "The function `islistable()`"
)
return is_list_like(x)


def to_list(x):
"""Return x as a list"""
return x if is_list_like(x) else [x]
Expand Down
28 changes: 14 additions & 14 deletions tests/test_iiasa.py
Original file line number Diff line number Diff line change
Expand Up @@ -157,12 +157,12 @@ def test_meta_columns(conn):


@pytest.mark.parametrize("kwargs", FILTER_ARGS)
@pytest.mark.parametrize("default", [True, False])
def test_index(conn, kwargs, default):
@pytest.mark.parametrize("default_only", [True, False])
def test_index(conn, kwargs, default_only):
# test that connection returns the correct index
obs = conn.index(default=default, **kwargs)
obs = conn.index(default_only=default_only, **kwargs)

if default:
if default_only:
exp = META_DF.loc[META_DF.is_default, ["version"]]
if kwargs:
exp = exp.iloc[0:2]
Expand All @@ -187,13 +187,13 @@ def test_index_illegal_column(conn):


@pytest.mark.parametrize("kwargs", FILTER_ARGS)
@pytest.mark.parametrize("default", [True, False])
def test_meta(conn, kwargs, default):
@pytest.mark.parametrize("default_only", [True, False])
def test_meta(conn, kwargs, default_only):
# test that connection returns the correct meta dataframe
obs = conn.meta(default=default, **kwargs)
obs = conn.meta(default_only=default_only, **kwargs)

v = "version"
if default:
if default_only:
exp = META_DF.loc[META_DF.is_default, [v] + META_COLS]
if kwargs:
exp = exp.iloc[0:2]
Expand All @@ -206,12 +206,12 @@ def test_meta(conn, kwargs, default):


@pytest.mark.parametrize("kwargs", FILTER_ARGS)
@pytest.mark.parametrize("default", [True, False])
def test_properties(conn, kwargs, default):
@pytest.mark.parametrize("default_only", [True, False])
def test_properties(conn, kwargs, default_only):
# test that connection returns the correct properties dataframe
obs = conn.properties(default=default, **kwargs)
obs = conn.properties(default_only=default_only, **kwargs)

if default:
if default_only:
exp_cols = ["version"]
exp = META_DF.loc[META_DF.is_default, exp_cols]
if kwargs:
Expand Down Expand Up @@ -345,11 +345,11 @@ def test_query_non_default(conn, test_pd_df):
exp = IamDataFrame(df, meta=meta, index=index, region="World")

# test method via Connection
df = conn.query(default=False)
df = conn.query(default_only=False)
assert_iamframe_equal(df, exp)

# test top-level method
df = read_iiasa(TEST_API, default=False)
df = read_iiasa(TEST_API, default_only=False)
assert_iamframe_equal(df, exp)


Expand Down

0 comments on commit bbab81f

Please sign in to comment.