diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 471528b7..0eb93737 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -4,7 +4,7 @@ CHANGELOG X.X.X (unreleased) ------------------ - +* Add nan warning in :py:func:`xbitinfo.xbitinfo.get_bitinformation` (:issue:`200`, :pr:`260`) `Timothy Hodson` _. * Add support for additional datatypes in :py:func:`xbitinfo.xbitinfo.plot_bitinformation` (:pr:`218`, :issue:`168`) `Hauke Schulz`_. * Drop python 3.8 support and add python 3.11 (:pr:`175`) `Hauke Schulz`_. * Implement basic retrieval of bitinformation in python as alternative to julia implementation (:pr:`156`, :issue:`155`, :pr:`126`, :issue:`125`) `Hauke Schulz`_ with helpful comments from `Milan Klöwer`_. diff --git a/tests/test_get_bitinformation.py b/tests/test_get_bitinformation.py index 0a38ca0f..e56c0791 100644 --- a/tests/test_get_bitinformation.py +++ b/tests/test_get_bitinformation.py @@ -1,5 +1,6 @@ """Tests for `xbitinfo` package.""" import os +import warnings import numpy as np import pytest @@ -215,6 +216,14 @@ def test_get_bitinformation_dim_list(rasm, implementation): assert (bi.dim == ["x", "y"]).all() +def test_get_bitinformation_nan_warning(): + data = xr.Dataset({"var": ("x", np.array([1, 2, np.nan, 4, 5]))}) + + with warnings.catch_warnings(record=True) as w: + xb.get_bitinformation(data, implementation="python") + assert len(w) >= 1 + + def test_get_bitinformation_keep_attrs(rasm): bi = xb.get_bitinformation(rasm, dim=["x", "y"]).Tair assert "units" in bi.attrs diff --git a/xbitinfo/xbitinfo.py b/xbitinfo/xbitinfo.py index 0415147d..f58afdf2 100644 --- a/xbitinfo/xbitinfo.py +++ b/xbitinfo/xbitinfo.py @@ -1,6 +1,7 @@ import json import logging import os +import warnings import numpy as np import xarray as xr @@ -184,6 +185,8 @@ def get_bitinformation( # noqa: C901 """ if implementation == "julia" and not julia_installed: raise ImportError('Please install julia or use implementation="python".') + if ds.isnull().any(): + warnings.warn("This dataset contains NaNs, which can yield unexpected results.") if dim is None and axis is None: # gather bitinformation on all axis return _get_bitinformation_along_dims(