diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 0ba395f07..ddd04e0a7 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -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 diff --git a/pyam/core.py b/pyam/core.py index 8ba0f0bec..29a99e29e 100755 --- a/pyam/core.py +++ b/pyam/core.py @@ -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) @@ -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( @@ -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""" @@ -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.") diff --git a/pyam/iiasa.py b/pyam/iiasa.py index b964aaf96..4701cd774 100644 --- a/pyam/iiasa.py +++ b/pyam/iiasa.py @@ -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): @@ -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( diff --git a/pyam/str.py b/pyam/str.py index cf748a5f6..492bc02a2 100644 --- a/pyam/str.py +++ b/pyam/str.py @@ -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}`.") diff --git a/pyam/utils.py b/pyam/utils.py index 70c6faedc..9b3792b7a 100644 --- a/pyam/utils.py +++ b/pyam/utils.py @@ -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] diff --git a/tests/test_iiasa.py b/tests/test_iiasa.py index dc07bd661..bde963e17 100644 --- a/tests/test_iiasa.py +++ b/tests/test_iiasa.py @@ -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] @@ -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] @@ -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: @@ -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)